diff --git a/.changeset/calm-sessions-header.md b/.changeset/calm-sessions-header.md new file mode 100644 index 0000000000..666393c22e --- /dev/null +++ b/.changeset/calm-sessions-header.md @@ -0,0 +1,5 @@ +--- +"@opencode-ai/cli": patch +--- + +Expose a TUI plugin slot at the top of the session view. diff --git a/.changeset/clean-sessions-generate.md b/.changeset/clean-sessions-generate.md new file mode 100644 index 0000000000..c7f0d2c909 --- /dev/null +++ b/.changeset/clean-sessions-generate.md @@ -0,0 +1,7 @@ +--- +"@opencode-ai/client": patch +"@opencode-ai/plugin": patch +"@opencode-ai/protocol": patch +--- + +Expose transient, read-only session generation through the HTTP API, generated clients, and V2 plugin session context. diff --git a/.changeset/fresh-composers-slot.md b/.changeset/fresh-composers-slot.md new file mode 100644 index 0000000000..9c6c47b3c6 --- /dev/null +++ b/.changeset/fresh-composers-slot.md @@ -0,0 +1,5 @@ +--- +"@opencode-ai/cli": patch +--- + +Expose a TUI plugin slot above the session composer. diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8981aad49a..7498bc24c9 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -121,6 +121,55 @@ jobs: outputs: version: ${{ needs.version.outputs.version }} + build-node-cli: + needs: version + if: github.repository == 'anomalyco/opencode' + strategy: + fail-fast: false + matrix: + settings: + - target: linux-arm64 + host: blacksmith-4vcpu-ubuntu-2404-arm + - target: linux-x64 + host: blacksmith-4vcpu-ubuntu-2404 + - target: darwin-arm64 + host: macos-26 + - target: windows-arm64 + host: blacksmith-4vcpu-windows-2025 + - target: windows-x64 + host: blacksmith-4vcpu-windows-2025 + runs-on: ${{ matrix.settings.host }} + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + + - uses: ./.github/actions/setup-bun + with: + install-flags: --os=* --cpu=* + + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: "26.4.0" + + - name: Build + run: bun packages/cli/script/build-node.ts --target=${{ matrix.settings.target }} --skip-install --outdir=dist/node + env: + OPENCODE_VERSION: ${{ needs.version.outputs.version }} + OPENCODE_RELEASE: ${{ needs.version.outputs.release }} + + - name: Verify service lifecycle + if: matrix.settings.target != 'windows-arm64' + working-directory: packages/cli + run: bun run script/service-smoke.ts --node + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: opencode-node-cli-${{ matrix.settings.target }} + path: packages/cli/dist/node/cli-node-* + if-no-files-found: error + sign-cli-windows: needs: - build-cli @@ -413,6 +462,7 @@ jobs: needs: - version - build-cli + - build-node-cli - sign-cli-windows - build-electron if: always() && !failure() && !cancelled() @@ -461,6 +511,12 @@ jobs: name: opencode-preview-cli path: packages/cli/dist + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + pattern: opencode-node-cli-* + path: packages/cli/dist/node + merge-multiple: true + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 if: needs.version.outputs.release with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9b2e87fc7a..b486b68a93 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -78,6 +78,20 @@ jobs: bun run script/build.ts --single --skip-install bun run script/service-smoke.ts + - name: Setup Node build runtime + if: always() + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: "26.4.0" + + - name: Verify Node build + if: always() + timeout-minutes: 15 + working-directory: packages/cli + run: | + bun run script/build-node.ts --single --skip-install --outdir=dist/node + bun run script/service-smoke.ts --node + - name: Check generated client if: runner.os == 'Linux' working-directory: packages/client diff --git a/.gitignore b/.gitignore index ba80d79b90..183888091c 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ node_modules playground tmp dist +dist-node ts-dist .turbo .typecheck-profiles @@ -25,6 +26,7 @@ Session.vim a.out target .scripts +.cache .direnv/ # Local dev files diff --git a/bun.lock b/bun.lock index a4b5c11bcb..4f08f1b31b 100644 --- a/bun.lock +++ b/bun.lock @@ -132,27 +132,37 @@ "@opencode-ai/server": "workspace:*", "@opencode-ai/tui": "workspace:*", "@opentui/core": "catalog:", - "@opentui/keymap": "catalog:", "@opentui/solid": "catalog:", "@parcel/watcher": "2.5.1", "effect": "catalog:", - "fuzzysort": "catalog:", "immer": "11.1.4", "jsonc-parser": "3.3.1", "open": "10.1.2", - "opentui-spinner": "catalog:", "semver": "catalog:", "solid-js": "catalog:", - "strip-ansi": "7.1.2", "uqr": "0.1.3", + "ws": "8.21.0", }, "devDependencies": { + "@lydell/node-pty-darwin-arm64": "1.2.0-beta.12", + "@lydell/node-pty-darwin-x64": "1.2.0-beta.12", + "@lydell/node-pty-linux-arm64": "1.2.0-beta.12", + "@lydell/node-pty-linux-x64": "1.2.0-beta.12", + "@lydell/node-pty-win32-arm64": "1.2.0-beta.12", + "@lydell/node-pty-win32-x64": "1.2.0-beta.12", "@opencode-ai/protocol": "workspace:*", "@opencode-ai/script": "workspace:*", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1", "@tsconfig/bun": "catalog:", "@types/bun": "catalog:", "@types/semver": "catalog:", "@typescript/native-preview": "catalog:", + "vite": "catalog:", + "vite-plugin-solid": "catalog:", }, }, "packages/client": { @@ -171,7 +181,7 @@ "effect": "catalog:", }, "peerDependencies": { - "effect": "4.0.0-beta.83", + "effect": "4.0.0-beta.98", }, "optionalPeers": [ "effect", @@ -387,6 +397,7 @@ "mime-types": "3.0.2", "minimatch": "10.2.5", "npm-package-arg": "13.0.2", + "resolve.exports": "catalog:", "semver": "^7.6.3", "turndown": "7.2.0", "venice-ai-sdk-provider": "2.1.1", @@ -554,7 +565,7 @@ "name": "@opencode-ai/http-recorder", "version": "1.18.3", "dependencies": { - "@effect/platform-node-shared": "4.0.0-beta.83", + "@effect/platform-node-shared": "4.0.0-beta.98", }, "devDependencies": { "@effect/platform-node": "catalog:", @@ -739,9 +750,9 @@ "typescript": "catalog:", }, "peerDependencies": { - "@opentui/core": ">=0.4.3", - "@opentui/keymap": ">=0.4.3", - "@opentui/solid": ">=0.4.3", + "@opentui/core": ">=0.4.5", + "@opentui/keymap": ">=0.4.5", + "@opentui/solid": ">=0.4.5", }, "optionalPeers": [ "@opentui/core", @@ -885,9 +896,13 @@ "version": "1.17.13", "dependencies": { "@fontsource/commit-mono": "5.2.5", + "@fontsource/noto-sans-math": "5.2.5", + "@fontsource/noto-sans-symbols": "5.2.5", + "@fontsource/noto-sans-symbols-2": "5.2.5", "@napi-rs/canvas": "1.0.2", "@opencode-ai/ai": "workspace:*", "@opencode-ai/core": "workspace:*", + "@opencode-ai/plugin": "workspace:*", "@opentui/core": "catalog:", "effect": "catalog:", }, @@ -1011,6 +1026,7 @@ "@opencode-ai/client": "workspace:*", "@opencode-ai/core": "workspace:*", "@opencode-ai/plugin": "workspace:*", + "@opencode-ai/schema": "workspace:*", "@opencode-ai/simulation": "workspace:*", "@opencode-ai/ui": "workspace:*", "@opentui/core": "catalog:", @@ -1021,10 +1037,12 @@ "diff": "catalog:", "effect": "catalog:", "fuzzysort": "catalog:", + "get-east-asian-width": "catalog:", "open": "10.1.2", "opentui-spinner": "catalog:", "remeda": "catalog:", "solid-js": "catalog:", + "string-width": "catalog:", "strip-ansi": "7.1.2", "uqr": "0.1.3", }, @@ -1163,12 +1181,12 @@ "@modelcontextprotocol/sdk@1.29.0": "patches/@modelcontextprotocol%2Fsdk@1.29.0.patch", "gcp-metadata@8.1.2": "patches/gcp-metadata@8.1.2.patch", "@standard-community/standard-openapi@0.2.9": "patches/@standard-community%2Fstandard-openapi@0.2.9.patch", - "effect@4.0.0-beta.83": "patches/effect@4.0.0-beta.83.patch", "@npmcli/agent@4.0.2": "patches/@npmcli%2Fagent@4.0.2.patch", "@silvia-odwyer/photon-node@0.3.4": "patches/@silvia-odwyer%2Fphoton-node@0.3.4.patch", "solid-js@1.9.10": "patches/solid-js@1.9.10.patch", "@ai-sdk/google@3.0.73": "patches/@ai-sdk%2Fgoogle@3.0.73.patch", "pacote@21.5.0": "patches/pacote@21.5.0.patch", + "effect@4.0.0-beta.98": "patches/effect@4.0.0-beta.98.patch", }, "overrides": { "@opentui/core": "catalog:", @@ -1180,9 +1198,9 @@ "catalog": { "@cloudflare/workers-types": "4.20251008.0", "@corvu/drawer": "0.2.4", - "@effect/opentelemetry": "4.0.0-beta.83", - "@effect/platform-node": "4.0.0-beta.83", - "@effect/sql-sqlite-bun": "4.0.0-beta.83", + "@effect/opentelemetry": "4.0.0-beta.98", + "@effect/platform-node": "4.0.0-beta.98", + "@effect/sql-sqlite-bun": "4.0.0-beta.98", "@hono/standard-validator": "0.2.0", "@hono/zod-validator": "0.4.2", "@kobalte/core": "0.13.11", @@ -1190,9 +1208,9 @@ "@npmcli/arborist": "9.4.0", "@octokit/rest": "22.0.0", "@openauthjs/openauth": "0.0.0-20250322224806", - "@opentui/core": "0.4.3", - "@opentui/keymap": "0.4.3", - "@opentui/solid": "0.4.3", + "@opentui/core": "0.4.5", + "@opentui/keymap": "0.4.5", + "@opentui/solid": "0.4.5", "@pierre/diffs": "1.2.10", "@playwright/test": "1.59.1", "@sentry/solid": "10.36.0", @@ -1218,8 +1236,9 @@ "dompurify": "3.3.1", "drizzle-kit": "1.0.0-rc.2", "drizzle-orm": "1.0.0-rc.2", - "effect": "4.0.0-beta.83", + "effect": "4.0.0-beta.98", "fuzzysort": "3.1.0", + "get-east-asian-width": "1.6.0", "hono": "4.10.7", "hono-openapi": "1.1.2", "luxon": "3.6.1", @@ -1228,11 +1247,13 @@ "opentui-spinner": "0.0.7", "remeda": "2.26.0", "remend": "1.3.0", + "resolve.exports": "2.0.3", "semver": "7.7.4", "shiki": "4.2.0", "solid-js": "1.9.10", "solid-list": "0.3.0", "sst": "4.13.1", + "string-width": "7.2.0", "tailwindcss": "4.1.11", "typescript": "5.8.2", "ulid": "3.0.1", @@ -1619,13 +1640,13 @@ "@drizzle-team/brocli": ["@drizzle-team/brocli@0.11.0", "", {}, "sha512-hD3pekGiPg0WPCCGAZmusBBJsDqGUR66Y452YgQsZOnkdQ7ViEPKuyP4huUGEZQefp8g34RRodXYmJ2TbCH+tg=="], - "@effect/opentelemetry": ["@effect/opentelemetry@4.0.0-beta.83", "", { "peerDependencies": { "@opentelemetry/api": "^1.9", "@opentelemetry/api-logs": ">=0.203.0 <0.300.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/sdk-logs": ">=0.203.0 <0.300.0", "@opentelemetry/sdk-metrics": "^2.0.0", "@opentelemetry/sdk-trace-base": "^2.0.0", "@opentelemetry/sdk-trace-node": "^2.0.0", "@opentelemetry/sdk-trace-web": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.33.0", "effect": "^4.0.0-beta.83" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/api-logs", "@opentelemetry/resources", "@opentelemetry/sdk-logs", "@opentelemetry/sdk-metrics", "@opentelemetry/sdk-trace-base", "@opentelemetry/sdk-trace-node", "@opentelemetry/sdk-trace-web"] }, "sha512-cPfCfp/ghu0itbX6Dqjdr4N0rbjng5ON4sUpnLHV5JJySG8zZpWmuOZLWIrfrNKT2ctYR1BYmp1aYCgkItaJLw=="], + "@effect/opentelemetry": ["@effect/opentelemetry@4.0.0-beta.98", "", { "peerDependencies": { "@opentelemetry/api": "^1.9", "@opentelemetry/api-logs": ">=0.203.0 <0.300.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/sdk-logs": ">=0.203.0 <0.300.0", "@opentelemetry/sdk-metrics": "^2.0.0", "@opentelemetry/sdk-trace-base": "^2.0.0", "@opentelemetry/sdk-trace-node": "^2.0.0", "@opentelemetry/sdk-trace-web": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.33.0", "effect": "^4.0.0-beta.98" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/api-logs", "@opentelemetry/resources", "@opentelemetry/sdk-logs", "@opentelemetry/sdk-metrics", "@opentelemetry/sdk-trace-base", "@opentelemetry/sdk-trace-node", "@opentelemetry/sdk-trace-web"] }, "sha512-ITfK8xhcl+9GXOvPwzADWkOQ+dgUGZrJNefT3r2+uLFmzjyKRLtHzhLOl6lZaLSsf5io13+nmt8adfMRQPq+oA=="], - "@effect/platform-node": ["@effect/platform-node@4.0.0-beta.83", "", { "dependencies": { "@effect/platform-node-shared": "^4.0.0-beta.83", "mime": "^4.1.0", "undici": "^8.2.0" }, "peerDependencies": { "effect": "^4.0.0-beta.83", "ioredis": "^5.7.0" } }, "sha512-RmpVGu/+X/Bif3/g1Rzj8oFzTOknoVB3yHCa0b179vytPpKe+Kj9ZwKNcAnKWqHUDkbSPBq1Ca60mvOHr2/+LQ=="], + "@effect/platform-node": ["@effect/platform-node@4.0.0-beta.98", "", { "dependencies": { "@effect/platform-node-shared": "^4.0.0-beta.98", "mime": "^4.1.0", "undici": "^8.7.0" }, "peerDependencies": { "effect": "^4.0.0-beta.98", "ioredis": "^5.7.0" } }, "sha512-IQu1TiLXQEDSGkDBllyYjVadf+UqdjptryqX4mmktVTTbGDq7X4uVxe7cSgXuqZvyfG6kagTzwj2lfynxOaKQg=="], - "@effect/platform-node-shared": ["@effect/platform-node-shared@4.0.0-beta.83", "", { "dependencies": { "@types/ws": "^8.18.1", "ws": "^8.20.0" }, "peerDependencies": { "effect": "^4.0.0-beta.83" } }, "sha512-+yr/+PJmKTgmJq1QOINSBPgLu7Cjc4CZcotBXnGjyDEizOmimFgTkN2B8PBJAKIKUWYWfobjXqC+58/VhhPKAw=="], + "@effect/platform-node-shared": ["@effect/platform-node-shared@4.0.0-beta.98", "", { "dependencies": { "@types/ws": "^8.18.1", "ws": "^8.21.0" }, "peerDependencies": { "effect": "^4.0.0-beta.98" } }, "sha512-iySXaffnCJX1sNAIp79ghhIeui9E5qwUQyqd1VLPkB9UNO4vdpd9B5fTEXwe7S/GusL4jsk9vSvX38XJgRFG1w=="], - "@effect/sql-sqlite-bun": ["@effect/sql-sqlite-bun@4.0.0-beta.83", "", { "peerDependencies": { "effect": "^4.0.0-beta.83" } }, "sha512-6OaxLsWffxkh9pXYUSyj/AxjVb9URY2rG9U6atjxClWy30Jx77R9Pm3Rrc7cQ63kQurePavEw1bQbzQ/SILiQQ=="], + "@effect/sql-sqlite-bun": ["@effect/sql-sqlite-bun@4.0.0-beta.98", "", { "peerDependencies": { "effect": "^4.0.0-beta.98" } }, "sha512-cc41uLhYBqexdbTNu4dlui+31E8hcVLEapLySa0C8d60FmBY8IEAV/RD3oF+6pqPslKEZ9p1+XVLdDm0iflw5Q=="], "@electron/asar": ["@electron/asar@3.4.1", "", { "dependencies": { "commander": "^5.0.0", "glob": "^7.1.6", "minimatch": "^3.0.4" }, "bin": { "asar": "bin/asar.js" } }, "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA=="], @@ -1775,6 +1796,12 @@ "@fontsource/inter": ["@fontsource/inter@5.2.8", "", {}, "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg=="], + "@fontsource/noto-sans-math": ["@fontsource/noto-sans-math@5.2.5", "", {}, "sha512-1bxEvVlF51Vfgpju32mRZzI/CHvsfqjXjI2+sAuEyHYvXABUAIyj+93sCO3QZIoMG5drWyrzgoCqRQRaL6wQ8Q=="], + + "@fontsource/noto-sans-symbols": ["@fontsource/noto-sans-symbols@5.2.5", "", {}, "sha512-mxoIRstsmZpZFzd/SRWiD+l6T7TGhpgCrGs7TEnnuGSQIfjVMrQT9Zej2enh9pkfmPNAFyeaGJkHkszJ1hH++w=="], + + "@fontsource/noto-sans-symbols-2": ["@fontsource/noto-sans-symbols-2@5.2.5", "", {}, "sha512-F4O9WLifwoZS1quNzY1ebjMNo2cQPe/UP68Dmud0ONi2lOxaR6xp6fFPO2gG17MI7DwAnfMyQFl64A2tAd28hg=="], + "@fuma-translate/react": ["@fuma-translate/react@1.0.2", "", { "peerDependencies": { "@types/react": "*", "react": "^19.2.0", "react-dom": "^19.2.0" }, "optionalPeers": ["@types/react"] }, "sha512-uOiOtBx3nRXR8Nu1GzBf1tApgF1FErDBTHxRIAQeyQdyOoZbrNRN6H4kDCWObY4qyGeGbHydG0DHzgeUgFDMIw=="], "@fumadocs/tailwind": ["@fumadocs/tailwind@0.1.0", "", { "peerDependencies": { "tailwindcss": "^4.0.0" }, "optionalPeers": ["tailwindcss"] }, "sha512-nF/DCAwOR21HZ4AkjIOv3Iqwyqywzb6pdyeMcoa+aZzirXj5ntvNZbe3jJ0v3ehhtrRfYYeXBezvjn8ZmV+fuQ=="], @@ -2273,27 +2300,27 @@ "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.41.1", "", {}, "sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA=="], - "@opentui/core": ["@opentui/core@0.4.3", "", { "dependencies": { "bun-ffi-structs": "0.2.4", "diff": "9.0.0", "marked": "17.0.1", "string-width": "7.2.0", "strip-ansi": "7.1.2" }, "optionalDependencies": { "@opentui/core-darwin-arm64": "0.4.3", "@opentui/core-darwin-x64": "0.4.3", "@opentui/core-linux-arm64": "0.4.3", "@opentui/core-linux-arm64-musl": "0.4.3", "@opentui/core-linux-x64": "0.4.3", "@opentui/core-linux-x64-musl": "0.4.3", "@opentui/core-win32-arm64": "0.4.3", "@opentui/core-win32-x64": "0.4.3" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-rrJfAk13tALDqldYjhc78eWQ+aKq1iknJgffIOg3OwyZoqQo+p6gtuqyhmWvXIfQzlNUbpgpCPcxbXlhMnlaHQ=="], + "@opentui/core": ["@opentui/core@0.4.5", "", { "dependencies": { "bun-ffi-structs": "0.2.4", "diff": "9.0.0", "marked": "17.0.1", "string-width": "7.2.0", "strip-ansi": "7.1.2" }, "optionalDependencies": { "@opentui/core-darwin-arm64": "0.4.5", "@opentui/core-darwin-x64": "0.4.5", "@opentui/core-linux-arm64": "0.4.5", "@opentui/core-linux-arm64-musl": "0.4.5", "@opentui/core-linux-x64": "0.4.5", "@opentui/core-linux-x64-musl": "0.4.5", "@opentui/core-win32-arm64": "0.4.5", "@opentui/core-win32-x64": "0.4.5" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-JsgRTPkA6e+Vxmumxai6SElOSlRQkbzNKHlCfemlArRiLhfC1IZ9RXJo2QH4xSu+uBOWAM90uss73/pPlkdEig=="], - "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.4.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-p5+7AAxpxGuDGagyQfewKtmTFnN7THvTVY4FyKqUtJomNaHdQXPHztapNNzMx0DGWbwOUbVKzpL+yc3CZY3chQ=="], + "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.4.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-8KUG0oRidnR+oW1RSZJ72/PhZLl+qRRMk5U/mieF4c0SJ5V3tYACpBZAKzQfHNd1f7QzD8FHZct1lPpQgtmkWg=="], - "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.4.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-+fh0vEUE0lwVC7RW5ijYLRlTLp5NfvCRj8SzxDVd7IL2j2ssB6YXcfIbXq2EW7UGnrejwPRXf1tgUrIXW9KmOw=="], + "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.4.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-R2bocsg55gwjOqCp/MWFgFYzRmsduKegB6nzgFAPCvAD/L5Jf30xpWJWFlSg3x8vxe1L9WJ84dfqa4M7mZZ3wA=="], - "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.4.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-gl6qA5QJy6u8Cbt7gOtHbhhfMZ4qQDb0kEwFXHcMGmbnKzz4OHoq74D6tNjyvSQB9saoC7C6C0tvn2DcJOuNog=="], + "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.4.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-R4MZ25a4CzOAGVjW9aj1hUfzQGVfCJwrwBDbNs2SXaIvzcZqkxCVtU4FoQ5LsaD0j/BdNQVg2CIfFkFsm1fDuQ=="], - "@opentui/core-linux-arm64-musl": ["@opentui/core-linux-arm64-musl@0.4.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-8p8g8/AEq/xFGpQ7XcIFKcAqjc0QwsZcv+Ll9RbCDpUA56FGH6jfLDir0KYTNTgYXJTIrBIENI9K46VuxMUMQA=="], + "@opentui/core-linux-arm64-musl": ["@opentui/core-linux-arm64-musl@0.4.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ieqdyKI6EIYPalYAETB2wsdP83hr5Ifi+dFnBFUmdEEFHsoKwBmn2S7bsTOYlX7Bg03F4/YPIg+IvRpeC+cUJw=="], - "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.4.3", "", { "os": "linux", "cpu": "x64" }, "sha512-dXpJitiZdYE3hq2Pvx6e9I0uPQSOcnaLLp1pDgWAHv+3kvKSHEX//9Yr/pV/Ua6qqT7p+2D/K4vXNap/NKVo2w=="], + "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.4.5", "", { "os": "linux", "cpu": "x64" }, "sha512-SNyuQoxMKI1vuJhgxSSW96adWM6LqFl2SoS3GM4tGeneGOanVVG2Y06PvlytXvF4cKik97t0rqkVMRetmOs93w=="], - "@opentui/core-linux-x64-musl": ["@opentui/core-linux-x64-musl@0.4.3", "", { "os": "linux", "cpu": "x64" }, "sha512-/QiFpCrpU2O7vy8QYmLIQYbvAtKDgmqcVjR7dGtqSzkiQk3ktNJoo5RozG7ueXnjung1Wp0nKldKxo2Csg/OrA=="], + "@opentui/core-linux-x64-musl": ["@opentui/core-linux-x64-musl@0.4.5", "", { "os": "linux", "cpu": "x64" }, "sha512-mKVKcIcPiSVVZZsdPSBoWwoa2/TCeQAaMDeHF7PFw2kt5bTXZPP7xxWfRQLCNIcA1eaGl59UuwUWHDR2Ve548Q=="], - "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.4.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-Mx2zuOjrhm/z2SDS6RExIyjP/SnN/8QhhagxURUw0jQi/NssGSeAllu1cBAFFnhobJL5QLTE4FU4CRhUK9svgg=="], + "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.4.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-GHTTsqeR45q2Iek9Rb7ty+x/hAKn2jZ1ujlCgPR8LBKyF7h0E1dNFryoZ7ehMc3kJndP1sKn836IemKFqxuDdQ=="], - "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.4.3", "", { "os": "win32", "cpu": "x64" }, "sha512-NuoqvWKGXaYnmlqvu7Gg2lLI6yVMnS9OfWBvxp+7Q+McSgHFSTQmYBXaPpvQ8HikpQXE1nCeMPtuSG4PdZHe2w=="], + "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.4.5", "", { "os": "win32", "cpu": "x64" }, "sha512-Y8T/yXCDGagRGiQrtmuB6AhRcPucKFs/Dre3v8kJwNYqDccI4FzUPKclZ7djfmRZNjl7JUqPhZZP/PwDpQocMg=="], - "@opentui/keymap": ["@opentui/keymap@0.4.3", "", { "dependencies": { "@opentui/core": "0.4.3" }, "peerDependencies": { "@opentui/react": "0.4.3", "@opentui/solid": "0.4.3", "react": ">=19.2.0", "solid-js": "1.9.12" }, "optionalPeers": ["@opentui/react", "@opentui/solid", "react", "solid-js"] }, "sha512-sinX0pyQBRrEvo89PSSUbSUDIYpL3xWo81VEfec58VFoVRB5FG48/deAtvRTQfJ8w1kgbzN8hzdOXdSm61zBmw=="], + "@opentui/keymap": ["@opentui/keymap@0.4.5", "", { "dependencies": { "@opentui/core": "0.4.5" }, "peerDependencies": { "@opentui/react": "0.4.5", "@opentui/solid": "0.4.5", "react": ">=19.2.0", "solid-js": "1.9.12" }, "optionalPeers": ["@opentui/react", "@opentui/solid", "react", "solid-js"] }, "sha512-S1wzKHhF70zT6bH+VBFY+lSeTImLcIFW28JNQiME8MoPcy6KGPs7rKFSHrb/U7P8rsTJeRfW5A4d1Cy6PKodDg=="], - "@opentui/solid": ["@opentui/solid@0.4.3", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.4.3", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.12", "entities": "7.0.1", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.12" } }, "sha512-RcV0+S8HMdXOASyr7HmJUBuTUIaFPzAxMDa44VftS5C2JUgrmAuWo0Njv1q3TWRB1owjHnyKhEfWGKq7A82wxw=="], + "@opentui/solid": ["@opentui/solid@0.4.5", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.4.5", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.12", "entities": "7.0.1", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.12" } }, "sha512-B0RSkXnrtPVfEJOX+Hj+axjLJ3lzbG1BZw5I7Pvb9OPp48Vzg2cW2a3cSa86/q48ndLt647i/XwFPIw/jqnI5g=="], "@orama/orama": ["@orama/orama@3.1.18", "", {}, "sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA=="], @@ -4017,7 +4044,7 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "effect": ["effect@4.0.0-beta.83", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.8.0", "find-my-way-ts": "^0.1.6", "ini": "^7.0.0", "kubernetes-types": "^1.30.0", "msgpackr": "^2.0.1", "multipasta": "^0.2.7", "toml": "^4.1.1", "uuid": "^14.0.0", "yaml": "^2.9.0" } }, "sha512-0wsak8RtgGAr9UWSbVDgJHZcUqMSvicHcvaZv1MbMM7MCGgW4Rn/137J1MHQbwYPcwYGxT/IqehFd+UbYuj78w=="], + "effect": ["effect@4.0.0-beta.98", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.9.0", "find-my-way-ts": "^0.1.6", "ini": "^7.0.0", "kubernetes-types": "^1.30.0", "msgpackr": "^2.0.4", "multipasta": "^0.2.8", "toml": "^4.1.2", "uuid": "^14.0.1", "yaml": "^2.9.0" } }, "sha512-oz+bsG5h+6RNrw4t5GMfQrk/xBS8ROoqkYsuvRhBr5O7mCOrpvH/hbw+QrDzvKIpX4HJClwm86F94c87W0sJxg=="], "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], @@ -4193,7 +4220,7 @@ "extsprintf": ["extsprintf@1.4.1", "", {}, "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA=="], - "fast-check": ["fast-check@4.8.0", "", { "dependencies": { "pure-rand": "^8.0.0" } }, "sha512-GOJ158CUMnN6cSahsv4+ExARvIDuzzinFjkp0E9WtiBa5zcVeLozVkWaE4IzFcc+Y48Wp1EDlUZsXRyAztQcSg=="], + "fast-check": ["fast-check@4.9.0", "", { "dependencies": { "pure-rand": "^8.0.0" } }, "sha512-7ms6T7SybUev/PQITciI0yLM2pOSFy5zpG8Ty7tQofcVaQUvrMXp6CBwqF6fThLCLOrfBtuHAtwq6Yu4XPCllg=="], "fast-decode-uri-component": ["fast-decode-uri-component@1.0.1", "", {}, "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="], @@ -5057,7 +5084,7 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "msgpackr": ["msgpackr@2.0.2", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.4" } }, "sha512-c5hYOXFbP79Slh6Dzd2wzk+jnV7mX1UxfMYtilnY1NmalXPqG8DGb5cYCMBrW4AsH3zekBBZd4QrKz9NhtvYLQ=="], + "msgpackr": ["msgpackr@2.0.4", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.4" } }, "sha512-o1C5KRmuRt+apqMr1HuGSqWStZoRBUpEsCsl15uM9VdAF1qHLtvMOU2En747EnTyEl6c4pzPewRMFF31s1CNbA=="], "msgpackr-extract": ["msgpackr-extract@3.0.4", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.4", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw=="], @@ -5065,7 +5092,7 @@ "multicast-dns": ["multicast-dns@7.2.5", "", { "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" }, "bin": { "multicast-dns": "cli.js" } }, "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg=="], - "multipasta": ["multipasta@0.2.7", "", {}, "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA=="], + "multipasta": ["multipasta@0.2.8", "", {}, "sha512-ZPWuMKyv0cSO29f7hozp+k6+crZbQijV8ipMvxNxRf2SwtYGTX1ZX89Kd20VV4H9Znonx+EQn+iy1wGQsJ+b+Q=="], "mustache": ["mustache@4.2.0", "", { "bin": { "mustache": "bin/mustache" } }, "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ=="], @@ -5595,6 +5622,8 @@ "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + "resolve.exports": ["resolve.exports@2.0.3", "", {}, "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A=="], + "responselike": ["responselike@2.0.1", "", { "dependencies": { "lowercase-keys": "^2.0.0" } }, "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw=="], "restore-cursor": ["restore-cursor@4.0.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="], @@ -5963,7 +5992,7 @@ "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], - "toml": ["toml@4.1.1", "", {}, "sha512-EBJnVBr3dTXdA89WVFoAIPUqkBjxPMwRqsfuo1r240tKFHXv3zgca4+NJib/h6TyvGF7vOawz0jGuryJCdNHrw=="], + "toml": ["toml@4.3.0", "", {}, "sha512-lVb8X9BsPVuH0M4BKeS91tXAmJvCjQ5UIyAbQFaxkKGyUFK2RPkhwaFSQH8vbpl1d23eu/IBH+dwVMHWaq9A5A=="], "toolbeam-docs-theme": ["toolbeam-docs-theme@0.4.8", "", { "peerDependencies": { "@astrojs/starlight": "^0.34.3", "astro": "^5.7.13" } }, "sha512-b+5ynEFp4Woe5a22hzNQm42lD23t13ZMihVxHbzjA50zdcM9aOSJTIjdJ0PDSd4/50HbBXcpHiQsz6rM4N88ww=="], @@ -6049,7 +6078,7 @@ "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], - "undici": ["undici@8.3.0", "", {}, "sha512-TkUDgb6tl7KOGZ+7e8E3d2FYgUQgF6z5YypqjWmixVQSQERFcVrVg0ySADm2LVLRh5ljAaHTCR5Fmz3Q34rB7Q=="], + "undici": ["undici@8.7.0", "", {}, "sha512-N7iQtfyLhIMOFgQubvmLV26svHpO0bqKnAiWotTQCVKCmWrcGbBotPuW1x+xwYZ2VHdSTVUfPQQnlEt1/LouTQ=="], "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], @@ -6131,7 +6160,7 @@ "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], - "uuid": ["uuid@14.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg=="], + "uuid": ["uuid@14.0.1", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew=="], "valibot": ["valibot@1.4.1", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-klCmFTz2jeDluy9RwX+F884TCiogtdBJ/YaxSx1EOBYXa3NXNWj8kR1jjN8rzluwojJVWWaHJ4r1U5LfICnM3g=="], @@ -8341,6 +8370,26 @@ "@solidjs/start/shiki/@shikijs/types": ["@shikijs/types@1.29.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw=="], + "@standard-community/standard-json/effect/fast-check": ["fast-check@4.8.0", "", { "dependencies": { "pure-rand": "^8.0.0" } }, "sha512-GOJ158CUMnN6cSahsv4+ExARvIDuzzinFjkp0E9WtiBa5zcVeLozVkWaE4IzFcc+Y48Wp1EDlUZsXRyAztQcSg=="], + + "@standard-community/standard-json/effect/msgpackr": ["msgpackr@2.0.2", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.4" } }, "sha512-c5hYOXFbP79Slh6Dzd2wzk+jnV7mX1UxfMYtilnY1NmalXPqG8DGb5cYCMBrW4AsH3zekBBZd4QrKz9NhtvYLQ=="], + + "@standard-community/standard-json/effect/multipasta": ["multipasta@0.2.7", "", {}, "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA=="], + + "@standard-community/standard-json/effect/toml": ["toml@4.1.1", "", {}, "sha512-EBJnVBr3dTXdA89WVFoAIPUqkBjxPMwRqsfuo1r240tKFHXv3zgca4+NJib/h6TyvGF7vOawz0jGuryJCdNHrw=="], + + "@standard-community/standard-json/effect/uuid": ["uuid@14.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg=="], + + "@standard-community/standard-openapi/effect/fast-check": ["fast-check@4.8.0", "", { "dependencies": { "pure-rand": "^8.0.0" } }, "sha512-GOJ158CUMnN6cSahsv4+ExARvIDuzzinFjkp0E9WtiBa5zcVeLozVkWaE4IzFcc+Y48Wp1EDlUZsXRyAztQcSg=="], + + "@standard-community/standard-openapi/effect/msgpackr": ["msgpackr@2.0.2", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.4" } }, "sha512-c5hYOXFbP79Slh6Dzd2wzk+jnV7mX1UxfMYtilnY1NmalXPqG8DGb5cYCMBrW4AsH3zekBBZd4QrKz9NhtvYLQ=="], + + "@standard-community/standard-openapi/effect/multipasta": ["multipasta@0.2.7", "", {}, "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA=="], + + "@standard-community/standard-openapi/effect/toml": ["toml@4.1.1", "", {}, "sha512-EBJnVBr3dTXdA89WVFoAIPUqkBjxPMwRqsfuo1r240tKFHXv3zgca4+NJib/h6TyvGF7vOawz0jGuryJCdNHrw=="], + + "@standard-community/standard-openapi/effect/uuid": ["uuid@14.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg=="], + "@stoplight/spectral-core/minimatch/brace-expansion": ["brace-expansion@1.1.15", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg=="], "@storybook/addon-docs/react-dom/scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], diff --git a/package.json b/package.json index 962f4ee3c1..c8b778f207 100644 --- a/package.json +++ b/package.json @@ -37,18 +37,18 @@ "packages/slack" ], "catalog": { - "@effect/opentelemetry": "4.0.0-beta.83", - "@effect/platform-node": "4.0.0-beta.83", - "@effect/sql-sqlite-bun": "4.0.0-beta.83", + "@effect/opentelemetry": "4.0.0-beta.98", + "@effect/platform-node": "4.0.0-beta.98", + "@effect/sql-sqlite-bun": "4.0.0-beta.98", "@npmcli/arborist": "9.4.0", "@types/bun": "1.3.13", "@types/cross-spawn": "6.0.6", "@octokit/rest": "22.0.0", "@hono/standard-validator": "0.2.0", "@hono/zod-validator": "0.4.2", - "@opentui/core": "0.4.3", - "@opentui/keymap": "0.4.3", - "@opentui/solid": "0.4.3", + "@opentui/core": "0.4.5", + "@opentui/keymap": "0.4.5", + "@opentui/solid": "0.4.5", "@tanstack/solid-virtual": "3.13.32", "@shikijs/stream": "4.2.0", "ulid": "3.0.1", @@ -69,12 +69,13 @@ "dompurify": "3.3.1", "drizzle-kit": "1.0.0-rc.2", "drizzle-orm": "1.0.0-rc.2", - "effect": "4.0.0-beta.83", + "effect": "4.0.0-beta.98", "ai": "6.0.168", "cross-spawn": "7.0.6", "hono": "4.10.7", "hono-openapi": "1.1.2", "fuzzysort": "3.1.0", + "get-east-asian-width": "1.6.0", "luxon": "3.6.1", "marked": "17.0.6", "marked-shiki": "1.2.1", @@ -85,9 +86,11 @@ "@typescript/native-preview": "7.0.0-dev.20251207.1", "zod": "4.1.8", "remeda": "2.26.0", + "resolve.exports": "2.0.3", "sst": "4.13.1", "shiki": "4.2.0", "solid-list": "0.3.0", + "string-width": "7.2.0", "tailwindcss": "4.1.11", "vite": "7.1.4", "@solidjs/meta": "0.29.4", @@ -163,7 +166,7 @@ "@ai-sdk/google@3.0.73": "patches/@ai-sdk%2Fgoogle@3.0.73.patch", "@pierre/trees@1.0.0-beta.4": "patches/@pierre%2Ftrees@1.0.0-beta.4.patch", "@modelcontextprotocol/sdk@1.29.0": "patches/@modelcontextprotocol%2Fsdk@1.29.0.patch", - "effect@4.0.0-beta.83": "patches/effect@4.0.0-beta.83.patch", + "effect@4.0.0-beta.98": "patches/effect@4.0.0-beta.98.patch", "@tanstack/virtual-core@3.17.3": "patches/@tanstack%2Fvirtual-core@3.17.3.patch" } } diff --git a/packages/ai/README.md b/packages/ai/README.md index b9139bc3af..314234fb63 100644 --- a/packages/ai/README.md +++ b/packages/ai/README.md @@ -1,6 +1,6 @@ # @opencode-ai/ai -Schema-first LLM core for opencode. One typed request, response, event, and tool language; provider quirks live in adapters, not in calling code. +Schema-first AI primitives for opencode. Provider quirks live in adapters, not in calling code. ```ts import { Effect } from "effect" @@ -24,6 +24,81 @@ const program = Effect.gen(function* () { Run `LLMClient.stream(request)` instead of `generate` when you want incremental `LLMEvent`s. The event stream is provider-neutral — same shape across OpenAI Chat, OpenAI Responses, Anthropic Messages, Gemini, Bedrock Converse, and any OpenAI-compatible deployment. +## Image generation + +Use `Image.generate` with an image model for direct asset generation: + +```ts +import { Image } from "@opencode-ai/ai" +import { OpenAI } from "@opencode-ai/ai/providers" + +const program = Effect.gen(function* () { + const response = yield* Image.generate({ + model: OpenAI.configure({ apiKey: process.env.OPENAI_API_KEY }).image("gpt-image-2"), + prompt: "A robot tending a rooftop garden", + options: { + n: 2, + size: "1024x1024", + quality: "high", // inferred from the OpenAI image model + outputFormat: "webp", + future_option: true, // unknown native options pass through unchanged + }, + }) + + return response.images // GeneratedImage[] with owned bytes or a provider URL +}) +``` + +Provider-native image options belong to each request. Raw `http.body` fields have final precedence over them: + +```ts +const model = OpenAI.configure({ apiKey }).image("gpt-image-2") + +yield * + Image.generate({ + model, + prompt, + options: { quality: "medium" }, + http, + }) +``` + +xAI image models use the same request API with xAI-native controls: + +```ts +yield * + Image.generate({ + model: XAI.configure({ apiKey }).image("any-model-id"), + prompt, + options: { + n: 2, + aspectRatio: "16:9", + resolution: "1k", + responseFormat: "b64_json", + future_option: true, + }, + http, + }) +``` + +Conversational image generation remains part of the LLM interaction. OpenAI Responses exposes it through its hosted image tool: + +```ts +const program = Effect.gen(function* () { + const response = yield* LLM.generate( + LLM.request({ + model: OpenAI.configure({ apiKey }).responses("gpt-5"), + prompt: "Design a solarpunk rooftop garden, then show me.", + tools: [OpenAI.imageGeneration({ quality: "high" })], + }), + ) + + return response.message +}) +``` + +The hosted result is represented as a provider-executed tool call and tool result. Its image is a `file` content item with a data URI, so retaining `response.message` preserves the generated image for continuation. + ## Public API - **`LLM.request({...})`** — build a provider-neutral `LLMRequest`. Accepts ergonomic inputs (`system: string`, `prompt: string`) that normalize into the canonical Schema classes. @@ -32,6 +107,8 @@ Run `LLMClient.stream(request)` instead of `generate` when you want incremental - **`Model.make(...)` / `ToolCallPart.make(...)` / `ToolResultPart.make(...)` / `ToolDefinition.make(...)`** — model and tool-related constructors from the canonical schema model. - **`LLMClient.prepare(request)`** — compile a request through protocol body construction, validation, and HTTP preparation without sending. Useful for inspection and testing. - **`LLMEvent.is.*`** — typed guards (`is.textDelta`, `is.toolCall`, `is.finish`, …) for filtering streams. +- **`Image.generate({...})`** — generate images through a provider-neutral image request and response model. +- **`ImageClient`** — Effect service and layer for image execution, parallel to `LLMClient`. ## Caching @@ -182,7 +259,7 @@ Adding a new model or deployment is usually 5-15 lines using `Route.make({ proto ## Effect -This package is built on Effect. Public methods return `Effect` or `Stream`; provide `LLMClient.layer` for runtime dispatch and import the provider/protocol modules for the routes you use. The example at `example/tutorial.ts` is a runnable walkthrough. +This package is built on Effect. Public methods return `Effect` or `Stream`; provide `LLMClient.layer` for LLM dispatch and `ImageClient.layer` for image dispatch, then import the provider/protocol modules for the routes you use. The example at `example/tutorial.ts` is a runnable walkthrough. ## See also diff --git a/packages/ai/STATUS.md b/packages/ai/STATUS.md index 85980d58cf..24c98a426a 100644 --- a/packages/ai/STATUS.md +++ b/packages/ai/STATUS.md @@ -1,6 +1,6 @@ # LLM Provider Parity Status -Last reviewed: 2026-07-16 +Last reviewed: 2026-07-17 This file tracks the gap between the native `@opencode-ai/ai` package and the AI SDK provider packages that opencode still depends on for many catalog/runtime paths. @@ -20,7 +20,7 @@ This file tracks the gap between the native `@opencode-ai/ai` package and the AI | OpenAI Responses WebSocket | `src/protocols/openai-responses.ts`, `src/route/transport/websocket.ts` | Present as `OpenAI.responsesWebSocket(...)`. | Runner/catalog support explicitly must not downgrade WebSocket routes; broader runtime selection is not complete. | | OpenAI-compatible Chat | `src/protocols/openai-compatible-chat.ts`, `src/providers/openai-compatible.ts` | Usable for generic Chat and several profiles: Baseten, Cerebras, DeepInfra, DeepSeek, Fireworks, Groq, TogetherAI. | Family quirks are mostly endpoint defaults, not full typed behavior. | | OpenAI-compatible Responses | `src/protocols/openai-compatible-responses.ts`, `src/providers/openai-compatible-responses.ts` | Usable for deployments that implement the OpenAI Responses wire protocol. | No named family profiles or recorded deployment coverage yet. | -| Anthropic-compatible Messages | `src/protocols/anthropic-messages.ts`, `src/providers/anthropic-compatible.ts` | Usable for deployments that implement the Anthropic Messages wire protocol. Named Anthropic composes this base. | No named compatible family profiles or recorded deployment coverage yet. | +| Anthropic-compatible Messages | `src/protocols/anthropic-messages.ts`, `src/providers/anthropic-compatible.ts` | Usable for deployments that implement the Anthropic Messages wire protocol. Named Anthropic composes this base; MiniMax M3 has recorded text and tool-loop coverage. | No named compatible family profiles yet. | | Anthropic Messages | `src/protocols/anthropic-messages.ts`, `src/providers/anthropic.ts` | Usable. Supports tools, thinking, cache control, images, server-hosted tool events, and usage. | Provider option surface is small. Beta/header handling, metadata, and newer Messages fields need a typed parity pass. | | Gemini Developer API | `src/protocols/gemini.ts`, `src/providers/google.ts` | Usable for Google API key flow. Supports text, images, tools, thinking signatures, and cache usage. | This is not Vertex. Typed provider options are narrow; many Gemini request fields currently require raw `http.body` overlays. | | Vertex Gemini | `src/protocols/gemini.ts`, `src/providers/google-vertex.ts` | Usable through API-key express mode, explicit OAuth tokens, or ADC with project/location endpoint derivation, including tuned `endpoints/...` deployments. | Core runner/catalog mapping and recorded provider coverage are missing. | diff --git a/packages/ai/package.json b/packages/ai/package.json index 36c3e22673..f83d89430f 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -7,7 +7,7 @@ "scripts": { "setup:recording-env": "bun run script/setup-recording-env.ts", "test": "bun test --timeout 30000 --only-failures", - "typecheck": "tsgo --noEmit", + "typecheck": "tsgo --noEmit && tsgo --noEmit -p tsconfig.types.json", "build": "tsc -p tsconfig.build.json" }, "files": [ diff --git a/packages/ai/script/setup-recording-env.ts b/packages/ai/script/setup-recording-env.ts index d32769b3ce..281c9b8a8d 100644 --- a/packages/ai/script/setup-recording-env.ts +++ b/packages/ai/script/setup-recording-env.ts @@ -161,6 +161,18 @@ const PROVIDERS: ReadonlyArray = [ vars: [{ name: "TOGETHER_AI_API_KEY" }], validate: (env) => validateBearer("https://api.together.xyz/v1/models", Redacted.make(env.TOGETHER_AI_API_KEY)), }, + { + id: "minimax", + label: "MiniMax", + tier: "compatible", + note: "Anthropic-compatible Messages text/tool recorded tests", + vars: [{ name: "MINIMAX_API_KEY" }], + validate: (env) => + HttpClientRequest.get("https://api.minimax.io/anthropic/v1/models").pipe( + HttpClientRequest.setHeader("x-api-key", Redacted.value(Redacted.make(env.MINIMAX_API_KEY))), + executeRequest, + ), + }, { id: "mistral", label: "Mistral", diff --git a/packages/ai/src/image-client.ts b/packages/ai/src/image-client.ts new file mode 100644 index 0000000000..79db227725 --- /dev/null +++ b/packages/ai/src/image-client.ts @@ -0,0 +1,38 @@ +import { Context, Effect, Layer } from "effect" +import { RequestExecutor } from "./route/executor" +import type { ImageOptions, ImageRequest, ImageRequestFor, ImageResponse } from "./image" +import type { LLMError } from "./schema" + +export type Execute = RequestExecutor.Interface["execute"] + +export interface Interface { + readonly generate: ( + request: ImageRequestFor, + ) => Effect.Effect +} + +export class Service extends Context.Service()("@opencode/ImageClient") {} + +export const generate = ( + request: ImageRequestFor, +): Effect.Effect => + Effect.gen(function* () { + const client = yield* Service + return yield* client.generate(request) + }) as Effect.Effect + +export const layer: Layer.Layer = Layer.effect( + Service, + Effect.gen(function* () { + const executor = yield* RequestExecutor.Service + return Service.of({ + generate: (request) => request.model.route.generate(request, executor.execute), + }) + }), +) + +export const ImageClient = { + Service, + layer, + generate, +} as const diff --git a/packages/ai/src/image.ts b/packages/ai/src/image.ts new file mode 100644 index 0000000000..300f6637ab --- /dev/null +++ b/packages/ai/src/image.ts @@ -0,0 +1,131 @@ +import { Effect, Schema } from "effect" +import { HttpOptions, InvalidRequestReason, LLMError, ModelID, ProviderID, ProviderMetadata, Usage } from "./schema" +import { ImageClient, Service, type Execute as ImageExecute } from "./image-client" + +export interface ImageRoute { + readonly id: string + readonly generate: ( + request: ImageRequestFor, + execute: ImageExecute, + ) => Effect.Effect +} + +export type ImageOptions = Record + +export class ImageModel { + declare protected readonly _Options: (options: Options) => Options + readonly id: ModelID + readonly provider: ProviderID + readonly route: ImageRoute + readonly http?: HttpOptions + + constructor(input: ImageModel.Input) { + this.id = input.id + this.provider = input.provider + this.route = input.route + this.http = input.http + } + + static make(input: ImageModel.MakeInput) { + return new ImageModel({ + id: ModelID.make(input.id), + provider: ProviderID.make(input.provider), + route: input.route, + http: input.http, + }) + } +} + +export namespace ImageModel { + export interface Input { + readonly id: ModelID + readonly provider: ProviderID + readonly route: ImageRoute + readonly http?: HttpOptions + } + + export interface MakeInput + extends Omit, "id" | "provider"> { + readonly id: string | ModelID + readonly provider: string | ProviderID + } +} + +export const ImageModelSchema = Schema.declare((value): value is ImageModel => value instanceof ImageModel, { + expected: "Image.Model", +}) + +export class ImageRequest extends Schema.Class("Image.Request")({ + model: ImageModelSchema, + prompt: Schema.String, + options: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)), + http: Schema.optional(HttpOptions), +}) { + declare protected readonly _ImageRequest: void +} + +export type ImageRequestFor = Omit & { + readonly model: ImageModel + readonly options?: Options +} + +export type ImageModelOptions = Model extends ImageModel ? Options : never + +export type ImageRequestInput = Omit< + ConstructorParameters[0], + "model" | "options" | "http" +> & { + readonly model: Model + readonly options?: NoInfer> + readonly http?: HttpOptions.Input +} & (Model extends ImageModel> ? unknown : never) + +export class GeneratedImage extends Schema.Class("Image.Generated")({ + mediaType: Schema.String, + data: Schema.Union([Schema.String, Schema.Uint8Array]), + providerMetadata: Schema.optional(ProviderMetadata), +}) {} + +export class ImageResponse extends Schema.Class("Image.Response")({ + images: Schema.Array(GeneratedImage), + usage: Schema.optional(Usage), + providerMetadata: Schema.optional(ProviderMetadata), +}) { + get image() { + return this.images[0] + } +} + +export function request( + input: ImageRequestInput, +): ImageRequestFor> +export function request(input: ImageRequest): ImageRequest +export function request(input: ImageRequest | ImageRequestInput) { + if (input instanceof ImageRequest) return input + return new ImageRequest({ + ...input, + model: input.model as unknown as ImageModel, + http: input.http === undefined ? undefined : HttpOptions.make(input.http), + }) +} + +export function generate( + input: ImageRequestInput, +): Effect.Effect +export function generate(input: ImageRequest): Effect.Effect +export function generate(input: ImageRequest | ImageRequestInput) { + return Effect.try({ + try: () => (input instanceof ImageRequest ? input : request(input)), + catch: (error) => + new LLMError({ + module: "Image", + method: "generate", + reason: new InvalidRequestReason({ message: error instanceof Error ? error.message : String(error) }), + }), + }).pipe(Effect.flatMap((request) => ImageClient.generate(request as unknown as ImageRequestFor))) +} + +export const Image = { + request, + generate, +} as const diff --git a/packages/ai/src/index.ts b/packages/ai/src/index.ts index 273861b26f..206cd45a20 100644 --- a/packages/ai/src/index.ts +++ b/packages/ai/src/index.ts @@ -1,4 +1,5 @@ export { LLMClient } from "./route/client" +export { ImageClient } from "./image-client" export { Auth } from "./route/auth" export { Provider } from "./provider" export { ProviderPackage } from "./provider-package" @@ -10,6 +11,9 @@ export type { Service as LLMClientService, } from "./route/client" export * from "./schema" +export { GeneratedImage, ImageModel, ImageRequest, ImageResponse } from "./image" +export type { ImageModelOptions, ImageOptions, ImageRequestFor, ImageRequestInput, ImageRoute } from "./image" +export { Image } from "./image" export { Tool, ToolFailure, toDefinitions } from "./tool" export { ToolRuntime } from "./tool-runtime" export type { DispatchResult as ToolDispatchResult, ToolSettlement } from "./tool-runtime" diff --git a/packages/ai/src/protocols/anthropic-messages.ts b/packages/ai/src/protocols/anthropic-messages.ts index b2d8fa70dc..26d127eb0e 100644 --- a/packages/ai/src/protocols/anthropic-messages.ts +++ b/packages/ai/src/protocols/anthropic-messages.ts @@ -703,7 +703,14 @@ const onContentBlockStart = (state: ParserState, event: AnthropicEvent): StepRes providerExecuted: block.type === "server_tool_use", }), }, - [...events, LLMEvent.toolInputStart({ id: block.id ?? String(event.index), name: block.name ?? "" })], + [ + ...events, + LLMEvent.toolInputStart({ + id: block.id ?? String(event.index), + name: block.name ?? "", + providerExecuted: block.type === "server_tool_use" ? true : undefined, + }), + ], ] } diff --git a/packages/ai/src/protocols/bedrock-converse.ts b/packages/ai/src/protocols/bedrock-converse.ts index 4ac3eeaf68..b94f23d62f 100644 --- a/packages/ai/src/protocols/bedrock-converse.ts +++ b/packages/ai/src/protocols/bedrock-converse.ts @@ -561,7 +561,9 @@ const step = (state: ParserState, event: BedrockEvent) => return [ { ...state, - hasToolCalls: resultEvents.some(LLMEvent.is.toolCall) ? true : state.hasToolCalls, + hasToolCalls: + resultEvents.some((event) => LLMEvent.is.toolCall(event) || LLMEvent.is.toolInputError(event)) || + state.hasToolCalls, lifecycle, tools: result.tools, reasoningSignatures: Object.fromEntries( diff --git a/packages/ai/src/protocols/index.ts b/packages/ai/src/protocols/index.ts index d00d517a09..bd3ee8eeec 100644 --- a/packages/ai/src/protocols/index.ts +++ b/packages/ai/src/protocols/index.ts @@ -2,6 +2,7 @@ export * as AnthropicMessages from "./anthropic-messages" export * as BedrockConverse from "./bedrock-converse" export * as Gemini from "./gemini" export * as OpenAIChat from "./openai-chat" +export * as OpenAIImages from "./openai-images" export * as OpenAICompatibleChat from "./openai-compatible-chat" export * as OpenAICompatibleResponses from "./openai-compatible-responses" export * as OpenAIResponses from "./openai-responses" diff --git a/packages/ai/src/protocols/openai-chat.ts b/packages/ai/src/protocols/openai-chat.ts index c74ab7fd64..3b35bb88d8 100644 --- a/packages/ai/src/protocols/openai-chat.ts +++ b/packages/ai/src/protocols/openai-chat.ts @@ -75,6 +75,9 @@ const OpenAIChatMessage = Schema.Union([ content: Schema.NullOr(Schema.String), tool_calls: optionalArray(OpenAIChatAssistantToolCall), reasoning_content: Schema.optional(Schema.String), + reasoning: Schema.optional(Schema.String), + reasoning_text: Schema.optional(Schema.String), + reasoning_details: optionalArray(Schema.Unknown), }), Schema.Struct({ role: Schema.Literal("tool"), tool_call_id: Schema.String, content: Schema.String }), ]).pipe(Schema.toTaggedUnion("role")) @@ -145,6 +148,9 @@ type OpenAIChatToolCallDelta = Schema.Schema.Type type OpenAIChatRequestMessage = LLMRequest["messages"][number] +interface PendingToolDelta { + readonly id?: string + readonly name?: string + readonly input: string +} + export interface ParserState { readonly tools: ToolStream.State + readonly pendingTools: Partial> readonly toolCallEvents: ReadonlyArray readonly usage?: Usage readonly finishReason?: FinishReason readonly lifecycle: Lifecycle.State + readonly reasoningField?: "reasoning" | "reasoning_content" | "reasoning_text" + readonly reasoningDetails: Array + readonly reasoningDetailsObserved: boolean + readonly reasoningEmitted: boolean } // ============================================================================= @@ -208,6 +225,20 @@ const lowerMedia = Effect.fn("OpenAIChat.lowerMedia")(function* (part: MediaPart const openAICompatibleReasoningContent = (native: unknown) => isRecord(native) && typeof native.reasoning_content === "string" ? native.reasoning_content : undefined +const reasoningField = (part: ReasoningPart) => { + const field = part.providerMetadata?.openai?.reasoningField + if (field === "reasoning" || field === "reasoning_content" || field === "reasoning_text") return field +} + +const reasoningDetails = (parts: ReadonlyArray, native: unknown) => { + const observed = parts.flatMap((part) => { + const details = part.providerMetadata?.openai?.reasoningDetails + return Array.isArray(details) ? details : [] + }) + if (parts.some((part) => Array.isArray(part.providerMetadata?.openai?.reasoningDetails))) return observed + if (isRecord(native) && Array.isArray(native.reasoning_details)) return native.reasoning_details +} + const lowerUserMessage = Effect.fn("OpenAIChat.lowerUserMessage")(function* (message: OpenAIChatRequestMessage) { const content: Array> = [] for (const part of message.content) { @@ -248,14 +279,29 @@ const lowerAssistantMessage = Effect.fn("OpenAIChat.lowerAssistantMessage")(func continue } } + const text = reasoning.map((part) => part.text).join("") + const details = reasoningDetails(reasoning, message.native?.openaiCompatible) + const observedField = reasoning.map(reasoningField).find((value) => value !== undefined) + const nativeReasoning = openAICompatibleReasoningContent(message.native?.openaiCompatible) + const fullyStructured = reasoning.every((part) => Array.isArray(part.providerMetadata?.openai?.reasoningDetails)) + const field = (() => { + if (reasoning.length === 0) return + if (observedField !== undefined) return observedField + if (nativeReasoning !== undefined) return "reasoning_content" + if (!fullyStructured) return "reasoning_content" + })() + const reasoningContent = (() => { + if (reasoning.length === 0) return nativeReasoning + if (field === "reasoning_content") return text + })() return { role: "assistant" as const, content: content.length === 0 ? null : ProviderShared.joinText(content), tool_calls: toolCalls.length === 0 ? undefined : toolCalls, - reasoning_content: - reasoning.length > 0 - ? reasoning.map((part) => part.text).join("") - : openAICompatibleReasoningContent(message.native?.openaiCompatible), + reasoning_content: reasoningContent, + reasoning: reasoning.length > 0 && field === "reasoning" ? text : undefined, + reasoning_text: reasoning.length > 0 && field === "reasoning_text" ? text : undefined, + reasoning_details: details, } }) @@ -400,6 +446,65 @@ const mapUsage = (usage: OpenAIChatEvent["usage"]): Usage | undefined => { }) } +const reasoningDelta = (delta: Schema.Schema.Type | null | undefined) => { + if (delta?.reasoning_content) return { field: "reasoning_content", text: delta.reasoning_content } as const + if (delta?.reasoning) return { field: "reasoning", text: delta.reasoning } as const + if (delta?.reasoning_text) return { field: "reasoning_text", text: delta.reasoning_text } as const +} + +const detailText = (details: ReadonlyArray) => { + const text = details.flatMap((detail) => { + if (!isRecord(detail)) return [] + if (detail.type === "reasoning.text" && typeof detail.text === "string" && detail.text) return [detail.text] + if (detail.type === "reasoning.summary" && typeof detail.summary === "string" && detail.summary) + return [detail.summary] + return [] + }) + if (text.length > 0) return text.join("") +} + +const appendReasoningDetails = (result: Array, details: ReadonlyArray) => { + for (const detail of details) { + const previous = result.at(-1) + if ( + !isRecord(previous) || + previous.type !== "reasoning.text" || + !isRecord(detail) || + detail.type !== "reasoning.text" || + conflictingReasoningTextDetails(previous, detail) + ) { + result.push(detail) + continue + } + result[result.length - 1] = { + ...previous, + ...Object.fromEntries(Object.entries(detail).filter((entry) => entry[1] !== undefined)), + text: `${typeof previous.text === "string" ? previous.text : ""}${typeof detail.text === "string" ? detail.text : ""}`, + signature: mergeDetailValue(previous.signature, detail.signature), + format: mergeDetailValue(previous.format, detail.format), + } + } +} + +const mergeDetailValue = (previous: unknown, current: unknown) => + previous || current || (previous !== undefined ? previous : current) + +const conflictingReasoningTextDetails = (previous: Record, current: Record) => + conflictingDetailValue(previous.id, current.id) || + conflictingDetailValue(previous.index, current.index) || + conflictingDetailValue(previous.format, current.format) || + (Boolean(previous.signature) && Boolean(current.signature) && previous.signature !== current.signature) + +const conflictingDetailValue = (previous: unknown, current: unknown) => + previous !== undefined && previous !== null && current !== undefined && current !== null && previous !== current + +const reasoningMetadata = (field: ParserState["reasoningField"], details?: ReadonlyArray) => ({ + openai: { + ...(field ? { reasoningField: field } : {}), + ...(details ? { reasoningDetails: details } : {}), + }, +}) + const step = (state: ParserState, event: OpenAIChatEvent) => Effect.gen(function* () { const events: LLMEvent[] = [] @@ -409,25 +514,56 @@ const step = (state: ParserState, event: OpenAIChatEvent) => const delta = choice?.delta const toolDeltas = delta?.tool_calls ?? [] let tools = state.tools + let pendingTools = state.pendingTools let lifecycle = state.lifecycle - if (delta?.reasoning_content) - lifecycle = Lifecycle.reasoningDelta(lifecycle, events, "reasoning-0", delta.reasoning_content) + const reasoning = reasoningDelta(delta) + const reasoningField = state.reasoningField ?? (!state.lifecycle.text.has("text-0") ? reasoning?.field : undefined) + const detailDelta = Array.isArray(delta?.reasoning_details) ? delta.reasoning_details : undefined + if (detailDelta !== undefined) appendReasoningDetails(state.reasoningDetails, detailDelta) + const reasoningDetailsObserved = state.reasoningDetailsObserved || detailDelta !== undefined + const deltaMetadata = reasoningMetadata(reasoningField) + const text = detailDelta?.length ? (detailText(detailDelta) ?? reasoning?.text) : reasoning?.text + if (!state.lifecycle.text.has("text-0") && text !== undefined) + lifecycle = Lifecycle.reasoningDelta(lifecycle, events, "reasoning-0", text, deltaMetadata) + else if ( + reasoningDetailsObserved && + !lifecycle.reasoning.has("reasoning-0") && + (Boolean(delta?.content) || toolDeltas.length > 0) + ) + lifecycle = Lifecycle.reasoningStart(lifecycle, events, "reasoning-0", deltaMetadata) + const reasoningEmitted = state.reasoningEmitted || lifecycle.reasoning.has("reasoning-0") if (delta?.content) { - lifecycle = Lifecycle.reasoningEnd(lifecycle, events, "reasoning-0") + lifecycle = Lifecycle.reasoningEnd( + lifecycle, + events, + "reasoning-0", + reasoningMetadata(reasoningField, reasoningDetailsObserved ? state.reasoningDetails : undefined), + ) lifecycle = Lifecycle.textDelta(lifecycle, events, "text-0", delta.content) } - if (toolDeltas.length) lifecycle = Lifecycle.reasoningEnd(lifecycle, events, "reasoning-0") - for (const tool of toolDeltas) { + const current = tools[tool.index] + const pending = pendingTools[tool.index] + const id = current?.id ?? pending?.id ?? (tool.id || undefined) + const name = current?.name ?? pending?.name ?? (tool.function?.name || undefined) + const text = `${pending?.input ?? ""}${tool.function?.arguments ?? ""}` + if (!current && (!id || !name)) { + pendingTools = { ...pendingTools, [tool.index]: { id: id || undefined, name: name || undefined, input: text } } + continue + } + if (pending) { + pendingTools = { ...pendingTools } + delete pendingTools[tool.index] + } const result = ToolStream.appendOrStart( ADAPTER, tools, tool.index, - { id: tool.id ?? undefined, name: tool.function?.name ?? undefined, text: tool.function?.arguments ?? "" }, + { id: id || undefined, name: name || undefined, text }, "OpenAI Chat tool call delta is missing id or name", ) if (ToolStream.isError(result)) return yield* result @@ -436,8 +572,11 @@ const step = (state: ParserState, event: OpenAIChatEvent) => events.push(...result.events) } + if (finishReason !== undefined && state.finishReason === undefined && Object.keys(pendingTools).length > 0) + return yield* ProviderShared.eventError(ADAPTER, "OpenAI Chat tool call delta is missing id or name") + // Finalize accumulated tool inputs eagerly when finish_reason arrives so - // JSON parse failures fail the stream at the boundary rather than at halt. + // valid calls and malformed local calls settle independently. const finished = finishReason !== undefined && state.finishReason === undefined && Object.keys(tools).length > 0 ? yield* ToolStream.finishAll(ADAPTER, tools) @@ -446,10 +585,15 @@ const step = (state: ParserState, event: OpenAIChatEvent) => return [ { tools: finished?.tools ?? tools, + pendingTools, toolCallEvents: finished?.events ?? state.toolCallEvents, usage, finishReason, lifecycle, + reasoningField, + reasoningDetails: state.reasoningDetails, + reasoningDetailsObserved, + reasoningEmitted, }, events, ] as const @@ -459,7 +603,16 @@ const finishEvents = (state: ParserState): ReadonlyArray => { const events: LLMEvent[] = [] const hasToolCalls = state.toolCallEvents.length > 0 const reason = state.finishReason === "stop" && hasToolCalls ? "tool-calls" : state.finishReason - const lifecycle = state.toolCallEvents.length ? Lifecycle.stepStart(state.lifecycle, events) : state.lifecycle + const metadata = reasoningMetadata( + state.reasoningField, + state.reasoningDetailsObserved ? state.reasoningDetails : undefined, + ) + const started = + state.reasoningDetailsObserved && !state.reasoningEmitted + ? Lifecycle.reasoningStart(state.lifecycle, events, "reasoning-0", reasoningMetadata(state.reasoningField)) + : state.lifecycle + const ended = Lifecycle.reasoningEnd(started, events, "reasoning-0", metadata) + const lifecycle = state.toolCallEvents.length ? Lifecycle.stepStart(ended, events) : ended events.push(...state.toolCallEvents) if (reason) Lifecycle.finish(lifecycle, events, { reason, usage: state.usage }) return events @@ -482,7 +635,16 @@ export const protocol = Protocol.make({ }, stream: { event: Protocol.jsonEvent(OpenAIChatEvent), - initial: () => ({ tools: ToolStream.empty(), toolCallEvents: [], lifecycle: Lifecycle.initial() }), + initial: () => ({ + tools: ToolStream.empty(), + pendingTools: {}, + toolCallEvents: [], + lifecycle: Lifecycle.initial(), + reasoningField: undefined, + reasoningDetails: [], + reasoningDetailsObserved: false, + reasoningEmitted: false, + }), step, onHalt: finishEvents, }, diff --git a/packages/ai/src/protocols/openai-images.ts b/packages/ai/src/protocols/openai-images.ts new file mode 100644 index 0000000000..c22fd0fa5a --- /dev/null +++ b/packages/ai/src/protocols/openai-images.ts @@ -0,0 +1,170 @@ +import { Effect, Encoding, Schema } from "effect" +import { Headers, HttpClientRequest } from "effect/unstable/http" +import { ImageModel, GeneratedImage, ImageResponse, type ImageRequestFor, type ImageRoute } from "../image" +import { Auth, type Definition as AuthDefinition } from "../route/auth" +import { + InvalidProviderOutputReason, + LLMError, + Usage, + mergeHttpOptions, + mergeJsonRecords, + type HttpOptions, +} from "../schema" +import { ProviderShared } from "./shared" +import { OpenAIImage } from "./utils/openai-image" + +const ADAPTER = "openai-images" +export const DEFAULT_BASE_URL = "https://api.openai.com/v1" +export const PATH = "/images/generations" + +export type OpenAIImageString = Known | (string & {}) + +export type OpenAIImageOptions = { + readonly n?: number + readonly size?: OpenAIImageString< + "auto" | "256x256" | "512x512" | "1024x1024" | "1536x1024" | "1024x1536" | "1792x1024" | "1024x1792" + > + readonly quality?: OpenAIImageString<"auto" | "low" | "medium" | "high" | "standard" | "hd"> + readonly background?: OpenAIImageString<"auto" | "opaque" | "transparent"> + readonly moderation?: OpenAIImageString<"auto" | "low"> + readonly outputFormat?: OpenAIImageString<"png" | "jpeg" | "webp"> + readonly outputCompression?: number +} & Record + +export type OpenAIImageBody = Record & { + readonly model: string + readonly prompt: string +} + +const OpenAIImageResponse = Schema.Struct({ + data: Schema.Array( + Schema.Struct({ + b64_json: Schema.optional(Schema.String), + url: Schema.optional(Schema.String), + revised_prompt: Schema.optional(Schema.String), + }), + ), + output_format: Schema.optional(Schema.String), + usage: Schema.optional( + Schema.Struct({ + input_tokens: Schema.optional(Schema.Number), + output_tokens: Schema.optional(Schema.Number), + total_tokens: Schema.optional(Schema.Number), + input_tokens_details: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)), + output_tokens_details: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)), + }), + ), +}) + +export interface ModelInput { + readonly id: string + readonly auth: AuthDefinition + readonly baseURL?: string + readonly headers?: Record + readonly http?: HttpOptions +} + +const nativeOptions = (options: Record | undefined) => { + if (!options) return undefined + const { outputFormat, outputCompression, ...native } = options + return { + output_format: outputFormat, + output_compression: outputCompression, + ...native, + } +} + +const invalidOutput = (message: string) => + new LLMError({ + module: ADAPTER, + method: "generate", + reason: new InvalidProviderOutputReason({ message, route: ADAPTER }), + }) + +const applyQuery = (url: string, query: Record | undefined) => { + if (!query) return url + const next = new URL(url) + Object.entries(query).forEach(([key, value]) => next.searchParams.set(key, value)) + return next.toString() +} + +export const model = (input: ModelInput) => { + const route: ImageRoute = { + id: ADAPTER, + generate: Effect.fn("OpenAIImages.generate")(function* (request: ImageRequestFor, execute) { + const http = mergeHttpOptions(request.model.http, request.http) + const requestBody = mergeJsonRecords( + { model: request.model.id, prompt: request.prompt }, + nativeOptions(request.options), + http?.body, + ) as OpenAIImageBody + const text = ProviderShared.encodeJson(requestBody) + const url = applyQuery(`${(input.baseURL ?? DEFAULT_BASE_URL).replace(/\/$/, "")}${PATH}`, http?.query) + const headers = yield* Auth.toEffect(input.auth)({ + request, + method: "POST", + url, + body: text, + headers: Headers.fromInput({ ...input.headers, ...http?.headers }), + }) + const response = yield* execute( + HttpClientRequest.post(url).pipe( + HttpClientRequest.setHeaders(headers), + HttpClientRequest.bodyText(text, "application/json"), + ), + ) + const payload = yield* response.json.pipe( + Effect.mapError(() => invalidOutput("Failed to read the OpenAI Images response")), + ) + const decoded = yield* Schema.decodeUnknownEffect(OpenAIImageResponse)(payload).pipe( + Effect.mapError(() => invalidOutput("OpenAI Images returned an invalid response")), + ) + const format = + decoded.output_format ?? (typeof requestBody.output_format === "string" ? requestBody.output_format : "png") + const images = yield* Effect.forEach(decoded.data, (item, index) => { + if (item.b64_json) + return Effect.fromResult(Encoding.decodeBase64(item.b64_json)).pipe( + Effect.mapError(() => invalidOutput(`OpenAI Images result ${index} contains invalid base64 data`)), + Effect.map( + (data) => + new GeneratedImage({ + mediaType: `image/${format}`, + data, + providerMetadata: + item.revised_prompt === undefined ? undefined : { openai: { revisedPrompt: item.revised_prompt } }, + }), + ), + ) + if (item.url) + return Effect.succeed( + new GeneratedImage({ + mediaType: `image/${format}`, + data: item.url, + providerMetadata: + item.revised_prompt === undefined ? undefined : { openai: { revisedPrompt: item.revised_prompt } }, + }), + ) + return Effect.fail(invalidOutput(`OpenAI Images result ${index} has neither image data nor a URL`)) + }) + if (images.length === 0) return yield* invalidOutput("OpenAI Images returned no images") + return new ImageResponse({ + images, + usage: + decoded.usage === undefined + ? undefined + : new Usage({ + inputTokens: decoded.usage.input_tokens, + outputTokens: decoded.usage.output_tokens, + totalTokens: decoded.usage.total_tokens, + providerMetadata: { openai: decoded.usage }, + }), + providerMetadata: { openai: { outputFormat: format } }, + }) + }), + } + return ImageModel.make({ id: input.id, provider: "openai", route, http: input.http }) +} + +export const OpenAIImages = { + model, +} as const diff --git a/packages/ai/src/protocols/openai-responses.ts b/packages/ai/src/protocols/openai-responses.ts index d03cb003ff..f8e11b3cc2 100644 --- a/packages/ai/src/protocols/openai-responses.ts +++ b/packages/ai/src/protocols/openai-responses.ts @@ -1,4 +1,4 @@ -import { Effect, Schema } from "effect" +import { Effect, Encoding, Schema } from "effect" import { Route } from "../route/client" import { Auth } from "../route/auth" import { Endpoint } from "../route/endpoint" @@ -25,6 +25,7 @@ import { OpenAIOptions } from "./utils/openai-options" import { Lifecycle } from "./utils/lifecycle" import { ToolSchemaProjection } from "./utils/tool-schema" import { ToolStream } from "./utils/tool-stream" +import { OpenAIImage } from "./utils/openai-image" const ADAPTER = "openai-responses" export const DEFAULT_BASE_URL = "https://api.openai.com/v1" @@ -113,11 +114,24 @@ const OpenAIResponsesTool = Schema.Struct({ parameters: JsonObject, strict: Schema.optional(Schema.Boolean), }) -type OpenAIResponsesTool = Schema.Schema.Type +const OpenAIResponsesImageGenerationTool = Schema.Struct({ + type: Schema.tag("image_generation"), + action: Schema.optional(Schema.Literals(["auto", "generate", "edit"])), + background: Schema.optional(Schema.Literals(["auto", "opaque", "transparent"])), + input_fidelity: Schema.optional(Schema.Literals(["low", "high"])), + output_compression: Schema.optional(Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 100 }))), + output_format: Schema.optional(Schema.Literals(["png", "jpeg", "webp"])), + partial_images: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))), + quality: Schema.optional(Schema.Literals(["auto", "low", "medium", "high"])), + size: Schema.optional(OpenAIImage.Size), +}) +const OpenAIResponsesTools = Schema.Union([OpenAIResponsesTool, OpenAIResponsesImageGenerationTool]) +type OpenAIResponsesTool = Schema.Schema.Type const OpenAIResponsesToolChoice = Schema.Union([ Schema.Literals(["auto", "none", "required"]), Schema.Struct({ type: Schema.tag("function"), name: Schema.String }), + Schema.Struct({ type: Schema.tag("image_generation") }), ]) // Fields shared between the HTTP body and the WebSocket `response.create` @@ -128,7 +142,7 @@ const OpenAIResponsesCoreFields = { model: Schema.String, input: Schema.Array(OpenAIResponsesInputItem), instructions: Schema.optional(Schema.String), - tools: optionalArray(OpenAIResponsesTool), + tools: optionalArray(OpenAIResponsesTools), tool_choice: Schema.optional(OpenAIResponsesToolChoice), store: Schema.optional(Schema.Boolean), service_tier: Schema.optional(OpenAIOptions.OpenAIServiceTier), @@ -194,6 +208,8 @@ const OpenAIResponsesStreamItem = Schema.Struct({ outputs: Schema.optional(Schema.Unknown), server_label: Schema.optional(Schema.String), output: Schema.optional(Schema.Unknown), + result: Schema.optional(Schema.String), + output_format: Schema.optional(Schema.Literals(["png", "jpeg", "webp"])), error: Schema.optional(Schema.Unknown), encrypted_content: optionalNull(Schema.String), }) @@ -258,21 +274,41 @@ const invalid = ProviderShared.invalidRequest // ============================================================================= // Request Lowering // ============================================================================= -const lowerTool = (tool: ToolDefinition, inputSchema: JsonSchema): OpenAIResponsesTool => ({ - type: "function", - name: tool.name, - description: tool.description, - parameters: ToolSchemaProjection.openAI(inputSchema), - // TODO: Read this from OpenAI-specific tool options so direct LLM callers can opt into strict schemas. - strict: false, +const nativeImageToolInput = (tool: ToolDefinition) => { + const native = tool.native?.openai + return ProviderShared.isRecord(native) && native.type === "image_generation" ? native : undefined +} + +const nativeImageTool = (tool: ToolDefinition) => { + const native = nativeImageToolInput(tool) + return Schema.is(OpenAIResponsesImageGenerationTool)(native) ? native : undefined +} + +const lowerTool = Effect.fn("OpenAIResponses.lowerTool")(function* (tool: ToolDefinition, inputSchema: JsonSchema) { + const native = nativeImageToolInput(tool) + if (native !== undefined) { + if (Schema.is(OpenAIResponsesImageGenerationTool)(native)) return native + return yield* invalid("OpenAI Responses image generation tool options are invalid") + } + return { + type: "function" as const, + name: tool.name, + description: tool.description, + parameters: ToolSchemaProjection.openAI(inputSchema), + // TODO: Read this from OpenAI-specific tool options so direct LLM callers can opt into strict schemas. + strict: false, + } }) -const lowerToolChoice = (toolChoice: NonNullable) => +const lowerToolChoice = (toolChoice: NonNullable, tools: ReadonlyArray) => ProviderShared.matchToolChoice("OpenAI Responses", toolChoice, { auto: () => "auto" as const, none: () => "none" as const, required: () => "required" as const, - tool: (name) => ({ type: "function" as const, name }), + tool: (name) => + tools.some((tool) => tool.name === name && nativeImageTool(tool) !== undefined) + ? ({ type: "image_generation" } as const) + : { type: "function" as const, name }, }) const lowerToolCall = (part: ToolCallPart): OpenAIResponsesInputItem => ({ @@ -420,6 +456,13 @@ const lowerMessages = Effect.fn("OpenAIResponses.lowerMessages")(function* (requ const itemID = hostedToolItemID(part) if (store !== false && itemID && !hostedToolReferences.has(itemID)) input.push({ type: "item_reference", id: itemID }) + if (store === false && part.name === "image_generation" && part.result.type === "content") { + const content: ReadonlyArray = part.result.value + input.push({ + role: "user", + content: yield* Effect.forEach(content, lowerToolResultContentItem), + }) + } if (itemID) hostedToolReferences.add(itemID) continue } @@ -485,10 +528,10 @@ const fromRequest = Effect.fn("OpenAIResponses.fromRequest")(function* (request: tools: request.tools.length === 0 ? undefined - : request.tools.map((tool) => + : yield* Effect.forEach(request.tools, (tool) => lowerTool(tool, ToolSchemaProjection.modelCompatibility(tool.inputSchema, toolSchemaCompatibility)), ), - tool_choice: request.toolChoice ? yield* lowerToolChoice(request.toolChoice) : undefined, + tool_choice: request.toolChoice ? yield* lowerToolChoice(request.toolChoice, request.tools) : undefined, stream: true as const, max_output_tokens: generation?.maxTokens, temperature: generation?.temperature, @@ -574,14 +617,29 @@ const isReasoningItem = ( // Round-trip the full item as the structured result so consumers can extract // outputs / sources / status without re-decoding. -const hostedToolResult = (item: OpenAIResponsesStreamItem) => { +const hostedToolResult = Effect.fn("OpenAIResponses.hostedToolResult")(function* (item: OpenAIResponsesStreamItem) { const isError = typeof item.error !== "undefined" && item.error !== null + if (item.type === "image_generation_call" && item.result) { + yield* Effect.fromResult(Encoding.decodeBase64(item.result)).pipe( + Effect.mapError(() => ProviderShared.eventError(ADAPTER, "OpenAI Responses returned invalid image base64")), + ) + return { + type: "content" as const, + value: [ + { + type: "file" as const, + uri: `data:image/${item.output_format ?? "png"};base64,${item.result}`, + mime: `image/${item.output_format ?? "png"}`, + }, + ], + } + } return isError ? { type: "error" as const, value: item.error } : { type: "json" as const, value: item } -} +}) -const hostedToolEvents = ( +const hostedToolEvents = Effect.fn("OpenAIResponses.hostedToolEvents")(function* ( item: OpenAIResponsesStreamItem & { type: HostedToolType; id: string }, -): ReadonlyArray => { +) { const tool = HOSTED_TOOLS[item.type] const providerMetadata = openaiMetadata({ itemId: item.id }) return [ @@ -595,12 +653,12 @@ const hostedToolEvents = ( LLMEvent.toolResult({ id: item.id, name: tool.name, - result: hostedToolResult(item), + result: yield* hostedToolResult(item), providerExecuted: true, providerMetadata, }), ] -} +}) type StepResult = readonly [ParserState, ReadonlyArray] @@ -835,7 +893,9 @@ const onOutputItemDone = Effect.fn("OpenAIResponses.onOutputItemDone")(function* { ...state, lifecycle, - hasFunctionCall: resultEvents.some(LLMEvent.is.toolCall) ? true : state.hasFunctionCall, + hasFunctionCall: + resultEvents.some((event) => LLMEvent.is.toolCall(event) || LLMEvent.is.toolInputError(event)) || + state.hasFunctionCall, tools: result.tools, }, events, @@ -845,7 +905,7 @@ const onOutputItemDone = Effect.fn("OpenAIResponses.onOutputItemDone")(function* if (isHostedToolItem(item)) { const events: LLMEvent[] = [] const lifecycle = Lifecycle.stepStart(state.lifecycle, events) - events.push(...hostedToolEvents(item)) + events.push(...(yield* hostedToolEvents(item))) return [{ ...state, lifecycle }, events] satisfies StepResult } diff --git a/packages/ai/src/protocols/utils/lifecycle.ts b/packages/ai/src/protocols/utils/lifecycle.ts index eb6c95dfbd..6d0189df9a 100644 --- a/packages/ai/src/protocols/utils/lifecycle.ts +++ b/packages/ai/src/protocols/utils/lifecycle.ts @@ -44,7 +44,7 @@ export const reasoningDelta = ( providerMetadata?: ProviderMetadata, ): State => { const started = reasoningStart(state, events, id, providerMetadata) - events.push(LLMEvent.reasoningDelta({ id, text })) + events.push(LLMEvent.reasoningDelta({ id, text, providerMetadata })) return started } diff --git a/packages/ai/src/protocols/utils/openai-image.ts b/packages/ai/src/protocols/utils/openai-image.ts new file mode 100644 index 0000000000..765c99ce16 --- /dev/null +++ b/packages/ai/src/protocols/utils/openai-image.ts @@ -0,0 +1,20 @@ +import { Schema } from "effect" + +const dimensions = (value: string) => { + const match = /^(\d+)x(\d+)$/.exec(value) + if (!match) return undefined + return { width: Number(match[1]), height: Number(match[2]) } +} + +export const Size = Schema.String.check( + Schema.makeFilter((value) => { + if (value === "auto") return undefined + const parsed = dimensions(value) + if (!parsed) return "image size must be `auto` or `{width}x{height}`" + return parsed.width > 0 && parsed.height > 0 ? undefined : "image dimensions must be positive integers" + }), +) + +export const OpenAIImage = { + Size, +} as const diff --git a/packages/ai/src/protocols/utils/tool-stream.ts b/packages/ai/src/protocols/utils/tool-stream.ts index 8e07a64bfe..fbea376e70 100644 --- a/packages/ai/src/protocols/utils/tool-stream.ts +++ b/packages/ai/src/protocols/utils/tool-stream.ts @@ -1,5 +1,5 @@ import { Effect } from "effect" -import { LLMError, LLMEvent, type ProviderMetadata, type ToolCall } from "../../schema" +import { LLMError, LLMEvent, type ProviderMetadata, type ToolCall, type ToolInputError } from "../../schema" import { eventError, parseToolInput, type ToolAccumulator } from "../shared" type StreamKey = string | number @@ -53,6 +53,7 @@ const inputStart = (tool: PendingTool) => LLMEvent.toolInputStart({ id: tool.id, name: tool.name, + providerExecuted: tool.providerExecuted ? true : undefined, providerMetadata: tool.providerMetadata, }) @@ -63,19 +64,36 @@ const inputDelta = (tool: PendingTool, text: string) => text, }) -const toolCall = (route: string, tool: PendingTool, inputOverride?: string) => - parseToolInput(route, tool.name, inputOverride ?? tool.input).pipe( - Effect.map( - (input): ToolCall => - LLMEvent.toolCall({ - id: tool.id, - name: tool.name, - input, - providerExecuted: tool.providerExecuted ? true : undefined, - providerMetadata: tool.providerMetadata, - }), +const toolCall = (route: string, tool: PendingTool, inputOverride?: string) => { + const raw = inputOverride ?? tool.input + return parseToolInput(route, tool.name, raw).pipe( + Effect.map((input): ToolCall | ToolInputError => + LLMEvent.toolCall({ + id: tool.id, + name: tool.name, + input, + providerExecuted: tool.providerExecuted ? true : undefined, + providerMetadata: tool.providerMetadata, + }), + ), + Effect.catch((error) => + tool.providerExecuted + ? Effect.fail(error) + : Effect.succeed( + LLMEvent.toolInputError({ + id: tool.id, + name: tool.name, + raw, + }), + ), ), ) +} + +const finishEvents = (tool: PendingTool, event: ToolCall | ToolInputError): ReadonlyArray => + event.type === "tool-input-error" + ? [event] + : [LLMEvent.toolInputEnd({ id: tool.id, name: tool.name, providerMetadata: tool.providerMetadata }), event] /** Store the updated tool and produce the optional public delta event. */ const appendTool = ( @@ -122,8 +140,8 @@ export const appendOrStart = ( missingToolMessage: string, ): AppendOutcome | LLMError => { const current = tools[key] - const id = delta.id ?? current?.id - const name = delta.name ?? current?.name + const id = current?.id ?? delta.id + const name = current?.name ?? delta.name if (!id || !name) return eventError(route, missingToolMessage) const tool = { @@ -158,8 +176,9 @@ export const appendExisting = ( /** * Finalize one pending tool call: parse the accumulated raw JSON, remove it - * from state, and return the optional public `tool-call` event. Missing keys are - * a no-op because some providers emit stop events for non-tool content blocks. + * from state, and return either a call or a non-executable local input error. + * Missing keys are a no-op because some providers emit stop events for + * non-tool content blocks. */ export const finish = (route: string, tools: State, key: K) => Effect.gen(function* () { @@ -167,10 +186,7 @@ export const finish = (route: string, tools: State, key: if (!tool) return { tools } return { tools: withoutTool(tools, key), - events: [ - LLMEvent.toolInputEnd({ id: tool.id, name: tool.name, providerMetadata: tool.providerMetadata }), - yield* toolCall(route, tool), - ], + events: finishEvents(tool, yield* toolCall(route, tool)), } }) @@ -185,17 +201,14 @@ export const finishWithInput = (route: string, tools: State if (!tool) return { tools } return { tools: withoutTool(tools, key), - events: [ - LLMEvent.toolInputEnd({ id: tool.id, name: tool.name, providerMetadata: tool.providerMetadata }), - yield* toolCall(route, tool, input), - ], + events: finishEvents(tool, yield* toolCall(route, tool, input)), } }) /** * Finalize every pending tool call at once. OpenAI Chat has this shape: it does - * not emit per-tool stop events, so all accumulated calls finish when the choice - * receives a terminal `finish_reason`. + * not emit per-tool stop events, so all accumulated calls finish independently + * when the choice receives a terminal `finish_reason`. */ export const finishAll = (route: string, tools: State) => Effect.gen(function* () { @@ -205,12 +218,7 @@ export const finishAll = (route: string, tools: State) = return { tools: empty(), events: yield* Effect.forEach(pending, (tool) => - toolCall(route, tool).pipe( - Effect.map((call) => [ - LLMEvent.toolInputEnd({ id: tool.id, name: tool.name, providerMetadata: tool.providerMetadata }), - call, - ]), - ), + toolCall(route, tool).pipe(Effect.map((event) => finishEvents(tool, event))), ).pipe(Effect.map((events) => events.flat())), } }) diff --git a/packages/ai/src/protocols/xai-images.ts b/packages/ai/src/protocols/xai-images.ts new file mode 100644 index 0000000000..a4fba9524b --- /dev/null +++ b/packages/ai/src/protocols/xai-images.ts @@ -0,0 +1,184 @@ +import { Effect, Encoding, Schema } from "effect" +import { Headers, HttpClientRequest } from "effect/unstable/http" +import { GeneratedImage, ImageModel, ImageResponse, type ImageRequestFor, type ImageRoute } from "../image" +import { Auth, type Definition as AuthDefinition } from "../route/auth" +import { + InvalidProviderOutputReason, + LLMError, + Usage, + mergeHttpOptions, + mergeJsonRecords, + type HttpOptions, +} from "../schema" +import { ProviderShared, optionalNull } from "./shared" + +const ADAPTER = "xai-images" +export const DEFAULT_BASE_URL = "https://api.x.ai/v1" +export const PATH = "/images/generations" + +export type XAIImageString = Known | (string & {}) + +export type XAIImageOptions = { + readonly n?: number + readonly aspectRatio?: XAIImageString< + | "1:1" + | "3:4" + | "4:3" + | "9:16" + | "16:9" + | "2:3" + | "3:2" + | "9:19.5" + | "19.5:9" + | "9:20" + | "20:9" + | "1:2" + | "2:1" + | "auto" + > + readonly aspect_ratio?: XAIImageString< + | "1:1" + | "3:4" + | "4:3" + | "9:16" + | "16:9" + | "2:3" + | "3:2" + | "9:19.5" + | "19.5:9" + | "9:20" + | "20:9" + | "1:2" + | "2:1" + | "auto" + > + readonly resolution?: XAIImageString<"1k" | "2k"> + readonly responseFormat?: XAIImageString<"url" | "b64_json"> + readonly response_format?: XAIImageString<"url" | "b64_json"> +} & Record + +type XAIImageBody = Record & { + readonly model: string + readonly prompt: string +} + +const XAIImageResponse = Schema.Struct({ + data: Schema.Array( + Schema.Struct({ + b64_json: optionalNull(Schema.String), + url: optionalNull(Schema.String), + revised_prompt: optionalNull(Schema.String), + mime_type: optionalNull(Schema.String), + }), + ), + usage: Schema.optional(Schema.Unknown), +}) + +export interface ModelInput { + readonly id: string + readonly auth: AuthDefinition + readonly baseURL?: string + readonly headers?: Record + readonly http?: HttpOptions +} + +const nativeOptions = (options: XAIImageOptions | undefined) => { + if (!options) return undefined + const { aspectRatio, responseFormat, ...native } = options + return { + aspect_ratio: aspectRatio, + response_format: responseFormat, + ...native, + } +} + +const invalidOutput = (message: string) => + new LLMError({ + module: ADAPTER, + method: "generate", + reason: new InvalidProviderOutputReason({ message, route: ADAPTER }), + }) + +const applyQuery = (url: string, query: Record | undefined) => { + if (!query) return url + const next = new URL(url) + Object.entries(query).forEach(([key, value]) => next.searchParams.set(key, value)) + return next.toString() +} + +export const model = (input: ModelInput) => { + const route: ImageRoute = { + id: ADAPTER, + generate: Effect.fn("XAIImages.generate")(function* (request: ImageRequestFor, execute) { + const http = mergeHttpOptions(request.model.http, request.http) + const requestBody = mergeJsonRecords( + { model: request.model.id, prompt: request.prompt }, + nativeOptions(request.options), + http?.body, + ) as XAIImageBody + const text = ProviderShared.encodeJson(requestBody) + const url = applyQuery(`${(input.baseURL ?? DEFAULT_BASE_URL).replace(/\/$/, "")}${PATH}`, http?.query) + const headers = yield* Auth.toEffect(input.auth)({ + request, + method: "POST", + url, + body: text, + headers: Headers.fromInput({ ...input.headers, ...http?.headers }), + }) + const response = yield* execute( + HttpClientRequest.post(url).pipe( + HttpClientRequest.setHeaders(headers), + HttpClientRequest.bodyText(text, "application/json"), + ), + ) + const payload = yield* response.json.pipe( + Effect.mapError(() => invalidOutput("Failed to read the xAI Images response")), + ) + const decoded = yield* Schema.decodeUnknownEffect(XAIImageResponse)(payload).pipe( + Effect.mapError(() => invalidOutput("xAI Images returned an invalid response")), + ) + const images = yield* Effect.forEach(decoded.data, (item, index) => { + const mediaType = item.mime_type ?? "application/octet-stream" + if (item.b64_json) + return Effect.fromResult(Encoding.decodeBase64(item.b64_json)).pipe( + Effect.mapError(() => invalidOutput(`xAI Images result ${index} contains invalid base64 data`)), + Effect.map( + (data) => + new GeneratedImage({ + mediaType, + data, + providerMetadata: + item.revised_prompt === undefined || item.revised_prompt === null + ? undefined + : { xai: { revisedPrompt: item.revised_prompt } }, + }), + ), + ) + if (item.url) + return Effect.succeed( + new GeneratedImage({ + mediaType, + data: item.url, + providerMetadata: + item.revised_prompt === undefined || item.revised_prompt === null + ? undefined + : { xai: { revisedPrompt: item.revised_prompt } }, + }), + ) + return Effect.fail(invalidOutput(`xAI Images result ${index} has neither image data nor a URL`)) + }) + if (images.length === 0) return yield* invalidOutput("xAI Images returned no images") + const usage = ProviderShared.isRecord(decoded.usage) ? decoded.usage : undefined + return new ImageResponse({ + images, + usage: usage === undefined ? undefined : new Usage({ providerMetadata: { xai: usage } }), + providerMetadata: usage === undefined ? undefined : { xai: { usage } }, + }) + }), + } + return ImageModel.make({ id: input.id, provider: "xai", route, http: input.http }) +} + +export const XAIImages = { + model, +} as const diff --git a/packages/ai/src/provider-error.ts b/packages/ai/src/provider-error.ts index bec21ac8b2..963c7599cf 100644 --- a/packages/ai/src/provider-error.ts +++ b/packages/ai/src/provider-error.ts @@ -16,13 +16,17 @@ import { const patterns = [ /prompt is too long/i, + /request_too_large/i, /input is too long for requested model/i, /exceeds the context window/i, + /exceeds (?:the )?(?:model'?s )?maximum context length(?: of [\d,]+ tokens?|\s*\([\d,]+\))/i, /input token count.*exceeds the maximum/i, /tokens in request more than max tokens allowed/i, /maximum prompt length is \d+/i, /reduce the length of the messages/i, /maximum context length is \d+ tokens/i, + /exceeds (?:the )?maximum allowed input length of [\d,]+ tokens?/i, + /input \(\d+ tokens\) is longer than the model'?s context length \(\d+ tokens\)/i, /exceeds the limit of \d+/i, /exceeds the available context size/i, /greater than the context length/i, @@ -34,11 +38,17 @@ const patterns = [ /input length.*exceeds.*context length/i, /prompt too long; exceeded (?:max )?context length/i, /too large for model with \d+ maximum context length/i, + /prompt has [\d,]+ tokens?, but the configured context size is [\d,]+ tokens?/i, /model_context_window_exceeded/i, + /too many tokens/i, + /token limit exceeded/i, ] +const exclusions = [/^(throttling error|service unavailable):/i, /rate limit/i, /too many requests/i] + export const isContextOverflow = (message: string) => - patterns.some((pattern) => pattern.test(message)) || /^4(00|13)\s*(status code)?\s*\(no body\)/i.test(message) + !exclusions.some((pattern) => pattern.test(message)) && + (patterns.some((pattern) => pattern.test(message)) || /^4(00|13)\s*(status code)?\s*\(no body\)/i.test(message)) export const isContextOverflowFailure = (failure: unknown) => failure instanceof LLMError diff --git a/packages/ai/src/providers/openai.ts b/packages/ai/src/providers/openai.ts index 73819eaf47..862333e2e5 100644 --- a/packages/ai/src/providers/openai.ts +++ b/packages/ai/src/providers/openai.ts @@ -1,12 +1,14 @@ import { AuthOptions, type ProviderAuthOption } from "../route/auth-options" import type { Route, RouteDefaultsInput } from "../route/client" import type { ProviderPackage } from "../provider-package" -import { ProviderID, type ModelID } from "../schema" +import { HttpOptions, ProviderID, ToolDefinition, mergeHttpOptions, type ModelID } from "../schema" import * as OpenAIChat from "../protocols/openai-chat" import * as OpenAIResponses from "../protocols/openai-responses" import { withOpenAIOptions, type OpenAIProviderOptionsInput } from "./openai-options" +import { OpenAIImages, type OpenAIImageString } from "../protocols/openai-images" export type { OpenAIOptionsInput, OpenAIResponseIncludable } from "./openai-options" +export type { OpenAIImageOptions } from "../protocols/openai-images" export const id = ProviderID.make("openai") @@ -22,6 +24,39 @@ export type Config = RouteDefaultsInput & readonly providerOptions?: OpenAIProviderOptionsInput } +export interface ImageGenerationOptions { + readonly action?: OpenAIImageString<"auto" | "generate" | "edit"> + readonly background?: OpenAIImageString<"auto" | "opaque" | "transparent"> + readonly inputFidelity?: OpenAIImageString<"low" | "high"> + readonly outputCompression?: number + readonly outputFormat?: OpenAIImageString<"png" | "jpeg" | "webp"> + readonly partialImages?: number + readonly quality?: OpenAIImageString<"auto" | "low" | "medium" | "high" | "standard" | "hd"> + readonly size?: OpenAIImageString< + "auto" | "256x256" | "512x512" | "1024x1024" | "1536x1024" | "1024x1536" | "1792x1024" | "1024x1792" + > +} + +export const imageGeneration = (options: ImageGenerationOptions = {}) => + ToolDefinition.make({ + name: "image_generation", + description: "Generate or edit an image using OpenAI's hosted image generation tool.", + inputSchema: { type: "object", properties: {}, additionalProperties: false }, + native: { + openai: { + type: "image_generation", + action: options.action, + background: options.background, + input_fidelity: options.inputFidelity, + output_compression: options.outputCompression, + output_format: options.outputFormat, + partial_images: options.partialImages, + quality: options.quality, + size: options.size, + }, + }, + }) + export interface Settings extends ProviderPackage.Settings { readonly apiKey?: string readonly baseURL?: string @@ -55,6 +90,17 @@ export const configure = (input: Config = {}) => { const responsesWebSocket = (id: string | ModelID) => responsesWebSocketRoute.with(withOpenAIOptions(id, modelDefaults, { textVerbosity: true })).model({ id }) const chat = (id: string | ModelID) => chatRoute.with(withOpenAIOptions(id, modelDefaults)).model({ id }) + const image = (modelID: string | ModelID) => + OpenAIImages.model({ + id: modelID, + auth: auth(input), + baseURL: input.baseURL, + headers: input.headers, + http: mergeHttpOptions( + input.http === undefined ? undefined : HttpOptions.make(input.http), + input.queryParams === undefined ? undefined : new HttpOptions({ query: input.queryParams }), + ), + }) return { id, @@ -62,6 +108,7 @@ export const configure = (input: Config = {}) => { responses, responsesWebSocket, chat, + image, configure, } } @@ -97,3 +144,4 @@ export const chatModel: ProviderPackage.Definition["model"] = (modelID export const responses = provider.responses export const responsesWebSocket = provider.responsesWebSocket export const chat = provider.chat +export const image = provider.image diff --git a/packages/ai/src/providers/openrouter.ts b/packages/ai/src/providers/openrouter.ts index 914d7c0a0b..10b7fdd1e9 100644 --- a/packages/ai/src/providers/openrouter.ts +++ b/packages/ai/src/providers/openrouter.ts @@ -41,13 +41,31 @@ export const protocol = Protocol.make({ schema: OpenRouterBody, from: (request) => OpenAIChat.protocol.body.from(request).pipe( - Effect.map( - (body) => - ({ - ...body, - ...bodyOptions(request.providerOptions?.openrouter), - }) as OpenRouterBody, - ), + Effect.map((body) => { + const sourceAssistants = request.messages.filter((message) => message.role === "assistant") + let assistantIndex = 0 + const messages = body.messages.map((message) => { + if (message.role !== "assistant") return message + const source = sourceAssistants[assistantIndex++] + const reasoning = source?.content + .filter((part) => part.type === "reasoning") + .map((part) => part.text) + .join("") + const reasoningDetails = Array.isArray(message.reasoning_details) ? message.reasoning_details : undefined + return { + ...message, + reasoning_content: undefined, + reasoning_text: undefined, + reasoning: reasoning && reasoningDetails && reasoningDetails.length > 0 ? reasoning : undefined, + reasoning_details: reasoningDetails, + } + }) + return { + ...body, + messages, + ...bodyOptions(request.providerOptions?.openrouter), + } as OpenRouterBody + }), ), }, stream: OpenAIChat.protocol.stream, diff --git a/packages/ai/src/providers/xai.ts b/packages/ai/src/providers/xai.ts index 321db97db1..c5d3220ee7 100644 --- a/packages/ai/src/providers/xai.ts +++ b/packages/ai/src/providers/xai.ts @@ -1,9 +1,10 @@ import { AuthOptions, type ProviderAuthOption } from "../route/auth-options" import type { RouteDefaultsInput } from "../route/client" -import { ProviderID, type ModelID } from "../schema" +import { HttpOptions, ProviderID, type ModelID } from "../schema" import * as OpenAICompatibleProfiles from "./openai-compatible-profile" import * as OpenAICompatibleChat from "../protocols/openai-compatible-chat" import * as OpenAIResponses from "../protocols/openai-responses" +import { XAIImages } from "../protocols/xai-images" export const id = ProviderID.make("xai") @@ -12,6 +13,8 @@ export type ModelOptions = RouteDefaultsInput & readonly baseURL?: string } +export type { XAIImageOptions } from "../protocols/xai-images" + export const routes = [OpenAIResponses.route, OpenAICompatibleChat.route] const auth = (options: ProviderAuthOption<"optional">) => AuthOptions.bearer(options, "XAI_API_KEY") @@ -41,11 +44,20 @@ export const configure = (input: ModelOptions = {}) => { const chatRoute = configuredChatRoute(input) const responses = (modelID: string | ModelID) => responsesRoute.model({ id: modelID }) const chat = (modelID: string | ModelID) => chatRoute.model({ id: modelID }) + const image = (modelID: string | ModelID) => + XAIImages.model({ + id: modelID, + auth: auth(input), + baseURL: input.baseURL ?? OpenAICompatibleProfiles.profiles.xai.baseURL, + headers: input.headers, + http: input.http === undefined ? undefined : HttpOptions.make(input.http), + }) return { id, model: responses, responses, chat, + image, configure, } } @@ -54,3 +66,4 @@ export const provider = configure() export const model = provider.model export const responses = provider.responses export const chat = provider.chat +export const image = provider.image diff --git a/packages/ai/src/route/auth.ts b/packages/ai/src/route/auth.ts index 9bbbb2b84c..6dc87d3a91 100644 --- a/packages/ai/src/route/auth.ts +++ b/packages/ai/src/route/auth.ts @@ -1,6 +1,6 @@ import { Config, Effect, Redacted } from "effect" import { Headers } from "effect/unstable/http" -import { AuthenticationReason, InvalidRequestReason, LLMError, type LLMRequest } from "../schema" +import { AuthenticationReason, InvalidRequestReason, LLMError, type HttpOptions } from "../schema" export class MissingCredentialError extends Error { readonly _tag = "MissingCredentialError" @@ -15,7 +15,7 @@ export type AuthError = CredentialError | LLMError type Secret = string | Redacted.Redacted | Config.Config export interface AuthInput { - readonly request: LLMRequest + readonly request: { readonly http?: HttpOptions } readonly method: "POST" | "GET" readonly url: string readonly body: string diff --git a/packages/ai/src/schema/events.ts b/packages/ai/src/schema/events.ts index f43251f670..5be1c4cf90 100644 --- a/packages/ai/src/schema/events.ts +++ b/packages/ai/src/schema/events.ts @@ -129,6 +129,7 @@ export const ToolInputStart = Schema.Struct({ type: Schema.tag("tool-input-start"), id: ToolCallID, name: Schema.String, + providerExecuted: Schema.optional(Schema.Boolean), providerMetadata: Schema.optional(ProviderMetadata), }).annotate({ identifier: "LLM.Event.ToolInputStart" }) export type ToolInputStart = Schema.Schema.Type @@ -149,6 +150,15 @@ export const ToolInputEnd = Schema.Struct({ }).annotate({ identifier: "LLM.Event.ToolInputEnd" }) export type ToolInputEnd = Schema.Schema.Type +/** A local tool call whose final input could not be decoded. */ +export const ToolInputError = Schema.Struct({ + type: Schema.tag("tool-input-error"), + id: ToolCallID, + name: Schema.String, + raw: Schema.String, +}).annotate({ identifier: "LLM.Event.ToolInputError" }) +export type ToolInputError = Schema.Schema.Type + export const ToolCall = Schema.Struct({ type: Schema.tag("tool-call"), id: ToolCallID, @@ -216,6 +226,7 @@ const llmEventTagged = Schema.Union([ ToolInputStart, ToolInputDelta, ToolInputEnd, + ToolInputError, ToolCall, ToolResult, ToolError, @@ -253,6 +264,8 @@ export const LLMEvent = Object.assign(llmEventTagged, { toolInputDelta: (input: WithID) => ToolInputDelta.make({ ...input, id: toolCallID(input.id) }), toolInputEnd: (input: WithID) => ToolInputEnd.make({ ...input, id: toolCallID(input.id) }), + toolInputError: (input: WithID) => + ToolInputError.make({ ...input, id: toolCallID(input.id) }), toolCall: (input: WithID) => ToolCall.make({ ...input, id: toolCallID(input.id) }), toolResult: (input: WithID) => ToolResult.make({ @@ -283,6 +296,7 @@ export const LLMEvent = Object.assign(llmEventTagged, { toolInputStart: llmEventTagged.guards["tool-input-start"], toolInputDelta: llmEventTagged.guards["tool-input-delta"], toolInputEnd: llmEventTagged.guards["tool-input-end"], + toolInputError: llmEventTagged.guards["tool-input-error"], toolCall: llmEventTagged.guards["tool-call"], toolResult: llmEventTagged.guards["tool-result"], toolError: llmEventTagged.guards["tool-error"], @@ -548,6 +562,10 @@ const reduceResponseState = (state: ResponseState, event: LLMEvent): ResponseSta return reduceToolInputDelta(next, event) case "tool-input-end": return reduceToolInputEnd(next, event) + case "tool-input-error": { + const { [event.id]: _finished, ...toolInputs } = next.toolInputs + return { ...next, toolInputs } + } case "tool-call": return reduceToolCall(next, event) case "tool-result": diff --git a/packages/ai/test/auth-options.types.ts b/packages/ai/test/auth-options.types.ts index 4f3d1da039..c430106789 100644 --- a/packages/ai/test/auth-options.types.ts +++ b/packages/ai/test/auth-options.types.ts @@ -1,7 +1,6 @@ import { Config } from "effect" -import type { Auth } from "../src/route/auth" +import { Auth } from "../src/route" import type { ModelFactory } from "../src/route/auth-options" -import { Auth as RuntimeAuth } from "../src/route/auth" import * as OpenAIChat from "../src/protocols/openai-chat" import * as AmazonBedrock from "../src/providers/amazon-bedrock" import * as Anthropic from "../src/providers/anthropic" @@ -28,7 +27,7 @@ type Model = { readonly id: string } -declare const auth: Auth +declare const auth: Auth.Definition declare const optionalAuthModel: ModelFactory declare const requiredAuthModel: ModelFactory const configApiKey = Config.redacted("OPENAI_API_KEY") @@ -76,9 +75,9 @@ OpenAI.responses("gpt-4.1-mini") OpenAI.configure({}).responses("gpt-4.1-mini") OpenAI.configure({ apiKey: "sk-test" }).responses("gpt-4.1-mini") OpenAI.configure({ apiKey: configApiKey }).responses("gpt-4.1-mini") -OpenAI.configure({ auth: RuntimeAuth.bearer("oauth-token") }).responses("gpt-4.1-mini") +OpenAI.configure({ auth: Auth.bearer("oauth-token") }).responses("gpt-4.1-mini") OpenAI.configure({ - auth: RuntimeAuth.headers({ authorization: "Bearer gateway" }), + auth: Auth.headers({ authorization: "Bearer gateway" }), baseURL: "https://gateway.example.com/v1", }).responses("gpt-4.1-mini") OpenAI.configure({ @@ -102,40 +101,40 @@ OpenAI.configure({ generation: { maxTokens: "many" } }) OpenAI.configure({ providerOptions: { openai: { store: "false" } } }) // @ts-expect-error auth is an override, so OpenAI rejects apiKey with auth. -OpenAI.configure({ apiKey: "sk-test", auth: RuntimeAuth.bearer("oauth-token") }) +OpenAI.configure({ apiKey: "sk-test", auth: Auth.bearer("oauth-token") }) OpenAI.chat("gpt-4.1-mini") OpenAI.configure({ apiKey: "sk-test" }).chat("gpt-4.1-mini") OpenAI.configure({ apiKey: configApiKey }).chat("gpt-4.1-mini") -OpenAI.configure({ auth: RuntimeAuth.bearer("oauth-token") }).chat("gpt-4.1-mini") +OpenAI.configure({ auth: Auth.bearer("oauth-token") }).chat("gpt-4.1-mini") // @ts-expect-error OpenAI chat selectors only accept model ids. OpenAI.configure({ apiKey: "sk-test" }).chat("gpt-4.1-mini", {}) // @ts-expect-error auth is an override, so OpenAI Chat rejects apiKey with auth. -OpenAI.configure({ apiKey: "sk-test", auth: RuntimeAuth.bearer("oauth-token") }) +OpenAI.configure({ apiKey: "sk-test", auth: Auth.bearer("oauth-token") }) // @ts-expect-error Azure requires at least one of `resourceName` or `baseURL`. Azure.configure() Azure.configure({ apiKey: "azure-key", resourceName: "resource" }).responses("deployment") Azure.configure({ apiKey: configApiKey, resourceName: "resource" }).responses("deployment") -Azure.configure({ auth: RuntimeAuth.header("api-key", "azure-key"), resourceName: "resource" }).responses("deployment") +Azure.configure({ auth: Auth.header("api-key", "azure-key"), resourceName: "resource" }).responses("deployment") // @ts-expect-error Azure model selectors only accept deployment ids. Azure.configure({ apiKey: "azure-key", resourceName: "resource" }).responses("deployment", {}) // @ts-expect-error auth is an override, so Azure rejects apiKey with auth. -Azure.configure({ resourceName: "resource", apiKey: "azure-key", auth: RuntimeAuth.header("api-key", "override") }) +Azure.configure({ resourceName: "resource", apiKey: "azure-key", auth: Auth.header("api-key", "override") }) Azure.configure({ apiKey: "azure-key", resourceName: "resource" }).chat("deployment") Azure.configure({ apiKey: configApiKey, resourceName: "resource" }).chat("deployment") -Azure.configure({ auth: RuntimeAuth.header("api-key", "azure-key"), resourceName: "resource" }).chat("deployment") +Azure.configure({ auth: Auth.header("api-key", "azure-key"), resourceName: "resource" }).chat("deployment") // @ts-expect-error Azure chat model selectors only accept deployment ids. Azure.configure({ apiKey: "azure-key", resourceName: "resource" }).chat("deployment", {}) // @ts-expect-error auth is an override, so Azure Chat rejects apiKey with auth. -Azure.configure({ resourceName: "resource", apiKey: "azure-key", auth: RuntimeAuth.header("api-key", "override") }) +Azure.configure({ resourceName: "resource", apiKey: "azure-key", auth: Auth.header("api-key", "override") }) Anthropic.configure({ apiKey: "anthropic-key" }).model("claude-haiku") // @ts-expect-error Anthropic model selectors only accept model ids. @@ -165,7 +164,7 @@ Google.configure({ apiKey: "google-key" }).model("gemini-2.5-flash", {}) GoogleVertex.configure({ apiKey: "vertex-key" }).model("gemini-3.5-flash") GoogleVertex.configure({ accessToken: "vertex-token", project: "project" }).model("gemini-3.5-flash") -GoogleVertex.configure({ auth: RuntimeAuth.bearer("vertex-token"), project: "project" }).model("gemini-3.5-flash") +GoogleVertex.configure({ auth: Auth.bearer("vertex-token"), project: "project" }).model("gemini-3.5-flash") // @ts-expect-error Vertex Gemini model selectors only accept model ids. GoogleVertex.configure({ apiKey: "vertex-key" }).model("gemini-3.5-flash", {}) // @ts-expect-error Vertex Gemini config accepts only one auth source. @@ -174,7 +173,7 @@ GoogleVertex.configure({ accessToken: "vertex-token", apiKey: "vertex-key", proj GoogleVertex.model("gemini-3.5-flash", { accessToken: "vertex-token", apiKey: "vertex-key", project: "project" }) GoogleVertexChat.configure({ accessToken: "vertex-token", project: "project" }).model("deepseek-ai/deepseek-v3.2-maas") -GoogleVertexChat.configure({ auth: RuntimeAuth.bearer("vertex-token"), project: "project" }).model( +GoogleVertexChat.configure({ auth: Auth.bearer("vertex-token"), project: "project" }).model( "deepseek-ai/deepseek-v3.2-maas", ) // @ts-expect-error Vertex Chat package settings do not accept API keys. @@ -187,12 +186,12 @@ GoogleVertexChat.configure({ accessToken: "vertex-token", project: "project" }). GoogleVertexChat.configure({ accessToken: "vertex-token", // @ts-expect-error Vertex Chat config accepts only one auth source. - auth: RuntimeAuth.bearer("vertex-token"), + auth: Auth.bearer("vertex-token"), project: "project", }) GoogleVertexResponses.configure({ accessToken: "vertex-token", project: "project" }).model("xai/grok-4.20-reasoning") -GoogleVertexResponses.configure({ auth: RuntimeAuth.bearer("vertex-token"), project: "project" }).model( +GoogleVertexResponses.configure({ auth: Auth.bearer("vertex-token"), project: "project" }).model( "xai/grok-4.20-reasoning", ) // @ts-expect-error Vertex Responses package settings do not accept API keys. @@ -205,16 +204,14 @@ GoogleVertexResponses.configure({ accessToken: "vertex-token", project: "project GoogleVertexResponses.configure({ accessToken: "vertex-token", // @ts-expect-error Vertex Responses config accepts only one auth source. - auth: RuntimeAuth.bearer("vertex-token"), + auth: Auth.bearer("vertex-token"), project: "project", }) GoogleVertexMessages.configure({ accessToken: "vertex-token", project: "project" }).model("claude-sonnet-4-6") // @ts-expect-error Vertex Messages package settings do not accept API keys. GoogleVertexMessages.model("claude-sonnet-4-6", { apiKey: "vertex-key", project: "project" }) -GoogleVertexMessages.configure({ auth: RuntimeAuth.bearer("vertex-token"), project: "project" }).model( - "claude-sonnet-4-6", -) +GoogleVertexMessages.configure({ auth: Auth.bearer("vertex-token"), project: "project" }).model("claude-sonnet-4-6") GoogleVertexMessages.configure({ accessToken: "vertex-token", project: "project" }).model( "claude-sonnet-4-6", // @ts-expect-error Vertex Messages model selectors only accept model ids. @@ -223,7 +220,7 @@ GoogleVertexMessages.configure({ accessToken: "vertex-token", project: "project" GoogleVertexMessages.configure({ accessToken: "vertex-token", // @ts-expect-error Vertex Messages config accepts only one auth source. - auth: RuntimeAuth.bearer("vertex-token"), + auth: Auth.bearer("vertex-token"), project: "project", }) diff --git a/packages/ai/test/fixtures/recordings/anthropic-compatible-messages/minimax-m3-anthropic-compatible-text.json b/packages/ai/test/fixtures/recordings/anthropic-compatible-messages/minimax-m3-anthropic-compatible-text.json new file mode 100644 index 0000000000..cddad69724 --- /dev/null +++ b/packages/ai/test/fixtures/recordings/anthropic-compatible-messages/minimax-m3-anthropic-compatible-text.json @@ -0,0 +1,40 @@ +{ + "version": 1, + "metadata": { + "provider": "minimax", + "protocol": "anthropic-messages", + "route": "anthropic-messages", + "transport": "http", + "model": "MiniMax-M3", + "tags": [ + "prefix:anthropic-compatible-messages", + "provider:minimax", + "protocol:anthropic-messages", + "text", + "golden" + ], + "name": "anthropic-compatible-messages/minimax-m3-anthropic-compatible-text", + "recordedAt": "2026-07-18T03:42:22.893Z" + }, + "interactions": [ + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://api.minimax.io/anthropic/v1/messages", + "headers": { + "anthropic-version": "2023-06-01", + "content-type": "application/json" + }, + "body": "{\"model\":\"MiniMax-M3\",\"system\":[{\"type\":\"text\",\"text\":\"You are concise.\"}],\"messages\":[{\"role\":\"user\",\"content\":[{\"type\":\"text\",\"text\":\"Reply exactly with: Hello!\"}]}],\"stream\":true,\"max_tokens\":40,\"temperature\":0}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream; charset=utf-8" + }, + "body": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"id\":\"1a0b363d0882af316faebcec4d4855a8\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"model\":\"MiniMax-M3\",\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":53,\"output_tokens\":0,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":114,\"service_tier\":\"standard\"},\"service_tier\":\"standard\"}}\n\nevent: ping\ndata: {\"type\":\"ping\"}\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Hello\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"!\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0}\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\"},\"usage\":{\"input_tokens\":53,\"output_tokens\":2,\"cache_read_input_tokens\":114,\"service_tier\":\"standard\"}}\n\nevent: message_stop\ndata: {\"type\":\"message_stop\"}\n\n" + } + } + ] +} diff --git a/packages/ai/test/fixtures/recordings/anthropic-compatible-messages/minimax-m3-anthropic-compatible-tool-call.json b/packages/ai/test/fixtures/recordings/anthropic-compatible-messages/minimax-m3-anthropic-compatible-tool-call.json new file mode 100644 index 0000000000..7e02d6e8ce --- /dev/null +++ b/packages/ai/test/fixtures/recordings/anthropic-compatible-messages/minimax-m3-anthropic-compatible-tool-call.json @@ -0,0 +1,41 @@ +{ + "version": 1, + "metadata": { + "provider": "minimax", + "protocol": "anthropic-messages", + "route": "anthropic-messages", + "transport": "http", + "model": "MiniMax-M3", + "tags": [ + "prefix:anthropic-compatible-messages", + "provider:minimax", + "protocol:anthropic-messages", + "tool", + "tool-call", + "golden" + ], + "name": "anthropic-compatible-messages/minimax-m3-anthropic-compatible-tool-call", + "recordedAt": "2026-07-18T03:42:23.876Z" + }, + "interactions": [ + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://api.minimax.io/anthropic/v1/messages", + "headers": { + "anthropic-version": "2023-06-01", + "content-type": "application/json" + }, + "body": "{\"model\":\"MiniMax-M3\",\"system\":[{\"type\":\"text\",\"text\":\"Call tools exactly as requested.\"}],\"messages\":[{\"role\":\"user\",\"content\":[{\"type\":\"text\",\"text\":\"Call get_weather with city exactly Paris.\"}]}],\"tools\":[{\"name\":\"get_weather\",\"description\":\"Get current weather for a city.\",\"input_schema\":{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}},\"required\":[\"city\"],\"additionalProperties\":false}}],\"tool_choice\":{\"type\":\"tool\",\"name\":\"get_weather\"},\"stream\":true,\"max_tokens\":80,\"temperature\":0}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream; charset=utf-8" + }, + "body": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"id\":\"6731ecc323233459d1792df9a733dd98\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"model\":\"MiniMax-M3\",\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":0,\"output_tokens\":0,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":404,\"service_tier\":\"standard\"},\"service_tier\":\"standard\"}}\n\nevent: ping\ndata: {\"type\":\"ping\"}\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"call_function_vkxtif4epmvm_1\",\"name\":\"get_weather\",\"input\":{}}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"city\\\": \\\"Paris\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0}\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\"},\"usage\":{\"input_tokens\":290,\"output_tokens\":27,\"cache_read_input_tokens\":114,\"service_tier\":\"standard\"}}\n\nevent: message_stop\ndata: {\"type\":\"message_stop\"}\n\n" + } + } + ] +} diff --git a/packages/ai/test/fixtures/recordings/anthropic-compatible-messages/minimax-m3-anthropic-compatible-tool-loop.json b/packages/ai/test/fixtures/recordings/anthropic-compatible-messages/minimax-m3-anthropic-compatible-tool-loop.json new file mode 100644 index 0000000000..e87e275c79 --- /dev/null +++ b/packages/ai/test/fixtures/recordings/anthropic-compatible-messages/minimax-m3-anthropic-compatible-tool-loop.json @@ -0,0 +1,60 @@ +{ + "version": 1, + "metadata": { + "provider": "minimax", + "protocol": "anthropic-messages", + "route": "anthropic-messages", + "transport": "http", + "model": "MiniMax-M3", + "tags": [ + "prefix:anthropic-compatible-messages", + "provider:minimax", + "protocol:anthropic-messages", + "tool", + "tool-loop", + "golden" + ], + "name": "anthropic-compatible-messages/minimax-m3-anthropic-compatible-tool-loop", + "recordedAt": "2026-07-18T03:42:25.248Z" + }, + "interactions": [ + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://api.minimax.io/anthropic/v1/messages", + "headers": { + "anthropic-version": "2023-06-01", + "content-type": "application/json" + }, + "body": "{\"model\":\"MiniMax-M3\",\"system\":[{\"type\":\"text\",\"text\":\"Use the get_weather tool exactly once. After the tool result, reply exactly: Paris is sunny.\"}],\"messages\":[{\"role\":\"user\",\"content\":[{\"type\":\"text\",\"text\":\"What is the weather in Paris?\"}]}],\"tools\":[{\"name\":\"get_weather\",\"description\":\"Get current weather for a city.\",\"input_schema\":{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}},\"required\":[\"city\"],\"additionalProperties\":false}}],\"stream\":true,\"max_tokens\":80,\"temperature\":0}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream; charset=utf-8" + }, + "body": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"id\":\"3807fa12f9ecb9357df511e099da6da0\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"model\":\"MiniMax-M3\",\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":0,\"output_tokens\":0,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":417,\"service_tier\":\"standard\"},\"service_tier\":\"standard\"}}\n\nevent: ping\ndata: {\"type\":\"ping\"}\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"call_function_yr64rwmre4gr_1\",\"name\":\"get_weather\",\"input\":{}}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"city\\\": \\\"Paris\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0}\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\"},\"usage\":{\"input_tokens\":303,\"output_tokens\":27,\"cache_read_input_tokens\":114,\"service_tier\":\"standard\"}}\n\nevent: message_stop\ndata: {\"type\":\"message_stop\"}\n\n" + } + }, + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://api.minimax.io/anthropic/v1/messages", + "headers": { + "anthropic-version": "2023-06-01", + "content-type": "application/json" + }, + "body": "{\"model\":\"MiniMax-M3\",\"system\":[{\"type\":\"text\",\"text\":\"Use the get_weather tool exactly once. After the tool result, reply exactly: Paris is sunny.\"}],\"messages\":[{\"role\":\"user\",\"content\":[{\"type\":\"text\",\"text\":\"What is the weather in Paris?\"}]},{\"role\":\"assistant\",\"content\":[{\"type\":\"tool_use\",\"id\":\"call_function_yr64rwmre4gr_1\",\"name\":\"get_weather\",\"input\":{\"city\":\"Paris\"}}]},{\"role\":\"user\",\"content\":[{\"type\":\"tool_result\",\"tool_use_id\":\"call_function_yr64rwmre4gr_1\",\"content\":\"{\\\"temperature\\\":22,\\\"condition\\\":\\\"sunny\\\"}\"}]}],\"tools\":[{\"name\":\"get_weather\",\"description\":\"Get current weather for a city.\",\"input_schema\":{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}},\"required\":[\"city\"],\"additionalProperties\":false}}],\"stream\":true,\"max_tokens\":80,\"temperature\":0}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream; charset=utf-8" + }, + "body": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"id\":\"92f8a1e86f29946eb2699d40a088fc08\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"model\":\"MiniMax-M3\",\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":41,\"output_tokens\":0,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":430,\"service_tier\":\"standard\"},\"service_tier\":\"standard\"}}\n\nevent: ping\ndata: {\"type\":\"ping\"}\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Paris\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" is sunny.\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0}\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\"},\"usage\":{\"input_tokens\":41,\"output_tokens\":4,\"cache_read_input_tokens\":430,\"service_tier\":\"standard\"}}\n\nevent: message_stop\ndata: {\"type\":\"message_stop\"}\n\n" + } + } + ] +} diff --git a/packages/ai/test/fixtures/recordings/openai-images/generates-an-image.json b/packages/ai/test/fixtures/recordings/openai-images/generates-an-image.json new file mode 100644 index 0000000000..41bf97ed4b --- /dev/null +++ b/packages/ai/test/fixtures/recordings/openai-images/generates-an-image.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "metadata": { + "tags": [ + "prefix:openai-images", + "provider:openai", + "protocol:openai-images" + ], + "name": "openai-images/generates-an-image", + "recordedAt": "2026-07-19T14:41:43.188Z" + }, + "interactions": [ + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://api.openai.com/v1/images/generations", + "headers": { + "content-type": "application/json" + }, + "body": "{\"model\":\"gpt-image-1-mini\",\"prompt\":\"A simple flat black circle centered on a plain white background.\",\"size\":\"1024x1024\",\"quality\":\"low\",\"output_format\":\"jpeg\",\"output_compression\":10}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json" + }, + "body": "{\n \"created\": 1784472103,\n \"background\": \"opaque\",\n \"data\": [\n {\n \"b64_json\": \"/9j/4AAQSkZJRgABAQAAAQABAAD/63FxSlACEQAAAAEAAHFnanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAAcUFqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjg1MzZkMmU1LWI5OTgtNDgwMi1iYTIyLWM5MmU2MWYyMWM4ZAAAACEcanVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAAJ0Wp1bWIAAAA7anVtZEDLDDK7ikidpwsq1vR/Q2kTYzJwYS5pY29uAAAAABhjMnNosbfWxozdajRf38VdnN0JzAAAABdiZmRiAGltYWdlL3N2Zyt4bWwAAAAJd2JpZGI8c3ZnIHdpZHRoPSI3MTYiIGhlaWdodD0iNzE2IiB2aWV3Qm94PSIwIDAgNzE2IDcxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUwOC43NDkgMzE3LjM5OUM1MTYuNzc3IDI4Ny4zMTQgNTA4Ljk5MSAyNTMuODg0IDQ4NS4zODkgMjMwLjI4MkM0NjEuNzg4IDIwNi42ODEgNDI4LjM2IDE5OC44OTUgMzk4LjI3MyAyMDYuOTIzQzM3Ni4yMzEgMTg0LjkyOCAzNDMuMzkgMTc0Ljk1NiAzMTEuMTQ4IDE4My41OTZDMjc4LjkwNiAxOTIuMjM0IDI1NS40NSAyMTcuMjkyIDI0Ny4zNiAyNDcuMzYxQzIxNy4yOTEgMjU1LjQ1MSAxOTIuMjMzIDI3OC45MSAxODMuNTk1IDMxMS4xNDlDMTc0Ljk1NyAzNDMuMzkxIDE4NC45MjcgMzc2LjIzMiAyMDYuOTI0IDM5OC4yNzRDMTk4Ljg5NiA0MjguMzU5IDIwNi42ODMgNDYxLjc4OSAyMzAuMjg0IDQ4NS4zOTFDMjUzLjg4NSA1MDguOTkyIDI4Ny4zMTMgNTE2Ljc3OSAzMTcuNDAxIDUwOC43NUMzMzkuNDQyIDUzMC43NDUgMzcyLjI4NiA1NDAuNzE3IDQwNC41MjUgNTMyLjA3OUM0MzYuNzY3IDUyMy40NDEgNDYwLjIyMyA0OTguMzg0IDQ2OC4zMTMgNDY4LjMxNUM0OTguMzgzIDQ2MC4yMjQgNTIzLjQ0IDQzNi43NjYgNTMyLjA3OCA0MDQuNTI2QzU0MC43MTYgMzcyLjI4NSA1MzAuNzQ3IDMzOS40NDMgNTA4Ljc0OSAzMTcuNDAyVjMxNy4zOTlaTTQ3MC44OTkgMjQ0Ljc3NkM0ODYuODkyIDI2MC43NyA0OTMuNDg4IDI4Mi42MDEgNDkwLjY4NyAzMDMuNDEyTDQxNS41NzcgMjYwLjA0NkM0MTIuNDExIDI1OC4yMTggNDA4LjUwOSAyNTguMjE4IDQwNS4zNDUgMjYwLjA0NkwzMTcuNDAxIDMxMC44MlYyNzcuNTI2QzMxNy40MDEgMjc1LjE5MSAzMTguNjUyIDI3My4wMDUgMzIwLjY3NiAyNzEuODM3TDM4Ny42NDQgMjMzLjE3NEM0MTQuMTc4IDIxOC4zNTMgNDQ4LjM0NiAyMjIuMjIzIDQ3MC45MDEgMjQ0Ljc3Nkg0NzAuODk5Wk0zNTcuODM3IDMxMS4xNDRMMzk4LjI3NSAzMzQuNDkxVjM4MS4xODVMMzU3LjgzNyA0MDQuNTMyTDMxNy4zOTggMzgxLjE4NVYzMzQuNDkxTDM1Ny44MzcgMzExLjE0NFpNMjY0Ljc3NiAyNjkuNjkzQzI2NS4yMDcgMjM5LjMwNSAyODUuNjQ0IDIxMS42NDkgMzE2LjQ1MyAyMDMuMzkzQzMzOC4zIDE5Ny41NCAzNjAuNTA1IDIwMi43NDQgMzc3LjEyNyAyMTUuNTczTDMwMi4wMTQgMjU4LjkzN0MyOTguODQ4IDI2MC43NjQgMjk2Ljg5OCAyNjQuMTQ0IDI5Ni44OTggMjY3Ljc5OFYzNjkuMzQ2TDI2OC4wNjUgMzUyLjY5OUMyNjYuMDQzIDM1MS41MzEgMjY0Ljc3NiAzNDkuMzUzIDI2NC43NzYgMzQ3LjAxN1YyNjkuNjkxVjI2OS42OTNaTTIwMy4zOTEgMzE2LjQ1NEMyMDkuMjQ0IDI5NC42MDggMjI0Ljg1NCAyNzcuOTc4IDI0NC4yNzYgMjY5Ljk5OVYzNTYuNzNDMjQ0LjI3NiAzNjAuMzg0IDI0Ni4yMjYgMzYzLjc2MyAyNDkuMzkyIDM2NS41OTFMMzM3LjMzNyA0MTYuMzY1TDMwOC41MDMgNDMzLjAxM0MzMDYuNDgxIDQzNC4xODEgMzAzLjk2MSA0MzQuMTg4IDMwMS45MzkgNDMzLjAyTDIzNC45NzEgMzk0LjM1N0MyMDguODY4IDM3OC43ODkgMTk1LjEzOCAzNDcuMjYxIDIwMy4zOTEgMzE2LjQ1NFpNMjQ0Ljc3NSA0NzAuOUMyMjguNzgxIDQ1NC45MDYgMjIyLjE4NiA0MzMuMDc1IDIyNC45ODYgNDEyLjI2NEwzMDAuMDk2IDQ1NS42M0MzMDMuMjYzIDQ1Ny40NTcgMzA3LjE2NCA0NTcuNDU3IDMxMC4zMjggNDU1LjYzTDM5OC4yNzMgNDA0Ljg1NlY0MzguMTQ5QzM5OC4yNzMgNDQwLjQ4NSAzOTcuMDIyIDQ0Mi42NzEgMzk0Ljk5NyA0NDMuODM5TDMyOC4wMjkgNDgyLjUwMkMzMDEuNDk1IDQ5Ny4zMjIgMjY3LjMyNyA0OTMuNDUyIDI0NC43NzIgNDcwLjlIMjQ0Ljc3NVpNNDUwLjg5NyA0NDUuOTgyQzQ1MC40NjYgNDc2LjM3MSA0MzAuMDI5IDUwNC4wMjcgMzk5LjIyIDUxMi4yODNDMzc3LjM3MyA1MTguMTM2IDM1NS4xNjggNTEyLjkzMiAzMzguNTQ3IDUwMC4xMDJMNDEzLjY1OSA0NTYuNzM4QzQxNi44MjYgNDU0LjkxMSA0MTguNzc1IDQ1MS41MzIgNDE4Ljc3NSA0NDcuODc3VjM0Ni4zMjlMNDQ3LjYwOSAzNjIuOTc3QzQ0OS42MzEgMzY0LjE0NSA0NTAuODk3IDM2Ni4zMjMgNDUwLjg5NyAzNjguNjU5VjQ0NS45ODVWNDQ1Ljk4MlpNNTEyLjI4MiAzOTkuMjIxQzUwNi40MjkgNDIxLjA2OCA0OTAuODE5IDQzNy42OTcgNDcxLjM5NyA0NDUuNjc2VjM1OC45NDZDNDcxLjM5NyAzNTUuMjkyIDQ2OS40NDggMzUxLjkxMiA0NjYuMjgxIDM1MC4wODVMMzc4LjMzNiAyOTkuMzExTDQwNy4xNyAyODIuNjYzQzQwOS4xOTIgMjgxLjQ5NSA0MTEuNzEyIDI4MS40ODcgNDEzLjczNCAyODIuNjU1TDQ4MC43MDIgMzIxLjMxOEM1MDYuODA1IDMzNi44ODcgNTIwLjUzNiAzNjguNDE1IDUxMi4yODIgMzk5LjIyMVoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgoAAAFFanVtYgAAAEFqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmFjdGlvbnMudjIAAAAAGGMyc2jTzBVj0c9qhdqI+zcNzNnPAAAA/GNib3KhZ2FjdGlvbnOCpGZhY3Rpb25sYzJwYS5jcmVhdGVkZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVpZ3B0LWltYWdlZ3ZlcnNpb25ncHJlLTIuMHFkaWdpdGFsU291cmNlVHlwZXhGaHR0cDovL2N2LmlwdGMub3JnL25ld3Njb2Rlcy9kaWdpdGFsc291cmNldHlwZS90cmFpbmVkQWxnb3JpdGhtaWNNZWRpYaJmYWN0aW9ubmMycGEuY29udmVydGVkZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBaAAAVEmp1bWIAAABJanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5jZXJ0aWZpY2F0ZS1zdGF0dXMAAAAAGGMyc2hBaJ4w0oiVWAcVQa2bxYMgAAAUwWNib3KhaG9jc3BWYWxzgnkKdE1JSUgwd29CQUtDQ0I4d3dnZ2ZJQmdrckJnRUZCUWN3QVFFRWdnZTVNSUlIdFRDQjZhSVdCQlFjKzFlaXdCdEx4cmVlaTFWMWVqMVVmbVJEWFJnUE1qQXlOakEzTVRnd09UQXlNelJhTUlHWU1JR1ZNRWt3Q1FZRkt3NERBaG9GQUFRVTM0STNVMTVUMkRPeDRBUTlKRFh4ZGViaENoa0VGRGs5RUVmY2w0K3ZpSHROY3hnZHplWHVwS1VxQWhBTHBmenBEbkNNOGdXQU1lNUVIR1J6Z0FBWUR6SXdNall3TnpFNE1Ea3dNak0wV3FBUkdBOHlNREkyTURjeU5UQTVNREl6TTFxaElqQWdNQjRHQ1NzR0FRVUZCekFCQmdRUkdBOHlNREUyTURjeU1EQTVNREl6TkZxaEl6QWhNQjhHQ1NzR0FRVUZCekFCQWdRU0JCRFFoUFRtcS9zREs4K0VmNVV0QkNBRE1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQmdRQkd0NVgzZ0hKaEhZVWRsYktHL2RsS0x0a1BCdkkzRE1CYnRTRmNvU0htWXAzU1N5S2E5MERLekwrdEk0aHd4aVpvY3pMTVRnT0tRT0FaS0loUkthRThNR3g5RXRrSzFBdWZIcWJhbHhocTlWbERpYmRwbmdKbnVBeHpCVTVEbE9qaXJMVFJUZnlnTkNyWlZoTm9TSDRUNzE4R0xrc0Z4NXBWWThaMUZYdVd2Q3phbXRnU0dnaXNLQjFUL0xpU1VieVdEL1hKYWplRDBpKzA0a1JFbXZoajBLcGt1N3pKK3ZkK2ErSU5ic1dBZ01lVzdUanU5VnFTUWUwdVcySEtoZCt3WEF3R3l3dEZXM1dEVTZ6Ukh6dkVSNUtRY0ZPcmU4VFQ3Z1ZUV1dubW4vbEVmRy9LaWhZOC9HbjhJazYxVXNROCtZZEJpK2MzbWs1ckRzVmJCWllJZ2dtVzF3dmFCQlVKTHhzTVlhbFFyd01JcG1JT2Zob3VZNFZzc3VndzdyWnRlb0oxa0xKUXdWQjRPOVhDQTN3ODA4KzI2ZVhISWFYNDl0WnlZd0Jhd1pBNjUzbWpBazBHemNkbGtMTXk3ZjUxVzZMN25ybXh4ZlBSa2lGRVV3T21EUk4xcUVpOUNjYWQ0YUIwczRtYktUR1dKODI4ekczRHR0MFY4WnFOMU15Z2dnVXhNSUlGTFRDQ0JTa3dnZ01Sb0FNQ0FRSUNFR055NnZkY0hFMnhKNlZmZDkyZmRoc3dEUVlKS29aSWh2Y05BUUVMQlFBd1NqRWhNQjhHQTFVRUF3d1lVMU5NTG1OdmJTQkRNbEJCSUVsRFFTQlNNU0F5TURJMU1SZ3dGZ1lEVlFRS0RBOVRVMHdnUTI5eWNHOXlZWFJwYjI0eEN6QUpCZ05WQkFZVEFsVlRNQjRYRFRJMk1ERXdNakl4TVRFMU5Wb1hEVEkzTURFd01qSXhNVEUxTkZvd1RURUxNQWtHQTFVRUJoTUNWVk14RVRBUEJnTlZCQW9NQ0ZOVGJDQkRiM0p3TVNzd0tRWURWUVFERENKVFUwd3VZMjl0SUVNeVVFRWdTVU5CSUZJeElFOURVMUFnVW1WemNHOXVaR1Z5TUlJQm9qQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FZOEFNSUlCaWdLQ0FZRUF6NEp2aXlOdDJhcVBaRTMyR0Y3LzRLcHhzcXlPSExMY3BhWEllR1FxbjVvMXJGZXJLSGJEMmx3SG5pYXlGTUxoYUVGMFVTQ1JTZUFZRXNnWThNWFYyM1Qwd2RSemZuZ1VQV2ZvSVR0b09pWW5IYVRrNllpbm50dFpZMGUvSnpmcVBnc1BUaUg4c3NMdnNpS0VZZmYzS3VPdDZRa1VJQ1pYWVdUemFvQ3NmbVU2cm5QZFROMm9hUmM3eFhkWTZkU3R5UFVGbnpTU1Q5MFZFcFIra0UySW9BSlBUNVQzMUhZbkdhWVlwdGpUb3lydDYyRGplVllKQVI5SmxLVmdjOHZDYkVIenozcDVsSzBSOVArUmVPZlRzMXR3Mi9LT2dkd0xpc3hINHFKS3ZCSU11cVZTVldWWlBhZUhnL1Y2dzFMOHpuWDA2SG5Fa1ZyMGM1VExkQnIrZllPTm55QWg5VWYrUTF2UERGNHRybnI2WFFMVVdjMnI1NmxMMk5VWmx3d3MwV01ZdmVvNkhOdjRWMThwV3RMTnJtUlFuc1AwZ0NMVGlxMml1NHR4bmVHNEpiUmVVblhsK3B3c0p3aTF3a3hjTzFETnJLMmdHRUtlZUpMZFpEc3RQclphT3BTSGNJMmFNeXZYN2dwUU15ekY0MjZ3a0Fvb2EzRmR4OVo1NE9ZbkFnTUJBQUdqZ1ljd2dZUXdEQVlEVlIwVEFRSC9CQUl3QURBZkJnTlZIU01FR0RBV2dCUTVQUkJIM0plUHI0aDdUWE1ZSGMzbDdxU2xLakFQQmdrckJnRUZCUWN3QVFVRUFnVUFNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01KTUIwR0ExVWREZ1FXQkJRYysxZWl3QnRMeHJlZWkxVjFlajFVZm1SRFhUQU9CZ05WSFE4QkFmOEVCQU1DQjRBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFESGx0V3QvZGh2WHd0c3FmZWtmajY3Y215L3YzaDdtZ1hqbk5hYWhVbHNNYm10Y2kzUnBHU29BZ00yV2lPR0diYm5YVnFDVHFXOGludFJXVkNtVTJyOHlMTUtNNmlSVVh6UXExMU5td3I5SDl2L3NuWWRSbmpSQkQ4dGtEMEY0ZmpHc05oeUhUSFVieHBNWnhyUk5BZTBhaC9HQU5mdFFCNC9IVDFvViszRUp2cHBqL3N1SGZvWWhsajhLZ2N4WGgvQlVKbmJkcUtYc2NhMGRsd1E2TjVubzBhWFNJY0NUby90djNrbGsvZG0xV3JBc09yOC92bEtpR0NuVTdiQXVpaXdiU2lNeCtxZXdocmFJbGJEYWtEeDcwbVpCTEs1cUZVdks5MU1DUHBpOWZMTEV0ZWtITkw4VUs1WkpLNmxDTWQ4Vndza3RucFc5RG1XNitYc3llMWpCOGF0V0ppbFFlRHMzQ29RcVFvZmhidlBmZkxzTElGSmZnMzFFbmRqRnNrcTE1Um5RZ01NRThkbkhBWmdnWlpyL2tVZnlyY3Q1VDE5SlFXWEN2QXhQcTFkMGpWdkgySWtZaTZZTjRCcStPWkptejdQNG5OdHltOXdJcU9COC95RE5na1hqUzQ3eFFkaitxWVBTZ3B5U2FYMHVWbkJwaThtNDlITHQrUDBlNnp2TXlPcTFVazhJcVNPVFpTNkJXOTZUQWNVZDJGZVBRTWNpR2xEak9YcUgrc1RCL0NGTGh2eCt2NUxjVDRaamlnVzlYa05FaEZjeUFlRHVpTis0UWhoVHAzclg1UGpaV21tVm55L0V6TWR4R0U3WWo2MVhYUnR0bSt4ODBlOUFFSzd3UXVpejA4a3l4Rk1XYVRuSE51N3luRVQ4UGNMbkF2bm4ybmxreHhVVXkKNE1JSUhvd29CQUtDQ0I1d3dnZ2VZQmdrckJnRUZCUWN3QVFFRWdnZUpNSUlIaFRDQng2SVdCQlJhVWJmZ2JZY1JnTTFRY3R5QnY2d1JvM2NpOGhnUE1qQXlOakEzTVRnd09UQXlNelZhTUhjd2RUQk5NQWtHQlNzT0F3SWFCUUFFRkthaUt0REhIckRSY0dvUGQ4Vnp5YU1yMTNGb0JCVDhLa3AxT29ENm1XT1Q4SE5YN0w2VHNIM0Rld0lVSnl0anlNd2RUUzJiaEZGeWJQU2NYakpScnQ2QUFCZ1BNakF5TmpBM01UZ3dPVEF5TXpWYW9CRVlEekl3TWpZd056STFNRGt3TWpNMFdxRWpNQ0V3SHdZSkt3WUJCUVVITUFFQ0JCSUVFRUdNd1dOekozZnJ1d1REellMOXptSXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnR0JBRVZmKzI2RVRmTElUS25mb29MaHlBK3VtR2RaUWl6Y3JQRlBiTmcrc2k2TG5pZHRSS3BGbUJVbXpQY2tYZGpoWnlmeEtDMUFtVE1xSnVSQ3UxcTVFRWNPY2hVeEI0WHNXczJMbFBWQlZDWnpiS25TV3hUZ0NtcGV6TlkxQVUzMzhtOU9xbGZ6M3RsYjJwNmZFZGlJUXpKa0VCSGJRRFloV0RJTWozRHI2VUFTOXFrbDNBb09HcWx1MndtWVVNMWRRM1IyUnRBaGNtY3VQeW95NFRhTFRuRUl1aDBiVVE2QUNzL0NNYlUzQy9RWitPVUx2ZDU0eWpoanI0cEhWMUtndzU4MmtiVWNSTnNna2JkbXQxd0FzcU1sL3BDSmdZa1oxT3lobU9hNWJWT3JxSGY0T2ZXditYdE5aN21WVFY4cWFiNy9jOVVaTVRWdWl1QllCb2NLSUJoOG1ITmUzM0xDbGpmOUI5YUNwS3NBMWxPQnB0OXROOFd3SzFPV1ptWGpzUmcyRWQ3TXRvQUZMQ3BtTkhqT2d0eWYxNU9kbHdrZjZla2ZwV21HaEVEckdhMnBFenVHbEhnS1VWOVBrTTVKc3EvRHdCN1FmcDVYWVU5Yml4THVuVXBwOGZOeEdQSXZrOWVFa0dveUN4M3BMSlA2ZWxrdysyWkpCNS8rYlo3UVI2Q0NCU013Z2dVZk1JSUZHekNDQXdPZ0F3SUJBZ0lRUVNiU3cwWlZ6N09HazRFYUg4MGUvekFOQmdrcWhraUc5dzBCQVFzRkFEQlBNU1l3SkFZRFZRUUREQjFUVTB3dVkyOXRJRU15VUVFZ1VsTkJJRkp2YjNRZ1EwRWdNakF5TlRFWU1CWUdBMVVFQ2d3UFUxTk1JRU52Y25CdmNtRjBhVzl1TVFzd0NRWURWUVFHRXdKVlV6QWVGdzB5TmpBME1UWXhOREUyTWpOYUZ3MHlOekEwTVRZeE5ERTJNakphTUVveEN6QUpCZ05WQkFZVEFsVlRNUkV3RHdZRFZRUUtEQWhUVTB3Z1EyOXljREVvTUNZR0ExVUVBd3dmVTFOTUxtTnZiUzFETWxCQkxWSnZiM1F0TWpBeU5TMVNVMEVnTFNCcE1UQ0NBYUl3RFFZSktvWklodmNOQVFFQkJRQURnZ0dQQURDQ0FZb0NnZ0dCQUt2ZytmQXNrM0gzcTI3NVNjYVEyWElJQk5GNzN4RGFrN0RjSnpWOGlkaWlFZ2FIR0RRZXdpcXFjRlFRWkQ5ZTNiSE1adTQyWlY0VXVrN293ZUxjSUNZZnl1aVEyd2xSeEtwMDFkTFJmVTVYOUp2a3BoczBSVStUT21kTGRZSXF0dUZJNHlHcmNaeXQwN2lWS2QzdHRlQUdxc1MyaTZmVGJRc095LzE1VU1iaWNXWG5mK29iZGM0N2cyZVo4MWVPVWNqamoyT0lrMUdxcDZUMmFmcHVEbm1UMTJ0RFY0dm9pVi9YM3N0ZXNvVERwaFpEaWVtdGthaTd5OHhyZlJSYnRTd09obDdvaitqU2VZUk9WMmkvQm03MXd5ZVkxM3AyempnWmQvcDRFNTVueXRSNndwLy9ycisxTUFOWklVZ0NPUXNHUzg3b3I1Sjl3VGpKQ1k5VkE1QTFreVJ3cjUxQ2NEV2FyZUJXaUhXMXRaNDhHRjZtRXdJWm51NXFJMEgzK3pBdFlFRlFHM3FaT1BCUG93RDhvbmR3bmJkNjE5Rnc5cGRwTWNaQTdTcnVFKzZUSjc1SmNGWUpkOUlLMnRFNURDMXFyc3gyNStTUElndEgwOCtab1lCL0NVR3RxRTZVdk8ySFVySFNPVVFjU2t2emZMci9QcmplV3M3TEU1OWlrd0lEQVFBQm8zZ3dkakFmQmdOVkhTTUVHREFXZ0JUOEtrcDFPb0Q2bVdPVDhITlg3TDZUc0gzRGV6QVBCZ2tyQmdFRkJRY3dBUVVFQWdVQU1CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUpNQjBHQTFVZERnUVdCQlJhVWJmZ2JZY1JnTTFRY3R5QnY2d1JvM2NpOGpBT0JnTlZIUThCQWY4RUJBTUNCNEF3RFFZSktvWklodmNOQVFFTEJRQURnZ0lCQUp4dElUWHh2R1c3ZlJOaVhkalNnc2poQW5MVGRCZXd4R2U4anpHdUo3RjNFbC9sWU93RXQ5RVhaNjlSek5jdE9QeGRTckFHeHlkdC9wUTRzeG9mYkdsNVZkcWg4QVlLN3NJTzRmQURRbnpQNzRoTnNSL3pXYmdvQmk3Ymk4OEI1QzB4aGFWSm1mTkxLNlZFbEQ3QjhpOFVRZGIwcGROOU1CaTFtRmI1WUM1NmgxS3JWdGhnQUkxa1gyYnJ0ZmFsQ0ZXbDBHZjRtRjhEZVJad2IwSVFPWmFtN0JuMUZQa3Y1bHpPNTZLMlMrQTZ5eDFiUDBUczVIQUFRNThJd3ZQQ1RsMTNxWTgrRXl1SXp0YmxCQkR4aG5UNFJKdVlpQld6UDFFMnhXR3VqbDc0YUc2UGFacDFEOWxSWnN4U1VMZEFGZUZlSi96QjJJbitmVk9PRllXVjlXT2JUUDRveFYrbDNSTEVLNUhMS0FXVXVQLy9ZTzFtSll2VUlyUW9DeGY2RElFaHV2SEx2T2luU0xmTUF5VTdhM1EvTHV1dks4V2F3UGd3L0lFWlRlbEVISmtlSVkrd1FGdnRIUW91NTBKMXBublhhWUt6ZFgyRFd2Tk94c0JET2tTRW5WMTQ3VktSQ2VlZ21nS1hKUXpEVzh5eHUxTU5nZkowekE1aGFBRmZiUE0vWlVmTkJQTGt5RXJVK256Ym05bjhPbkdES1ltUk8wSW9WNTdEeHFrdS9DUURTNGYrVTRQN0JLS0t6TTFiOVdVZm1BNTZkK1FFMnFrLzNiRzFtb3NQMFQ5K1NLWWdGZXZ2VkVyakhzRHNUUzJwaFptZSsyNVVLZ2F0MEdUTE1ib1VIL0pUVTRqbk8vY2Y4aVRVTkY0bnpXbVBSOXh6aE1KUnZLRDlRajF5AAAAw2p1bWIAAABAanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5oYXNoLmRhdGEAAAAAGGMyc2gW8uYcKrcTGYVO8ppj/ymNAAAAe2Nib3KlamV4Y2x1c2lvbnOBomVzdGFydBRmbGVuZ3RoGXFzZG5hbWVuanVtYmYgbWFuaWZlc3RjYWxnZnNoYTI1NmRoYXNoWCCQ5R3DJZMOLLwKxwdtEyg3fV6rqytFlIYuHhew8uDCymNwYWRJAAAAAAAAAAAAAAADG2p1bWIAAAAnanVtZGMyY2wAEQAQgAAAqgA4m3EDYzJwYS5jbGFpbS52MgAAAALsY2JvcqZqaW5zdGFuY2VJRHgseG1wOmlpZDo4OWEzZDMwOS03Y2I3LTQ2NzUtODBhZC05OTg1ODlmZTYxN2N0Y2xhaW1fZ2VuZXJhdG9yX2luZm+kZG5hbWV4GE9wZW5BSSBNZWRpYSBTZXJ2aWNlIEFQSWRpY29uomN1cmx4JHNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaWNvbmRoYXNoWCCV7INHPNs7+F46V9vBNJcvYGrKCPqi1PqT48LpjzP5tWtzcGVjVmVyc2lvbmUyLjIuMHdvcmcuY29udGVudGF1dGguYzJwYV9yc2YwLjc5LjJpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjg1MzZkMmU1LWI5OTgtNDgwMi1iYTIyLWM5MmU2MWYyMWM4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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9lkBAJd4wfo596pD29f7AN2f7lXdB5MF+9K8w4gHdXnauUhLLSQPvnscsi7jDkAERniWQeAOX6EaJyDtVFYLx4u6jRSl30+8OZ2xmdnLou37NafCbGQ8JTJPNp/dKxGc6tMmqjt+D19xBFPWaYfxVT2WlRZho0VDJVcpIAzNQrZrb7uY+qyEfpyGaKmBmSc8a7EdpcLEsegJxJfnbi/QzFp2rbThqAYrxFpehEiHNBMAq1CZeMfz9HLJ9HV1myaHjUaacMCNExG+/NFXUq8iIn3lHF4GHPWKYTb7goBH4p/VumUCzOOEJlBxZynKEz1iMLoKd2BfHpvea8M1uW/dAYS1umD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAQABAADASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAMEBQEC/8QAMRABAAIBAgQEAwgDAQEAAAAAAAECAwQREiExUSIyQWETcYEjNEJDUpGhsQUUcsEk/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ALoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/9k=\"\n }\n ],\n \"output_format\": \"jpeg\",\n \"quality\": \"low\",\n \"size\": \"1024x1024\",\n \"usage\": {\n \"input_tokens\": 18,\n \"input_tokens_details\": {\n \"image_tokens\": 0,\n \"text_tokens\": 18\n },\n \"output_tokens\": 272,\n \"output_tokens_details\": {\n \"image_tokens\": 272,\n \"text_tokens\": 0\n },\n \"total_tokens\": 290\n }\n}" + } + } + ] +} diff --git a/packages/ai/test/fixtures/recordings/openai-responses-images/generates-and-edits-an-image-with-the-hosted-tool.json b/packages/ai/test/fixtures/recordings/openai-responses-images/generates-and-edits-an-image-with-the-hosted-tool.json new file mode 100644 index 0000000000..b1c24341ae --- /dev/null +++ b/packages/ai/test/fixtures/recordings/openai-responses-images/generates-and-edits-an-image-with-the-hosted-tool.json @@ -0,0 +1,50 @@ +{ + "version": 1, + "metadata": { + "tags": [ + "prefix:openai-responses-images", + "provider:openai", + "protocol:openai-responses" + ], + "name": "openai-responses-images/generates-and-edits-an-image-with-the-hosted-tool", + "recordedAt": "2026-07-19T14:57:16.284Z" + }, + "interactions": [ + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://api.openai.com/v1/responses", + "headers": { + "content-type": "application/json" + }, + "body": "{\"model\":\"gpt-5-mini\",\"input\":[{\"role\":\"user\",\"content\":[{\"type\":\"input_text\",\"text\":\"Generate a simple flat black triangle centered on a plain white background.\"}]}],\"tools\":[{\"type\":\"image_generation\",\"action\":\"auto\",\"output_compression\":10,\"output_format\":\"jpeg\",\"partial_images\":0,\"quality\":\"low\",\"size\":\"1024x1024\"}],\"tool_choice\":{\"type\":\"image_generation\"},\"store\":false,\"include\":[\"reasoning.encrypted_content\"],\"reasoning\":{\"effort\":\"medium\",\"summary\":\"auto\"},\"stream\":true}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream; charset=utf-8" + }, + "body": "event: response.created\ndata: {\"type\":\"response.created\",\"response\":{\"id\":\"resp_028d7fb658c136b3016a5ce59cd0e8819f804427824478bc8c\",\"object\":\"response\",\"created_at\":1784472988,\"status\":\"in_progress\",\"background\":false,\"completed_at\":null,\"error\":null,\"frequency_penalty\":0.0,\"incomplete_details\":null,\"instructions\":null,\"max_output_tokens\":null,\"max_tool_calls\":null,\"model\":\"gpt-5-mini-2025-08-07\",\"moderation\":null,\"output\":[],\"parallel_tool_calls\":true,\"presence_penalty\":0.0,\"previous_response_id\":null,\"prompt_cache_key\":null,\"prompt_cache_retention\":\"in_memory\",\"reasoning\":{\"context\":\"current_turn\",\"effort\":\"medium\",\"mode\":\"standard\",\"summary\":\"detailed\"},\"safety_identifier\":null,\"service_tier\":\"auto\",\"store\":false,\"temperature\":1.0,\"text\":{\"format\":{\"type\":\"text\"},\"verbosity\":\"medium\"},\"tool_choice\":{\"type\":\"image_generation\"},\"tool_usage\":{\"image_gen\":{\"input_tokens\":0,\"input_tokens_details\":{\"image_tokens\":0,\"text_tokens\":0},\"output_tokens\":0,\"output_tokens_details\":{\"image_tokens\":0,\"text_tokens\":0},\"total_tokens\":0},\"web_search\":{\"num_requests\":0}},\"tools\":[{\"type\":\"image_generation\",\"background\":\"auto\",\"model\":\"gpt-image-2\",\"moderation\":\"auto\",\"n\":1,\"output_compression\":10,\"output_format\":\"jpeg\",\"quality\":\"low\",\"size\":\"1024x1024\"}],\"top_logprobs\":0,\"top_p\":1.0,\"truncation\":\"disabled\",\"usage\":null,\"user\":null,\"metadata\":{}},\"sequence_number\":0}\n\nevent: response.in_progress\ndata: {\"type\":\"response.in_progress\",\"response\":{\"id\":\"resp_028d7fb658c136b3016a5ce59cd0e8819f804427824478bc8c\",\"object\":\"response\",\"created_at\":1784472988,\"status\":\"in_progress\",\"background\":false,\"completed_at\":null,\"error\":null,\"frequency_penalty\":0.0,\"incomplete_details\":null,\"instructions\":null,\"max_output_tokens\":null,\"max_tool_calls\":null,\"model\":\"gpt-5-mini-2025-08-07\",\"moderation\":null,\"output\":[],\"parallel_tool_calls\":true,\"presence_penalty\":0.0,\"previous_response_id\":null,\"prompt_cache_key\":null,\"prompt_cache_retention\":\"in_memory\",\"reasoning\":{\"context\":\"current_turn\",\"effort\":\"medium\",\"mode\":\"standard\",\"summary\":\"detailed\"},\"safety_identifier\":null,\"service_tier\":\"auto\",\"store\":false,\"temperature\":1.0,\"text\":{\"format\":{\"type\":\"text\"},\"verbosity\":\"medium\"},\"tool_choice\":{\"type\":\"image_generation\"},\"tool_usage\":{\"image_gen\":{\"input_tokens\":0,\"input_tokens_details\":{\"image_tokens\":0,\"text_tokens\":0},\"output_tokens\":0,\"output_tokens_details\":{\"image_tokens\":0,\"text_tokens\":0},\"total_tokens\":0},\"web_search\":{\"num_requests\":0}},\"tools\":[{\"type\":\"image_generation\",\"background\":\"auto\",\"model\":\"gpt-image-2\",\"moderation\":\"auto\",\"n\":1,\"output_compression\":10,\"output_format\":\"jpeg\",\"quality\":\"low\",\"size\":\"1024x1024\"}],\"top_logprobs\":0,\"top_p\":1.0,\"truncation\":\"disabled\",\"usage\":null,\"user\":null,\"metadata\":{}},\"sequence_number\":1}\n\nevent: response.output_item.added\ndata: {\"type\":\"response.output_item.added\",\"item\":{\"id\":\"rs_028d7fb658c136b3016a5ce59d154c819f85755db041801f6a\",\"type\":\"reasoning\",\"content\":[],\"encrypted_content\":\"gAAAAABqXOWdHS2Caj6M3NNE0u_5cAteF-ddZxQ_bD8o8hg48tu51gsxk9_NWz6Vjzcj7cgCJb_qHopoZdYXt8mAlpreQsxAUKu9WLxCfgsmLuDoZDE38gl6HA7xz-YTW8VOWunsj3PF1MJZFzYIjJuZtPiVU8JtP_vabifALFe5cQlqLI3zkNHEbRdDy4hncruHJoAstZcpaVUSkqI_mivfCFYvW6qfqLquHZJx13KQEh-mpALPsJGKfg7r2t0U3z6BTxeCcuYwlvUQIHYBbABysMv_OCc-xXcsRTalMh41EeorMOIoz-CQh_QCQAxbfo3nMIdCJH4KoR8bjd4n8wu_Rz0wu_t5K6fBrO4ksr8pEY1EXBG_qc_XfM4OWQjQ2y6U3q41pmGZ4Ywh7FKfz0cp2J08BbwB1eBb7WvmZWaevUMNV5jtoU61tswFJdUoLDxJ2u_n_BTv9YLhXa3xlU0ZnsoVzfwuC5l8JrdpCMERfFdpWVplLxftZwFj5vgGtYH0buosjyEWeoN8COn-zUs7f7EDHOg_vICo3b4vF8lox2REJnC9Kr0OJI4FqyTOs_VDLCT3hUWG3oHseCmLKJbCD5JYkmmp9TUu64bpzJR1isMbrCBEpwKU3px-pc33HeayLsdC6kMCtN0eJ6G7FwElV6tdmxGyAX2zGzgWsMhvgCwuLrDLDkP-2K2z9jKFhXO5iXZqsERY08RGX0_utEFJOXD4tFDdrwlOMNyVzRtTaGGuhajhFqMYe_urqDG1YljAlRleDy5ALNZHGXu_Q78c3PMfBkAxGtVKqX5gTCd2JpuYTiEsrMktqj8Kqri9asQ65Bye6IOtmKjXOXVioDV7USsMDJ72f-nIpvWsdgMkhR1WG786qBwShudSk0KRyIMMMGrNVuMBoIhY1_cyLd2zLgClH5U_aWR5qngSOX8xquak4KBQFp8=\",\"summary\":[]},\"output_index\":0,\"sequence_number\":2}\n\nevent: response.output_item.done\ndata: {\"type\":\"response.output_item.done\",\"item\":{\"id\":\"rs_028d7fb658c136b3016a5ce59d154c819f85755db041801f6a\",\"type\":\"reasoning\",\"content\":[],\"encrypted_content\":\"gAAAAABqXOWpnAP0UBYvlSBekoHJCZH4q8xzRle879t05tnZpveHS-lRgcpzHWBcNwm8Qs8hBSGdQZgdOM-EKf0EJvBo27ynkLRL18hL29zaj_TqlNVZW3P9a0cij_UGUhhh7JFDXUJcxn2CNJs6hfZIs5vjS3zd0QvDSW-iCRPqT_NaT-VJIyXwZaZI8txwYY-buZg83BwkZidY1AGGv12xkyKCn7vhrTf_JM3tDgiWIIOd5bhaYLDlId3n_IKixf5mo8CKN0oyZyPz01XK82EwKVg8rkpdwW7XOiirQ7Ro0-oT_0TJCRa2uYxAyjzCoYWNXPsouRiyter3YdetjJkUR0-yNwmsJVv9ofkaeL5x5R7OcrA_YMsuqyXyyPIl1vpDqy7iA_U_4gwDnDJi5mOg3Y5fE4a3MwewwQgVcZx427UhTLltyaPCWZIcNVhey57hJxCt3RjWZGSWV-GMV2GC2dD5dHlXQiiCJ_Mkr3xyPXdjTyoe94KQlsfmO267RN3NyW74L2TqPEP_HnR0TyNtg-nClTYQPuhvx34nzqZQresJwksxHQU_W9AoBD2DTQMVL9DAoayVy5aB0fyyzwrT82xLkMP6XredNROM-qJSuBWRVVsG4f_mFriYv0yFgjwrtohLlGpPKEbjIsEKBFCyfQ2ERIVYYv8I80EaVTwPuKljMJFcYDa065ZNh8k-rFhg2Q_iQB-yLPH7kx4de3qvYrxZ7DTY2U5wVvZdPmW7sYzqN-8RnktWmUx-fSoGxVbClW6c7Gn_GkE9FmZ8qYcCRizpzSWfec41lS2dD-9g0Biow04K65k6R9Z1-TU-JMNgEn6t_1W5sOL8izzdXOTVZXxe-zlFbm_PNWpE4rMRuL8usVOB-cD4NVACqBvYQOrZ9Cp7scYfDX9KockxtPOpy6gKsn1VJdNWnwNgH_aKKrSO8WFePD3Mcw167HcPQpZ_wnJouWaPrFWKC_k0Iz6CFHvuu_WoTiREItFp10FibQEe-kQJ1PANwxWhjwBKsW7zJDOhhEtWrYpPUZq4eA6OyZgAzVQ6KMvgP38ZR0NxFoi4qwbcPoNY_Fp3AvcmTKLdQiOQ54DSM24LDQbT2LusMaQjr6pKuOwrj5glaGjK4JmBGu_6J05TIdZ6V7WLn39R3PU8tVI3RdEpam3Go6wBjU7yu4cp5O4eWc3XzKzh8bI5f1i_-toPgtJxodv6xGFMErYxxXgD5nWLo_0ELXd4SlcVKGA6o9vpctrkE9fNdWL6CDpXn6mh444E5gJMiPWGG5ZsdtolN1EVgesNwQBwFu4rkWQ5OwzT2liqOW4hEQTHI6W-L2jmKxejveBX0ai2FCmHBrb8Zboi17-CdK8yr3A6oUqUh6dcu5s_xiMAT-TyhOlCdWKJav-wjutKx4IJdACOSKZV6ePToTg43Hsm5PPKWgyg-hdb0zE6uCKKcjYT31zRqYCqhhrWbkAh4Dj7vZgNyZ0RhLfDcVZ5Oa-vAstRTv0MHzv9wOSitIQDMQdw8AJNQwgJfzc_TVtGNOi0-cR7tJjrcZZrMrLDXscgQc3MbQXoKtiiXNuR6nxX53rFFsEVC-J8T2T0pLFqsI9neSh69DGhdXS2PvggM1GD1ibNPbwcY_2uKPlImYoy8eyq1uXZ1GmgIfuFSV4wwct59BfV2l_WQ6nNOwmjCsY_KOO3yOkmdpQHOOwNbiHWpQ0CQ-KVnzpxqz9PaHpBhJwgcnOrAs9LXnWCDOETgnR8tc8MYQEAxgWLvEC1wpqGrOSZSCWoaZTUtQ52IrNJNB3qazGeIgOJSi_C42U2mnPhC34Bxcdutp0lYf_NVmiPzPil7L-qBSoyvAcrhJ6RM_39z77lXgNr7Zrl6wNbYej3qo6t8MoHyCxtnMHO8L_Dk2ug0EGl65TK6Hp3lqPTPY57XaXfxVkjUZczaKpxP4HeFAbRIVYh5Ygdi1beUUMqtgyG8_UF23ccgTLcwN4NminghUqdj0RJtZNxP8RIr-3F4qpWCAmTqthfZ1ncdaRHv90j0EnxoGdoYBY9jgkqFE8BOLrhD41ykwBSSiqx9JQTeMwZ5yLVYJSxshUhwP1OBeu97vaS6gfDqpG2anRXpf9dcqH5P-RCrPB1E-BphEQw3BFDeNC57Bwb4Sbt29wZTu87yqQO6WIrUOLK2psyG6lllPrlOz0MYko-rJMnDIGiQ92S4ddeh5Kqklia1q9SHIP36mxqN86gBczqJKmvutiIwBnZb8yLSNy04ppCb9fhqCFaIMazEXChkxwkQv2730Ffx4wxMRqJJbSFvC_4yg3sMgNPgBwbHGIpQTRh4R_4fKGaFnT1dNRrrPUraRcQZQSIpV81G3mxtyRWxxKyCZ-TWwOvE7SmTZu84UFPEUFA5MpLsM4SPw_loZTCTNs-4zkNbKD3dEYJjDafU3xS0eEZoBmHaGsG6UuRNjq_Es2qqOb7HPvHQU7OsDuvNju7t-RfBDFydfkTrBODvDLkKr8Y9erd81wzq8vwHswO-qT90coHnacAn7-AI6Dx-rR0wkSwJl9HIQ7pC5-zDHyDAa-Rt7gXZJxyEyoRdB6Xr-9xIrLvyWHjhtmmqY7kw9OpObgjw031cKnmcYtvykXT9dG4vb_ZJosy0froYxZMMlnmV3TT27Vhm85apQ53wCM2D8lp8xc4yUlkSBF-Mob28bm_z8gaymSIeMkMk46TROw86nKqJG_MwjE7394LbTQ4AQL63UdabVbJ-vE7w_D7ke3RQ93xFC2GYybqTQqA-oL4TGW4GTANjHNBYGFPrZLQgB57QWNsK0zOJ2w6X8zcF4pl4fkmOlRFUhjFMmOhCRRbuW3U-2h8012xhpYhTTGpWR0ODa891aN7NlxAC8Y6nMsYhrht0mJltMcep5D8lnXEytkWlIOnOVCDsj5jjYIgj5ZfLcmFcuoYFBr5XOGkt1PyCUOSPL8_WQOkousHn3sdONSyUmqpGar1YGsMAiBt-f4ZldsxN9pTslTwP_duhMPzGfRLXF4frnGBzaZHvxnV4eBCtEprRZAdM50bbD6QOhsudTVfZyv6I1c9XJgnxSVvfak4-niMex8lZ22pmnvi5-METukxdt0T9ZgI9CdPCs5aU3GpAZ9T1WMqRYox4MsuRAlIUGlyRDWa94fvtpoOi_6KI0r6-sM859y7xIaILPRdY0P2wnqVxtVOXhpi10mEU3BFz9eaBC1GifG7IzHH4rIqtohpK-Xi3J1U2iNEdO5JHqVkubzth-3iv0InsMYYrM3W0jHn9sbMYAGOvyFZLBIFStpCmLbIgBLT16G0nCEZWwaZZzv8o_o7yghO4I8f-G5G1u-55Lfa2P5073ILkQXyl-pYp8n3P2lrOHb3Ujq3KOZ78YNgKwUtg7JiVRs3Xz6AurppkNlauEDOOmIjY8OtcbPxFXoDrC1qXv5DZSD1RnTJSScF4YGXeFW1shMK6l6BI3Mi1_gQ4isftA_Ow-WDCZ1grgazDcpKOYzbKI8UBJwOLkueNx3ieQ9HTaVg3rQ2eLN_znh_StlW0GH0vZQCi2fBONUXD1OueNnKpkGy-iz5iXL7XOAnkLbLHqujcNhkL1pGJGQOHYaahnXb8gXMy6I7tIuGiIfe7GV8X3u0hac2s6ViKt4gyh1njIGdjYCyvm1bXu7pNNGUkdm2D-CsYEyjRwkeGYC4lVwbRqMM8IWB-baNLioS28dkviSTIX96a5FVrhzUGPe0TdLgCP77SSky09BXweWwXpYDeh0me1EAbI9ePGouKLvheoltIEF9C5m5XR-CKcaTPz0K1UBxWQLy8IWtU5D2F_Jhirc0nPsALWXvUxAZRMP1Jt4fGomIo8sX97PaDNXPalG2tc2lBxDHbI2g_AwzZGJj-97iMxTWuav3EJlqQThL1QAQ65kicLUeeZGvjT8vNK3AIKfp5tU6XimhtyZ2ezdZdywL68AbqVT6h6b3RTZufY7L82c96RRzx4csMp6WdGFHGtBvE7ZrCUQbxfE1MNfax2HlEViX4iIN1LA6rUisiG4ZGimb_YjkbtWW1MKVFbPUHAPVqOb4-w2vG5FVIhtdvhdk1KY2rFN6nSuR0rHKu3R5DZpAsplAVkGwi7EmFmPC7TbpS7fJDODubr69KD64xptKC9ebP1DbYZyRWMTwHnD7n2BVQT4vJtu4IaMwjlGduJyV-nV6r5k0WCwk5jwuV_S9Z5TZzPuJMFh7FhTzDEQzFPCzyjRfIYJIFOVjdWZKe2BPqi0r671xO0XoBCl-EHxqZ9QAU_ufz4PmhiL5WVcDG4ta0iNXzkQMcNIjfx0M79_f_DtFgfUPxaAVcOSFIupx2nN8nFqWqzmR1NbB6Swlssw62iYYenC9aCBGzdwxmun-EukSp83B_Mt9sJKk5ejeslc8iEFUTclxWcJkNjdbx8qvqTWzG2fedqcTsWdbk3Ezlr6uH-V9Wg4C8poFiRyztGfRxdwOFki_a3RM1M4DihrJMyca-FRrvudnp-AiJsgaxGRObHwnADvSCRh4cUrjOBYNMHaGiznk4MpEUEu3S2L5q1Slnc5cFs8Ww99H2Br-AN-wI5wYX6EmP-L5olxFUeMFNqELrk3FQJ8xEi_3yjYXT4mO2F_AoHzOVE3cdITR6LKmPI81_z7T2sOxszEnOn-hQNeC-BpwMVJ9bKgM1W3BbQGFBBB_izGAq0WGgajr-ryJ2tSsC5ijOl5usxis-oFwTmE7QVdW17JmUGZ9wqgFhkQv_O84so5d8_cRHzPuPIWRRygmXrS2PKNm1k5n67WC1oNa6mq6eO8IXAqeAyIugBIe0fVySnB-4v8f7Ca9ASIrY1Zt0jnH0ls9FLN3fIWfXaGTjZHp1uE2129YCyyFkLuRHRlrbphyOFmQps-oVikkB3pwbV3ZtLYNAEjsRVpUMQ1LuKt3NFIswavOq-Gnv1tYaOH325YxAJ_TUJBKKXmwHyXmecymZgDDuv7K5xGkg1Hpiz0Hubl3rbgJj-5Ms5eC_636-2Rj_FIBc_Vs2phBsSvYqgIYprENgd7Mx-CRI9eNE4R7qGKoAwyx2ccojKP5tmqnaO3Dg3T297hnUrHy4o49f9M3NOTOjGLhQTatAPXdbAgeoHZZEud3ZfYMtpAnqH1RLtqt6Lr8K7YbcnL9an0HM7f-Cv6C1Jgl6IU-axkPyLLTG7Az0AYvRDDvh4RadwKHiAVAoOqRODbEwfwrnsBoCbBRr1ahCE21lFnaMPKUectY45Fq6BPdTIgM3_kznWPVlu6HCuj72sQyRKykYHtSuekx_M4gG2pnbprvt6nLKewuOYCbMQAk7B8s8yCwT6TqT2o9gGxSHoH1NgwAWXVEVjZ14upn1wHWq7sR729Ph7jvHwIiRsALVpAo5En6vd6uvcA8MA8G8-Q9yC3G7wuGw51IhknZphdWRLZ99veJCqACplM8MW3trtMI1isYnuGG5VU9LIgddQCLHuSqJCfWf7uEudvy43nZ-u9LKHPqIYCu_V-WzPTbqFLCb2QeFXetvG4SZahpiwRW6gnP8ZDLXLOPuqpPGPTgf14kHRbHnXmYTA3-IitF4ZTFXUrg-mCJTOawfsnIt7SdCo57HA-dznt5M3ZvsRIvHrRLjMyb_NbvUPTdu7-YD4PbZ_tFduovizKb4XdZIq_OnNtKku2jy0DYb52Gz-5T9OEm2we2Dqd-WvGxy55Ezke75C8MjLgEeJL3eqQeqdGiiXpXtP3LWl99iKbKpnaxTHipFUAtxyf6cZ68gReZqIPIwj-hnqmSiwJj-9fpAMtzhNJ-893myYRH-KgfMnObHsFH9k3vB-D5CalDkLcK_SlS1g9GzeAKBPAwLpQPIQRHQTUxIQBsGnkiALF4d97AJTCETJsBQ4L2ajxnUs1uZe7l4Y_06vL-nfwH5q_e1t08aUwGvbbrPBzB_eOFbc_20SJwNmJjAPF_gl1ar_o0fbTZUWBfXmUqbWwsiiVu2EQLjfuOE8Y2-Scfl3Hyq3HUejJki6HU2j1hQNhqi8opi-lTksY3pvsa53LGQ8JFBuceRdRafgEIKa57kKIDvvBCRv87qz96AoS3hElBx9U_zEAgLKXFoMh1RAx_Xl1irUqLuR_7m-1xsj_ZVaHZm_3NZHATchHIleNlzMpjVNTl4k9rxn3VGMKQwb8BqIN-zLnwasI9eWLSUMZQJyQINk90ai96rayuG1OUQ4kis_XhiJMEQaAu8FJ0kpSk8tOlV0wmBI3LkV1WtfRPOdImKB6wo28uTByjU36yVivVGaa7LL6fVzJcelFRad6CEXLFKKLcAe3YQjN6-ANW_kmM7ogFN6flMbKJRpqWsWCOClECB60YK-oJtoHsYQBI8dqKNvpC9droooGQi3HyeXIXVk2v7qt3Oh3GiacQSir6UKrI4MCGmCd-KlHFVoNPmrK_LSwwK3NRDpxPtQa9D-rV4DNK4iTfOQGAXJM7l0DDMGxTS0ZtLA12hDmym2WIkvP6y_ldy4EUXIYko8c6aswFHKN-ww_Z9RJ4UZw73GDHMFELoxVN_OIgPPFI6QxpkCnommAkCUFTksjKcyWzFVEj6NhfzfzntfkGT3-e5TU-i_jbq30DKes8btyA3NcyRTOAWNY7GwbpQL78dg_iLJwjOndZA-kdwAk2zj0MdszoIVNWmMce0AtUqumKDn6qNNUnaTnpc3Nac7jO50CDTPkIVtFiTnNNABtHeoV4hD6ztJhkta1IB4tdAeqCm6ei20lhxqhbzYj_j3VXyzbMmbJ-dIBcdegvQDVPMGJxCJ0SwQp2QxKtWT3n3y2mZiXYxHsnIaXcX5TsuNStBTAXfTVrc-Ru4K77uoDMY7L1APh86Wi_DM6FjOktfH-8j7fFfQOygrpifx6asvnWn16Si29HxLiDD4bSs4gcx_l4E--aM0mRNPqgQrMM3mqyRpaR_yUJxvyy6nZQwg-dmpMDB2o2gLYpSCxQatzTiI80T3l8Pc6E-br3_dPXeRFdDabps-muLlfNMaxTqFmburJW6qxYaks4cm_wVxYOeyeQewLc_t3hE9d5JhKOVUSeF79kmFMHSV7dqjz7PB_Tut5s8paNNtjvKa0LHtoQ38gTbe2m6xjNKrBPZqM_0PoM3Er7pFbuDFC8GknJ5XiD9rmtfN95uJOiCbueEwgXKf2nDnbAMjfQk__fmEFD7SqaT7b5-nxPcXUH9aqozjN0GEafvGQnLOifqaedlk5ICDfrA71dGZJH_W2GCFBJe1Cb_wsDz61OAyltrtWBadyHn3LtS-pmlpYIjLOOB-y7p6bIsG1zIoA-p_lLDfq_vv5RdN9_V3OExBulH4AQLN8mKXoUwM1gfMBF2k37NJBp5qwAt7b_idBlHMo2RRoEWKtdNLjQh6fVAJGMAij2WHIAON_M8SorJ7crC12eULM6lOMDilxUGO3c8yvmhdYt5n5cAagEQshORZagIbcatjdSUguNi9aZxkCt0baBwG5FJGFIgwRBYupW63uZydMxDAsFEr5JAPUDQXDZvVKzh_rl3HpVKRI7KhL0v6ZpC_PNzKBdTjhJlMzlzk8YmWjr7fBwjPRjqQ3Iw0QoQlpJQlwetMK_egWAt9SqHcYc_HAHZvLm2rqJKgWj0Fr59dtt80gpKnkyWYM6C7Z9oWqP29TOJfv_loB4I_jN7caZuTq37F0ewkwdndGm4v_pSFPAIwHAgSfESkhBe5OQ0IUVXV92pVOYkQgBtW0JbIP1z87NbKJwG3yi1m4dXHHj2waDUId2dF9j9rRteFchaIa4QuuBx8k53CzkEhk26z6vyAfXdbzbV4O46FexQWezGUr5ngXydfpueLUPLCyXZrR1l7KCcPx-4WWsCMdYtMbsK9TQIT3SJlXGAw_f9nSeybJGjMV3t1T_oJYCuLaWFrr6ICoqPDBI5S8JO9YHnEcVvR7t7CS2iEVd7IBXxpyKyqSp6Rfq-1u8ZX8JIoqgwI18_iZ9gkZg5XpJZS0oDXLDrWg4I7zeqKBO-ex4GWFSB_5Gq1KarIdZkQcwagdDTEAcj0VeajV6wCbseKtrfhl9342JBrjFuOARd2jYuhb1266rmRIDjTk37OQkF1bvJPKuWcAzYyIeoEKRbQXd4N2XGnp_HDrvOxrMZ3dTsgX_JzoQVydTQSI3HQg2U42KzzFJRxWWN_MnC_aGFLJ3PmjGI791L6eFefoXM54IqoXoqgXa0VoHw_6r4u5I2zQ1Bqvmp-u3Yf_2GK-L8pgwQsnb5uGS_9VnLunuNXiMllgEA9yUzLh3yUBCyRvxm-uzFILkzAhN-ejEu3Ckm8qrYdKz0mRk4ugSHVhH6VkRZFj6-nv6inK_6ll1c3RpVfItDxHI3Y8xN3zAGwmJ3ruRx2voSDP2_qfiGumN4N2AdUvP_hr7r1s5HjGC7lX8EMAMyzeTwpp8c8GL9vi_F9PRL6ohQei6X_FbMcAvxDkagsLvRElOTbV8xe4bUSr4TiIxypOGir5ro94Wmv54tLKzs46jz7_glOFCPePOG9NRoypvolrF7vV8UOTbYP7RrltTPCxdtSvhjiOVHmut2Ms7axXBsWEP7nsQVFvhw6UaQCz4W17QlerlKZMFIqB3b6ZL78s5BVMT6HApD-kLW4YBhssNJUC0D3o4nhBst_aOWItZJCeOU8pwd7lYI1yk1mN2EULAoc97-QvS-FbkP2JVrdsVfNk9qeNNVJl68EGK6_eBORUwe4DEMdoWeBZgmJjkZTGQPXLScOvfCN5gyen14ig_z0ubXPZuDccKwdVD_MfGInuSyYCj6sAUnX4x1TBbQviBcSdY0hTm5VaHCfjPE54bnKnJCpc4c6L43vJFp7-FuKgS2mvFflZU0mY8kPC9_dWYP4qOIg3YmZVmhM1nR4cTo1P4fknaPHrmsA-RJQeh9zlZePiEs7bYrJBwAe864kK7o4PeyYF4e-dhlw_ci7K3aXegSBXgLwT4p1uvMChN2PeYmZAB0ph12BYUbi0J9BuZA3k-TlJB_2OClTIxUlGTGXVF3IHrCOIS01k9Yf0SpdJIiw3CsBrMissa-cJi4jXlGIM-S6ODRUmk1W3gQvhFlco=\",\"summary\":[]},\"output_index\":0,\"sequence_number\":3}\n\nevent: response.output_item.added\ndata: {\"type\":\"response.output_item.added\",\"item\":{\"id\":\"ig_028d7fb658c136b3016a5ce5a91890819fa161dd35e5e7c1b1\",\"type\":\"image_generation_call\",\"status\":\"in_progress\"},\"output_index\":1,\"sequence_number\":4}\n\nevent: response.image_generation_call.in_progress\ndata: {\"type\":\"response.image_generation_call.in_progress\",\"item_id\":\"ig_028d7fb658c136b3016a5ce5a91890819fa161dd35e5e7c1b1\",\"output_index\":1,\"sequence_number\":5}\n\nevent: response.image_generation_call.generating\ndata: {\"type\":\"response.image_generation_call.generating\",\"item_id\":\"ig_028d7fb658c136b3016a5ce5a91890819fa161dd35e5e7c1b1\",\"output_index\":1,\"sequence_number\":6}\n\nevent: response.image_generation_call.partial_image\ndata: {\"type\":\"response.image_generation_call.partial_image\",\"background\":\"opaque\",\"item_id\":\"ig_028d7fb658c136b3016a5ce5a91890819fa161dd35e5e7c1b1\",\"output_format\":\"jpeg\",\"output_index\":1,\"partial_image_b64\":\"/9j/4AAQSkZJRgABAQAAAQABAAD/62FlSlACEQAAAAEAAGFbanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAAYTVqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjY1M2EzZTVkLThlNzUtNDA0Ni1iNDU2LWU1MDRjMThkODA4NAAAABf9anVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAAJ0Wp1bWIAAAA7anVtZEDLDDK7ikidpwsq1vR/Q2kTYzJwYS5pY29uAAAAABhjMnNo7jOSha7DqlpqKw+PkKJzMQAAABdiZmRiAGltYWdlL3N2Zyt4bWwAAAAJd2JpZGI8c3ZnIHdpZHRoPSI3MTYiIGhlaWdodD0iNzE2IiB2aWV3Qm94PSIwIDAgNzE2IDcxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUwOC43NDkgMzE3LjM5OUM1MTYuNzc3IDI4Ny4zMTQgNTA4Ljk5MSAyNTMuODg0IDQ4NS4zODkgMjMwLjI4MkM0NjEuNzg4IDIwNi42ODEgNDI4LjM2IDE5OC44OTUgMzk4LjI3MyAyMDYuOTIzQzM3Ni4yMzEgMTg0LjkyOCAzNDMuMzkgMTc0Ljk1NiAzMTEuMTQ4IDE4My41OTZDMjc4LjkwNiAxOTIuMjM0IDI1NS40NSAyMTcuMjkyIDI0Ny4zNiAyNDcuMzYxQzIxNy4yOTEgMjU1LjQ1MSAxOTIuMjMzIDI3OC45MSAxODMuNTk1IDMxMS4xNDlDMTc0Ljk1NyAzNDMuMzkxIDE4NC45MjcgMzc2LjIzMiAyMDYuOTI0IDM5OC4yNzRDMTk4Ljg5NiA0MjguMzU5IDIwNi42ODMgNDYxLjc4OSAyMzAuMjg0IDQ4NS4zOTFDMjUzLjg4NSA1MDguOTkyIDI4Ny4zMTMgNTE2Ljc3OSAzMTcuNDAxIDUwOC43NUMzMzkuNDQyIDUzMC43NDUgMzcyLjI4NiA1NDAuNzE3IDQwNC41MjUgNTMyLjA3OUM0MzYuNzY3IDUyMy40NDEgNDYwLjIyMyA0OTguMzg0IDQ2OC4zMTMgNDY4LjMxNUM0OTguMzgzIDQ2MC4yMjQgNTIzLjQ0IDQzNi43NjYgNTMyLjA3OCA0MDQuNTI2QzU0MC43MTYgMzcyLjI4NSA1MzAuNzQ3IDMzOS40NDMgNTA4Ljc0OSAzMTcuNDAyVjMxNy4zOTlaTTQ3MC44OTkgMjQ0Ljc3NkM0ODYuODkyIDI2MC43NyA0OTMuNDg4IDI4Mi42MDEgNDkwLjY4NyAzMDMuNDEyTDQxNS41NzcgMjYwLjA0NkM0MTIuNDExIDI1OC4yMTggNDA4LjUwOSAyNTguMjE4IDQwNS4zNDUgMjYwLjA0NkwzMTcuNDAxIDMxMC44MlYyNzcuNTI2QzMxNy40MDEgMjc1LjE5MSAzMTguNjUyIDI3My4wMDUgMzIwLjY3NiAyNzEuODM3TDM4Ny42NDQgMjMzLjE3NEM0MTQuMTc4IDIxOC4zNTMgNDQ4LjM0NiAyMjIuMjIzIDQ3MC45MDEgMjQ0Ljc3Nkg0NzAuODk5Wk0zNTcuODM3IDMxMS4xNDRMMzk4LjI3NSAzMzQuNDkxVjM4MS4xODVMMzU3LjgzNyA0MDQuNTMyTDMxNy4zOTggMzgxLjE4NVYzMzQuNDkxTDM1Ny44MzcgMzExLjE0NFpNMjY0Ljc3NiAyNjkuNjkzQzI2NS4yMDcgMjM5LjMwNSAyODUuNjQ0IDIxMS42NDkgMzE2LjQ1MyAyMDMuMzkzQzMzOC4zIDE5Ny41NCAzNjAuNTA1IDIwMi43NDQgMzc3LjEyNyAyMTUuNTczTDMwMi4wMTQgMjU4LjkzN0MyOTguODQ4IDI2MC43NjQgMjk2Ljg5OCAyNjQuMTQ0IDI5Ni44OTggMjY3Ljc5OFYzNjkuMzQ2TDI2OC4wNjUgMzUyLjY5OUMyNjYuMDQzIDM1MS41MzEgMjY0Ljc3NiAzNDkuMzUzIDI2NC43NzYgMzQ3LjAxN1YyNjkuNjkxVjI2OS42OTNaTTIwMy4zOTEgMzE2LjQ1NEMyMDkuMjQ0IDI5NC42MDggMjI0Ljg1NCAyNzcuOTc4IDI0NC4yNzYgMjY5Ljk5OVYzNTYuNzNDMjQ0LjI3NiAzNjAuMzg0IDI0Ni4yMjYgMzYzLjc2MyAyNDkuMzkyIDM2NS41OTFMMzM3LjMzNyA0MTYuMzY1TDMwOC41MDMgNDMzLjAxM0MzMDYuNDgxIDQzNC4xODEgMzAzLjk2MSA0MzQuMTg4IDMwMS45MzkgNDMzLjAyTDIzNC45NzEgMzk0LjM1N0MyMDguODY4IDM3OC43ODkgMTk1LjEzOCAzNDcuMjYxIDIwMy4zOTEgMzE2LjQ1NFpNMjQ0Ljc3NSA0NzAuOUMyMjguNzgxIDQ1NC45MDYgMjIyLjE4NiA0MzMuMDc1IDIyNC45ODYgNDEyLjI2NEwzMDAuMDk2IDQ1NS42M0MzMDMuMjYzIDQ1Ny40NTcgMzA3LjE2NCA0NTcuNDU3IDMxMC4zMjggNDU1LjYzTDM5OC4yNzMgNDA0Ljg1NlY0MzguMTQ5QzM5OC4yNzMgNDQwLjQ4NSAzOTcuMDIyIDQ0Mi42NzEgMzk0Ljk5NyA0NDMuODM5TDMyOC4wMjkgNDgyLjUwMkMzMDEuNDk1IDQ5Ny4zMjIgMjY3LjMyNyA0OTMuNDUyIDI0NC43NzIgNDcwLjlIMjQ0Ljc3NVpNNDUwLjg5NyA0NDUuOTgyQzQ1MC40NjYgNDc2LjM3MSA0MzAuMDI5IDUwNC4wMjcgMzk5LjIyIDUxMi4yODNDMzc3LjM3MyA1MTguMTM2IDM1NS4xNjggNTEyLjkzMiAzMzguNTQ3IDUwMC4xMDJMNDEzLjY1OSA0NTYuNzM4QzQxNi44MjYgNDU0LjkxMSA0MTguNzc1IDQ1MS41MzIgNDE4Ljc3NSA0NDcuODc3VjM0Ni4zMjlMNDQ3LjYwOSAzNjIuOTc3QzQ0OS42MzEgMzY0LjE0NSA0NTAuODk3IDM2Ni4zMjMgNDUwLjg5NyAzNjguNjU5VjQ0NS45ODVWNDQ1Ljk4MlpNNTEyLjI4MiAzOTkuMjIxQzUwNi40MjkgNDIxLjA2OCA0OTAuODE5IDQzNy42OTcgNDcxLjM5NyA0NDUuNjc2VjM1OC45NDZDNDcxLjM5NyAzNTUuMjkyIDQ2OS40NDggMzUxLjkxMiA0NjYuMjgxIDM1MC4wODVMMzc4LjMzNiAyOTkuMzExTDQwNy4xNyAyODIuNjYzQzQwOS4xOTIgMjgxLjQ5NSA0MTEuNzEyIDI4MS40ODcgNDEzLjczNCAyODIuNjU1TDQ4MC43MDIgMzIxLjMxOEM1MDYuODA1IDMzNi44ODcgNTIwLjUzNiAzNjguNDE1IDUxMi4yODIgMzk5LjIyMVoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgoAAAF+anVtYgAAAEFqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmFjdGlvbnMudjIAAAAAGGMyc2hdSkvjFmKRxUgNqSNNJa5ZAAABNWNib3KhZ2FjdGlvbnODpGZhY3Rpb25sYzJwYS5jcmVhdGVkZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVpZ3B0LWltYWdlZ3ZlcnNpb25jMi4wcWRpZ2l0YWxTb3VyY2VUeXBleEZodHRwOi8vY3YuaXB0Yy5vcmcvbmV3c2NvZGVzL2RpZ2l0YWxzb3VyY2V0eXBlL3RyYWluZWRBbGdvcml0aG1pY01lZGlhomZhY3Rpb25uYzJwYS5jb252ZXJ0ZWRkd2hlbsB0MjAyNi0wNy0xOVQwMDowMDowMFqiZmFjdGlvbngYYzJwYS53YXRlcm1hcmtlZC51bmJvdW5kZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBaAAALump1bWIAAABJanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5jZXJ0aWZpY2F0ZS1zdGF0dXMAAAAAGGMyc2htwRZizBAqU+ypnOv4HGAmAAALaWNib3KhaG9jc3BWYWxzgnkFhE1JSUVId29CQUtDQ0JCZ3dnZ1FVQmdrckJnRUZCUWN3QVFFRWdnUUZNSUlFQVRDQm9xSVdCQlErQkh2WmhwRXNxV2tkcUc0YU55NXVZQmdMeXhnUE1qQXlOakEzTVRnd09URXlORGRhTUhjd2RUQk5NQWtHQlNzT0F3SWFCUUFFRkQ1TWZJNVFDNGRzY3hXK3IyNlg2aER1bENESkJCVERzeVNXTkpPaFdlcFNHR3VlRitDcHV0YXdUQUlVVXBRbEI0RzFhb2I1TXhkNGNOYU9yZTlpR2tHQUFCZ1BNakF5TmpBM01UZ3dPVEV5TkRaYW9CRVlEekl3TWpZd056STFNRGt4TWpRMldqQUtCZ2dxaGtqT1BRUURBZ05KQURCR0FpRUE5cTc1WEo2d3VvQS9ESlRXS0F3ekQ1bGw1N3pxdXRRUzdONzFDWVlvRU40Q0lRRGRIcGRvYTUySEQ0OC9zcDh2NmVWNUQxMWFESS85MkVNU3l5dVVxY2pBaGFDQ0F3RXdnZ0w5TUlJQytUQ0NBbjZnQXdJQkFnSVVLNXZHUDVEZXFocTFUV2hVYUZRRlFmNWxUSll3Q2dZSUtvWkl6ajBFQXdNd2dhY3hDekFKQmdOVkJBWVRBbFZUTVJFd0R3WURWUVFJREFoT1pYY2dXVzl5YXpFUk1BOEdBMVVFQnd3SVRtVjNJRmx2Y21zeEV6QVJCZ05WQkFvTUNsUnlkV1p2SUVsdVl5NHhGREFTQmdOVkJBc01DME5CSUVScGRtbHphVzl1TVJvd0dBWUpLb1pJaHZjTkFRa0JGZ3RqWVVCMGNuVm1ieTVoYVRFck1Da0dBMVVFQXd3aVZISjFabThnUXpKUVFTQkRiR0ZwYlNCVGFXZHVhVzVuSUVOQklDZ3lNREkxS1RBZUZ3MHlOakEzTVRjd01EQXpNakZhRncweU5qQTRNVFl3TURBek1qRmFNSUdsTVFzd0NRWURWUVFHRXdKVlV6RVJNQThHQTFVRUNBd0lUbVYzSUZsdmNtc3hFVEFQQmdOVkJBY01DRTVsZHlCWmIzSnJNUk13RVFZRFZRUUtEQXBVY25WbWJ5QkpibU11TVJRd0VnWURWUVFMREF0RFFTQkVhWFpwYzJsdmJqRWFNQmdHQ1NxR1NJYjNEUUVKQVJZTFkyRkFkSEoxWm04dVlXa3hLVEFuQmdOVkJBTU1JRlJ5ZFdadklFTXlVRUVnVDBOVFVDQlNaWE53YjI1a1pYSWdLREl3TWpVcE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVpFQVo1NnFMcG1ncU4zb3ZMcWg0VFh6cWJHTDV2dndCczgrWDhHdVhxOWE4SXZHL3lzNG5ycWRlbms1U2xaUEJZdmJYUlIzT0JMVHB6UkpoWUxLZnhxT0JoekNCaERBZEJnTlZIUTRFRmdRVVBnUjcyWWFSTEtscEhhaHVHamN1Ym1BWUM4c3dId1lEVlIwakJCZ3dGb0FVdzdNa2xqU1RvVm5xVWhocm5oZmdxYnJXc0V3d0RBWURWUjBUQVFIL0JBSXdBREFPQmdOVkhROEJBZjhFQkFNQ0I0QXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUhBd2t3RHdZSkt3WUJCUVVITUFFRkJBSUZBREFLQmdncWhrak9QUVFEQXdOcEFEQm1BakVBdTROOElsVksrZVBWd1cxTFBCUzVOU2F3ZkRvM1ZmRUI4TTlrUC9WL0dEdGlpU1A1NUROWlZKd0JFNHorM3ZVWUFqRUEzaHNZakdVL2FpaG5ZMGFEU3pPQkFvT0ZJVFpKQWYxK1ozTEVZM0ZRcmdOd2VuNHhuRGM4ZHhhL0w3cUQzL2RieQXMTUlJRVZBb0JBS0NDQkUwd2dnUkpCZ2tyQmdFRkJRY3dBUUVFZ2dRNk1JSUVOakNCb3FJV0JCVEwySTQyaWlFUmN5eTU3NG9hbzJxZXZGTk1RQmdQTWpBeU5qQTNNVGd3T1RFMU1qVmFNSGN3ZFRCTk1Ba0dCU3NPQXdJYUJRQUVGSUFnOWJ6aUpPbHR2Tlp2eGhjcFpYd2t5UEg5QkJRRDFWK3Zmb1BsQkIxWmdDZEtOUDlGL2V0SmVBSVVNT2loOEtXSlFtdlN1WUpJUjVrWjNCWTNBc3VBQUJnUE1qQXlOakEzTVRnd09URTFNalZhb0JFWUR6SXdNall3TnpJMU1Ea3hOVEkxV2pBS0JnZ3Foa2pPUFFRREF3Tm9BREJsQWpFQWt1Z0g1TklqOXU3Y2F5YTB2TmluN09rMExIeE5XaW9WencvS1poaTRpWlFsTGx3SGpnbTNLZmZ5T0JEQWtkZ1VBakJOcmhCS1ZYQ1M0bk01a2wwRSs4dXZsNmM4ajV2MENDYWc5Z2JJK0plOXVaMnBQL3hzeDZvQzVCbmNWQnNSeUVxZ2dnTVhNSUlERXpDQ0F3OHdnZ0tWb0FNQ0FRSUNGQVBRZlRTU2JWY1pjTWJZRkpCTWM4WFQ1WnZnTUFvR0NDcUdTTTQ5QkFNRE1JR29NUXN3Q1FZRFZRUUdFd0pWVXpFUk1BOEdBMVVFQ0F3SVRtVjNJRmx2Y21zeEVUQVBCZ05WQkFjTUNFNWxkeUJaYjNKck1STXdFUVlEVlFRS0RBcFVjblZtYnlCSmJtTXVNUlF3RWdZRFZRUUxEQXREUVNCRWFYWnBjMmx2YmpFYU1CZ0dDU3FHU0liM0RRRUpBUllMWTJGQWRISjFabTh1WVdreExEQXFCZ05WQkFNTUkxUnlkV1p2SUVNeVVFRWdVbTl2ZENCRFFTQW9NakF5TlN3Z1JVTkRJRkF6T0RRcE1CNFhEVEkyTURVeE1USXpOREl5TlZvWERUTTJNRFV3T0RJek5ESXlOVm93Z1o0eEN6QUpCZ05WQkFZVEFsVlRNUkV3RHdZRFZRUUlEQWhPWlhjZ1dXOXlhekVSTUE4R0ExVUVCd3dJVG1WM0lGbHZjbXN4RXpBUkJnTlZCQW9NQ2xSeWRXWnZJRWx1WXk0eEZEQVNCZ05WQkFzTUMwTkJJRVJwZG1semFXOXVNUm93R0FZSktvWklodmNOQVFrQkZndGpZVUIwY25WbWJ5NWhhVEVpTUNBR0ExVUVBd3daVkhKMVptOGdVbTl2ZENCUFExTlFJRkpsYzNCdmJtUmxjakIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJHTDMxMnlnb0xYaHJOdkloaUxaeVhMTWU1ajRMSU1EaHJoMHdObFphTDlhV1Buc01WZVVFY1NCUVV1c29uL0pWaVhESSs3YVd5T3BzV3JLVm51cVcwcVhrOVFvNjN2cnlUZGszejlTYVJpbTYySkhOR1FKbkxzQ0lWaUNKN2tkT2FPQmh6Q0JoREFkQmdOVkhRNEVGZ1FVeTlpT05vb2hFWE1zdWUrS0dxTnFucnhUVEVBd0h3WURWUjBqQkJnd0ZvQVVBOVZmcjM2RDVRUWRXWUFuU2pUL1JmM3JTWGd3REFZRFZSMFRBUUgvQkFJd0FEQU9CZ05WSFE4QkFmOEVCQU1DQjRBd0V3WURWUjBsQkF3d0NnWUlLd1lCQlFVSEF3a3dEd1lKS3dZQkJRVUhNQUVGQkFJRkFEQUtCZ2dxaGtqT1BRUURBd05vQURCbEFqRUE3ZTBmaS9mTHpNNFRVOE42OUJyUXpBd1BHZ1RweERwV2hUV2FLcjRIaWJKR21WNUovTFdHNVZUV1VqckdhY2Q4QWpBWEdDVGEzdy9GZk1HVmlkUzFjZFRLckNuaEE2aUlxeTgzOE9sQi9sdCtHZU1TYnEydzZ2UVMza3oxc0ZFanh4Zz0AAADDanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaJlF/+7opq9IrrjxiEzjrUgAAAB7Y2JvcqVqZXhjbHVzaW9uc4GiZXN0YXJ0FGZsZW5ndGgZYWdkbmFtZW5qdW1iZiBtYW5pZmVzdGNhbGdmc2hhMjU2ZGhhc2hYIAP5TkXl4191NS6N5LxLsOsH7r80GXXiCSzB6FJOZ6QlY3BhZEkAAAAAAAAAAAAAAAMbanVtYgAAACdqdW1kYzJjbAARABCAAACqADibcQNjMnBhLmNsYWltLnYyAAAAAuxjYm9ypmppbnN0YW5jZUlEeCx4bXA6aWlkOjY0YTdjNjkyLWQ5NTAtNGYwNS04MzUzLTA2YmNmZTlhYTgwNnRjbGFpbV9nZW5lcmF0b3JfaW5mb6RkbmFtZXgYT3BlbkFJIE1lZGlhIFNlcnZpY2UgQVBJZGljb26iY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIGiAoLKucP6DZW3n4G7oYobIrrgNIyysPIIIe95cIrQCd29yZy5jb250ZW50YXV0aC5jMnBhX3JzZjAuNzkuMmtzcGVjVmVyc2lvbmUyLjIuMGlzaWduYXR1cmV4TXNlbGYjanVtYmY9L2MycGEvdXJuOmMycGE6NjUzYTNlNWQtOGU3NS00MDQ2LWI0NTYtZTUwNGMxOGQ4MDg0L2MycGEuc2lnbmF0dXJlcmNyZWF0ZWRfYXNzZXJ0aW9uc4SiY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIGiAoLKucP6DZW3n4G7oYobIrrgNIyysPIIIe95cIrQComN1cmx4KnNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuYWN0aW9ucy52MmRoYXNoWCBSdrAznwM8WZOUtQcQ1wRzPhHjLcFrKo2gZnmx1eGLE6JjdXJseDJzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmNlcnRpZmljYXRlLXN0YXR1c2RoYXNoWCDOxOKbUidd7VeAgFE6yiUOeCDxZ2Qub1+Luar7CkkyuKJjdXJseClzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmhhc2guZGF0YWRoYXNoWCCNWe16fsv3drz877n+3X0wnpu6iTBm8qHNyrRVzPkpqmhkYzp0aXRsZWppbWFnZS5qcGVnY2FsZ2ZzaGEyNTYAAEXOanVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAAEWeY2JvctKEWQdVogEmGCGCWQNyMIIDbjCCAvOgAwIBAgIUUpQlB4G1aob5Mxd4cNaOre9iGkEwCgYIKoZIzj0E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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9lhAHrKMfwR3AJQ0QJhSYC5PQUPeDVQef+9uk4Mqi5f5tMZD5pRErn9dMUbgF8DIDuJfCMq6YVLE7vycgqoIXKt2Yf/bAEMAUDc8RjwyUEZBRlpVUF94yIJ4bm549a+5kcj////////////////////////////////////////////////////bAEMBVVpaeGl464KC6//////////////////////////////////////////////////////////////////////////AABEIBAAEAAMBIgACEQEDEQH/xAAZAAEBAQEBAQAAAAAAAAAAAAAABAUDAQL/xAApEAEAAgEBCAMBAQADAQAAAAAAAQMCBBITFCExQVGRETJxsSJCQ4Fh/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHj1LrLdjDYjrl/AUvUujt28NieuP8VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Z\",\"partial_image_index\":0,\"quality\":\"low\",\"sequence_number\":7,\"size\":\"1024x1024\"}\n\nevent: response.output_item.done\ndata: {\"type\":\"response.output_item.done\",\"item\":{\"id\":\"ig_028d7fb658c136b3016a5ce5a91890819fa161dd35e5e7c1b1\",\"type\":\"image_generation_call\",\"status\":\"generating\",\"action\":\"generate\",\"background\":\"opaque\",\"output_format\":\"jpeg\",\"quality\":\"low\",\"result\":\"/9j/4AAQSkZJRgABAQAAAQABAAD/62FlSlACEQAAAAEAAGFbanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAAYTVqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjY1M2EzZTVkLThlNzUtNDA0Ni1iNDU2LWU1MDRjMThkODA4NAAAABf9anVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAAJ0Wp1bWIAAAA7anVtZEDLDDK7ikidpwsq1vR/Q2kTYzJwYS5pY29uAAAAABhjMnNo7jOSha7DqlpqKw+PkKJzMQAAABdiZmRiAGltYWdlL3N2Zyt4bWwAAAAJd2JpZGI8c3ZnIHdpZHRoPSI3MTYiIGhlaWdodD0iNzE2IiB2aWV3Qm94PSIwIDAgNzE2IDcxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUwOC43NDkgMzE3LjM5OUM1MTYuNzc3IDI4Ny4zMTQgNTA4Ljk5MSAyNTMuODg0IDQ4NS4zODkgMjMwLjI4MkM0NjEuNzg4IDIwNi42ODEgNDI4LjM2IDE5OC44OTUgMzk4LjI3MyAyMDYuOTIzQzM3Ni4yMzEgMTg0LjkyOCAzNDMuMzkgMTc0Ljk1NiAzMTEuMTQ4IDE4My41OTZDMjc4LjkwNiAxOTIuMjM0IDI1NS40NSAyMTcuMjkyIDI0Ny4zNiAyNDcuMzYxQzIxNy4yOTEgMjU1LjQ1MSAxOTIuMjMzIDI3OC45MSAxODMuNTk1IDMxMS4xNDlDMTc0Ljk1NyAzNDMuMzkxIDE4NC45MjcgMzc2LjIzMiAyMDYuOTI0IDM5OC4yNzRDMTk4Ljg5NiA0MjguMzU5IDIwNi42ODMgNDYxLjc4OSAyMzAuMjg0IDQ4NS4zOTFDMjUzLjg4NSA1MDguOTkyIDI4Ny4zMTMgNTE2Ljc3OSAzMTcuNDAxIDUwOC43NUMzMzkuNDQyIDUzMC43NDUgMzcyLjI4NiA1NDAuNzE3IDQwNC41MjUgNTMyLjA3OUM0MzYuNzY3IDUyMy40NDEgNDYwLjIyMyA0OTguMzg0IDQ2OC4zMTMgNDY4LjMxNUM0OTguMzgzIDQ2MC4yMjQgNTIzLjQ0IDQzNi43NjYgNTMyLjA3OCA0MDQuNTI2QzU0MC43MTYgMzcyLjI4NSA1MzAuNzQ3IDMzOS40NDMgNTA4Ljc0OSAzMTcuNDAyVjMxNy4zOTlaTTQ3MC44OTkgMjQ0Ljc3NkM0ODYuODkyIDI2MC43NyA0OTMuNDg4IDI4Mi42MDEgNDkwLjY4NyAzMDMuNDEyTDQxNS41NzcgMjYwLjA0NkM0MTIuNDExIDI1OC4yMTggNDA4LjUwOSAyNTguMjE4IDQwNS4zNDUgMjYwLjA0NkwzMTcuNDAxIDMxMC44MlYyNzcuNTI2QzMxNy40MDEgMjc1LjE5MSAzMTguNjUyIDI3My4wMDUgMzIwLjY3NiAyNzEuODM3TDM4Ny42NDQgMjMzLjE3NEM0MTQuMTc4IDIxOC4zNTMgNDQ4LjM0NiAyMjIuMjIzIDQ3MC45MDEgMjQ0Ljc3Nkg0NzAuODk5Wk0zNTcuODM3IDMxMS4xNDRMMzk4LjI3NSAzMzQuNDkxVjM4MS4xODVMMzU3LjgzNyA0MDQuNTMyTDMxNy4zOTggMzgxLjE4NVYzMzQuNDkxTDM1Ny44MzcgMzExLjE0NFpNMjY0Ljc3NiAyNjkuNjkzQzI2NS4yMDcgMjM5LjMwNSAyODUuNjQ0IDIxMS42NDkgMzE2LjQ1MyAyMDMuMzkzQzMzOC4zIDE5Ny41NCAzNjAuNTA1IDIwMi43NDQgMzc3LjEyNyAyMTUuNTczTDMwMi4wMTQgMjU4LjkzN0MyOTguODQ4IDI2MC43NjQgMjk2Ljg5OCAyNjQuMTQ0IDI5Ni44OTggMjY3Ljc5OFYzNjkuMzQ2TDI2OC4wNjUgMzUyLjY5OUMyNjYuMDQzIDM1MS41MzEgMjY0Ljc3NiAzNDkuMzUzIDI2NC43NzYgMzQ3LjAxN1YyNjkuNjkxVjI2OS42OTNaTTIwMy4zOTEgMzE2LjQ1NEMyMDkuMjQ0IDI5NC42MDggMjI0Ljg1NCAyNzcuOTc4IDI0NC4yNzYgMjY5Ljk5OVYzNTYuNzNDMjQ0LjI3NiAzNjAuMzg0IDI0Ni4yMjYgMzYzLjc2MyAyNDkuMzkyIDM2NS41OTFMMzM3LjMzNyA0MTYuMzY1TDMwOC41MDMgNDMzLjAxM0MzMDYuNDgxIDQzNC4xODEgMzAzLjk2MSA0MzQuMTg4IDMwMS45MzkgNDMzLjAyTDIzNC45NzEgMzk0LjM1N0MyMDguODY4IDM3OC43ODkgMTk1LjEzOCAzNDcuMjYxIDIwMy4zOTEgMzE2LjQ1NFpNMjQ0Ljc3NSA0NzAuOUMyMjguNzgxIDQ1NC45MDYgMjIyLjE4NiA0MzMuMDc1IDIyNC45ODYgNDEyLjI2NEwzMDAuMDk2IDQ1NS42M0MzMDMuMjYzIDQ1Ny40NTcgMzA3LjE2NCA0NTcuNDU3IDMxMC4zMjggNDU1LjYzTDM5OC4yNzMgNDA0Ljg1NlY0MzguMTQ5QzM5OC4yNzMgNDQwLjQ4NSAzOTcuMDIyIDQ0Mi42NzEgMzk0Ljk5NyA0NDMuODM5TDMyOC4wMjkgNDgyLjUwMkMzMDEuNDk1IDQ5Ny4zMjIgMjY3LjMyNyA0OTMuNDUyIDI0NC43NzIgNDcwLjlIMjQ0Ljc3NVpNNDUwLjg5NyA0NDUuOTgyQzQ1MC40NjYgNDc2LjM3MSA0MzAuMDI5IDUwNC4wMjcgMzk5LjIyIDUxMi4yODNDMzc3LjM3MyA1MTguMTM2IDM1NS4xNjggNTEyLjkzMiAzMzguNTQ3IDUwMC4xMDJMNDEzLjY1OSA0NTYuNzM4QzQxNi44MjYgNDU0LjkxMSA0MTguNzc1IDQ1MS41MzIgNDE4Ljc3NSA0NDcuODc3VjM0Ni4zMjlMNDQ3LjYwOSAzNjIuOTc3QzQ0OS42MzEgMzY0LjE0NSA0NTAuODk3IDM2Ni4zMjMgNDUwLjg5NyAzNjguNjU5VjQ0NS45ODVWNDQ1Ljk4MlpNNTEyLjI4MiAzOTkuMjIxQzUwNi40MjkgNDIxLjA2OCA0OTAuODE5IDQzNy42OTcgNDcxLjM5NyA0NDUuNjc2VjM1OC45NDZDNDcxLjM5NyAzNTUuMjkyIDQ2OS40NDggMzUxLjkxMiA0NjYuMjgxIDM1MC4wODVMMzc4LjMzNiAyOTkuMzExTDQwNy4xNyAyODIuNjYzQzQwOS4xOTIgMjgxLjQ5NSA0MTEuNzEyIDI4MS40ODcgNDEzLjczNCAyODIuNjU1TDQ4MC43MDIgMzIxLjMxOEM1MDYuODA1IDMzNi44ODcgNTIwLjUzNiAzNjguNDE1IDUxMi4yODIgMzk5LjIyMVoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgoAAAF+anVtYgAAAEFqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmFjdGlvbnMudjIAAAAAGGMyc2hdSkvjFmKRxUgNqSNNJa5ZAAABNWNib3KhZ2FjdGlvbnODpGZhY3Rpb25sYzJwYS5jcmVhdGVkZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVpZ3B0LWltYWdlZ3ZlcnNpb25jMi4wcWRpZ2l0YWxTb3VyY2VUeXBleEZodHRwOi8vY3YuaXB0Yy5vcmcvbmV3c2NvZGVzL2RpZ2l0YWxzb3VyY2V0eXBlL3RyYWluZWRBbGdvcml0aG1pY01lZGlhomZhY3Rpb25uYzJwYS5jb252ZXJ0ZWRkd2hlbsB0MjAyNi0wNy0xOVQwMDowMDowMFqiZmFjdGlvbngYYzJwYS53YXRlcm1hcmtlZC51bmJvdW5kZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBaAAALump1bWIAAABJanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5jZXJ0aWZpY2F0ZS1zdGF0dXMAAAAAGGMyc2htwRZizBAqU+ypnOv4HGAmAAALaWNib3KhaG9jc3BWYWxzgnkFhE1JSUVId29CQUtDQ0JCZ3dnZ1FVQmdrckJnRUZCUWN3QVFFRWdnUUZNSUlFQVRDQm9xSVdCQlErQkh2WmhwRXNxV2tkcUc0YU55NXVZQmdMeXhnUE1qQXlOakEzTVRnd09URXlORGRhTUhjd2RUQk5NQWtHQlNzT0F3SWFCUUFFRkQ1TWZJNVFDNGRzY3hXK3IyNlg2aER1bENESkJCVERzeVNXTkpPaFdlcFNHR3VlRitDcHV0YXdUQUlVVXBRbEI0RzFhb2I1TXhkNGNOYU9yZTlpR2tHQUFCZ1BNakF5TmpBM01UZ3dPVEV5TkRaYW9CRVlEekl3TWpZd056STFNRGt4TWpRMldqQUtCZ2dxaGtqT1BRUURBZ05KQURCR0FpRUE5cTc1WEo2d3VvQS9ESlRXS0F3ekQ1bGw1N3pxdXRRUzdONzFDWVlvRU40Q0lRRGRIcGRvYTUySEQ0OC9zcDh2NmVWNUQxMWFESS85MkVNU3l5dVVxY2pBaGFDQ0F3RXdnZ0w5TUlJQytUQ0NBbjZnQXdJQkFnSVVLNXZHUDVEZXFocTFUV2hVYUZRRlFmNWxUSll3Q2dZSUtvWkl6ajBFQXdNd2dhY3hDekFKQmdOVkJBWVRBbFZUTVJFd0R3WURWUVFJREFoT1pYY2dXVzl5YXpFUk1BOEdBMVVFQnd3SVRtVjNJRmx2Y21zeEV6QVJCZ05WQkFvTUNsUnlkV1p2SUVsdVl5NHhGREFTQmdOVkJBc01DME5CSUVScGRtbHphVzl1TVJvd0dBWUpLb1pJaHZjTkFRa0JGZ3RqWVVCMGNuVm1ieTVoYVRFck1Da0dBMVVFQXd3aVZISjFabThnUXpKUVFTQkRiR0ZwYlNCVGFXZHVhVzVuSUVOQklDZ3lNREkxS1RBZUZ3MHlOakEzTVRjd01EQXpNakZhRncweU5qQTRNVFl3TURBek1qRmFNSUdsTVFzd0NRWURWUVFHRXdKVlV6RVJNQThHQTFVRUNBd0lUbVYzSUZsdmNtc3hFVEFQQmdOVkJBY01DRTVsZHlCWmIzSnJNUk13RVFZRFZRUUtEQXBVY25WbWJ5QkpibU11TVJRd0VnWURWUVFMREF0RFFTQkVhWFpwYzJsdmJqRWFNQmdHQ1NxR1NJYjNEUUVKQVJZTFkyRkFkSEoxWm04dVlXa3hLVEFuQmdOVkJBTU1JRlJ5ZFdadklFTXlVRUVnVDBOVFVDQlNaWE53YjI1a1pYSWdLREl3TWpVcE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVpFQVo1NnFMcG1ncU4zb3ZMcWg0VFh6cWJHTDV2dndCczgrWDhHdVhxOWE4SXZHL3lzNG5ycWRlbms1U2xaUEJZdmJYUlIzT0JMVHB6UkpoWUxLZnhxT0JoekNCaERBZEJnTlZIUTRFRmdRVVBnUjcyWWFSTEtscEhhaHVHamN1Ym1BWUM4c3dId1lEVlIwakJCZ3dGb0FVdzdNa2xqU1RvVm5xVWhocm5oZmdxYnJXc0V3d0RBWURWUjBUQVFIL0JBSXdBREFPQmdOVkhROEJBZjhFQkFNQ0I0QXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUhBd2t3RHdZSkt3WUJCUVVITUFFRkJBSUZBREFLQmdncWhrak9QUVFEQXdOcEFEQm1BakVBdTROOElsVksrZVBWd1cxTFBCUzVOU2F3ZkRvM1ZmRUI4TTlrUC9WL0dEdGlpU1A1NUROWlZKd0JFNHorM3ZVWUFqRUEzaHNZakdVL2FpaG5ZMGFEU3pPQkFvT0ZJVFpKQWYxK1ozTEVZM0ZRcmdOd2VuNHhuRGM4ZHhhL0w3cUQzL2RieQXMTUlJRVZBb0JBS0NDQkUwd2dnUkpCZ2tyQmdFRkJRY3dBUUVFZ2dRNk1JSUVOakNCb3FJV0JCVEwySTQyaWlFUmN5eTU3NG9hbzJxZXZGTk1RQmdQTWpBeU5qQTNNVGd3T1RFMU1qVmFNSGN3ZFRCTk1Ba0dCU3NPQXdJYUJRQUVGSUFnOWJ6aUpPbHR2Tlp2eGhjcFpYd2t5UEg5QkJRRDFWK3Zmb1BsQkIxWmdDZEtOUDlGL2V0SmVBSVVNT2loOEtXSlFtdlN1WUpJUjVrWjNCWTNBc3VBQUJnUE1qQXlOakEzTVRnd09URTFNalZhb0JFWUR6SXdNall3TnpJMU1Ea3hOVEkxV2pBS0JnZ3Foa2pPUFFRREF3Tm9BREJsQWpFQWt1Z0g1TklqOXU3Y2F5YTB2TmluN09rMExIeE5XaW9WencvS1poaTRpWlFsTGx3SGpnbTNLZmZ5T0JEQWtkZ1VBakJOcmhCS1ZYQ1M0bk01a2wwRSs4dXZsNmM4ajV2MENDYWc5Z2JJK0plOXVaMnBQL3hzeDZvQzVCbmNWQnNSeUVxZ2dnTVhNSUlERXpDQ0F3OHdnZ0tWb0FNQ0FRSUNGQVBRZlRTU2JWY1pjTWJZRkpCTWM4WFQ1WnZnTUFvR0NDcUdTTTQ5QkFNRE1JR29NUXN3Q1FZRFZRUUdFd0pWVXpFUk1BOEdBMVVFQ0F3SVRtVjNJRmx2Y21zeEVUQVBCZ05WQkFjTUNFNWxkeUJaYjNKck1STXdFUVlEVlFRS0RBcFVjblZtYnlCSmJtTXVNUlF3RWdZRFZRUUxEQXREUVNCRWFYWnBjMmx2YmpFYU1CZ0dDU3FHU0liM0RRRUpBUllMWTJGQWRISjFabTh1WVdreExEQXFCZ05WQkFNTUkxUnlkV1p2SUVNeVVFRWdVbTl2ZENCRFFTQW9NakF5TlN3Z1JVTkRJRkF6T0RRcE1CNFhEVEkyTURVeE1USXpOREl5TlZvWERUTTJNRFV3T0RJek5ESXlOVm93Z1o0eEN6QUpCZ05WQkFZVEFsVlRNUkV3RHdZRFZRUUlEQWhPWlhjZ1dXOXlhekVSTUE4R0ExVUVCd3dJVG1WM0lGbHZjbXN4RXpBUkJnTlZCQW9NQ2xSeWRXWnZJRWx1WXk0eEZEQVNCZ05WQkFzTUMwTkJJRVJwZG1semFXOXVNUm93R0FZSktvWklodmNOQVFrQkZndGpZVUIwY25WbWJ5NWhhVEVpTUNBR0ExVUVBd3daVkhKMVptOGdVbTl2ZENCUFExTlFJRkpsYzNCdmJtUmxjakIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJHTDMxMnlnb0xYaHJOdkloaUxaeVhMTWU1ajRMSU1EaHJoMHdObFphTDlhV1Buc01WZVVFY1NCUVV1c29uL0pWaVhESSs3YVd5T3BzV3JLVm51cVcwcVhrOVFvNjN2cnlUZGszejlTYVJpbTYySkhOR1FKbkxzQ0lWaUNKN2tkT2FPQmh6Q0JoREFkQmdOVkhRNEVGZ1FVeTlpT05vb2hFWE1zdWUrS0dxTnFucnhUVEVBd0h3WURWUjBqQkJnd0ZvQVVBOVZmcjM2RDVRUWRXWUFuU2pUL1JmM3JTWGd3REFZRFZSMFRBUUgvQkFJd0FEQU9CZ05WSFE4QkFmOEVCQU1DQjRBd0V3WURWUjBsQkF3d0NnWUlLd1lCQlFVSEF3a3dEd1lKS3dZQkJRVUhNQUVGQkFJRkFEQUtCZ2dxaGtqT1BRUURBd05vQURCbEFqRUE3ZTBmaS9mTHpNNFRVOE42OUJyUXpBd1BHZ1RweERwV2hUV2FLcjRIaWJKR21WNUovTFdHNVZUV1VqckdhY2Q4QWpBWEdDVGEzdy9GZk1HVmlkUzFjZFRLckNuaEE2aUlxeTgzOE9sQi9sdCtHZU1TYnEydzZ2UVMza3oxc0ZFanh4Zz0AAADDanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaJlF/+7opq9IrrjxiEzjrUgAAAB7Y2JvcqVqZXhjbHVzaW9uc4GiZXN0YXJ0FGZsZW5ndGgZYWdkbmFtZW5qdW1iZiBtYW5pZmVzdGNhbGdmc2hhMjU2ZGhhc2hYIAP5TkXl4191NS6N5LxLsOsH7r80GXXiCSzB6FJOZ6QlY3BhZEkAAAAAAAAAAAAAAAMbanVtYgAAACdqdW1kYzJjbAARABCAAACqADibcQNjMnBhLmNsYWltLnYyAAAAAuxjYm9ypmppbnN0YW5jZUlEeCx4bXA6aWlkOjY0YTdjNjkyLWQ5NTAtNGYwNS04MzUzLTA2YmNmZTlhYTgwNnRjbGFpbV9nZW5lcmF0b3JfaW5mb6RkbmFtZXgYT3BlbkFJIE1lZGlhIFNlcnZpY2UgQVBJZGljb26iY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIGiAoLKucP6DZW3n4G7oYobIrrgNIyysPIIIe95cIrQCd29yZy5jb250ZW50YXV0aC5jMnBhX3JzZjAuNzkuMmtzcGVjVmVyc2lvbmUyLjIuMGlzaWduYXR1cmV4TXNlbGYjanVtYmY9L2MycGEvdXJuOmMycGE6NjUzYTNlNWQtOGU3NS00MDQ2LWI0NTYtZTUwNGMxOGQ4MDg0L2MycGEuc2lnbmF0dXJlcmNyZWF0ZWRfYXNzZXJ0aW9uc4SiY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIGiAoLKucP6DZW3n4G7oYobIrrgNIyysPIIIe95cIrQComN1cmx4KnNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuYWN0aW9ucy52MmRoYXNoWCBSdrAznwM8WZOUtQcQ1wRzPhHjLcFrKo2gZnmx1eGLE6JjdXJseDJzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmNlcnRpZmljYXRlLXN0YXR1c2RoYXNoWCDOxOKbUidd7VeAgFE6yiUOeCDxZ2Qub1+Luar7CkkyuKJjdXJseClzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmhhc2guZGF0YWRoYXNoWCCNWe16fsv3drz877n+3X0wnpu6iTBm8qHNyrRVzPkpqmhkYzp0aXRsZWppbWFnZS5qcGVnY2FsZ2ZzaGEyNTYAAEXOanVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAAEWeY2JvctKEWQdVogEmGCGCWQNyMIIDbjCCAvOgAwIBAgIUUpQlB4G1aob5Mxd4cNaOre9iGkEwCgYIKoZIzj0E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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9lhAHrKMfwR3AJQ0QJhSYC5PQUPeDVQef+9uk4Mqi5f5tMZD5pRErn9dMUbgF8DIDuJfCMq6YVLE7vycgqoIXKt2Yf/bAEMAUDc8RjwyUEZBRlpVUF94yIJ4bm549a+5kcj////////////////////////////////////////////////////bAEMBVVpaeGl464KC6//////////////////////////////////////////////////////////////////////////AABEIBAAEAAMBIgACEQEDEQH/xAAZAAEBAQEBAQAAAAAAAAAAAAAABAUDAQL/xAApEAEAAgEBCAMBAQADAQAAAAAAAQMCBBITFCExQVGRETJxsSJCQ4Fh/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHj1LrLdjDYjrl/AUvUujt28NieuP8VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Z\",\"revised_prompt\":\"Simple flat solid black triangle centered on a plain white background. Minimal vector-style graphic with no shading, gradients, outlines, or textures. Triangle pointing upward (base at bottom), crisp edges, centered both vertically and horizontally, occupying about 40% of the image width. High resolution, clean white background.\",\"size\":\"1024x1024\"},\"output_index\":1,\"sequence_number\":8}\n\nevent: response.output_item.added\ndata: {\"type\":\"response.output_item.added\",\"item\":{\"id\":\"msg_028d7fb658c136b3016a5ce5b662b8819fa19ff40122f1c07a\",\"type\":\"message\",\"status\":\"in_progress\",\"content\":[],\"role\":\"assistant\"},\"output_index\":2,\"sequence_number\":9}\n\nevent: response.content_part.added\ndata: {\"type\":\"response.content_part.added\",\"content_index\":0,\"item_id\":\"msg_028d7fb658c136b3016a5ce5b662b8819fa19ff40122f1c07a\",\"output_index\":2,\"part\":{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"\"},\"sequence_number\":10}\n\nevent: response.output_text.done\ndata: {\"type\":\"response.output_text.done\",\"content_index\":0,\"item_id\":\"msg_028d7fb658c136b3016a5ce5b662b8819fa19ff40122f1c07a\",\"logprobs\":[],\"output_index\":2,\"sequence_number\":11,\"text\":\"\"}\n\nevent: response.content_part.done\ndata: {\"type\":\"response.content_part.done\",\"content_index\":0,\"item_id\":\"msg_028d7fb658c136b3016a5ce5b662b8819fa19ff40122f1c07a\",\"output_index\":2,\"part\":{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"\"},\"sequence_number\":12}\n\nevent: response.output_item.done\ndata: {\"type\":\"response.output_item.done\",\"item\":{\"id\":\"msg_028d7fb658c136b3016a5ce5b662b8819fa19ff40122f1c07a\",\"type\":\"message\",\"status\":\"completed\",\"content\":[{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"\"}],\"role\":\"assistant\"},\"output_index\":2,\"sequence_number\":13}\n\nevent: response.completed\ndata: {\"type\":\"response.completed\",\"response\":{\"id\":\"resp_028d7fb658c136b3016a5ce59cd0e8819f804427824478bc8c\",\"object\":\"response\",\"created_at\":1784472988,\"status\":\"completed\",\"background\":false,\"completed_at\":1784473014,\"error\":null,\"frequency_penalty\":0.0,\"incomplete_details\":null,\"instructions\":null,\"max_output_tokens\":null,\"max_tool_calls\":null,\"model\":\"gpt-5-mini-2025-08-07\",\"moderation\":null,\"output\":[{\"id\":\"rs_028d7fb658c136b3016a5ce59d154c819f85755db041801f6a\",\"type\":\"reasoning\",\"content\":[],\"encrypted_content\":\"gAAAAABqXOW2RoFJWpA81w_vweFr0iHQ5uCpsReoKbmPpyUhCwlm5lLubRBc3D2Ken8UNoPaPHzA0IAUTPoQ4CmwTAzRBn9nTz0upKnytFs2ilrchJskeslMO7WGA0otkbPG_ZDvYTSj1lfofNGbyDHiVnFyt5yhQ_MmIs2l5yjTK6TgHV3towKRrp7YFKbmVE9z3RJ2WBRFzZ3YIb4i4GuctmtedrplMjZR86kuvxZuePz_1iEV3sq0vpazrC1OMHtchHTeX_KSM1Xv_GoK9narTYcEv2V5yw3ssbu27qRAEzy_ZlwIphQdUP2wzRd0UxYKuEe6HEnyBUBnh8hymbhg7UC7-fKgBpcUHNnBID5m8Mr38yg-ZSALNhrJex_5PSpna0WdZRODUkJGxxiUf2LP7HS8hJe7aQafSAZWoPvv7d83urjyqF7rwHsDgWpvzd_wEUWsOns-W6cpNkdSotMOOcFgajCyY3RwsYLqR0Kdv3S3cMvxx55jUwXEcNT8JWkIH9yzS9OWwvo0a4aJPW_UbyfuAW4ube5Q1AuJngq2AUxOeuOFwHgVW-Vgunnt4xuFG0-EsoMsZDR7xBkhsV8wcx7QUTsbVhZPALDDgAxFFyJBrj3ST7JRFs9QcJG7a-uqpinkbhHeMid2Il8g2mN5Su6UjF024PGFLiYx_k3x9RBkpAaA60pzTsUzyHDRFPwiwQluSA9mYYB66M-mHNNFy_NmsHeZmJCFz6HHqInY3rjmG0VoPYitDFZWbjPk8-bm8X3j7oCofYrau-axXESc7D5XNrA1hzT6FYtn7QTg5SeeQ6Bd8LolJ2C54josvOzXIiWoR8rJnOSf6Q7JOC5jRely5rSoJ_pUVc-G3-m9wkgfquRj0hTQ_B8WpSzmVcyibAFjaSzHb2u-9J8bnmMT5NyYGxmI3XTQgPghAP6LnjA71PLCKEmYA4OxCqfhelwRZMdee9ggZFTqwGa9Q9WYj6WbI3Ke-JN0cdPa_BSTgv7fVOMY7e1hjNMtlcnzDp-VImKryaezu3Vj29H0nO-g1HNC3mqhx912UJ_dyuKlDSNjsnNDTVA_taLXT41AVJwM84eCA9N5ocIvmPh9zwngi8zKyLYzcoEM5OqmQgM04usrXG9z8A4mKuuMFFgVvKEh46TYlfGICLH2mK5ojxnQq5DBTuoOvlAqciaYwb4I4PhBUxvwFN3-_hLxVp8d21zI02mfjq4zdlN2BkfwE5uvZUucukx-dbhzbarMMybM3xfu5_ihFOg43JeABYTmjmTceBW2kpuVU6GiAb09Yr8kQkKsUD9RkjO6uCaSJIgxUEfUZMym1Flg7eHFPJns56YEMXOw_Gk-nz_HfDvdkw3NmW7J089jx7ixjTP6dPI2ZcQBwze_41Zy64CnuV2ddDytWM5-nKIHuTAZzXpTsdJ4l7TPkl3VdvkF4cWnKCY0Zh80RVAegFU4iNp2pchxbAUWBOAUSF4wI6ccOmstwiPk3-NXN3Q5hWKP_ut5Qu34GB4avJDFFDz9xLNNJMEuxP3q2Y_qe1inSxSWmMXPBrzsPufR_x2Og4lj4U3eMVlcby0YL3hXw8nRnmFLh3zTEfNneiEon3u2DpKhgXJJSulS3oGq2qLBxqBS2dkwZ9rdR-sg5j-B6M2IME0Vnmp_Mqpd4sjQYj31LMr9SYhlCzmRup6SZCLmkw8Ryi1zNy49Qk4K3SYsS8P11hCuXZP9FV9tRP7uszKElguPeD28vgZIUuHgyW15dscWwGcwuOjIrl2RhiKOdLWUJLWS54yQWwHbCPUDea-3mI6ZXH2cEb_jKoODFAKYPYXcD4-g5l8m1q9_J2TiDnXyHXpmddT84W8yDzmxS5TWhWyNvvaVBHcH2e2jsiSCZkKdBSsT9irmt7A68GX6kSmBfN6xBa0zgRKapKdB-t9lFMgKJX58LtIgkJ4GyEa3Vljqkr6p_ogxbDvxdLBQQQKmROCGYWsY8vwj7xKkvGvDzP9LSowmy1r7WAWQRvhVltWWXnFR6C7gAQY5jFz4JjTgoDehAZk16GEYAyUMsGPdFCw6DqcuTf70bAmp40fMBbiz-Ezvw4fHXbAyuxJDDmik-7SS_fGnO0apwMxrmICMhuMEfofiu0TXeAwBwq1ztLEkf1jvAqNLyx6VKIrhqumgtmAObIGqNyIvN6uDGQe-3EEEQOLEoNf-25OQotsq0xXRgnxoCnF8vX4Y2gf_wIGf3_5AueR-lJFfU_R81FmRYfWWxT9o510aIS6BOLi7Yaw4WDM9hWSyyOwD4wcCa1jY6-e1DAFmk24oqp_DzriJz3gh_m69YeRyAbxgmMec82XjbUTrIKszr__QodFVeSxwZxhBXkp2fNIRN3orgQ1iccdS7BExLrP8iboYGdvZMUHZwQzBl9rioLFk1mwdghBsV4v-63haXKAm7-UKZmSXnslygCCtZ5bsBcgudZBtaEzEbFDbQcPKyQYycxdN69KpRnc7g8NPrFtWoT1Mkg1uhqA6FEYsH0QIuM_xvob-_F04ihHLL-93VcHPxoSosHynh1epp9PcfUzfC74SI8_TaKJ5OjT81i3lJCdVUH9UlJf2xFSswM5JJfRKAdU8u-ljQ1-uxafK5w9UWnlDcyhtikDGB8WNH27EPgb35b9rZJ1HzkURy6_5OoZAyLmNzs8cbt53cQeZf1QL4HrzkQHjLPOF-DGJvP-YEEQh-_Jicy6_aagtgl7sQ3AHSJwa5fc3kALE7j-vkMxRmP9tINYAw0pADx5TstQNTirMTB7-qAMOqfW_UyCVtBgG84OcFvlrsFzTERYW8Pidv6olXc8Lb8IbykePvtxrhufCFv5jNbO3GpXp62wW3kbmBxvTszwWecfVHxZ23CstGoDwbAmJDYVtYE7rOlobLGWkI01Q4IZmmAvus6tbqG3Lyt5If1F0DPEjjSkGY_dxwxTlFlc9rGG13o5a_FTAV2pSS5odrUvxWsaGOsG1FgnJKwf1NH00BeJzVlEUfIwLjZdAhs-l18ekU3Yikq4IegvXkEydFvpoqnqYA1fncdX9fuaI1ibPCO3t1HIVivSM2jNG00z9yrWX-5gYbUlyJ-7r5EUYDZBgZpogzFg6CPBQrcMtrtPBLuTpyrrR_E6Ck1ZBRV_rO0DXqM-Ku-MWY5X_nLa2CPROqlDfgakbqn038ARmxMbD-xrJBtCG4puNpuUwhwxgGuoVyFqObUDB0gGVoPAu1KjSj4ZD8nLE3sH7_l2pCCuyPEJDZTDWYBCSA7toushvVQCOnHEUwNlIK6Qr9AMZVjJTZEK5tXq1DsvH76J73No_y9CZXUiphjvKOVChsZqymtwyaadUkipCDVNsnK9_mmUttXQKSUxGRo-hsQV72_7cIsjwsrLCGH7DRLEKbHODTjt7pswikdFZVR69acRtbiL_bmaAirG3TXYXn9kyZw6ogPnGojwesjXZbW6nCpqCihQFzGQ6w0vKhj7kIaWvQXgiX5I8FtaN5sC1HTFmXgSUY05C0fQ0CfsFTossamPcAQ5h4fphLTTkpPP2qowiI3BVEE02HKGxl9FCHpvExuwrojvwuNxy_7EE9zzOL_bvKDESeX_aogsc6aAakFo74oGyQVN6LB5rrUYThrgBED6r41pYHQ7opvA2ZY76ixV_pCwt9LtBF8s7Vp-xrreBc_Qq5uQjY6LmDQTVbJ2M4iBCnkhV3B4jSBnlKIxxq2ZkFZwZlIcrP9T5se0KXBvzGZLRE5m_6J9jT8FNKhhho9QIsGomWsw5LtR4ZgFgXbnNlQZ6WNPMnfbNXFtYSVAvOZpa3v3-54kmcfyRa2gBXVN5PIh85fbjn2PL2GM1biqZ_fHU3huAWdH78mBa9S90cF-4_PKCwtUE6M3Uwkaik24uZwohy4F67YmE1jfQqIdcLIPC9Mk9AJj-ja35PI-FYSAdjGdJj57mBnneTW6vP-SXrE99vPtZa0lYa4OYnXpYE8_YJG6WZMaSSrLSQAZX2pQV5u3fTKSXd6EgXCLBZtxkxbsubsgrWa7OpOFDGWnj25zulb2KOrZYN4cAf5VMMqBc9f14Z8MnLMvTJ2JsnJAyzOAH2EH00Kyi2axkNs76KcumtJbrzIMQkmXnCsm0CTIwqPuDR6PxWWmNjKzGT-YVeEzWe26vHvDYYISBZRrMLo5owx1fP592JKM_003-uABJAjiugeYrETonQA68Uhwj63M_LDhHWbS3dNAaEaJ-qjnNMnmZFEcMVjUmLEOTvBMlo1FUHerUXmyh-8S2O4rwwuevQvTsZIw-x8CbQ4YTny_oNa0KKJ-jT56ysCod9UE-OwzrWrgLQcFxDmUrFcAmHUA0eiTFJGCut3YT0UDJEDNrETT9Dv50Et9p_B2IbhpS0sYJVQrMGtXF968tSSrSkcN8YbFmRd-f22EXR7oOANEI185gtDiFMsBSEfXd1dra60ayMoqaXRQ2FM4-agzetZau8XyjF4Hunmly69zgX-SPknE0-XGoOTId0UhjSb77JuJBTvMZDxyCfRtUiMnxRnCHYyg1rrQyiIxsfMwB9Adx0LdQzBLBTCTAGEAiKiNrxlLwG3o7xdai-8A-3XFdbuKpMw2SMYPfHgTwzixuttX44uC4A1kjA1WC59roDEzLvuNnxje77WXqy9C2DR3OHIt_bS1k2q58wTwLXWp56v23AwNNoogOsDovtQ1qF4m0hAGtBzYmPZ3S8DczXaF5TeXIx1VkK_cThLS7-wIhoU5V_F9eWjzjl6GjkUMn8FW0jqmTsO56auyzztDuxWnoBL5xTrM4epvbqKSk-Oo4k0fKCp_TlHary_ufEoLudY0iVtHUR6UxMn-8cbBHHkRkTj5G8AH2o5OGdFxtSXByTfZtOIJcEgIgKDu18rF37Jrv9ppC0EQqEQLNgWw45S2SbkSMRGv3AvU24Oy_ClfS7JhWrlGZTxIb8_oM958lL6aAVZsOVAHss9GdFxIw-ywlD-HAckWctbyquEUZQDfGPDhFymAWqbQW70jrTzcHW_Jjf0i6pdbCjDz1XP1LbTpVXcg_SGKCY4PYGCStwWf6xmaO6JcbYLyqv3TrBA23uiF3bHjX6rAqPw3Bqb6Z3sI8u50de9y6jiJma0fzUev6uEJt9pnqi1MA9ent1s3oKGkrgbX0uAQ0mrlZNNUuTLrIJMO---51BoVqQRViR4mmGIfdb1MpMwcF2HmRfVGuWTb-C50NDHZCb7x3BIlWj_5Ithwf4HNJTuRRWLO4RJ35yi_KuCF2l95ozR-h6GXdrb44pPj9uA1DvAykaYntGW_0IBZZoPoNfOKJSC_ZXXj0fG3SbeIK3MhgGUKr3NpFmm3BWbJXEF-PZlvvylEwKtZeVNFtorvOSS4F3ANorFPj_K8BFcU-MyLakPNrCBIiw8MzzgRHyO6PfySOVP78zyPNg_3mYMEnn_jnFlTLA4PHzABdxbumd0K09IHvZquTYorsNcrSsxWP0atTYG_fKH41eK6uir40vzI_unFjHXhxm5K5OiWC3LqXy6q2FZVxUaoWqF_1jzg1TeM01V6pNkVU2F2rxO9IrR8rym0w6m3REPqCNkkUo2icZ6srRWDaSJMaHd-qCEJKWsmqdnvVGa04Hk612u7i4HoCbakclXlkORzBHLVR-1XwlC2Bo_ehmVpqbWnHO7bFh5ngfFU5oQYEUsmL-J_qtMTxnAP5dFI3hD3cfQol5r2aTCn8c0qvLo7CYW-p19BzYBn8FDOqPc353e9KiIWVlYNuJSw2wHdZ5sI55lTdC94bL0pvy1Og9C5E1vJF91c3LY3fWkAFHbPWp_tQ3ORENSMxp3pzfAKRcKILpBmdrCvsk_VU14p0ijgYr4Xtl39p65jU0sqUH_LjDVS4GPXp_qObRdPO2awTycteRVXUc0V56ODwG1zU-JhtB7cs7eAXtjlEgig8VCEXW1kF608joYrlrDRMzvwoE2tzRLxzbkpWmCOARu3XzVKf35_qCkeWfAISdo0ihEtHSha6MJn1NLsOXXhGf2JqKD8WscPg2CSTaOV7MZM2Ipubulbwfw2jhAdT9c9CEcEnu-G38B8kCbbNYRrb5saF-cw7BVj3y7Ncuin0hbbRpX3dkXHKtSJgcg3JU4XOhwW1Wn9stvh3dE_exFNntgUkdOjXUp1XUbbH72yLdD9GjoG24XdMekDQ3JguQp-_V678R31CG46nlwSECcyMbFWTeNt5weNnPA2qRzoywsd2zJWR76NgXdt9X4l89ohStp044qFH-z0SdTviBIqjgQSp4ntNGrzIiPEXuMBUpysEsQFQvHDde4dw-qf9GNkdqMe_wYjsjcF1RBP0-i9DRCotHHvmwZBye8-ehQ5c_4HIGGj0vKvJGVwl1wDFU-atPFTHJ6tHk8_-0SvrNQKfaR3upzdN5ntwyQ4CGcfDyADhhAco-ft4YKo2-GXXKSrhH307mRCTmuROBSBP8kuNgEOYMVsbUFp3Yq9wRR_CJBEhvfIQYIc507MZhjYiMRkB2uvY5v6n4ji7HWcdxTp5grUd2xcv5Y0HHX6lMK333lfEBeegY2_tL5IKCsrTDZ_309twAkBXnQyjrrzBLRf7fi6Dx4UUdVfXMzdGUGbwWYzWqK70LxCdkITIdFw_fLCm72jZQe19JrHpRvYGspcpm-jb_G8t0L37QhNB2_iZXOMwVJABNpGffcNz7G7DvUGCF-mYa13uJsnBg_QIrO-ZfJpA6qI4H9ivSW7VLi_sVh_ozT4cl_K822ci1drOoeM2Jm7dKrysLbyxB9E1KqROEG7TlnqhZlxmN2znDDV8UNZElk9maJSpXysxMtRtf_8Kq_rxbzLvDcyw0-QPMpmimy_IbmtJV-g3WHKndThr33AR2h0u_Jnwbfu4oaLJbfi-hIwkePbeFi9E1JN9bbLX4uVFv1-6F7ThScFaQL9pk14fG8mFVvohzcUIVuOgSubv0PEvLklLNk5WWC4B5TkLXfUjKxlXc7w1pHuLg3pEvPcIPA9CT9g2A1Wym7gbxGvuNLT27xZGpjOVdNvXXLDJ8J1-jdKPQZ0wd3IbwhP-jEh7DL4sj2ZaSOJ1QB1ULpfkZeq8Vg-H7BLLzXlC09CQwEZI2Ehaj7kyajZlyiXx8TQwdEjxjzETPnuqPKO8tTNjkTrj2hzyIhXQJ5hnKn5OeDeJxU5dRuNSe25R9rOJknTVZlv5cponvn_NjQhCw3S5VGzVOka8nbglPM5cw7EeaJ_t1e7t-QRO5NbAhpjIzGrKvqtBuqzXyVxb63WoUUwWXTEz1f8xx5SsPslkH55wWfoRYIM9KzAAZxemMLiLfTzHVc8gwXGtYVHv9DAwt0wOqcMxfCGCpJIMa4hfmtlgZV6DDAfiz5TfErhGNQFzDNtqw9UMVtPbLsAXL7RJqmwKkkulk6SEDbEmEPxaR4Mu2S7DvuJHHG_ENf1LI3p1CHl77jqQhdKr2Mha5Wut6454233pQFlpXxd8DsPjynY_tEdCYCW6I85FhC_OEq4S-aC-NqTdIPCVVSqflSyvq-Px7qhbM3Dd-20c7NqPCJNY75nSlawBn5JNoPQSG3yINI9GWxboCU_qtIEZXzGfKb4mFnZ9xY5aRL7yuLuARtPuka5Xab4ZXO1wr52OBl4Kir8Wfl0b6TO_5C8Q9EWhOc5L3Ym2lV6UF37J8ikGiY7za7zRRxs90zZQfBhuzgizCU_PP4uVAxhyC0gSDhytOK_MdO6PCNvkIDZvyBnjT4W_Zku4Sf3MXUgFxo7W8Q0Ipus1RUvIM-EZD-2yEKCDEcORF8H9kZb2kP7IZgcBp4_GSzyktDN5VkfnCiU8qYacx07ZFataXiXb0SQzTAtoYr13Y28hWk75xbCYeTNBGLlwQl112Hl2xSdoErMPUfMxXlZfdyGyaY_Q9uBrM48flEHec3QjNSgHCbibJGNp3HZE2gBozd1jcbcC9nLNotrJ3ONBAbRA4tEP6JNorNrCl9_bN3iw5975XWy4SwBssarhSG0Pbq9dsdRtE2YyYRUTovy1y_1zFZLBlYXRbabVvYe-cLeVJKi_UGGcBbfLeor_XWOUGB48V_pBLD2qPQGFOzJy7_qOLD2uzHynpBct91kz2KUZ-IX6tZO7cpnQFCxnNfzzNTzlz_4VcN1RDBCAH-U2Y3SyfhtVDXwJwCcKAY1ant3hmtTtFqRekvgtTi0T7rXNHlJxE9FT5bL4P6q73HRq0pSz94NNuxS4J6-X4qNJjjJnpuRLfi_U67Op8V1YUPjRlLDGDW_bpmzFMcVulyyOdIJZTFBSEHxhb5fGpLp1T8mH94hwAbQ9MFNujT0O9_fOq8YjJCiY4jOOaG6vwn0TONeuMH3X8BZ4wfg6xWmQEhEX9EcMfQ0xcrrPGDgVhzuaRCB25IvbHOLBuQEE0UvuvT2226Dl7xj1IHFqHAywccZPuj0NCQYXm6u1Yc8o3XB7HbTxQfIQbOsA2PK5xih2mlsdp1KXUBeMTWJZ19EZ74rxpKPrUXGIB5FUl8_mRVjvnYuM0OgweL1twHCQmRFemfNpfRi1cZbGhmOJQNwAoNe8TDfjQWLFbXYz-7HYptXCN5iqFCJeXN_DnD1N9WOoktYfnhU4BpxIe90gdnaO8qE7TyHToIVl4QU4s2_gMzCnqJPKaWFrldfanwh2lHmJqj7ZRVe69nP6NpEYqWd8G6wVMLQiq9IfUFwLi6Mxatx73HoUeV5Xx0BC_71kFs40VTPI2313mLz8wPPkrPvnDYraCDixDkPFZG96pbdLARjONwntTQEH-rxlTkKgCmksrr25-7B9mBVEtxz8Tez2OxiGcVnWnGCLnVqiijo0Yr8q45ZGKoCSov8MSLS_mIHE2Q8VMZ_0WLy4I-rPkn3Ouix310Ds8FEzLPPBILgB7iH7oaXuPxGS5-bKPQH3DEdaNj3yf9vMdFrW7_Y3-zcgQ9kL68T5sS1laG2WJG_lnVdhxzjx8GyZ9wRoJyF6D38-4YtWc8Z14I3lB_kAhK01IKpi0URqFY7_71wcndO38ApYhr3dgcgzgpSXXKwsyOmF2iEE0zEflCHLnb7Byao21Co=\",\"summary\":[]},{\"id\":\"ig_028d7fb658c136b3016a5ce5a91890819fa161dd35e5e7c1b1\",\"type\":\"image_generation_call\",\"status\":\"generating\",\"action\":\"generate\",\"background\":\"opaque\",\"output_format\":\"jpeg\",\"quality\":\"low\",\"result\":\"/9j/4AAQSkZJRgABAQAAAQABAAD/62FlSlACEQAAAAEAAGFbanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAAYTVqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjY1M2EzZTVkLThlNzUtNDA0Ni1iNDU2LWU1MDRjMThkODA4NAAAABf9anVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAAJ0Wp1bWIAAAA7anVtZEDLDDK7ikidpwsq1vR/Q2kTYzJwYS5pY29uAAAAABhjMnNo7jOSha7DqlpqKw+PkKJzMQAAABdiZmRiAGltYWdlL3N2Zyt4bWwAAAAJd2JpZGI8c3ZnIHdpZHRoPSI3MTYiIGhlaWdodD0iNzE2IiB2aWV3Qm94PSIwIDAgNzE2IDcxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUwOC43NDkgMzE3LjM5OUM1MTYuNzc3IDI4Ny4zMTQgNTA4Ljk5MSAyNTMuODg0IDQ4NS4zODkgMjMwLjI4MkM0NjEuNzg4IDIwNi42ODEgNDI4LjM2IDE5OC44OTUgMzk4LjI3MyAyMDYuOTIzQzM3Ni4yMzEgMTg0LjkyOCAzNDMuMzkgMTc0Ljk1NiAzMTEuMTQ4IDE4My41OTZDMjc4LjkwNiAxOTIuMjM0IDI1NS40NSAyMTcuMjkyIDI0Ny4zNiAyNDcuMzYxQzIxNy4yOTEgMjU1LjQ1MSAxOTIuMjMzIDI3OC45MSAxODMuNTk1IDMxMS4xNDlDMTc0Ljk1NyAzNDMuMzkxIDE4NC45MjcgMzc2LjIzMiAyMDYuOTI0IDM5OC4yNzRDMTk4Ljg5NiA0MjguMzU5IDIwNi42ODMgNDYxLjc4OSAyMzAuMjg0IDQ4NS4zOTFDMjUzLjg4NSA1MDguOTkyIDI4Ny4zMTMgNTE2Ljc3OSAzMTcuNDAxIDUwOC43NUMzMzkuNDQyIDUzMC43NDUgMzcyLjI4NiA1NDAuNzE3IDQwNC41MjUgNTMyLjA3OUM0MzYuNzY3IDUyMy40NDEgNDYwLjIyMyA0OTguMzg0IDQ2OC4zMTMgNDY4LjMxNUM0OTguMzgzIDQ2MC4yMjQgNTIzLjQ0IDQzNi43NjYgNTMyLjA3OCA0MDQuNTI2QzU0MC43MTYgMzcyLjI4NSA1MzAuNzQ3IDMzOS40NDMgNTA4Ljc0OSAzMTcuNDAyVjMxNy4zOTlaTTQ3MC44OTkgMjQ0Ljc3NkM0ODYuODkyIDI2MC43NyA0OTMuNDg4IDI4Mi42MDEgNDkwLjY4NyAzMDMuNDEyTDQxNS41NzcgMjYwLjA0NkM0MTIuNDExIDI1OC4yMTggNDA4LjUwOSAyNTguMjE4IDQwNS4zNDUgMjYwLjA0NkwzMTcuNDAxIDMxMC44MlYyNzcuNTI2QzMxNy40MDEgMjc1LjE5MSAzMTguNjUyIDI3My4wMDUgMzIwLjY3NiAyNzEuODM3TDM4Ny42NDQgMjMzLjE3NEM0MTQuMTc4IDIxOC4zNTMgNDQ4LjM0NiAyMjIuMjIzIDQ3MC45MDEgMjQ0Ljc3Nkg0NzAuODk5Wk0zNTcuODM3IDMxMS4xNDRMMzk4LjI3NSAzMzQuNDkxVjM4MS4xODVMMzU3LjgzNyA0MDQuNTMyTDMxNy4zOTggMzgxLjE4NVYzMzQuNDkxTDM1Ny44MzcgMzExLjE0NFpNMjY0Ljc3NiAyNjkuNjkzQzI2NS4yMDcgMjM5LjMwNSAyODUuNjQ0IDIxMS42NDkgMzE2LjQ1MyAyMDMuMzkzQzMzOC4zIDE5Ny41NCAzNjAuNTA1IDIwMi43NDQgMzc3LjEyNyAyMTUuNTczTDMwMi4wMTQgMjU4LjkzN0MyOTguODQ4IDI2MC43NjQgMjk2Ljg5OCAyNjQuMTQ0IDI5Ni44OTggMjY3Ljc5OFYzNjkuMzQ2TDI2OC4wNjUgMzUyLjY5OUMyNjYuMDQzIDM1MS41MzEgMjY0Ljc3NiAzNDkuMzUzIDI2NC43NzYgMzQ3LjAxN1YyNjkuNjkxVjI2OS42OTNaTTIwMy4zOTEgMzE2LjQ1NEMyMDkuMjQ0IDI5NC42MDggMjI0Ljg1NCAyNzcuOTc4IDI0NC4yNzYgMjY5Ljk5OVYzNTYuNzNDMjQ0LjI3NiAzNjAuMzg0IDI0Ni4yMjYgMzYzLjc2MyAyNDkuMzkyIDM2NS41OTFMMzM3LjMzNyA0MTYuMzY1TDMwOC41MDMgNDMzLjAxM0MzMDYuNDgxIDQzNC4xODEgMzAzLjk2MSA0MzQuMTg4IDMwMS45MzkgNDMzLjAyTDIzNC45NzEgMzk0LjM1N0MyMDguODY4IDM3OC43ODkgMTk1LjEzOCAzNDcuMjYxIDIwMy4zOTEgMzE2LjQ1NFpNMjQ0Ljc3NSA0NzAuOUMyMjguNzgxIDQ1NC45MDYgMjIyLjE4NiA0MzMuMDc1IDIyNC45ODYgNDEyLjI2NEwzMDAuMDk2IDQ1NS42M0MzMDMuMjYzIDQ1Ny40NTcgMzA3LjE2NCA0NTcuNDU3IDMxMC4zMjggNDU1LjYzTDM5OC4yNzMgNDA0Ljg1NlY0MzguMTQ5QzM5OC4yNzMgNDQwLjQ4NSAzOTcuMDIyIDQ0Mi42NzEgMzk0Ljk5NyA0NDMuODM5TDMyOC4wMjkgNDgyLjUwMkMzMDEuNDk1IDQ5Ny4zMjIgMjY3LjMyNyA0OTMuNDUyIDI0NC43NzIgNDcwLjlIMjQ0Ljc3NVpNNDUwLjg5NyA0NDUuOTgyQzQ1MC40NjYgNDc2LjM3MSA0MzAuMDI5IDUwNC4wMjcgMzk5LjIyIDUxMi4yODNDMzc3LjM3MyA1MTguMTM2IDM1NS4xNjggNTEyLjkzMiAzMzguNTQ3IDUwMC4xMDJMNDEzLjY1OSA0NTYuNzM4QzQxNi44MjYgNDU0LjkxMSA0MTguNzc1IDQ1MS41MzIgNDE4Ljc3NSA0NDcuODc3VjM0Ni4zMjlMNDQ3LjYwOSAzNjIuOTc3QzQ0OS42MzEgMzY0LjE0NSA0NTAuODk3IDM2Ni4zMjMgNDUwLjg5NyAzNjguNjU5VjQ0NS45ODVWNDQ1Ljk4MlpNNTEyLjI4MiAzOTkuMjIxQzUwNi40MjkgNDIxLjA2OCA0OTAuODE5IDQzNy42OTcgNDcxLjM5NyA0NDUuNjc2VjM1OC45NDZDNDcxLjM5NyAzNTUuMjkyIDQ2OS40NDggMzUxLjkxMiA0NjYuMjgxIDM1MC4wODVMMzc4LjMzNiAyOTkuMzExTDQwNy4xNyAyODIuNjYzQzQwOS4xOTIgMjgxLjQ5NSA0MTEuNzEyIDI4MS40ODcgNDEzLjczNCAyODIuNjU1TDQ4MC43MDIgMzIxLjMxOEM1MDYuODA1IDMzNi44ODcgNTIwLjUzNiAzNjguNDE1IDUxMi4yODIgMzk5LjIyMVoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgoAAAF+anVtYgAAAEFqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmFjdGlvbnMudjIAAAAAGGMyc2hdSkvjFmKRxUgNqSNNJa5ZAAABNWNib3KhZ2FjdGlvbnODpGZhY3Rpb25sYzJwYS5jcmVhdGVkZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVpZ3B0LWltYWdlZ3ZlcnNpb25jMi4wcWRpZ2l0YWxTb3VyY2VUeXBleEZodHRwOi8vY3YuaXB0Yy5vcmcvbmV3c2NvZGVzL2RpZ2l0YWxzb3VyY2V0eXBlL3RyYWluZWRBbGdvcml0aG1pY01lZGlhomZhY3Rpb25uYzJwYS5jb252ZXJ0ZWRkd2hlbsB0MjAyNi0wNy0xOVQwMDowMDowMFqiZmFjdGlvbngYYzJwYS53YXRlcm1hcmtlZC51bmJvdW5kZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBaAAALump1bWIAAABJanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5jZXJ0aWZpY2F0ZS1zdGF0dXMAAAAAGGMyc2htwRZizBAqU+ypnOv4HGAmAAALaWNib3KhaG9jc3BWYWxzgnkFhE1JSUVId29CQUtDQ0JCZ3dnZ1FVQmdrckJnRUZCUWN3QVFFRWdnUUZNSUlFQVRDQm9xSVdCQlErQkh2WmhwRXNxV2tkcUc0YU55NXVZQmdMeXhnUE1qQXlOakEzTVRnd09URXlORGRhTUhjd2RUQk5NQWtHQlNzT0F3SWFCUUFFRkQ1TWZJNVFDNGRzY3hXK3IyNlg2aER1bENESkJCVERzeVNXTkpPaFdlcFNHR3VlRitDcHV0YXdUQUlVVXBRbEI0RzFhb2I1TXhkNGNOYU9yZTlpR2tHQUFCZ1BNakF5TmpBM01UZ3dPVEV5TkRaYW9CRVlEekl3TWpZd056STFNRGt4TWpRMldqQUtCZ2dxaGtqT1BRUURBZ05KQURCR0FpRUE5cTc1WEo2d3VvQS9ESlRXS0F3ekQ1bGw1N3pxdXRRUzdONzFDWVlvRU40Q0lRRGRIcGRvYTUySEQ0OC9zcDh2NmVWNUQxMWFESS85MkVNU3l5dVVxY2pBaGFDQ0F3RXdnZ0w5TUlJQytUQ0NBbjZnQXdJQkFnSVVLNXZHUDVEZXFocTFUV2hVYUZRRlFmNWxUSll3Q2dZSUtvWkl6ajBFQXdNd2dhY3hDekFKQmdOVkJBWVRBbFZUTVJFd0R3WURWUVFJREFoT1pYY2dXVzl5YXpFUk1BOEdBMVVFQnd3SVRtVjNJRmx2Y21zeEV6QVJCZ05WQkFvTUNsUnlkV1p2SUVsdVl5NHhGREFTQmdOVkJBc01DME5CSUVScGRtbHphVzl1TVJvd0dBWUpLb1pJaHZjTkFRa0JGZ3RqWVVCMGNuVm1ieTVoYVRFck1Da0dBMVVFQXd3aVZISjFabThnUXpKUVFTQkRiR0ZwYlNCVGFXZHVhVzVuSUVOQklDZ3lNREkxS1RBZUZ3MHlOakEzTVRjd01EQXpNakZhRncweU5qQTRNVFl3TURBek1qRmFNSUdsTVFzd0NRWURWUVFHRXdKVlV6RVJNQThHQTFVRUNBd0lUbVYzSUZsdmNtc3hFVEFQQmdOVkJBY01DRTVsZHlCWmIzSnJNUk13RVFZRFZRUUtEQXBVY25WbWJ5QkpibU11TVJRd0VnWURWUVFMREF0RFFTQkVhWFpwYzJsdmJqRWFNQmdHQ1NxR1NJYjNEUUVKQVJZTFkyRkFkSEoxWm04dVlXa3hLVEFuQmdOVkJBTU1JRlJ5ZFdadklFTXlVRUVnVDBOVFVDQlNaWE53YjI1a1pYSWdLREl3TWpVcE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVpFQVo1NnFMcG1ncU4zb3ZMcWg0VFh6cWJHTDV2dndCczgrWDhHdVhxOWE4SXZHL3lzNG5ycWRlbms1U2xaUEJZdmJYUlIzT0JMVHB6UkpoWUxLZnhxT0JoekNCaERBZEJnTlZIUTRFRmdRVVBnUjcyWWFSTEtscEhhaHVHamN1Ym1BWUM4c3dId1lEVlIwakJCZ3dGb0FVdzdNa2xqU1RvVm5xVWhocm5oZmdxYnJXc0V3d0RBWURWUjBUQVFIL0JBSXdBREFPQmdOVkhROEJBZjhFQkFNQ0I0QXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUhBd2t3RHdZSkt3WUJCUVVITUFFRkJBSUZBREFLQmdncWhrak9QUVFEQXdOcEFEQm1BakVBdTROOElsVksrZVBWd1cxTFBCUzVOU2F3ZkRvM1ZmRUI4TTlrUC9WL0dEdGlpU1A1NUROWlZKd0JFNHorM3ZVWUFqRUEzaHNZakdVL2FpaG5ZMGFEU3pPQkFvT0ZJVFpKQWYxK1ozTEVZM0ZRcmdOd2VuNHhuRGM4ZHhhL0w3cUQzL2RieQXMTUlJRVZBb0JBS0NDQkUwd2dnUkpCZ2tyQmdFRkJRY3dBUUVFZ2dRNk1JSUVOakNCb3FJV0JCVEwySTQyaWlFUmN5eTU3NG9hbzJxZXZGTk1RQmdQTWpBeU5qQTNNVGd3T1RFMU1qVmFNSGN3ZFRCTk1Ba0dCU3NPQXdJYUJRQUVGSUFnOWJ6aUpPbHR2Tlp2eGhjcFpYd2t5UEg5QkJRRDFWK3Zmb1BsQkIxWmdDZEtOUDlGL2V0SmVBSVVNT2loOEtXSlFtdlN1WUpJUjVrWjNCWTNBc3VBQUJnUE1qQXlOakEzTVRnd09URTFNalZhb0JFWUR6SXdNall3TnpJMU1Ea3hOVEkxV2pBS0JnZ3Foa2pPUFFRREF3Tm9BREJsQWpFQWt1Z0g1TklqOXU3Y2F5YTB2TmluN09rMExIeE5XaW9WencvS1poaTRpWlFsTGx3SGpnbTNLZmZ5T0JEQWtkZ1VBakJOcmhCS1ZYQ1M0bk01a2wwRSs4dXZsNmM4ajV2MENDYWc5Z2JJK0plOXVaMnBQL3hzeDZvQzVCbmNWQnNSeUVxZ2dnTVhNSUlERXpDQ0F3OHdnZ0tWb0FNQ0FRSUNGQVBRZlRTU2JWY1pjTWJZRkpCTWM4WFQ1WnZnTUFvR0NDcUdTTTQ5QkFNRE1JR29NUXN3Q1FZRFZRUUdFd0pWVXpFUk1BOEdBMVVFQ0F3SVRtVjNJRmx2Y21zeEVUQVBCZ05WQkFjTUNFNWxkeUJaYjNKck1STXdFUVlEVlFRS0RBcFVjblZtYnlCSmJtTXVNUlF3RWdZRFZRUUxEQXREUVNCRWFYWnBjMmx2YmpFYU1CZ0dDU3FHU0liM0RRRUpBUllMWTJGQWRISjFabTh1WVdreExEQXFCZ05WQkFNTUkxUnlkV1p2SUVNeVVFRWdVbTl2ZENCRFFTQW9NakF5TlN3Z1JVTkRJRkF6T0RRcE1CNFhEVEkyTURVeE1USXpOREl5TlZvWERUTTJNRFV3T0RJek5ESXlOVm93Z1o0eEN6QUpCZ05WQkFZVEFsVlRNUkV3RHdZRFZRUUlEQWhPWlhjZ1dXOXlhekVSTUE4R0ExVUVCd3dJVG1WM0lGbHZjbXN4RXpBUkJnTlZCQW9NQ2xSeWRXWnZJRWx1WXk0eEZEQVNCZ05WQkFzTUMwTkJJRVJwZG1semFXOXVNUm93R0FZSktvWklodmNOQVFrQkZndGpZVUIwY25WbWJ5NWhhVEVpTUNBR0ExVUVBd3daVkhKMVptOGdVbTl2ZENCUFExTlFJRkpsYzNCdmJtUmxjakIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJHTDMxMnlnb0xYaHJOdkloaUxaeVhMTWU1ajRMSU1EaHJoMHdObFphTDlhV1Buc01WZVVFY1NCUVV1c29uL0pWaVhESSs3YVd5T3BzV3JLVm51cVcwcVhrOVFvNjN2cnlUZGszejlTYVJpbTYySkhOR1FKbkxzQ0lWaUNKN2tkT2FPQmh6Q0JoREFkQmdOVkhRNEVGZ1FVeTlpT05vb2hFWE1zdWUrS0dxTnFucnhUVEVBd0h3WURWUjBqQkJnd0ZvQVVBOVZmcjM2RDVRUWRXWUFuU2pUL1JmM3JTWGd3REFZRFZSMFRBUUgvQkFJd0FEQU9CZ05WSFE4QkFmOEVCQU1DQjRBd0V3WURWUjBsQkF3d0NnWUlLd1lCQlFVSEF3a3dEd1lKS3dZQkJRVUhNQUVGQkFJRkFEQUtCZ2dxaGtqT1BRUURBd05vQURCbEFqRUE3ZTBmaS9mTHpNNFRVOE42OUJyUXpBd1BHZ1RweERwV2hUV2FLcjRIaWJKR21WNUovTFdHNVZUV1VqckdhY2Q4QWpBWEdDVGEzdy9GZk1HVmlkUzFjZFRLckNuaEE2aUlxeTgzOE9sQi9sdCtHZU1TYnEydzZ2UVMza3oxc0ZFanh4Zz0AAADDanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaJlF/+7opq9IrrjxiEzjrUgAAAB7Y2JvcqVqZXhjbHVzaW9uc4GiZXN0YXJ0FGZsZW5ndGgZYWdkbmFtZW5qdW1iZiBtYW5pZmVzdGNhbGdmc2hhMjU2ZGhhc2hYIAP5TkXl4191NS6N5LxLsOsH7r80GXXiCSzB6FJOZ6QlY3BhZEkAAAAAAAAAAAAAAAMbanVtYgAAACdqdW1kYzJjbAARABCAAACqADibcQNjMnBhLmNsYWltLnYyAAAAAuxjYm9ypmppbnN0YW5jZUlEeCx4bXA6aWlkOjY0YTdjNjkyLWQ5NTAtNGYwNS04MzUzLTA2YmNmZTlhYTgwNnRjbGFpbV9nZW5lcmF0b3JfaW5mb6RkbmFtZXgYT3BlbkFJIE1lZGlhIFNlcnZpY2UgQVBJZGljb26iY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIGiAoLKucP6DZW3n4G7oYobIrrgNIyysPIIIe95cIrQCd29yZy5jb250ZW50YXV0aC5jMnBhX3JzZjAuNzkuMmtzcGVjVmVyc2lvbmUyLjIuMGlzaWduYXR1cmV4TXNlbGYjanVtYmY9L2MycGEvdXJuOmMycGE6NjUzYTNlNWQtOGU3NS00MDQ2LWI0NTYtZTUwNGMxOGQ4MDg0L2MycGEuc2lnbmF0dXJlcmNyZWF0ZWRfYXNzZXJ0aW9uc4SiY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIGiAoLKucP6DZW3n4G7oYobIrrgNIyysPIIIe95cIrQComN1cmx4KnNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuYWN0aW9ucy52MmRoYXNoWCBSdrAznwM8WZOUtQcQ1wRzPhHjLcFrKo2gZnmx1eGLE6JjdXJseDJzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmNlcnRpZmljYXRlLXN0YXR1c2RoYXNoWCDOxOKbUidd7VeAgFE6yiUOeCDxZ2Qub1+Luar7CkkyuKJjdXJseClzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmhhc2guZGF0YWRoYXNoWCCNWe16fsv3drz877n+3X0wnpu6iTBm8qHNyrRVzPkpqmhkYzp0aXRsZWppbWFnZS5qcGVnY2FsZ2ZzaGEyNTYAAEXOanVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAAEWeY2JvctKEWQdVogEmGCGCWQNyMIIDbjCCAvOgAwIBAgIUUpQlB4G1aob5Mxd4cNaOre9iGkEwCgYIKoZIzj0E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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9lhAHrKMfwR3AJQ0QJhSYC5PQUPeDVQef+9uk4Mqi5f5tMZD5pRErn9dMUbgF8DIDuJfCMq6YVLE7vycgqoIXKt2Yf/bAEMAUDc8RjwyUEZBRlpVUF94yIJ4bm549a+5kcj////////////////////////////////////////////////////bAEMBVVpaeGl464KC6//////////////////////////////////////////////////////////////////////////AABEIBAAEAAMBIgACEQEDEQH/xAAZAAEBAQEBAQAAAAAAAAAAAAAABAUDAQL/xAApEAEAAgEBCAMBAQADAQAAAAAAAQMCBBITFCExQVGRETJxsSJCQ4Fh/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHj1LrLdjDYjrl/AUvUujt28NieuP8VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Z\",\"revised_prompt\":\"Simple flat solid black triangle centered on a plain white background. Minimal vector-style graphic with no shading, gradients, outlines, or textures. Triangle pointing upward (base at bottom), crisp edges, centered both vertically and horizontally, occupying about 40% of the image width. High resolution, clean white background.\",\"size\":\"1024x1024\"},{\"id\":\"msg_028d7fb658c136b3016a5ce5b662b8819fa19ff40122f1c07a\",\"type\":\"message\",\"status\":\"completed\",\"content\":[{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"\"}],\"role\":\"assistant\"}],\"parallel_tool_calls\":true,\"presence_penalty\":0.0,\"previous_response_id\":null,\"prompt_cache_key\":null,\"prompt_cache_retention\":\"in_memory\",\"reasoning\":{\"context\":\"current_turn\",\"effort\":\"medium\",\"mode\":\"standard\",\"summary\":\"detailed\"},\"safety_identifier\":null,\"service_tier\":\"default\",\"store\":false,\"temperature\":1.0,\"text\":{\"format\":{\"type\":\"text\"},\"verbosity\":\"medium\"},\"tool_choice\":{\"type\":\"image_generation\"},\"tool_usage\":{\"image_gen\":{\"input_tokens\":67,\"input_tokens_details\":{\"image_tokens\":0,\"text_tokens\":67},\"output_tokens\":196,\"output_tokens_details\":{\"image_tokens\":196,\"text_tokens\":0},\"total_tokens\":263},\"web_search\":{\"num_requests\":0}},\"tools\":[{\"type\":\"image_generation\",\"background\":\"auto\",\"model\":\"gpt-image-2\",\"moderation\":\"auto\",\"n\":1,\"output_compression\":10,\"output_format\":\"jpeg\",\"quality\":\"low\",\"size\":\"1024x1024\"}],\"top_logprobs\":0,\"top_p\":1.0,\"truncation\":\"disabled\",\"usage\":{\"input_tokens\":2853,\"input_tokens_details\":{\"cache_write_tokens\":0,\"cached_tokens\":0},\"output_tokens\":1256,\"output_tokens_details\":{\"reasoning_tokens\":1152},\"total_tokens\":4109},\"user\":null,\"metadata\":{}},\"sequence_number\":14}\n\n" + } + }, + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://api.openai.com/v1/responses", + "headers": { + "content-type": "application/json" + }, + "body": "{\"model\":\"gpt-5-mini\",\"input\":[{\"role\":\"user\",\"content\":[{\"type\":\"input_text\",\"text\":\"Generate a simple flat black triangle centered on a plain white background.\"}]},{\"type\":\"reasoning\",\"summary\":[],\"encrypted_content\":\"gAAAAABqXOWpnAP0UBYvlSBekoHJCZH4q8xzRle879t05tnZpveHS-lRgcpzHWBcNwm8Qs8hBSGdQZgdOM-EKf0EJvBo27ynkLRL18hL29zaj_TqlNVZW3P9a0cij_UGUhhh7JFDXUJcxn2CNJs6hfZIs5vjS3zd0QvDSW-iCRPqT_NaT-VJIyXwZaZI8txwYY-buZg83BwkZidY1AGGv12xkyKCn7vhrTf_JM3tDgiWIIOd5bhaYLDlId3n_IKixf5mo8CKN0oyZyPz01XK82EwKVg8rkpdwW7XOiirQ7Ro0-oT_0TJCRa2uYxAyjzCoYWNXPsouRiyter3YdetjJkUR0-yNwmsJVv9ofkaeL5x5R7OcrA_YMsuqyXyyPIl1vpDqy7iA_U_4gwDnDJi5mOg3Y5fE4a3MwewwQgVcZx427UhTLltyaPCWZIcNVhey57hJxCt3RjWZGSWV-GMV2GC2dD5dHlXQiiCJ_Mkr3xyPXdjTyoe94KQlsfmO267RN3NyW74L2TqPEP_HnR0TyNtg-nClTYQPuhvx34nzqZQresJwksxHQU_W9AoBD2DTQMVL9DAoayVy5aB0fyyzwrT82xLkMP6XredNROM-qJSuBWRVVsG4f_mFriYv0yFgjwrtohLlGpPKEbjIsEKBFCyfQ2ERIVYYv8I80EaVTwPuKljMJFcYDa065ZNh8k-rFhg2Q_iQB-yLPH7kx4de3qvYrxZ7DTY2U5wVvZdPmW7sYzqN-8RnktWmUx-fSoGxVbClW6c7Gn_GkE9FmZ8qYcCRizpzSWfec41lS2dD-9g0Biow04K65k6R9Z1-TU-JMNgEn6t_1W5sOL8izzdXOTVZXxe-zlFbm_PNWpE4rMRuL8usVOB-cD4NVACqBvYQOrZ9Cp7scYfDX9KockxtPOpy6gKsn1VJdNWnwNgH_aKKrSO8WFePD3Mcw167HcPQpZ_wnJouWaPrFWKC_k0Iz6CFHvuu_WoTiREItFp10FibQEe-kQJ1PANwxWhjwBKsW7zJDOhhEtWrYpPUZq4eA6OyZgAzVQ6KMvgP38ZR0NxFoi4qwbcPoNY_Fp3AvcmTKLdQiOQ54DSM24LDQbT2LusMaQjr6pKuOwrj5glaGjK4JmBGu_6J05TIdZ6V7WLn39R3PU8tVI3RdEpam3Go6wBjU7yu4cp5O4eWc3XzKzh8bI5f1i_-toPgtJxodv6xGFMErYxxXgD5nWLo_0ELXd4SlcVKGA6o9vpctrkE9fNdWL6CDpXn6mh444E5gJMiPWGG5ZsdtolN1EVgesNwQBwFu4rkWQ5OwzT2liqOW4hEQTHI6W-L2jmKxejveBX0ai2FCmHBrb8Zboi17-CdK8yr3A6oUqUh6dcu5s_xiMAT-TyhOlCdWKJav-wjutKx4IJdACOSKZV6ePToTg43Hsm5PPKWgyg-hdb0zE6uCKKcjYT31zRqYCqhhrWbkAh4Dj7vZgNyZ0RhLfDcVZ5Oa-vAstRTv0MHzv9wOSitIQDMQdw8AJNQwgJfzc_TVtGNOi0-cR7tJjrcZZrMrLDXscgQc3MbQXoKtiiXNuR6nxX53rFFsEVC-J8T2T0pLFqsI9neSh69DGhdXS2PvggM1GD1ibNPbwcY_2uKPlImYoy8eyq1uXZ1GmgIfuFSV4wwct59BfV2l_WQ6nNOwmjCsY_KOO3yOkmdpQHOOwNbiHWpQ0CQ-KVnzpxqz9PaHpBhJwgcnOrAs9LXnWCDOETgnR8tc8MYQEAxgWLvEC1wpqGrOSZSCWoaZTUtQ52IrNJNB3qazGeIgOJSi_C42U2mnPhC34Bxcdutp0lYf_NVmiPzPil7L-qBSoyvAcrhJ6RM_39z77lXgNr7Zrl6wNbYej3qo6t8MoHyCxtnMHO8L_Dk2ug0EGl65TK6Hp3lqPTPY57XaXfxVkjUZczaKpxP4HeFAbRIVYh5Ygdi1beUUMqtgyG8_UF23ccgTLcwN4NminghUqdj0RJtZNxP8RIr-3F4qpWCAmTqthfZ1ncdaRHv90j0EnxoGdoYBY9jgkqFE8BOLrhD41ykwBSSiqx9JQTeMwZ5yLVYJSxshUhwP1OBeu97vaS6gfDqpG2anRXpf9dcqH5P-RCrPB1E-BphEQw3BFDeNC57Bwb4Sbt29wZTu87yqQO6WIrUOLK2psyG6lllPrlOz0MYko-rJMnDIGiQ92S4ddeh5Kqklia1q9SHIP36mxqN86gBczqJKmvutiIwBnZb8yLSNy04ppCb9fhqCFaIMazEXChkxwkQv2730Ffx4wxMRqJJbSFvC_4yg3sMgNPgBwbHGIpQTRh4R_4fKGaFnT1dNRrrPUraRcQZQSIpV81G3mxtyRWxxKyCZ-TWwOvE7SmTZu84UFPEUFA5MpLsM4SPw_loZTCTNs-4zkNbKD3dEYJjDafU3xS0eEZoBmHaGsG6UuRNjq_Es2qqOb7HPvHQU7OsDuvNju7t-RfBDFydfkTrBODvDLkKr8Y9erd81wzq8vwHswO-qT90coHnacAn7-AI6Dx-rR0wkSwJl9HIQ7pC5-zDHyDAa-Rt7gXZJxyEyoRdB6Xr-9xIrLvyWHjhtmmqY7kw9OpObgjw031cKnmcYtvykXT9dG4vb_ZJosy0froYxZMMlnmV3TT27Vhm85apQ53wCM2D8lp8xc4yUlkSBF-Mob28bm_z8gaymSIeMkMk46TROw86nKqJG_MwjE7394LbTQ4AQL63UdabVbJ-vE7w_D7ke3RQ93xFC2GYybqTQqA-oL4TGW4GTANjHNBYGFPrZLQgB57QWNsK0zOJ2w6X8zcF4pl4fkmOlRFUhjFMmOhCRRbuW3U-2h8012xhpYhTTGpWR0ODa891aN7NlxAC8Y6nMsYhrht0mJltMcep5D8lnXEytkWlIOnOVCDsj5jjYIgj5ZfLcmFcuoYFBr5XOGkt1PyCUOSPL8_WQOkousHn3sdONSyUmqpGar1YGsMAiBt-f4ZldsxN9pTslTwP_duhMPzGfRLXF4frnGBzaZHvxnV4eBCtEprRZAdM50bbD6QOhsudTVfZyv6I1c9XJgnxSVvfak4-niMex8lZ22pmnvi5-METukxdt0T9ZgI9CdPCs5aU3GpAZ9T1WMqRYox4MsuRAlIUGlyRDWa94fvtpoOi_6KI0r6-sM859y7xIaILPRdY0P2wnqVxtVOXhpi10mEU3BFz9eaBC1GifG7IzHH4rIqtohpK-Xi3J1U2iNEdO5JHqVkubzth-3iv0InsMYYrM3W0jHn9sbMYAGOvyFZLBIFStpCmLbIgBLT16G0nCEZWwaZZzv8o_o7yghO4I8f-G5G1u-55Lfa2P5073ILkQXyl-pYp8n3P2lrOHb3Ujq3KOZ78YNgKwUtg7JiVRs3Xz6AurppkNlauEDOOmIjY8OtcbPxFXoDrC1qXv5DZSD1RnTJSScF4YGXeFW1shMK6l6BI3Mi1_gQ4isftA_Ow-WDCZ1grgazDcpKOYzbKI8UBJwOLkueNx3ieQ9HTaVg3rQ2eLN_znh_StlW0GH0vZQCi2fBONUXD1OueNnKpkGy-iz5iXL7XOAnkLbLHqujcNhkL1pGJGQOHYaahnXb8gXMy6I7tIuGiIfe7GV8X3u0hac2s6ViKt4gyh1njIGdjYCyvm1bXu7pNNGUkdm2D-CsYEyjRwkeGYC4lVwbRqMM8IWB-baNLioS28dkviSTIX96a5FVrhzUGPe0TdLgCP77SSky09BXweWwXpYDeh0me1EAbI9ePGouKLvheoltIEF9C5m5XR-CKcaTPz0K1UBxWQLy8IWtU5D2F_Jhirc0nPsALWXvUxAZRMP1Jt4fGomIo8sX97PaDNXPalG2tc2lBxDHbI2g_AwzZGJj-97iMxTWuav3EJlqQThL1QAQ65kicLUeeZGvjT8vNK3AIKfp5tU6XimhtyZ2ezdZdywL68AbqVT6h6b3RTZufY7L82c96RRzx4csMp6WdGFHGtBvE7ZrCUQbxfE1MNfax2HlEViX4iIN1LA6rUisiG4ZGimb_YjkbtWW1MKVFbPUHAPVqOb4-w2vG5FVIhtdvhdk1KY2rFN6nSuR0rHKu3R5DZpAsplAVkGwi7EmFmPC7TbpS7fJDODubr69KD64xptKC9ebP1DbYZyRWMTwHnD7n2BVQT4vJtu4IaMwjlGduJyV-nV6r5k0WCwk5jwuV_S9Z5TZzPuJMFh7FhTzDEQzFPCzyjRfIYJIFOVjdWZKe2BPqi0r671xO0XoBCl-EHxqZ9QAU_ufz4PmhiL5WVcDG4ta0iNXzkQMcNIjfx0M79_f_DtFgfUPxaAVcOSFIupx2nN8nFqWqzmR1NbB6Swlssw62iYYenC9aCBGzdwxmun-EukSp83B_Mt9sJKk5ejeslc8iEFUTclxWcJkNjdbx8qvqTWzG2fedqcTsWdbk3Ezlr6uH-V9Wg4C8poFiRyztGfRxdwOFki_a3RM1M4DihrJMyca-FRrvudnp-AiJsgaxGRObHwnADvSCRh4cUrjOBYNMHaGiznk4MpEUEu3S2L5q1Slnc5cFs8Ww99H2Br-AN-wI5wYX6EmP-L5olxFUeMFNqELrk3FQJ8xEi_3yjYXT4mO2F_AoHzOVE3cdITR6LKmPI81_z7T2sOxszEnOn-hQNeC-BpwMVJ9bKgM1W3BbQGFBBB_izGAq0WGgajr-ryJ2tSsC5ijOl5usxis-oFwTmE7QVdW17JmUGZ9wqgFhkQv_O84so5d8_cRHzPuPIWRRygmXrS2PKNm1k5n67WC1oNa6mq6eO8IXAqeAyIugBIe0fVySnB-4v8f7Ca9ASIrY1Zt0jnH0ls9FLN3fIWfXaGTjZHp1uE2129YCyyFkLuRHRlrbphyOFmQps-oVikkB3pwbV3ZtLYNAEjsRVpUMQ1LuKt3NFIswavOq-Gnv1tYaOH325YxAJ_TUJBKKXmwHyXmecymZgDDuv7K5xGkg1Hpiz0Hubl3rbgJj-5Ms5eC_636-2Rj_FIBc_Vs2phBsSvYqgIYprENgd7Mx-CRI9eNE4R7qGKoAwyx2ccojKP5tmqnaO3Dg3T297hnUrHy4o49f9M3NOTOjGLhQTatAPXdbAgeoHZZEud3ZfYMtpAnqH1RLtqt6Lr8K7YbcnL9an0HM7f-Cv6C1Jgl6IU-axkPyLLTG7Az0AYvRDDvh4RadwKHiAVAoOqRODbEwfwrnsBoCbBRr1ahCE21lFnaMPKUectY45Fq6BPdTIgM3_kznWPVlu6HCuj72sQyRKykYHtSuekx_M4gG2pnbprvt6nLKewuOYCbMQAk7B8s8yCwT6TqT2o9gGxSHoH1NgwAWXVEVjZ14upn1wHWq7sR729Ph7jvHwIiRsALVpAo5En6vd6uvcA8MA8G8-Q9yC3G7wuGw51IhknZphdWRLZ99veJCqACplM8MW3trtMI1isYnuGG5VU9LIgddQCLHuSqJCfWf7uEudvy43nZ-u9LKHPqIYCu_V-WzPTbqFLCb2QeFXetvG4SZahpiwRW6gnP8ZDLXLOPuqpPGPTgf14kHRbHnXmYTA3-IitF4ZTFXUrg-mCJTOawfsnIt7SdCo57HA-dznt5M3ZvsRIvHrRLjMyb_NbvUPTdu7-YD4PbZ_tFduovizKb4XdZIq_OnNtKku2jy0DYb52Gz-5T9OEm2we2Dqd-WvGxy55Ezke75C8MjLgEeJL3eqQeqdGiiXpXtP3LWl99iKbKpnaxTHipFUAtxyf6cZ68gReZqIPIwj-hnqmSiwJj-9fpAMtzhNJ-893myYRH-KgfMnObHsFH9k3vB-D5CalDkLcK_SlS1g9GzeAKBPAwLpQPIQRHQTUxIQBsGnkiALF4d97AJTCETJsBQ4L2ajxnUs1uZe7l4Y_06vL-nfwH5q_e1t08aUwGvbbrPBzB_eOFbc_20SJwNmJjAPF_gl1ar_o0fbTZUWBfXmUqbWwsiiVu2EQLjfuOE8Y2-Scfl3Hyq3HUejJki6HU2j1hQNhqi8opi-lTksY3pvsa53LGQ8JFBuceRdRafgEIKa57kKIDvvBCRv87qz96AoS3hElBx9U_zEAgLKXFoMh1RAx_Xl1irUqLuR_7m-1xsj_ZVaHZm_3NZHATchHIleNlzMpjVNTl4k9rxn3VGMKQwb8BqIN-zLnwasI9eWLSUMZQJyQINk90ai96rayuG1OUQ4kis_XhiJMEQaAu8FJ0kpSk8tOlV0wmBI3LkV1WtfRPOdImKB6wo28uTByjU36yVivVGaa7LL6fVzJcelFRad6CEXLFKKLcAe3YQjN6-ANW_kmM7ogFN6flMbKJRpqWsWCOClECB60YK-oJtoHsYQBI8dqKNvpC9droooGQi3HyeXIXVk2v7qt3Oh3GiacQSir6UKrI4MCGmCd-KlHFVoNPmrK_LSwwK3NRDpxPtQa9D-rV4DNK4iTfOQGAXJM7l0DDMGxTS0ZtLA12hDmym2WIkvP6y_ldy4EUXIYko8c6aswFHKN-ww_Z9RJ4UZw73GDHMFELoxVN_OIgPPFI6QxpkCnommAkCUFTksjKcyWzFVEj6NhfzfzntfkGT3-e5TU-i_jbq30DKes8btyA3NcyRTOAWNY7GwbpQL78dg_iLJwjOndZA-kdwAk2zj0MdszoIVNWmMce0AtUqumKDn6qNNUnaTnpc3Nac7jO50CDTPkIVtFiTnNNABtHeoV4hD6ztJhkta1IB4tdAeqCm6ei20lhxqhbzYj_j3VXyzbMmbJ-dIBcdegvQDVPMGJxCJ0SwQp2QxKtWT3n3y2mZiXYxHsnIaXcX5TsuNStBTAXfTVrc-Ru4K77uoDMY7L1APh86Wi_DM6FjOktfH-8j7fFfQOygrpifx6asvnWn16Si29HxLiDD4bSs4gcx_l4E--aM0mRNPqgQrMM3mqyRpaR_yUJxvyy6nZQwg-dmpMDB2o2gLYpSCxQatzTiI80T3l8Pc6E-br3_dPXeRFdDabps-muLlfNMaxTqFmburJW6qxYaks4cm_wVxYOeyeQewLc_t3hE9d5JhKOVUSeF79kmFMHSV7dqjz7PB_Tut5s8paNNtjvKa0LHtoQ38gTbe2m6xjNKrBPZqM_0PoM3Er7pFbuDFC8GknJ5XiD9rmtfN95uJOiCbueEwgXKf2nDnbAMjfQk__fmEFD7SqaT7b5-nxPcXUH9aqozjN0GEafvGQnLOifqaedlk5ICDfrA71dGZJH_W2GCFBJe1Cb_wsDz61OAyltrtWBadyHn3LtS-pmlpYIjLOOB-y7p6bIsG1zIoA-p_lLDfq_vv5RdN9_V3OExBulH4AQLN8mKXoUwM1gfMBF2k37NJBp5qwAt7b_idBlHMo2RRoEWKtdNLjQh6fVAJGMAij2WHIAON_M8SorJ7crC12eULM6lOMDilxUGO3c8yvmhdYt5n5cAagEQshORZagIbcatjdSUguNi9aZxkCt0baBwG5FJGFIgwRBYupW63uZydMxDAsFEr5JAPUDQXDZvVKzh_rl3HpVKRI7KhL0v6ZpC_PNzKBdTjhJlMzlzk8YmWjr7fBwjPRjqQ3Iw0QoQlpJQlwetMK_egWAt9SqHcYc_HAHZvLm2rqJKgWj0Fr59dtt80gpKnkyWYM6C7Z9oWqP29TOJfv_loB4I_jN7caZuTq37F0ewkwdndGm4v_pSFPAIwHAgSfESkhBe5OQ0IUVXV92pVOYkQgBtW0JbIP1z87NbKJwG3yi1m4dXHHj2waDUId2dF9j9rRteFchaIa4QuuBx8k53CzkEhk26z6vyAfXdbzbV4O46FexQWezGUr5ngXydfpueLUPLCyXZrR1l7KCcPx-4WWsCMdYtMbsK9TQIT3SJlXGAw_f9nSeybJGjMV3t1T_oJYCuLaWFrr6ICoqPDBI5S8JO9YHnEcVvR7t7CS2iEVd7IBXxpyKyqSp6Rfq-1u8ZX8JIoqgwI18_iZ9gkZg5XpJZS0oDXLDrWg4I7zeqKBO-ex4GWFSB_5Gq1KarIdZkQcwagdDTEAcj0VeajV6wCbseKtrfhl9342JBrjFuOARd2jYuhb1266rmRIDjTk37OQkF1bvJPKuWcAzYyIeoEKRbQXd4N2XGnp_HDrvOxrMZ3dTsgX_JzoQVydTQSI3HQg2U42KzzFJRxWWN_MnC_aGFLJ3PmjGI791L6eFefoXM54IqoXoqgXa0VoHw_6r4u5I2zQ1Bqvmp-u3Yf_2GK-L8pgwQsnb5uGS_9VnLunuNXiMllgEA9yUzLh3yUBCyRvxm-uzFILkzAhN-ejEu3Ckm8qrYdKz0mRk4ugSHVhH6VkRZFj6-nv6inK_6ll1c3RpVfItDxHI3Y8xN3zAGwmJ3ruRx2voSDP2_qfiGumN4N2AdUvP_hr7r1s5HjGC7lX8EMAMyzeTwpp8c8GL9vi_F9PRL6ohQei6X_FbMcAvxDkagsLvRElOTbV8xe4bUSr4TiIxypOGir5ro94Wmv54tLKzs46jz7_glOFCPePOG9NRoypvolrF7vV8UOTbYP7RrltTPCxdtSvhjiOVHmut2Ms7axXBsWEP7nsQVFvhw6UaQCz4W17QlerlKZMFIqB3b6ZL78s5BVMT6HApD-kLW4YBhssNJUC0D3o4nhBst_aOWItZJCeOU8pwd7lYI1yk1mN2EULAoc97-QvS-FbkP2JVrdsVfNk9qeNNVJl68EGK6_eBORUwe4DEMdoWeBZgmJjkZTGQPXLScOvfCN5gyen14ig_z0ubXPZuDccKwdVD_MfGInuSyYCj6sAUnX4x1TBbQviBcSdY0hTm5VaHCfjPE54bnKnJCpc4c6L43vJFp7-FuKgS2mvFflZU0mY8kPC9_dWYP4qOIg3YmZVmhM1nR4cTo1P4fknaPHrmsA-RJQeh9zlZePiEs7bYrJBwAe864kK7o4PeyYF4e-dhlw_ci7K3aXegSBXgLwT4p1uvMChN2PeYmZAB0ph12BYUbi0J9BuZA3k-TlJB_2OClTIxUlGTGXVF3IHrCOIS01k9Yf0SpdJIiw3CsBrMissa-cJi4jXlGIM-S6ODRUmk1W3gQvhFlco=\"},{\"role\":\"user\",\"content\":[{\"type\":\"input_image\",\"image_url\":\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/62FlSlACEQAAAAEAAGFbanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAAYTVqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjY1M2EzZTVkLThlNzUtNDA0Ni1iNDU2LWU1MDRjMThkODA4NAAAABf9anVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAAJ0Wp1bWIAAAA7anVtZEDLDDK7ikidpwsq1vR/Q2kTYzJwYS5pY29uAAAAABhjMnNo7jOSha7DqlpqKw+PkKJzMQAAABdiZmRiAGltYWdlL3N2Zyt4bWwAAAAJd2JpZGI8c3ZnIHdpZHRoPSI3MTYiIGhlaWdodD0iNzE2IiB2aWV3Qm94PSIwIDAgNzE2IDcxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUwOC43NDkgMzE3LjM5OUM1MTYuNzc3IDI4Ny4zMTQgNTA4Ljk5MSAyNTMuODg0IDQ4NS4zODkgMjMwLjI4MkM0NjEuNzg4IDIwNi42ODEgNDI4LjM2IDE5OC44OTUgMzk4LjI3MyAyMDYuOTIzQzM3Ni4yMzEgMTg0LjkyOCAzNDMuMzkgMTc0Ljk1NiAzMTEuMTQ4IDE4My41OTZDMjc4LjkwNiAxOTIuMjM0IDI1NS40NSAyMTcuMjkyIDI0Ny4zNiAyNDcuMzYxQzIxNy4yOTEgMjU1LjQ1MSAxOTIuMjMzIDI3OC45MSAxODMuNTk1IDMxMS4xNDlDMTc0Ljk1NyAzNDMuMzkxIDE4NC45MjcgMzc2LjIzMiAyMDYuOTI0IDM5OC4yNzRDMTk4Ljg5NiA0MjguMzU5IDIwNi42ODMgNDYxLjc4OSAyMzAuMjg0IDQ4NS4zOTFDMjUzLjg4NSA1MDguOTkyIDI4Ny4zMTMgNTE2Ljc3OSAzMTcuNDAxIDUwOC43NUMzMzkuNDQyIDUzMC43NDUgMzcyLjI4NiA1NDAuNzE3IDQwNC41MjUgNTMyLjA3OUM0MzYuNzY3IDUyMy40NDEgNDYwLjIyMyA0OTguMzg0IDQ2OC4zMTMgNDY4LjMxNUM0OTguMzgzIDQ2MC4yMjQgNTIzLjQ0IDQzNi43NjYgNTMyLjA3OCA0MDQuNTI2QzU0MC43MTYgMzcyLjI4NSA1MzAuNzQ3IDMzOS40NDMgNTA4Ljc0OSAzMTcuNDAyVjMxNy4zOTlaTTQ3MC44OTkgMjQ0Ljc3NkM0ODYuODkyIDI2MC43NyA0OTMuNDg4IDI4Mi42MDEgNDkwLjY4NyAzMDMuNDEyTDQxNS41NzcgMjYwLjA0NkM0MTIuNDExIDI1OC4yMTggNDA4LjUwOSAyNTguMjE4IDQwNS4zNDUgMjYwLjA0NkwzMTcuNDAxIDMxMC44MlYyNzcuNTI2QzMxNy40MDEgMjc1LjE5MSAzMTguNjUyIDI3My4wMDUgMzIwLjY3NiAyNzEuODM3TDM4Ny42NDQgMjMzLjE3NEM0MTQuMTc4IDIxOC4zNTMgNDQ4LjM0NiAyMjIuMjIzIDQ3MC45MDEgMjQ0Ljc3Nkg0NzAuODk5Wk0zNTcuODM3IDMxMS4xNDRMMzk4LjI3NSAzMzQuNDkxVjM4MS4xODVMMzU3LjgzNyA0MDQuNTMyTDMxNy4zOTggMzgxLjE4NVYzMzQuNDkxTDM1Ny44MzcgMzExLjE0NFpNMjY0Ljc3NiAyNjkuNjkzQzI2NS4yMDcgMjM5LjMwNSAyODUuNjQ0IDIxMS42NDkgMzE2LjQ1MyAyMDMuMzkzQzMzOC4zIDE5Ny41NCAzNjAuNTA1IDIwMi43NDQgMzc3LjEyNyAyMTUuNTczTDMwMi4wMTQgMjU4LjkzN0MyOTguODQ4IDI2MC43NjQgMjk2Ljg5OCAyNjQuMTQ0IDI5Ni44OTggMjY3Ljc5OFYzNjkuMzQ2TDI2OC4wNjUgMzUyLjY5OUMyNjYuMDQzIDM1MS41MzEgMjY0Ljc3NiAzNDkuMzUzIDI2NC43NzYgMzQ3LjAxN1YyNjkuNjkxVjI2OS42OTNaTTIwMy4zOTEgMzE2LjQ1NEMyMDkuMjQ0IDI5NC42MDggMjI0Ljg1NCAyNzcuOTc4IDI0NC4yNzYgMjY5Ljk5OVYzNTYuNzNDMjQ0LjI3NiAzNjAuMzg0IDI0Ni4yMjYgMzYzLjc2MyAyNDkuMzkyIDM2NS41OTFMMzM3LjMzNyA0MTYuMzY1TDMwOC41MDMgNDMzLjAxM0MzMDYuNDgxIDQzNC4xODEgMzAzLjk2MSA0MzQuMTg4IDMwMS45MzkgNDMzLjAyTDIzNC45NzEgMzk0LjM1N0MyMDguODY4IDM3OC43ODkgMTk1LjEzOCAzNDcuMjYxIDIwMy4zOTEgMzE2LjQ1NFpNMjQ0Ljc3NSA0NzAuOUMyMjguNzgxIDQ1NC45MDYgMjIyLjE4NiA0MzMuMDc1IDIyNC45ODYgNDEyLjI2NEwzMDAuMDk2IDQ1NS42M0MzMDMuMjYzIDQ1Ny40NTcgMzA3LjE2NCA0NTcuNDU3IDMxMC4zMjggNDU1LjYzTDM5OC4yNzMgNDA0Ljg1NlY0MzguMTQ5QzM5OC4yNzMgNDQwLjQ4NSAzOTcuMDIyIDQ0Mi42NzEgMzk0Ljk5NyA0NDMuODM5TDMyOC4wMjkgNDgyLjUwMkMzMDEuNDk1IDQ5Ny4zMjIgMjY3LjMyNyA0OTMuNDUyIDI0NC43NzIgNDcwLjlIMjQ0Ljc3NVpNNDUwLjg5NyA0NDUuOTgyQzQ1MC40NjYgNDc2LjM3MSA0MzAuMDI5IDUwNC4wMjcgMzk5LjIyIDUxMi4yODNDMzc3LjM3MyA1MTguMTM2IDM1NS4xNjggNTEyLjkzMiAzMzguNTQ3IDUwMC4xMDJMNDEzLjY1OSA0NTYuNzM4QzQxNi44MjYgNDU0LjkxMSA0MTguNzc1IDQ1MS41MzIgNDE4Ljc3NSA0NDcuODc3VjM0Ni4zMjlMNDQ3LjYwOSAzNjIuOTc3QzQ0OS42MzEgMzY0LjE0NSA0NTAuODk3IDM2Ni4zMjMgNDUwLjg5NyAzNjguNjU5VjQ0NS45ODVWNDQ1Ljk4MlpNNTEyLjI4MiAzOTkuMjIxQzUwNi40MjkgNDIxLjA2OCA0OTAuODE5IDQzNy42OTcgNDcxLjM5NyA0NDUuNjc2VjM1OC45NDZDNDcxLjM5NyAzNTUuMjkyIDQ2OS40NDggMzUxLjkxMiA0NjYuMjgxIDM1MC4wODVMMzc4LjMzNiAyOTkuMzExTDQwNy4xNyAyODIuNjYzQzQwOS4xOTIgMjgxLjQ5NSA0MTEuNzEyIDI4MS40ODcgNDEzLjczNCAyODIuNjU1TDQ4MC43MDIgMzIxLjMxOEM1MDYuODA1IDMzNi44ODcgNTIwLjUzNiAzNjguNDE1IDUxMi4yODIgMzk5LjIyMVoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgoAAAF+anVtYgAAAEFqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmFjdGlvbnMudjIAAAAAGGMyc2hdSkvjFmKRxUgNqSNNJa5ZAAABNWNib3KhZ2FjdGlvbnODpGZhY3Rpb25sYzJwYS5jcmVhdGVkZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVpZ3B0LWltYWdlZ3ZlcnNpb25jMi4wcWRpZ2l0YWxTb3VyY2VUeXBleEZodHRwOi8vY3YuaXB0Yy5vcmcvbmV3c2NvZGVzL2RpZ2l0YWxzb3VyY2V0eXBlL3RyYWluZWRBbGdvcml0aG1pY01lZGlhomZhY3Rpb25uYzJwYS5jb252ZXJ0ZWRkd2hlbsB0MjAyNi0wNy0xOVQwMDowMDowMFqiZmFjdGlvbngYYzJwYS53YXRlcm1hcmtlZC51bmJvdW5kZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBaAAALump1bWIAAABJanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5jZXJ0aWZpY2F0ZS1zdGF0dXMAAAAAGGMyc2htwRZizBAqU+ypnOv4HGAmAAALaWNib3KhaG9jc3BWYWxzgnkFhE1JSUVId29CQUtDQ0JCZ3dnZ1FVQmdrckJnRUZCUWN3QVFFRWdnUUZNSUlFQVRDQm9xSVdCQlErQkh2WmhwRXNxV2tkcUc0YU55NXVZQmdMeXhnUE1qQXlOakEzTVRnd09URXlORGRhTUhjd2RUQk5NQWtHQlNzT0F3SWFCUUFFRkQ1TWZJNVFDNGRzY3hXK3IyNlg2aER1bENESkJCVERzeVNXTkpPaFdlcFNHR3VlRitDcHV0YXdUQUlVVXBRbEI0RzFhb2I1TXhkNGNOYU9yZTlpR2tHQUFCZ1BNakF5TmpBM01UZ3dPVEV5TkRaYW9CRVlEekl3TWpZd056STFNRGt4TWpRMldqQUtCZ2dxaGtqT1BRUURBZ05KQURCR0FpRUE5cTc1WEo2d3VvQS9ESlRXS0F3ekQ1bGw1N3pxdXRRUzdONzFDWVlvRU40Q0lRRGRIcGRvYTUySEQ0OC9zcDh2NmVWNUQxMWFESS85MkVNU3l5dVVxY2pBaGFDQ0F3RXdnZ0w5TUlJQytUQ0NBbjZnQXdJQkFnSVVLNXZHUDVEZXFocTFUV2hVYUZRRlFmNWxUSll3Q2dZSUtvWkl6ajBFQXdNd2dhY3hDekFKQmdOVkJBWVRBbFZUTVJFd0R3WURWUVFJREFoT1pYY2dXVzl5YXpFUk1BOEdBMVVFQnd3SVRtVjNJRmx2Y21zeEV6QVJCZ05WQkFvTUNsUnlkV1p2SUVsdVl5NHhGREFTQmdOVkJBc01DME5CSUVScGRtbHphVzl1TVJvd0dBWUpLb1pJaHZjTkFRa0JGZ3RqWVVCMGNuVm1ieTVoYVRFck1Da0dBMVVFQXd3aVZISjFabThnUXpKUVFTQkRiR0ZwYlNCVGFXZHVhVzVuSUVOQklDZ3lNREkxS1RBZUZ3MHlOakEzTVRjd01EQXpNakZhRncweU5qQTRNVFl3TURBek1qRmFNSUdsTVFzd0NRWURWUVFHRXdKVlV6RVJNQThHQTFVRUNBd0lUbVYzSUZsdmNtc3hFVEFQQmdOVkJBY01DRTVsZHlCWmIzSnJNUk13RVFZRFZRUUtEQXBVY25WbWJ5QkpibU11TVJRd0VnWURWUVFMREF0RFFTQkVhWFpwYzJsdmJqRWFNQmdHQ1NxR1NJYjNEUUVKQVJZTFkyRkFkSEoxWm04dVlXa3hLVEFuQmdOVkJBTU1JRlJ5ZFdadklFTXlVRUVnVDBOVFVDQlNaWE53YjI1a1pYSWdLREl3TWpVcE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVpFQVo1NnFMcG1ncU4zb3ZMcWg0VFh6cWJHTDV2dndCczgrWDhHdVhxOWE4SXZHL3lzNG5ycWRlbms1U2xaUEJZdmJYUlIzT0JMVHB6UkpoWUxLZnhxT0JoekNCaERBZEJnTlZIUTRFRmdRVVBnUjcyWWFSTEtscEhhaHVHamN1Ym1BWUM4c3dId1lEVlIwakJCZ3dGb0FVdzdNa2xqU1RvVm5xVWhocm5oZmdxYnJXc0V3d0RBWURWUjBUQVFIL0JBSXdBREFPQmdOVkhROEJBZjhFQkFNQ0I0QXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUhBd2t3RHdZSkt3WUJCUVVITUFFRkJBSUZBREFLQmdncWhrak9QUVFEQXdOcEFEQm1BakVBdTROOElsVksrZVBWd1cxTFBCUzVOU2F3ZkRvM1ZmRUI4TTlrUC9WL0dEdGlpU1A1NUROWlZKd0JFNHorM3ZVWUFqRUEzaHNZakdVL2FpaG5ZMGFEU3pPQkFvT0ZJVFpKQWYxK1ozTEVZM0ZRcmdOd2VuNHhuRGM4ZHhhL0w3cUQzL2RieQXMTUlJRVZBb0JBS0NDQkUwd2dnUkpCZ2tyQmdFRkJRY3dBUUVFZ2dRNk1JSUVOakNCb3FJV0JCVEwySTQyaWlFUmN5eTU3NG9hbzJxZXZGTk1RQmdQTWpBeU5qQTNNVGd3T1RFMU1qVmFNSGN3ZFRCTk1Ba0dCU3NPQXdJYUJRQUVGSUFnOWJ6aUpPbHR2Tlp2eGhjcFpYd2t5UEg5QkJRRDFWK3Zmb1BsQkIxWmdDZEtOUDlGL2V0SmVBSVVNT2loOEtXSlFtdlN1WUpJUjVrWjNCWTNBc3VBQUJnUE1qQXlOakEzTVRnd09URTFNalZhb0JFWUR6SXdNall3TnpJMU1Ea3hOVEkxV2pBS0JnZ3Foa2pPUFFRREF3Tm9BREJsQWpFQWt1Z0g1TklqOXU3Y2F5YTB2TmluN09rMExIeE5XaW9WencvS1poaTRpWlFsTGx3SGpnbTNLZmZ5T0JEQWtkZ1VBakJOcmhCS1ZYQ1M0bk01a2wwRSs4dXZsNmM4ajV2MENDYWc5Z2JJK0plOXVaMnBQL3hzeDZvQzVCbmNWQnNSeUVxZ2dnTVhNSUlERXpDQ0F3OHdnZ0tWb0FNQ0FRSUNGQVBRZlRTU2JWY1pjTWJZRkpCTWM4WFQ1WnZnTUFvR0NDcUdTTTQ5QkFNRE1JR29NUXN3Q1FZRFZRUUdFd0pWVXpFUk1BOEdBMVVFQ0F3SVRtVjNJRmx2Y21zeEVUQVBCZ05WQkFjTUNFNWxkeUJaYjNKck1STXdFUVlEVlFRS0RBcFVjblZtYnlCSmJtTXVNUlF3RWdZRFZRUUxEQXREUVNCRWFYWnBjMmx2YmpFYU1CZ0dDU3FHU0liM0RRRUpBUllMWTJGQWRISjFabTh1WVdreExEQXFCZ05WQkFNTUkxUnlkV1p2SUVNeVVFRWdVbTl2ZENCRFFTQW9NakF5TlN3Z1JVTkRJRkF6T0RRcE1CNFhEVEkyTURVeE1USXpOREl5TlZvWERUTTJNRFV3T0RJek5ESXlOVm93Z1o0eEN6QUpCZ05WQkFZVEFsVlRNUkV3RHdZRFZRUUlEQWhPWlhjZ1dXOXlhekVSTUE4R0ExVUVCd3dJVG1WM0lGbHZjbXN4RXpBUkJnTlZCQW9NQ2xSeWRXWnZJRWx1WXk0eEZEQVNCZ05WQkFzTUMwTkJJRVJwZG1semFXOXVNUm93R0FZSktvWklodmNOQVFrQkZndGpZVUIwY25WbWJ5NWhhVEVpTUNBR0ExVUVBd3daVkhKMVptOGdVbTl2ZENCUFExTlFJRkpsYzNCdmJtUmxjakIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJHTDMxMnlnb0xYaHJOdkloaUxaeVhMTWU1ajRMSU1EaHJoMHdObFphTDlhV1Buc01WZVVFY1NCUVV1c29uL0pWaVhESSs3YVd5T3BzV3JLVm51cVcwcVhrOVFvNjN2cnlUZGszejlTYVJpbTYySkhOR1FKbkxzQ0lWaUNKN2tkT2FPQmh6Q0JoREFkQmdOVkhRNEVGZ1FVeTlpT05vb2hFWE1zdWUrS0dxTnFucnhUVEVBd0h3WURWUjBqQkJnd0ZvQVVBOVZmcjM2RDVRUWRXWUFuU2pUL1JmM3JTWGd3REFZRFZSMFRBUUgvQkFJd0FEQU9CZ05WSFE4QkFmOEVCQU1DQjRBd0V3WURWUjBsQkF3d0NnWUlLd1lCQlFVSEF3a3dEd1lKS3dZQkJRVUhNQUVGQkFJRkFEQUtCZ2dxaGtqT1BRUURBd05vQURCbEFqRUE3ZTBmaS9mTHpNNFRVOE42OUJyUXpBd1BHZ1RweERwV2hUV2FLcjRIaWJKR21WNUovTFdHNVZUV1VqckdhY2Q4QWpBWEdDVGEzdy9GZk1HVmlkUzFjZFRLckNuaEE2aUlxeTgzOE9sQi9sdCtHZU1TYnEydzZ2UVMza3oxc0ZFanh4Zz0AAADDanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaJlF/+7opq9IrrjxiEzjrUgAAAB7Y2JvcqVqZXhjbHVzaW9uc4GiZXN0YXJ0FGZsZW5ndGgZYWdkbmFtZW5qdW1iZiBtYW5pZmVzdGNhbGdmc2hhMjU2ZGhhc2hYIAP5TkXl4191NS6N5LxLsOsH7r80GXXiCSzB6FJOZ6QlY3BhZEkAAAAAAAAAAAAAAAMbanVtYgAAACdqdW1kYzJjbAARABCAAACqADibcQNjMnBhLmNsYWltLnYyAAAAAuxjYm9ypmppbnN0YW5jZUlEeCx4bXA6aWlkOjY0YTdjNjkyLWQ5NTAtNGYwNS04MzUzLTA2YmNmZTlhYTgwNnRjbGFpbV9nZW5lcmF0b3JfaW5mb6RkbmFtZXgYT3BlbkFJIE1lZGlhIFNlcnZpY2UgQVBJZGljb26iY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIGiAoLKucP6DZW3n4G7oYobIrrgNIyysPIIIe95cIrQCd29yZy5jb250ZW50YXV0aC5jMnBhX3JzZjAuNzkuMmtzcGVjVmVyc2lvbmUyLjIuMGlzaWduYXR1cmV4TXNlbGYjanVtYmY9L2MycGEvdXJuOmMycGE6NjUzYTNlNWQtOGU3NS00MDQ2LWI0NTYtZTUwNGMxOGQ4MDg0L2MycGEuc2lnbmF0dXJlcmNyZWF0ZWRfYXNzZXJ0aW9uc4SiY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIGiAoLKucP6DZW3n4G7oYobIrrgNIyysPIIIe95cIrQComN1cmx4KnNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuYWN0aW9ucy52MmRoYXNoWCBSdrAznwM8WZOUtQcQ1wRzPhHjLcFrKo2gZnmx1eGLE6JjdXJseDJzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmNlcnRpZmljYXRlLXN0YXR1c2RoYXNoWCDOxOKbUidd7VeAgFE6yiUOeCDxZ2Qub1+Luar7CkkyuKJjdXJseClzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmhhc2guZGF0YWRoYXNoWCCNWe16fsv3drz877n+3X0wnpu6iTBm8qHNyrRVzPkpqmhkYzp0aXRsZWppbWFnZS5qcGVnY2FsZ2ZzaGEyNTYAAEXOanVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAAEWeY2JvctKEWQdVogEmGCGCWQNyMIIDbjCCAvOgAwIBAgIUUpQlB4G1aob5Mxd4cNaOre9iGkEwCgYIKoZIzj0E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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9lhAHrKMfwR3AJQ0QJhSYC5PQUPeDVQef+9uk4Mqi5f5tMZD5pRErn9dMUbgF8DIDuJfCMq6YVLE7vycgqoIXKt2Yf/bAEMAUDc8RjwyUEZBRlpVUF94yIJ4bm549a+5kcj////////////////////////////////////////////////////bAEMBVVpaeGl464KC6//////////////////////////////////////////////////////////////////////////AABEIBAAEAAMBIgACEQEDEQH/xAAZAAEBAQEBAQAAAAAAAAAAAAAABAUDAQL/xAApEAEAAgEBCAMBAQADAQAAAAAAAQMCBBITFCExQVGRETJxsSJCQ4Fh/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHj1LrLdjDYjrl/AUvUujt28NieuP8VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+c8owxnLLpDKtsmyycp7qddb8zu4npzlGD7qsmuyMo7NXHKMsYyjpLHWaG34ndz+wC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzusiqucp/wDHRnay3eWbMT/nH+gnymcpmZ6y8AB7jlOOUTHWHgDWqsi2uMo7ujO0duxZsT9cv60AegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8mfiPmQcdVbuquX2nlDMddRbNtk5dukOQAAAADT0tu9r5/aOUsx109u6tie08pBqjyJ+Y5PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEutt2cN3E88uv4ozyjDCcp6QyrM5sznKesg+AAAAAAAAX6K3aw3czzx6fitkV5zXnGUdYauGUZ4Rlj0kH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADlfZFVc5d+wJtdb8zu4nlHVG9mZmZmesvAAAAAAAAAFeht+Mt3PSen6kexMxMTHKYBsjlRbFtcZd+/66gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Z2rt3lnxH1x6KtXdu6/iJ/1l0ZoAAAAAAAAAAAAO+lt3dnxP1y5S0mM0tJbvK/iftj1BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8mYiJmekPUmut+Md3HWeoJL7JtsnLt2/HMAAAAAAAAAAAAAHSmyarIyjp3cwGxjMZRExziX0j0NvzG7ntzhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4szivCcp6Qys8pzznLLrKnW3bWW7ieWPX9SAAAAAAAAAAAAAAAAA+sMpwyjKOsNWvOLMIyjuyFWit2c9iZ5ZdP0GgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5ai3dVTl36Q6M3VW72zl9Y5QDjM/M/MvAAAAAAAAAAAAAAAAAAexPw8Aamnt3tUT/yjlLszNLburef1nlLSB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD5yyjHGZnlEA4ay3Yr2Yn/WX8ZzpdZNtk5T/AOOYAAAAAAAAAAAAAAAAAAAADR0du3XsTP8ArH+M50qsmqyMo7A1h845RljEx0l9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAItdb/1x+yptsiuucp7MvPKc8pynnMg+QAAAAAAAAAAAAAAAAAAAAAAAW6G3/rmf/sLWNjlOOUZR1hq1WRbXGUd+oOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOOpt3VczH2nlAJNZbt2bEdMf6mAAAAAAAAAAAAAAAAAAAAAAAAABTo7dizZmf8AOX9TPQbI4aa3e185/wBRyl3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4zNTbvbZmPrHKFWtt2MNiOuX8Z4AAAAAAAAAAAAAAAAAAAAAAAAAAAAOunt3VsT2nlLUjnDGaGit2sNiZ549PwFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD5zyjDGcp6Q+kOut57uJ/8Asgmtzmyycp7vgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH3XnNecZR2fADYwyjPGMo6S+kOht+J3c9+cLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeA+LrIqrnKf/GVlM5TMzzmVGsu3lmzH1x/qYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHuMzjMTE84atNsW1xlHXv+slRpLd3Z8T9cuQNIePQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHDVW7qrl9p5Q7TMRHzLL1Fu9tnLtHKAcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaekt3tfxM/wCseUu7KotmqyMu3dqRMTHzHSQegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+M84wwnKekAn1tuzju46z1/ED7szmzOcp6y+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF+ht+cd3M846fiB9YZzhnGUdYBsD4rzjPCMo6S+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGut+ct3HSOv6qvt3Vc5d+zLmZmZmesg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXordnPdz0y6fq9jRMxPzHWGpRbFtcZd+/6DqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8ep9Xbu6/iPtlyBJq7d5Z8R9ceUOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO+lt3VvP65cpcAG0J9JbvK9mfti7g9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5MxETM8ohlX2TbZOXbt+Ktbb8Y7uOs9UIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOlNk1WRlH/rVxmMoiY6Sxl2ht+Y3c/sAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfFmcV4TlPSH0h1tu1nu4nlj1/QTZ5TnnOWXWXyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD6wynDKMo6w+QGvXnFmEZR3fbP0VuznsTPLLp+tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgOeot3Vc5d+kMuZ+Z+XbVW723l9Y5Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9ififmGnp7d7XE945Sy3fS27q2Pn6zykGmPHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbV27uvZif9ZfxRMxjEzPKIZV1k22TlPTsDmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0du8r2Z+2P8AFLJpsmqyMo/9auMxljExziQegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+LM4rwnKewJtdb8Ru4785QvrPKc8pynrL5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW6G3/rn9hE+scpwyjKOsA2BzqsiyuMo7ugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADP1tu1nsRPLHr+qtRbuqpn/lPKGZM/Mg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTo7dizYn65f1oMeGnp7d7VEz9o5SDsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8eptZbsV7MTzy/gJNTbvbZmPrHKHEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHbTW7q2Jn6zylxAbMPU2jt269iftj/FIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnKYxxmZ5RDLtsm2ycp7r9TXZZhGOHxET1+ZS8Fb5x9gmFPBW+cfZwVvnH2CYU8Fb5x9nBW+cfYJhTwVvnH2cFb5x9gmFPBW+cfZwVvnH2CYU8Fb5x9nBW+cfYJhTwVvnH2cFb5x9gmFPBW+cfZwVvnH2CYU8Fb5x9nBW+cfYJhTwVvnH2cFb5x9gmFPBW+cfZwVvnH2CYU8Fb5x9nBW+cfYJhTwVvnH2cFb5x9gmFPBW+cfZwVvnH2CYU8Fb5x9nBW+cfYJhTwVvnH2cFb5x9gmFPBW+cfZwVvnH2CYU8Fb5x9nBW+cfYJhTwVvnH2cFb5x9gmFPBW+cfZwVvnH2CYU8Fb5x9nBW+cfYJhTwVvnH2cFb5x9gmFPBW+cfZwVvnH2CYU8Fb5x9nBW+cfYJhTwVvnH2cFb5x9gmFPBW+cfZwVvnH2CYU8Fb5x9nBW+cfYJhTwVvnH2cFb5x9gmFPBW+cfZwVvnH2CYU8Fb5x9nBW+cfYJhTwVvnH2cFb5x9g41WTVZGUdmrjlGWMTHOJQcFb5x9qtNXZVhOOcxMdviQdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Z\"}]},{\"role\":\"user\",\"content\":[{\"type\":\"input_text\",\"text\":\"Now make the triangle blue.\"}]}],\"tools\":[{\"type\":\"image_generation\",\"action\":\"auto\",\"output_compression\":10,\"output_format\":\"jpeg\",\"partial_images\":0,\"quality\":\"low\",\"size\":\"1024x1024\"}],\"tool_choice\":{\"type\":\"image_generation\"},\"store\":false,\"include\":[\"reasoning.encrypted_content\"],\"reasoning\":{\"effort\":\"medium\",\"summary\":\"auto\"},\"stream\":true}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream; charset=utf-8" + }, + "body": "event: response.created\ndata: {\"type\":\"response.created\",\"response\":{\"id\":\"resp_0a372a7fcba6b284016a5ce5b6a12081a1be0e5db6b7067a0b\",\"object\":\"response\",\"created_at\":1784473014,\"status\":\"in_progress\",\"background\":false,\"completed_at\":null,\"error\":null,\"frequency_penalty\":0.0,\"incomplete_details\":null,\"instructions\":null,\"max_output_tokens\":null,\"max_tool_calls\":null,\"model\":\"gpt-5-mini-2025-08-07\",\"moderation\":null,\"output\":[],\"parallel_tool_calls\":true,\"presence_penalty\":0.0,\"previous_response_id\":null,\"prompt_cache_key\":null,\"prompt_cache_retention\":\"in_memory\",\"reasoning\":{\"context\":\"current_turn\",\"effort\":\"medium\",\"mode\":\"standard\",\"summary\":\"detailed\"},\"safety_identifier\":null,\"service_tier\":\"auto\",\"store\":false,\"temperature\":1.0,\"text\":{\"format\":{\"type\":\"text\"},\"verbosity\":\"medium\"},\"tool_choice\":{\"type\":\"image_generation\"},\"tool_usage\":{\"image_gen\":{\"input_tokens\":0,\"input_tokens_details\":{\"image_tokens\":0,\"text_tokens\":0},\"output_tokens\":0,\"output_tokens_details\":{\"image_tokens\":0,\"text_tokens\":0},\"total_tokens\":0},\"web_search\":{\"num_requests\":0}},\"tools\":[{\"type\":\"image_generation\",\"background\":\"auto\",\"model\":\"gpt-image-2\",\"moderation\":\"auto\",\"n\":1,\"output_compression\":10,\"output_format\":\"jpeg\",\"quality\":\"low\",\"size\":\"1024x1024\"}],\"top_logprobs\":0,\"top_p\":1.0,\"truncation\":\"disabled\",\"usage\":null,\"user\":null,\"metadata\":{}},\"sequence_number\":0}\n\nevent: response.in_progress\ndata: {\"type\":\"response.in_progress\",\"response\":{\"id\":\"resp_0a372a7fcba6b284016a5ce5b6a12081a1be0e5db6b7067a0b\",\"object\":\"response\",\"created_at\":1784473014,\"status\":\"in_progress\",\"background\":false,\"completed_at\":null,\"error\":null,\"frequency_penalty\":0.0,\"incomplete_details\":null,\"instructions\":null,\"max_output_tokens\":null,\"max_tool_calls\":null,\"model\":\"gpt-5-mini-2025-08-07\",\"moderation\":null,\"output\":[],\"parallel_tool_calls\":true,\"presence_penalty\":0.0,\"previous_response_id\":null,\"prompt_cache_key\":null,\"prompt_cache_retention\":\"in_memory\",\"reasoning\":{\"context\":\"current_turn\",\"effort\":\"medium\",\"mode\":\"standard\",\"summary\":\"detailed\"},\"safety_identifier\":null,\"service_tier\":\"auto\",\"store\":false,\"temperature\":1.0,\"text\":{\"format\":{\"type\":\"text\"},\"verbosity\":\"medium\"},\"tool_choice\":{\"type\":\"image_generation\"},\"tool_usage\":{\"image_gen\":{\"input_tokens\":0,\"input_tokens_details\":{\"image_tokens\":0,\"text_tokens\":0},\"output_tokens\":0,\"output_tokens_details\":{\"image_tokens\":0,\"text_tokens\":0},\"total_tokens\":0},\"web_search\":{\"num_requests\":0}},\"tools\":[{\"type\":\"image_generation\",\"background\":\"auto\",\"model\":\"gpt-image-2\",\"moderation\":\"auto\",\"n\":1,\"output_compression\":10,\"output_format\":\"jpeg\",\"quality\":\"low\",\"size\":\"1024x1024\"}],\"top_logprobs\":0,\"top_p\":1.0,\"truncation\":\"disabled\",\"usage\":null,\"user\":null,\"metadata\":{}},\"sequence_number\":1}\n\nevent: response.output_item.added\ndata: {\"type\":\"response.output_item.added\",\"item\":{\"id\":\"rs_0a372a7fcba6b284016a5ce5b7334081a1b3dc47c8448468b6\",\"type\":\"reasoning\",\"content\":[],\"encrypted_content\":\"gAAAAABqXOW3-Ow65f1AuZG4xw3IiCYm7EJ3ZPb6EqPBPK4wJeupE3cVGXIL92CKC2MMXvHbmV-LtR6csxDXJ7cOGOHD_KsKBJsnuDn8oBaUn56Ba2JqoVtEhHs3RDioGAB4fZp01cvBOiikRTzH1XYTpb1_4tR04nI8iO2pH5Kd3MrW5zYUeIl_Y9OdBTlJz3Mqxi0WfAIz4TY37_f_UaGJJXS8K9xu4fQ8Ef_poPHJVxWHiyZBiEh2FwPe8yoINa8Pu5_PyV_GfE--ClAfRTAhNZViOH2ne0Cg_oBtrRMVp9S9ql1Qx-IzWTAC38qh6tuhPWiAkrmPXUgN6BYaSK1S8z_E-Nr_51C9Q38uR2NUOEnpmeKR0RUjWEQC-cZYLQ19yTcAlfrYLccJSOPmp0R9h4GE8NvzB_HtvknArHZVaLxAOWrAwyGE7m6SGPMiVQqanAR85J3kFcZ3CMZlw4Y0u6rbYp30TSimarggY5epmeLE-1FC7LzgWRRvxTKS4N29mbUKoCPcXPyC47zR2OuHdV41Fvtaw-5oFutFU8WG0JJqF5jIt9WAvB4teei5dMdVRPo2iSGgvGrAYYjaOBy_P_XOPgp1woPy6_k6AzEhRuNzhgieMc9ZGUpNhIoge2slx_2WQKsjKnnqRjyAMl7e5EvelRoHpTOG0mDPxmqPDejoFiRGqGh2g6NM6-4KzOkZq7J5D455VN9OE_i0owr08zFSVfP5xlkwO6ByfHeSazzjQZjat3MLPzMKlIUAIzFNdvqO0ZwMCqiEQkQSN6tG9z4EDFUZddDjtNF0ncQg-VfTYZjV7r4fhKDJQKFhXRzgkHyyu_edb1mM5dd19-fzSV8zd_ZfgW7n_SgRSFqhrlE8Tmpi80gM_GPdn6UJ5oYC9q5CvdpR-sZ7kSOwcDTGDi3Jgt1r2hudc3CtAADTFf95O_-LnUg=\",\"summary\":[]},\"output_index\":0,\"sequence_number\":2}\n\nevent: response.output_item.done\ndata: {\"type\":\"response.output_item.done\",\"item\":{\"id\":\"rs_0a372a7fcba6b284016a5ce5b7334081a1b3dc47c8448468b6\",\"type\":\"reasoning\",\"content\":[],\"encrypted_content\":\"gAAAAABqXOW_JvNgvAr5mn5PqUudddAgMyL5Y37NwUV08gViStnE2hTne_KD9RB37hjzgSapdlCHawySV-S891qsw7g_RdaTeDW2oMZe2xjCA5_A1Gw0xQkzVl5fBS7TgW6cycbIGcrhPf1_z43vW2LOF4WFHAyzUhEc4gCBvXHs7iT2yeY9D1__xDQ5Bxuk8wxyesB3AwdR8UXQvdf0o9G-etykqcE-ZOMFapaDgNNFg2MSxuRMNjKnn_aRysRTtS3d3BCjzp8cbLCyB0nMSyfef7a7AnPnGPrxe7L5fg-h379tK2qK2D_-806o4BGrywd17Px3jUuXdob2w-daHT2xqzBcih1wEIuNOWsYTo9Db9NwM72VnwENpqZ32F7peWoQhn4C9Z3NGgvpK93szF1Hq_Fn7j1pcfYRCXzjz723GZdJow1bomxPqYdnoPjs1sRMpLxutxwbn_mRBe_cK5R7BsYL7GwR9ATwucIVEup93Wv091ZNmUP0H1H7jAkunGJHpVE3lTYK8wurfrFHHOmkOO9yTVOxQfQh4GgiYKle_Jsj7E7FKMpwDRvRchGa3T2FWXQMqscr7NYhLwgfPEzS-O8wsmr1KRVzzrlwSd85ejX1jZ4vYrS_fZKRGf7YrovxRUaZQOddNdayeFkLXTUIEUO8J69KokM8JOq39HbiDYxJbSUtlPjscBkoEZlURudRednd6Ov9WsTogwwjosuFbKNnNL0vzWpYODeGsgmz2dvTS4SM70XQ3tZhCulIUGeduJxPs9JdWdGwlODUoBg5foeL8HguxQ2yr2HbJf2pVoHVE0WjY5MOHT28uFkOuEWobLEkKPtxrQvelUiRK-dFk2I7Bs7XIABh0oe_ekZT5bgpsOydrPxidcjr_TRnVocTkLYPEo2QJf5QbhuC5i2L6wCdObazF9dNihKPb9LpPLH7NMjH5GAS1T-FwD9EHM-oG3DrSvYdbRHEKTlOmgoK5PmAuDzZtXOuoraLKD6OBw2cXmU1UlhBbSrZkHXMyApdQXy32o-pKI0QBqK6ajzSypsQex6zwV-QomPoLEuhIINcNVlOZfMeK3MRyLf8SmzYwAokhI-SVvix-Ev7UR8fHagS26OEb_AG4ttGxZiODPCAiNsJROzGj9LjusmaeFXuNlKj9evZlRTDCrA6hCwWPMAei_TzPpG_8TEceTwzb2acNE6SueKMb7lIqFU2kXsQngD4h7Uo-rGWL_THN5Vg75mEeCqh2xiqMsLABY-w3v31s0p5hxgn8bhLLlS0cWfAXZ_LtUs3JlAMDzncybYY6Y4eUAln98r3UigxWFzwxzxfJukJ9Xr74WA3L7T9K0RBb6cC5OiWDjXfbcNmZB0sN48dUMVyp6w_6YAWAKWUuBMO6sBBxZ4A40ZswXHpNlOzoJPV3Zf70kpFI-G-zsdcPB21JSuYxOUthp24hfn5ywkbQPeNSAgi7PcI9rJaSryeJzRgmWmDmYFC-XMOEbe-tD_zI3YqtekaBWq9_oXXzZe3FfbvUYWeCYJYp5ODNWGAHr6nt22AJ-mG0nIdGDUmVZbWfnhXyX5gUyWpdcVbe8i2ebGtPu8rDV4epC9NL4Sy6lvOWms1hc4Nja_uynZb4QcAqoYzP5djPEzTdemtZmhbODMG-cC0ymYhwNqjG29Kpv_PoYx-d0ZQbpFntDPUeb65H9WdX9wZqKmZLpJ5y00TMCZ5lGpb3pleyASAfSJoRcp6dQN4FArtb-LmiLBNpaZVOOg9m921ncZ7Gg5M9cqv_fnvkQPbtDigzu0TDTUMAjNzDRY2TyDC4-XhHYwmvmptAVLHmR0KunAzd4Td5fEQjblRP6G25Tk_jOZSIdC9mATwY_FdXnPfQYPw_fkDWGdAAy3FXkuLUAXZZUU9K_CxyxmC4UNS0k_yslwSdWMmMl_nFDT8CIpYc8aRrJlNU9RG04i0V1QSuZ0lmJkprJsqga9IRz5tLRdIJ9fazjsaLU8scM6JRkbEMf30HpbpWeRSMk097SmsHJqSx0GfmW_n3q0JGAPNVO3M6fh9L0I9kuaOWYg6uLJm7sWs_pamjlLMqJOvN2j4RxGc5QkF7eN3wlPuV7YkWDHU1ntGDzH95f5NgVTjXVTlEuqI5obRO-DdK82xdWpS-jTMMoqC7tiPMS5E8zHh_cAWldXcrWN5kOVJLJpn-n4WFC_hzf8q4uC3uarCALwmzIiA9bYEPS5_Xw0j6bFgLeEcynrFvmBjVEG3AVUParj-9Goc4kRply59MRHZeP59mZvn8wqT4HkGyNFvc3ZUfZrKr2Xdv2gZsMRx2D8vd0K6O6N9ihhfuk7lmhizSrIeHw_fuC_gzSrj-oYHmcLIQTTz9W5sgJI-6z-zskL7wFkV2vWiym747JTLG6p8GjQQeQ5pVOw2fDuYQSq5_ZzmMdJlU2dNg09CuO0fR9Zek9mgoefgXplh0-o3rGiaLreGL51Mxe1OGVlcolzDYw_IXeS4SYv6jh0ak_oCvFLIEM6y_BXx_bO3tk_R9BD6f3TO6IMTTuSLlO5IymvH-rTmuhqH2LVCDdSbCLSQ1qUAudbvomaro2CCD_bBJgqafe-x-DXWsuxBufEqqjl0g-oFjYRnf075VhGz-JqFAaOFcVKarF6K7srK3h3geKztlwQdt3NLl4wL5NYWMZ6yYloHDjh6oB2qOX9m27hD6Al4aW-X5r7aVekuDHUIF3cW3Isvtj2xeoKBqc-8l2tmKrvGmJReeWa0wf1MgHxZGjvSN-EvhCNsN40cZm6bdxVijQlPsHE83qLwN8SmVBbbWkp3IXEsLIDk1Ajnea8yi_MiHtHbOqXOFbc3W9Na-hOBNcmA6KruZkLcLULCHatVKhfreqBXQOzKnO_mHrOA0ORyiB6IXK-01DRJ-OUldKZrZ2KehkV3CtnT2y6P4Up8lXEZ4aKYyboEnmDUqJTuwO6_-b65b2qP6Gs3VPUCv8JQ3Q_uMcvGy_cIpd_xsi2VNf0k2hskpdRLJBRhULKQQVTYtYEanHatZPKQj2l6PFHQWCDnkS815BpEeNAIxecfAFElyxn21J4QIE53G6yJBC1wYgBlKXI1s7pOABdcQqBI5P0zBNRZqFUFPO83EIwCRAjGHCH-KdtFPmCB7ZktwEvAHiF0rnaMnpxdHFo-Vy_JjJeaOK9cvV6P24knAza7SI99xN5eX2euuFH7pQC6N7_TH3ZCHkm_oosUiPVJU699OmlIpRMXJNksqtQfhGOb0HjhkhHbp3xt4HfAq5XxzKqcLVHc8lNAsumN29kEOpuC2TrW9UdgF6pAXZ-xFaAPvq2VNdaHjwCpxwEq3GAu8vMHwV9Rx-j6cB-Ulr-WH0wKtzvhsQnhPYMA3lTmCJfw_mez4ji1UfE_yeHKZwTR3KWrbi0L4ZpqqIs6oCleoGOE1rAuugk9n3LRsbAdGDjdf0jfo6IDupJIXOHtVF2uuHA_hwcpehbm30cMSzEbgfA3u5F4v7EgL6AEUiB67jIJRgQJ0mlWds_r753993yqdWMziOHcIXu0ChXv23zoyIqdcLVDguVA6cBW7Dkg71ZnOby2rPSB2r_RODwvc9_S62rIP17X1B8JpVQFscKN8qYxT66PhTLXukKM5HmzAnHTRnVUB7p76YKqESBRydt_1RZduxcHpDjuz5ZNSLh0j1JfTDmNPuEhJioGDeGBug_OzqV_rvmKSrwNXj61piaWKm0FByuuEB5X8kfFnvKwxttyiYZz0NPHZPFyv74UNGLOz5yCBMkMLIY8a1eiNC4VTZt6ppHRyIT74TdA4OCCLTID6_npt5gt66WpCXmi0ag8jEYf0ZoLqJEMaIPG3pAHkts16FxL-s1wlbIsVdcGOtGpINXj8d6Oe6Jdrlgeba0uNfasigcmoFsIvLVgPJ_X81-QM3LFR_0ANFNNWbTf9C0xZNy7x8JjMmTBbaBot-I7q7hodrCprqdDJ5kYcgbK1kbJDzN584Ojp6GILovMfeDyyjWaUSy5g5Ju_LFo0OFks2p3s5v9Wg5Z5q2Z5-bf3z3nuASZR6axMC2PGdch_NTN8NPAh8C-njKHXA8z62m5dy9kJNPzCqbaNqySAxCW_alEYpPW2IaxmsqgfNrupl3yknSpxFR0KZGOgDRc0JndrAj859XWhFj3tNZwIdJjHcEwhFZcpGNgrBEXSy1kC24Di6GJVnB_XIP6rSp5kCqH672eBqZ5FLaKYoF8JOIZq0gdIoKv5Ew-5LgJnZZrXOyKs-Q4uDtg1q0ToSirnYKafmwcx7w0wz83lZop3IJ1DSwxoDWVfgn5UzPfeRqehIqJx2daGJFaml3A76BnjT3YY-UUAp84MZLlx5FeXlzYvqK3Qi5I5RzHpN7P6NUibJM-i0G2ejmS3nhQdlqn2m7nlU6-10VFDDPoZqaUMmWPDIkmXcrZifV_c56S7o63HevKAScwxrbjoivaF105RSg7DTCQwEgrfMzJZfbT0NKyx4ZLrZ-3nA3JLhAGHS5l6PoBCJUL6_ZNq90hXI8nRVmam6svuoZ9H8kjsA3xP4mTYNLh2PfU_i6GrMUTmg2O9Dto994ggh_j2zJgP9U2X3D5WJrWJHP1IeNIS2YDgoDDtTs9mj7tKF4EhcWDlpihJmkJzFJZJ3RZ761Fa-B6DsxH5-4vesns_kGEhCNFXTjjjNmc9y8PTfjcgqVHnvoabRXHXaDQROZkPHNqf69y39FEUxjePW63mk-MeV7vcYdmlgxfdhyX-GoycoUPPpY5yVUez6auomjpB9hcUVdPXUE8Szg=\",\"summary\":[]},\"output_index\":0,\"sequence_number\":3}\n\nevent: response.output_item.added\ndata: {\"type\":\"response.output_item.added\",\"item\":{\"id\":\"ig_0a372a7fcba6b284016a5ce5bf22e081a19e660657ce98596f\",\"type\":\"image_generation_call\",\"status\":\"in_progress\"},\"output_index\":1,\"sequence_number\":4}\n\nevent: response.image_generation_call.in_progress\ndata: {\"type\":\"response.image_generation_call.in_progress\",\"item_id\":\"ig_0a372a7fcba6b284016a5ce5bf22e081a19e660657ce98596f\",\"output_index\":1,\"sequence_number\":5}\n\nevent: response.image_generation_call.generating\ndata: {\"type\":\"response.image_generation_call.generating\",\"item_id\":\"ig_0a372a7fcba6b284016a5ce5bf22e081a19e660657ce98596f\",\"output_index\":1,\"sequence_number\":6}\n\nevent: response.image_generation_call.partial_image\ndata: {\"type\":\"response.image_generation_call.partial_image\",\"background\":\"opaque\",\"item_id\":\"ig_0a372a7fcba6b284016a5ce5bf22e081a19e660657ce98596f\",\"output_format\":\"jpeg\",\"output_index\":1,\"partial_image_b64\":\"/9j/4AAQSkZJRgABAQAAAQABAAD/63GmSlACEQAAAAEAAHGcanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAAcXZqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjE4OTI0ZjJlLWE3MzgtNGY5MC1iYjEwLTg3MDZkYjg0YjU5OQAAACFRanVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAAJ0Wp1bWIAAAA7anVtZEDLDDK7ikidpwsq1vR/Q2kTYzJwYS5pY29uAAAAABhjMnNo67z35LsqLoVg7O+vcvLhRAAAABdiZmRiAGltYWdlL3N2Zyt4bWwAAAAJd2JpZGI8c3ZnIHdpZHRoPSI3MTYiIGhlaWdodD0iNzE2IiB2aWV3Qm94PSIwIDAgNzE2IDcxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUwOC43NDkgMzE3LjM5OUM1MTYuNzc3IDI4Ny4zMTQgNTA4Ljk5MSAyNTMuODg0IDQ4NS4zODkgMjMwLjI4MkM0NjEuNzg4IDIwNi42ODEgNDI4LjM2IDE5OC44OTUgMzk4LjI3MyAyMDYuOTIzQzM3Ni4yMzEgMTg0LjkyOCAzNDMuMzkgMTc0Ljk1NiAzMTEuMTQ4IDE4My41OTZDMjc4LjkwNiAxOTIuMjM0IDI1NS40NSAyMTcuMjkyIDI0Ny4zNiAyNDcuMzYxQzIxNy4yOTEgMjU1LjQ1MSAxOTIuMjMzIDI3OC45MSAxODMuNTk1IDMxMS4xNDlDMTc0Ljk1NyAzNDMuMzkxIDE4NC45MjcgMzc2LjIzMiAyMDYuOTI0IDM5OC4yNzRDMTk4Ljg5NiA0MjguMzU5IDIwNi42ODMgNDYxLjc4OSAyMzAuMjg0IDQ4NS4zOTFDMjUzLjg4NSA1MDguOTkyIDI4Ny4zMTMgNTE2Ljc3OSAzMTcuNDAxIDUwOC43NUMzMzkuNDQyIDUzMC43NDUgMzcyLjI4NiA1NDAuNzE3IDQwNC41MjUgNTMyLjA3OUM0MzYuNzY3IDUyMy40NDEgNDYwLjIyMyA0OTguMzg0IDQ2OC4zMTMgNDY4LjMxNUM0OTguMzgzIDQ2MC4yMjQgNTIzLjQ0IDQzNi43NjYgNTMyLjA3OCA0MDQuNTI2QzU0MC43MTYgMzcyLjI4NSA1MzAuNzQ3IDMzOS40NDMgNTA4Ljc0OSAzMTcuNDAyVjMxNy4zOTlaTTQ3MC44OTkgMjQ0Ljc3NkM0ODYuODkyIDI2MC43NyA0OTMuNDg4IDI4Mi42MDEgNDkwLjY4NyAzMDMuNDEyTDQxNS41NzcgMjYwLjA0NkM0MTIuNDExIDI1OC4yMTggNDA4LjUwOSAyNTguMjE4IDQwNS4zNDUgMjYwLjA0NkwzMTcuNDAxIDMxMC44MlYyNzcuNTI2QzMxNy40MDEgMjc1LjE5MSAzMTguNjUyIDI3My4wMDUgMzIwLjY3NiAyNzEuODM3TDM4Ny42NDQgMjMzLjE3NEM0MTQuMTc4IDIxOC4zNTMgNDQ4LjM0NiAyMjIuMjIzIDQ3MC45MDEgMjQ0Ljc3Nkg0NzAuODk5Wk0zNTcuODM3IDMxMS4xNDRMMzk4LjI3NSAzMzQuNDkxVjM4MS4xODVMMzU3LjgzNyA0MDQuNTMyTDMxNy4zOTggMzgxLjE4NVYzMzQuNDkxTDM1Ny44MzcgMzExLjE0NFpNMjY0Ljc3NiAyNjkuNjkzQzI2NS4yMDcgMjM5LjMwNSAyODUuNjQ0IDIxMS42NDkgMzE2LjQ1MyAyMDMuMzkzQzMzOC4zIDE5Ny41NCAzNjAuNTA1IDIwMi43NDQgMzc3LjEyNyAyMTUuNTczTDMwMi4wMTQgMjU4LjkzN0MyOTguODQ4IDI2MC43NjQgMjk2Ljg5OCAyNjQuMTQ0IDI5Ni44OTggMjY3Ljc5OFYzNjkuMzQ2TDI2OC4wNjUgMzUyLjY5OUMyNjYuMDQzIDM1MS41MzEgMjY0Ljc3NiAzNDkuMzUzIDI2NC43NzYgMzQ3LjAxN1YyNjkuNjkxVjI2OS42OTNaTTIwMy4zOTEgMzE2LjQ1NEMyMDkuMjQ0IDI5NC42MDggMjI0Ljg1NCAyNzcuOTc4IDI0NC4yNzYgMjY5Ljk5OVYzNTYuNzNDMjQ0LjI3NiAzNjAuMzg0IDI0Ni4yMjYgMzYzLjc2MyAyNDkuMzkyIDM2NS41OTFMMzM3LjMzNyA0MTYuMzY1TDMwOC41MDMgNDMzLjAxM0MzMDYuNDgxIDQzNC4xODEgMzAzLjk2MSA0MzQuMTg4IDMwMS45MzkgNDMzLjAyTDIzNC45NzEgMzk0LjM1N0MyMDguODY4IDM3OC43ODkgMTk1LjEzOCAzNDcuMjYxIDIwMy4zOTEgMzE2LjQ1NFpNMjQ0Ljc3NSA0NzAuOUMyMjguNzgxIDQ1NC45MDYgMjIyLjE4NiA0MzMuMDc1IDIyNC45ODYgNDEyLjI2NEwzMDAuMDk2IDQ1NS42M0MzMDMuMjYzIDQ1Ny40NTcgMzA3LjE2NCA0NTcuNDU3IDMxMC4zMjggNDU1LjYzTDM5OC4yNzMgNDA0Ljg1NlY0MzguMTQ5QzM5OC4yNzMgNDQwLjQ4NSAzOTcuMDIyIDQ0Mi42NzEgMzk0Ljk5NyA0NDMuODM5TDMyOC4wMjkgNDgyLjUwMkMzMDEuNDk1IDQ5Ny4zMjIgMjY3LjMyNyA0OTMuNDUyIDI0NC43NzIgNDcwLjlIMjQ0Ljc3NVpNNDUwLjg5NyA0NDUuOTgyQzQ1MC40NjYgNDc2LjM3MSA0MzAuMDI5IDUwNC4wMjcgMzk5LjIyIDUxMi4yODNDMzc3LjM3MyA1MTguMTM2IDM1NS4xNjggNTEyLjkzMiAzMzguNTQ3IDUwMC4xMDJMNDEzLjY1OSA0NTYuNzM4QzQxNi44MjYgNDU0LjkxMSA0MTguNzc1IDQ1MS41MzIgNDE4Ljc3NSA0NDcuODc3VjM0Ni4zMjlMNDQ3LjYwOSAzNjIuOTc3QzQ0OS42MzEgMzY0LjE0NSA0NTAuODk3IDM2Ni4zMjMgNDUwLjg5NyAzNjguNjU5VjQ0NS45ODVWNDQ1Ljk4MlpNNTEyLjI4MiAzOTkuMjIxQzUwNi40MjkgNDIxLjA2OCA0OTAuODE5IDQzNy42OTcgNDcxLjM5NyA0NDUuNjc2VjM1OC45NDZDNDcxLjM5NyAzNTUuMjkyIDQ2OS40NDggMzUxLjkxMiA0NjYuMjgxIDM1MC4wODVMMzc4LjMzNiAyOTkuMzExTDQwNy4xNyAyODIuNjYzQzQwOS4xOTIgMjgxLjQ5NSA0MTEuNzEyIDI4MS40ODcgNDEzLjczNCAyODIuNjU1TDQ4MC43MDIgMzIxLjMxOEM1MDYuODA1IDMzNi44ODcgNTIwLjUzNiAzNjguNDE1IDUxMi4yODIgMzk5LjIyMVoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgoAAAF+anVtYgAAAEFqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmFjdGlvbnMudjIAAAAAGGMyc2j+lf0LRwjwk6l99FttgUeWAAABNWNib3KhZ2FjdGlvbnODpGZhY3Rpb25sYzJwYS5jcmVhdGVkZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVpZ3B0LWltYWdlZ3ZlcnNpb25jMi4wcWRpZ2l0YWxTb3VyY2VUeXBleEZodHRwOi8vY3YuaXB0Yy5vcmcvbmV3c2NvZGVzL2RpZ2l0YWxzb3VyY2V0eXBlL3RyYWluZWRBbGdvcml0aG1pY01lZGlhomZhY3Rpb25uYzJwYS5jb252ZXJ0ZWRkd2hlbsB0MjAyNi0wNy0xOVQwMDowMDowMFqiZmFjdGlvbngYYzJwYS53YXRlcm1hcmtlZC51bmJvdW5kZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBaAAAVDmp1bWIAAABJanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5jZXJ0aWZpY2F0ZS1zdGF0dXMAAAAAGGMyc2iJ/+NtK3pzfjJ5leK6i9DYAAAUvWNib3KhaG9jc3BWYWxzgnkKdE1JSUgwd29CQUtDQ0I4d3dnZ2ZJQmdrckJnRUZCUWN3QVFFRWdnZTVNSUlIdFRDQjZhSVdCQlE5cXFwNGp2cjJUUHBlYXRGQVRRN2xWUElmcmhnUE1qQXlOakEzTVRnd09UQXlOVGxhTUlHWU1JR1ZNRWt3Q1FZRkt3NERBaG9GQUFRVTM0STNVMTVUMkRPeDRBUTlKRFh4ZGViaENoa0VGRGs5RUVmY2w0K3ZpSHROY3hnZHplWHVwS1VxQWhBTHBmenBEbkNNOGdXQU1lNUVIR1J6Z0FBWUR6SXdNall3TnpFNE1Ea3dNalU1V3FBUkdBOHlNREkyTURjeU5UQTVNREkxT0ZxaElqQWdNQjRHQ1NzR0FRVUZCekFCQmdRUkdBOHlNREUyTURjeU1EQTVNREkxT1ZxaEl6QWhNQjhHQ1NzR0FRVUZCekFCQWdRU0JCQnhhdGo5cHd3RUkwTTlyVExzNUg4Uk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQmdRQlo1Q0VxaVNQNEZ0c1prcGNhb3htanpqOElmTytLY2drajBRRDI1ZTJxUWY2bmdzVEVDSEIzQVlCY0pGeTRGanNWbVEyMlgxeHN3TEhzWHdlNi9JNFJnbWQxUmxQSGQ4QXBCUG9xWEJmTmNZRm9obEhYV2dPUnJqS0JzSkg1c1NVdWZZZmpoK1N1NkZNdTVyMFpyTnRuT3N5VUtMbHR0TUt6eStwQ3NYbWU5eDRLcHlrRnI1RS9tRjRvR0FlS29kKzAwTmpId2szUE13Z2hFR28yZDBhUy9PbTFKYWFybjN5YmZTVXp4MVczN2t2N2hTaWlSeDZMRWlTNWZlaVRVRDNDazZ6YXR3WUcrZXh4clFKci90WTFRQW95Y0hKMWh6cVRrQUxLa0xIZGNDbkZNQ3pYSGk5ZXhBRVNQNFU1cFBBV2VJVE9kZ1RXTDRmeGFOSUNFaFhHVDQ5Wk5nSUVmY3lDdnpZQkRYTWxKQ2ViNko1cTdwQUlYLzRxS2U0cklnRzZ3WDEwVUYrMkpHZmJISjRWeCtYN3NCSTZTT0Y5dEdxZ0ZBZlJmM0ozYWhJTmp5d2ZFRi9uMlRlM09tSXdRL0grMFJZTUF3ZjFKUndOMlB6UmdLT0JtSmdreExzTjhpcHhDY2Qrbm4zcDVkQzNlSkE0ek4vV2lLcXIxY3hZNklTZ2dnVXhNSUlGTFRDQ0JTa3dnZ01Sb0FNQ0FRSUNFRnBLc2ovUUtNYitTN00vYmozako3b3dEUVlKS29aSWh2Y05BUUVMQlFBd1NqRWhNQjhHQTFVRUF3d1lVMU5NTG1OdmJTQkRNbEJCSUVsRFFTQlNNU0F5TURJMU1SZ3dGZ1lEVlFRS0RBOVRVMHdnUTI5eWNHOXlZWFJwYjI0eEN6QUpCZ05WQkFZVEFsVlRNQjRYRFRJMk1ERXdNakl3TVRReE5Wb1hEVEkzTURFd01qSXdNVFF4TkZvd1RURUxNQWtHQTFVRUJoTUNWVk14RVRBUEJnTlZCQW9NQ0ZOVFRDQkRiM0p3TVNzd0tRWURWUVFERENKVFUwd3VZMjl0SUVNeVVFRWdTVU5CSUZJeElFOURVMUFnVW1WemNHOXVaR1Z5TUlJQm9qQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FZOEFNSUlCaWdLQ0FZRUFvbENUUWVaS1M5NExtNmFWZENaWVBPeFMvTHVVSFRMTkZNUEdVTi9Rdlp6R2JuQ0xJNWZYak83TUNIeFc3bWUrK1pyQWtyRHJ1cVV6LzIxcEZKQ0RMd2lJTFJYdHNFdGRIeXlidWJobEZ5Umo3aE93SkdDTkN1Z0YrSGtmeHROaE5WdU1CSmRZbjdPTVhOamt4cWJRUS9DenA5TlUyV3lJOXhpbnVNVFlidjB4S040T0NTNlFKL1Z6MlhlbTFWQ2FJTm04eXpMRlJybjhvbFVGVGU2Z202eG9hc0ViUHpncWVnYlkwMTI2dExNZTY1MVZLZTdzMGpjVW42N0ZOcW1jc0xmZVJDcUw2RkNuRVNBSWdBdDVleVhQMlRueW5rV2JkN29IZUFtZ3BrNTdRSTR4L2VvaWFJY1ZnTVNDSWVSUFd2SVI4NGdQcEV1SktuNU1KQUVtcWFDYUJNbWRmQVh1YTJLRklqSUI3dGJjSzlMZjFrWTBkcUNDS0hpT3ZpcmREaFRrMW1vcWQ5dDBlalVucG9jV0Y4RzRIdkE2VTRHcW10WXJrNi9qSDV1M1pkSW1NRXFsSEE2K3l2R0xmMW8wQWFhaDBnRUloWEk0V0RuRTdENHlIUitFM3pjVWVkWXcwemNiZU9ib3paTHBiaXNOYnV3dzZ6STRMcWs4MGkzbEFnTUJBQUdqZ1ljd2dZUXdEQVlEVlIwVEFRSC9CQUl3QURBZkJnTlZIU01FR0RBV2dCUTVQUkJIM0plUHI0aDdUWE1ZSGMzbDdxU2xLakFQQmdrckJnRUZCUWN3QVFVRUFnVUFNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01KTUIwR0ExVWREZ1FXQkJROXFxcDRqdnIyVFBwZWF0RkFUUTdsVlBJZnJqQU9CZ05WSFE4QkFmOEVCQU1DQjRBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFMdHpwbFdFbzJoUTZ4RHhvR3pYeVNtRW5UNm9MKzBLdXc2ZzY2dkx3UjY0QVlZRnR6QWxTRzN6RGVHOW9VMG8waXRsWUVUY3RvMnJWVC9YM1lVZS92Q1hXeVFzN0sxTEgwdjB1d242bnJEZ3NMRDlqa1J5dEk4TWF0MWo2T3V5MWd2VXgvSG5pdzdmMzJ6RUNhTDlQUjl6R3hGWXdTZ3BvbXRnYVRBcE8xVzBqS21rQ0pDcEVuQStibkxFZGh3d2FZSlBKYlJQVmM3cFNNOWZpd2QvemZCV2E5L2Nub1lmTnZBMWpzRTNsWE80N2JZWXFFUys5cGZlU1ErOGo2RStjaWZRUFNGOFVseFFxY2NWM0tuNzkyMndLZ2NtRUJTZ2xOOFZaSVdNcHoyS09qRUdkSkVoNFJqc1N0K0ZFV2pPWWFta2F6SXowMmpteWIrei9QK1Y4UnpYd2dWbFNteE9SLzZvWUpSM2FFSE9UaWhFcGNhWWg2ZzE4bzRHWnFva3ZXckJFcTRZSUd2ZWRLTjNKbVducGNJb0hTWDlQcW5sRkVtNUIvOTBhQlJ5UjFEN2RKb2lhSVVhakwrREFKelo0MjBOb2p4Y3gwNmxkdEwvd3FyRnJyVDhLa0pzSjZpMDFqbkxGNWxZeXdjTHc3SDhOdWcxMU10ZXlSR1ltTTdvZ29zUzdRdFlZYnBoa2RHcGVzaytXT0Q4bEVoTWRPYlAxSHl6QWZMb0kwdm9NR2dadXlmc3VmWUp0dTE1aytVS2dyWEg1eTRheG9Wcms2VkJXU21VdWxqVGI1Wk5uMUV6a1QvQXVGQWJ6N1c2WUlqcE53cE1scDhqZU5yQnlvN0ZsajVzK2w4QU4xYmZDUVlobUpKNTk4Qy80ODZTcHhTckxGYzlRZFFTaWVBL3kKME1JSUhuZ29CQUtDQ0I1Y3dnZ2VUQmdrckJnRUZCUWN3QVFFRWdnZUVNSUlIZ0RDQng2SVdCQlRhNWVlVXdkS1VTU3phRDBLd2o3NmNYM0JZcFJnUE1qQXlOakEzTVRnd09UQXlOVGxhTUhjd2RUQk5NQWtHQlNzT0F3SWFCUUFFRkthaUt0REhIckRSY0dvUGQ4Vnp5YU1yMTNGb0JCVDhLa3AxT29ENm1XT1Q4SE5YN0w2VHNIM0Rld0lVSnl0anlNd2RUUzJiaEZGeWJQU2NYakpScnQ2QUFCZ1BNakF5TmpBM01UZ3dPVEF5TlRsYW9CRVlEekl3TWpZd056STFNRGt3TWpVNFdxRWpNQ0V3SHdZSkt3WUJCUVVITUFFQ0JCSUVFRjd0MkFTQ0dpb0xDZ09ldzV5dWRXSXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnR0JBTFExR3k0NDFBMWczQ1hodGJ0cVM0V0Mybmpndm5GdEQ0YlI0V1FQTTNBMHRuRG8zMnZ4Ykp1OHRyeFhWNGk3enpqTy91QkZXRVZaRzJ3ckp6aitBMVM5aVNkNU9oSUhZaFhZQjFab0xFandZUDU4RnFSUldDRkNTK2lGd05FcnZHQmxDNUR4Vlh0c3Q4VTliTWF5RExsemo2amRQbTFFVDVIR3JkR3Y1WFlXS3U4MHBZY2RNaWE3ZCt4ZlZzcWtQZzFVTDVjVHZoazhqOVY3eDFmb2hPUzQ3RzV0cG4yako1TzdZcXg1Z1BrRW9Dd202ZGdiN1ZLUEhWWjZQem93dlI1cnIrTlhKT1lRd09KOXZyQzJRYS9TK1JjaUlvcWRGZHE5YSsrZGp3L1dZOFI2bWY3N0UvbDcyM1lYQ2xNeEZzbVBVNHgvNmZZNEJWSEhoSVZqMXJsNDd4d0pHM0orTVJSVE5rcGE5VTJEWlpyd3JoV1hxc2JMemg4Nzl1Z3FxNHYzMlR2a0tpa01VV05PaHlWeGphYTFqVG5FbjNrODVLOU9OcFhqaU5ncjFCOXpRT1FkRGNYemFzd2NMQlpYWDd0cElSM281YXVLL08vRklzazcwaE80c3NraHBLak80dXcrcnp0SE1NTCsyeExqY0hDRlVMR3k2d0dQTDZ2QTZxQ0NCUjR3Z2dVYU1JSUZGakNDQXY2Z0F3SUJBZ0lRVkdZd0l0eThXUDRVdTF5Tm5YRU4zVEFOQmdrcWhraUc5dzBCQVFzRkFEQlBNU1l3SkFZRFZRUUREQjFUVTB3dVkyOXRJRU15VUVFZ1VsTkJJRkp2YjNRZ1EwRWdNakF5TlRFWU1CWUdBMVVFQ2d3UFUxTk1JRU52Y25CdmNtRjBhVzl1TVFzd0NRWURWUVFHRXdKVlV6QWVGdzB5TmpBME1UVXlNVFEwTWpKYUZ3MHlOekEwTVRVeU1UUTBNakZhTUVVeEN6QUpCZ05WQkFZVEFsVlRNUkV3RHdZRFZRUUtEQWhUVTB3Z1EyOXljREVqTUNFR0ExVUVBd3dhVTFOTUxtTnZiUzFETWxCQkxWSnZiM1F0TWpBeU5TMVNVMEV3Z2dHaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQmp3QXdnZ0dLQW9JQmdRQzdSeTZseHpDUWYvSWlZSmNHQm56eGY1SndWbFN0MVB6QnZEaE5lV0xpcVA0QkI5THorbk1SK2hLTVdFRk1ZNkg4bjYrOU5HbWJnaUFjZDVpbkJ1dEVDTWhNVDJMWDNaeUovREU4TWJMbkRkZk9YYmpZTVVmTVd2ZWdCMWJTSS9hUE8wNm5kYi8vbWpnQ0dXeHpmRzZtQ0lpSWZRdUorbm82b2lSUXVhSW1OWVM4aDA5eWpnVTU3OWROZVVjUW9QRzNhdmU3OE8zbjZQZFV2S2pNOE1NREF2MTF3WXV4QXhicDJJL0Rkd0RaSng1NUQzaEYza0t4MU54T0lxaG42NmU0R3liMVY1WndrUTBrdVRBT0g2MklsU1BwcWYxMldPQXoyVkZIWVNaSEE4Sk5kaWNZMHEwZ1RtbWV0YVBNM1laMjJHQmdwbGt6Y3hSbU1rRDJzdmxmQWRrb01aQTVhRDBPbjAzSlErSGUyV255STVCRWh5TWN3SWJEeHhGU3QwZG9rM0REb3R0VVdtZnl0dEVzV205d0hrNlhLUmluZlJ2M0d1OEtJN1dSMXJKVk9idGtrUm92bXBUb2d6bTR4dk0rbG8zNXVYSUxzVWIrYUhhWjNyVWhqRCtJSGllaW5iY3BIaFVkN21tamZQczB2Tkdaaklna1VOdXNTaGpWODhFQ0F3RUFBYU40TUhZd0h3WURWUjBqQkJnd0ZvQVUvQ3BLZFRxQStwbGprL0J6Vit5K2s3Qjl3M3N3RHdZSkt3WUJCUVVITUFFRkJBSUZBREFUQmdOVkhTVUVEREFLQmdnckJnRUZCUWNEQ1RBZEJnTlZIUTRFRmdRVTJ1WG5sTUhTbEVrczJnOUNzSSsrbkY5d1dLVXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQ3l0TkQwOHQvZDBUSFU5N1U3L2E4ejVHMmp0R2owSmgzY3NNSC9QcGVZd0hUZnNzSjNvbkxiTy9EMERjZHp4U0hNeXVaR3JwY1RZUlFmQXJ6RnRVejV3UlV5QlVJcVZRMFBnMVppT0tQa0xXUjBUYWhYcmpoRlZCeHRWNWk1MXpUdk9PeXBZbUJHUkpSZVhPeXpVclFwWndNSldCSEYyaHhLVjhrTUFlSkdzVUQxWGhUeXpFdktOU1ZYZnNid2QvSWNwRUZPL01nWFQvVmZjN3BrQ1hZMStsQ2RDZnhOUnBUMExLdE1TbWkyWCtmVzJYVnlUbXE0c2pma1V5akI2VC95L005THVrZmFJb2MvNUp6alVrVmpmT2wxaHRoZkNYYWF6S1NYU3AzdytrZlBJYVRDVHJwZmgzc2xzbHdoWHFNbzVKcnUzVk9WMVROK0FGcUpsWXMzZGFoaEVvMTVLOTkvdC84cWdxeGQrVmdWK1B0Q0g2dWttSCs0bFMzL0ZxZ1F4eGs3VGUvQ1pxcnVFMGpXcjVidVd5SXF4U2pHcWFGZWlJT0luREVTVXFxTWhoemNyNjNIaFNnTEdHaUhpbllFbEo0SGxqY3k5S1FBR2xidkIvcEN0WVpRUllUV3R6bUhSRmYwQnYxUE1YZVZ5Sk9nSldzZU1FYm1Ic21HQmkrWitUYkRVWlQ1OGJDTU1iYUFlQ2l2cDV1eW1YdW5GV1FPaUNJclZBbjlJZ0M1bFFyNWFHeklwamZTL3BYOXB2WjJHT0pVTkpndkdLbGFWK1EvTlpYMHUvV0FTcllRVVNTeDJnVC9WUE41TjIzendsSlNjays1eGpmbnFnNElRRG9XekFsa0U1S0RTeWlxQWNuOVZ5VGRrWTRNM1VIU3NjQWRmcDZNQU9aVmx3PT0AAADDanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaKzEVW7RIfl02KGNZDdCvvQAAAB7Y2JvcqVqZXhjbHVzaW9uc4GiZXN0YXJ0FGZsZW5ndGgZcahkbmFtZW5qdW1iZiBtYW5pZmVzdGNhbGdmc2hhMjU2ZGhhc2hYIGUd3Q8WVSfx91zZvNzz0nvklixhs7T3KRc8/DNzGXGcY3BhZEkAAAAAAAAAAAAAAAMbanVtYgAAACdqdW1kYzJjbAARABCAAACqADibcQNjMnBhLmNsYWltLnYyAAAAAuxjYm9ypmppbnN0YW5jZUlEeCx4bXA6aWlkOmIyOTc1MmY2LTU3MTctNDEwYy1iYjk0LTkyZDkzNzE0M2Y1NnRjbGFpbV9nZW5lcmF0b3JfaW5mb6RkbmFtZXgYT3BlbkFJIE1lZGlhIFNlcnZpY2UgQVBJZGljb26iY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIFe4aYSgE0XUyKdIdMJaRg17CTH84WdOvlzBRFBgLm4Ed29yZy5jb250ZW50YXV0aC5jMnBhX3JzZjAuNzkuMmtzcGVjVmVyc2lvbmUyLjIuMGlzaWduYXR1cmV4TXNlbGYjanVt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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2WQEAD5CfVJp4uiaZuKpR4iCNQzqcdih5Ys2AT08VMqEgdwjhfEtAVhK9s6Vom+zFOT/ryd4t368R2EEmAym4DaH3jX6/0PoZYRRkUqDtgKU68nOCgAbWD9nhPE7XTR1Uf7IXfPI93ucZZpblztCFvSeQtqg+GhzrjmlJljPcmrLfHUwbm1Fh78NdZCJfvtnXWMr4K3Ond6QEFiFPtMoZN0iVJfHJIJrGqwZfxRucWWRt9/91t1XYngTEHXKo2IQMUE3mxi1ijtcf/ySgs/fCk8wxSUdz8ISm+wKfM4J6Qdi5jPKYPdJPZO1OhrmQcSMcEA+qI+EAqee/89MWFdAEfwqUov/bAEMAUDc8RjwyUEZBRlpVUF94yIJ4bm549a+5kcj////////////////////////////////////////////////////bAEMBVVpaeGl464KC6//////////////////////////////////////////////////////////////////////////AABEIBAAEAAMBIgACEQEDEQH/xAAZAAEAAwEBAAAAAAAAAAAAAAAAAQMEBQL/xAApEAEAAgEBCQACAwEBAQAAAAAAAQMCMQQREhMUIUFSoTJxQ4GxImGR/8QAGAEBAAMBAAAAAAAAAAAAAAAAAAECAwT/xAAcEQEBAAIDAQEAAAAAAAAAAAAAAQIRAxJRQSH/2gAMAwEAAhEDEQA/ANoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9k=\",\"partial_image_index\":0,\"quality\":\"low\",\"sequence_number\":7,\"size\":\"1024x1024\"}\n\nevent: response.output_item.done\ndata: {\"type\":\"response.output_item.done\",\"item\":{\"id\":\"ig_0a372a7fcba6b284016a5ce5bf22e081a19e660657ce98596f\",\"type\":\"image_generation_call\",\"status\":\"generating\",\"action\":\"edit\",\"background\":\"opaque\",\"output_format\":\"jpeg\",\"quality\":\"low\",\"result\":\"/9j/4AAQSkZJRgABAQAAAQABAAD/63GmSlACEQAAAAEAAHGcanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAAcXZqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjE4OTI0ZjJlLWE3MzgtNGY5MC1iYjEwLTg3MDZkYjg0YjU5OQAAACFRanVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAAJ0Wp1bWIAAAA7anVtZEDLDDK7ikidpwsq1vR/Q2kTYzJwYS5pY29uAAAAABhjMnNo67z35LsqLoVg7O+vcvLhRAAAABdiZmRiAGltYWdlL3N2Zyt4bWwAAAAJd2JpZGI8c3ZnIHdpZHRoPSI3MTYiIGhlaWdodD0iNzE2IiB2aWV3Qm94PSIwIDAgNzE2IDcxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUwOC43NDkgMzE3LjM5OUM1MTYuNzc3IDI4Ny4zMTQgNTA4Ljk5MSAyNTMuODg0IDQ4NS4zODkgMjMwLjI4MkM0NjEuNzg4IDIwNi42ODEgNDI4LjM2IDE5OC44OTUgMzk4LjI3MyAyMDYuOTIzQzM3Ni4yMzEgMTg0LjkyOCAzNDMuMzkgMTc0Ljk1NiAzMTEuMTQ4IDE4My41OTZDMjc4LjkwNiAxOTIuMjM0IDI1NS40NSAyMTcuMjkyIDI0Ny4zNiAyNDcuMzYxQzIxNy4yOTEgMjU1LjQ1MSAxOTIuMjMzIDI3OC45MSAxODMuNTk1IDMxMS4xNDlDMTc0Ljk1NyAzNDMuMzkxIDE4NC45MjcgMzc2LjIzMiAyMDYuOTI0IDM5OC4yNzRDMTk4Ljg5NiA0MjguMzU5IDIwNi42ODMgNDYxLjc4OSAyMzAuMjg0IDQ4NS4zOTFDMjUzLjg4NSA1MDguOTkyIDI4Ny4zMTMgNTE2Ljc3OSAzMTcuNDAxIDUwOC43NUMzMzkuNDQyIDUzMC43NDUgMzcyLjI4NiA1NDAuNzE3IDQwNC41MjUgNTMyLjA3OUM0MzYuNzY3IDUyMy40NDEgNDYwLjIyMyA0OTguMzg0IDQ2OC4zMTMgNDY4LjMxNUM0OTguMzgzIDQ2MC4yMjQgNTIzLjQ0IDQzNi43NjYgNTMyLjA3OCA0MDQuNTI2QzU0MC43MTYgMzcyLjI4NSA1MzAuNzQ3IDMzOS40NDMgNTA4Ljc0OSAzMTcuNDAyVjMxNy4zOTlaTTQ3MC44OTkgMjQ0Ljc3NkM0ODYuODkyIDI2MC43NyA0OTMuNDg4IDI4Mi42MDEgNDkwLjY4NyAzMDMuNDEyTDQxNS41NzcgMjYwLjA0NkM0MTIuNDExIDI1OC4yMTggNDA4LjUwOSAyNTguMjE4IDQwNS4zNDUgMjYwLjA0NkwzMTcuNDAxIDMxMC44MlYyNzcuNTI2QzMxNy40MDEgMjc1LjE5MSAzMTguNjUyIDI3My4wMDUgMzIwLjY3NiAyNzEuODM3TDM4Ny42NDQgMjMzLjE3NEM0MTQuMTc4IDIxOC4zNTMgNDQ4LjM0NiAyMjIuMjIzIDQ3MC45MDEgMjQ0Ljc3Nkg0NzAuODk5Wk0zNTcuODM3IDMxMS4xNDRMMzk4LjI3NSAzMzQuNDkxVjM4MS4xODVMMzU3LjgzNyA0MDQuNTMyTDMxNy4zOTggMzgxLjE4NVYzMzQuNDkxTDM1Ny44MzcgMzExLjE0NFpNMjY0Ljc3NiAyNjkuNjkzQzI2NS4yMDcgMjM5LjMwNSAyODUuNjQ0IDIxMS42NDkgMzE2LjQ1MyAyMDMuMzkzQzMzOC4zIDE5Ny41NCAzNjAuNTA1IDIwMi43NDQgMzc3LjEyNyAyMTUuNTczTDMwMi4wMTQgMjU4LjkzN0MyOTguODQ4IDI2MC43NjQgMjk2Ljg5OCAyNjQuMTQ0IDI5Ni44OTggMjY3Ljc5OFYzNjkuMzQ2TDI2OC4wNjUgMzUyLjY5OUMyNjYuMDQzIDM1MS41MzEgMjY0Ljc3NiAzNDkuMzUzIDI2NC43NzYgMzQ3LjAxN1YyNjkuNjkxVjI2OS42OTNaTTIwMy4zOTEgMzE2LjQ1NEMyMDkuMjQ0IDI5NC42MDggMjI0Ljg1NCAyNzcuOTc4IDI0NC4yNzYgMjY5Ljk5OVYzNTYuNzNDMjQ0LjI3NiAzNjAuMzg0IDI0Ni4yMjYgMzYzLjc2MyAyNDkuMzkyIDM2NS41OTFMMzM3LjMzNyA0MTYuMzY1TDMwOC41MDMgNDMzLjAxM0MzMDYuNDgxIDQzNC4xODEgMzAzLjk2MSA0MzQuMTg4IDMwMS45MzkgNDMzLjAyTDIzNC45NzEgMzk0LjM1N0MyMDguODY4IDM3OC43ODkgMTk1LjEzOCAzNDcuMjYxIDIwMy4zOTEgMzE2LjQ1NFpNMjQ0Ljc3NSA0NzAuOUMyMjguNzgxIDQ1NC45MDYgMjIyLjE4NiA0MzMuMDc1IDIyNC45ODYgNDEyLjI2NEwzMDAuMDk2IDQ1NS42M0MzMDMuMjYzIDQ1Ny40NTcgMzA3LjE2NCA0NTcuNDU3IDMxMC4zMjggNDU1LjYzTDM5OC4yNzMgNDA0Ljg1NlY0MzguMTQ5QzM5OC4yNzMgNDQwLjQ4NSAzOTcuMDIyIDQ0Mi42NzEgMzk0Ljk5NyA0NDMuODM5TDMyOC4wMjkgNDgyLjUwMkMzMDEuNDk1IDQ5Ny4zMjIgMjY3LjMyNyA0OTMuNDUyIDI0NC43NzIgNDcwLjlIMjQ0Ljc3NVpNNDUwLjg5NyA0NDUuOTgyQzQ1MC40NjYgNDc2LjM3MSA0MzAuMDI5IDUwNC4wMjcgMzk5LjIyIDUxMi4yODNDMzc3LjM3MyA1MTguMTM2IDM1NS4xNjggNTEyLjkzMiAzMzguNTQ3IDUwMC4xMDJMNDEzLjY1OSA0NTYuNzM4QzQxNi44MjYgNDU0LjkxMSA0MTguNzc1IDQ1MS41MzIgNDE4Ljc3NSA0NDcuODc3VjM0Ni4zMjlMNDQ3LjYwOSAzNjIuOTc3QzQ0OS42MzEgMzY0LjE0NSA0NTAuODk3IDM2Ni4zMjMgNDUwLjg5NyAzNjguNjU5VjQ0NS45ODVWNDQ1Ljk4MlpNNTEyLjI4MiAzOTkuMjIxQzUwNi40MjkgNDIxLjA2OCA0OTAuODE5IDQzNy42OTcgNDcxLjM5NyA0NDUuNjc2VjM1OC45NDZDNDcxLjM5NyAzNTUuMjkyIDQ2OS40NDggMzUxLjkxMiA0NjYuMjgxIDM1MC4wODVMMzc4LjMzNiAyOTkuMzExTDQwNy4xNyAyODIuNjYzQzQwOS4xOTIgMjgxLjQ5NSA0MTEuNzEyIDI4MS40ODcgNDEzLjczNCAyODIuNjU1TDQ4MC43MDIgMzIxLjMxOEM1MDYuODA1IDMzNi44ODcgNTIwLjUzNiAzNjguNDE1IDUxMi4yODIgMzk5LjIyMVoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgoAAAF+anVtYgAAAEFqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmFjdGlvbnMudjIAAAAAGGMyc2j+lf0LRwjwk6l99FttgUeWAAABNWNib3KhZ2FjdGlvbnODpGZhY3Rpb25sYzJwYS5jcmVhdGVkZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVpZ3B0LWltYWdlZ3ZlcnNpb25jMi4wcWRpZ2l0YWxTb3VyY2VUeXBleEZodHRwOi8vY3YuaXB0Yy5vcmcvbmV3c2NvZGVzL2RpZ2l0YWxzb3VyY2V0eXBlL3RyYWluZWRBbGdvcml0aG1pY01lZGlhomZhY3Rpb25uYzJwYS5jb252ZXJ0ZWRkd2hlbsB0MjAyNi0wNy0xOVQwMDowMDowMFqiZmFjdGlvbngYYzJwYS53YXRlcm1hcmtlZC51bmJvdW5kZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBaAAAVDmp1bWIAAABJanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5jZXJ0aWZpY2F0ZS1zdGF0dXMAAAAAGGMyc2iJ/+NtK3pzfjJ5leK6i9DYAAAUvWNib3KhaG9jc3BWYWxzgnkKdE1JSUgwd29CQUtDQ0I4d3dnZ2ZJQmdrckJnRUZCUWN3QVFFRWdnZTVNSUlIdFRDQjZhSVdCQlE5cXFwNGp2cjJUUHBlYXRGQVRRN2xWUElmcmhnUE1qQXlOakEzTVRnd09UQXlOVGxhTUlHWU1JR1ZNRWt3Q1FZRkt3NERBaG9GQUFRVTM0STNVMTVUMkRPeDRBUTlKRFh4ZGViaENoa0VGRGs5RUVmY2w0K3ZpSHROY3hnZHplWHVwS1VxQWhBTHBmenBEbkNNOGdXQU1lNUVIR1J6Z0FBWUR6SXdNall3TnpFNE1Ea3dNalU1V3FBUkdBOHlNREkyTURjeU5UQTVNREkxT0ZxaElqQWdNQjRHQ1NzR0FRVUZCekFCQmdRUkdBOHlNREUyTURjeU1EQTVNREkxT1ZxaEl6QWhNQjhHQ1NzR0FRVUZCekFCQWdRU0JCQnhhdGo5cHd3RUkwTTlyVExzNUg4Uk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQmdRQlo1Q0VxaVNQNEZ0c1prcGNhb3htanpqOElmTytLY2drajBRRDI1ZTJxUWY2bmdzVEVDSEIzQVlCY0pGeTRGanNWbVEyMlgxeHN3TEhzWHdlNi9JNFJnbWQxUmxQSGQ4QXBCUG9xWEJmTmNZRm9obEhYV2dPUnJqS0JzSkg1c1NVdWZZZmpoK1N1NkZNdTVyMFpyTnRuT3N5VUtMbHR0TUt6eStwQ3NYbWU5eDRLcHlrRnI1RS9tRjRvR0FlS29kKzAwTmpId2szUE13Z2hFR28yZDBhUy9PbTFKYWFybjN5YmZTVXp4MVczN2t2N2hTaWlSeDZMRWlTNWZlaVRVRDNDazZ6YXR3WUcrZXh4clFKci90WTFRQW95Y0hKMWh6cVRrQUxLa0xIZGNDbkZNQ3pYSGk5ZXhBRVNQNFU1cFBBV2VJVE9kZ1RXTDRmeGFOSUNFaFhHVDQ5Wk5nSUVmY3lDdnpZQkRYTWxKQ2ViNko1cTdwQUlYLzRxS2U0cklnRzZ3WDEwVUYrMkpHZmJISjRWeCtYN3NCSTZTT0Y5dEdxZ0ZBZlJmM0ozYWhJTmp5d2ZFRi9uMlRlM09tSXdRL0grMFJZTUF3ZjFKUndOMlB6UmdLT0JtSmdreExzTjhpcHhDY2Qrbm4zcDVkQzNlSkE0ek4vV2lLcXIxY3hZNklTZ2dnVXhNSUlGTFRDQ0JTa3dnZ01Sb0FNQ0FRSUNFRnBLc2ovUUtNYitTN00vYmozako3b3dEUVlKS29aSWh2Y05BUUVMQlFBd1NqRWhNQjhHQTFVRUF3d1lVMU5NTG1OdmJTQkRNbEJCSUVsRFFTQlNNU0F5TURJMU1SZ3dGZ1lEVlFRS0RBOVRVMHdnUTI5eWNHOXlZWFJwYjI0eEN6QUpCZ05WQkFZVEFsVlRNQjRYRFRJMk1ERXdNakl3TVRReE5Wb1hEVEkzTURFd01qSXdNVFF4TkZvd1RURUxNQWtHQTFVRUJoTUNWVk14RVRBUEJnTlZCQW9NQ0ZOVFRDQkRiM0p3TVNzd0tRWURWUVFERENKVFUwd3VZMjl0SUVNeVVFRWdTVU5CSUZJeElFOURVMUFnVW1WemNHOXVaR1Z5TUlJQm9qQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FZOEFNSUlCaWdLQ0FZRUFvbENUUWVaS1M5NExtNmFWZENaWVBPeFMvTHVVSFRMTkZNUEdVTi9Rdlp6R2JuQ0xJNWZYak83TUNIeFc3bWUrK1pyQWtyRHJ1cVV6LzIxcEZKQ0RMd2lJTFJYdHNFdGRIeXlidWJobEZ5Umo3aE93SkdDTkN1Z0YrSGtmeHROaE5WdU1CSmRZbjdPTVhOamt4cWJRUS9DenA5TlUyV3lJOXhpbnVNVFlidjB4S040T0NTNlFKL1Z6MlhlbTFWQ2FJTm04eXpMRlJybjhvbFVGVGU2Z202eG9hc0ViUHpncWVnYlkwMTI2dExNZTY1MVZLZTdzMGpjVW42N0ZOcW1jc0xmZVJDcUw2RkNuRVNBSWdBdDVleVhQMlRueW5rV2JkN29IZUFtZ3BrNTdRSTR4L2VvaWFJY1ZnTVNDSWVSUFd2SVI4NGdQcEV1SktuNU1KQUVtcWFDYUJNbWRmQVh1YTJLRklqSUI3dGJjSzlMZjFrWTBkcUNDS0hpT3ZpcmREaFRrMW1vcWQ5dDBlalVucG9jV0Y4RzRIdkE2VTRHcW10WXJrNi9qSDV1M1pkSW1NRXFsSEE2K3l2R0xmMW8wQWFhaDBnRUloWEk0V0RuRTdENHlIUitFM3pjVWVkWXcwemNiZU9ib3paTHBiaXNOYnV3dzZ6STRMcWs4MGkzbEFnTUJBQUdqZ1ljd2dZUXdEQVlEVlIwVEFRSC9CQUl3QURBZkJnTlZIU01FR0RBV2dCUTVQUkJIM0plUHI0aDdUWE1ZSGMzbDdxU2xLakFQQmdrckJnRUZCUWN3QVFVRUFnVUFNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01KTUIwR0ExVWREZ1FXQkJROXFxcDRqdnIyVFBwZWF0RkFUUTdsVlBJZnJqQU9CZ05WSFE4QkFmOEVCQU1DQjRBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFMdHpwbFdFbzJoUTZ4RHhvR3pYeVNtRW5UNm9MKzBLdXc2ZzY2dkx3UjY0QVlZRnR6QWxTRzN6RGVHOW9VMG8waXRsWUVUY3RvMnJWVC9YM1lVZS92Q1hXeVFzN0sxTEgwdjB1d242bnJEZ3NMRDlqa1J5dEk4TWF0MWo2T3V5MWd2VXgvSG5pdzdmMzJ6RUNhTDlQUjl6R3hGWXdTZ3BvbXRnYVRBcE8xVzBqS21rQ0pDcEVuQStibkxFZGh3d2FZSlBKYlJQVmM3cFNNOWZpd2QvemZCV2E5L2Nub1lmTnZBMWpzRTNsWE80N2JZWXFFUys5cGZlU1ErOGo2RStjaWZRUFNGOFVseFFxY2NWM0tuNzkyMndLZ2NtRUJTZ2xOOFZaSVdNcHoyS09qRUdkSkVoNFJqc1N0K0ZFV2pPWWFta2F6SXowMmpteWIrei9QK1Y4UnpYd2dWbFNteE9SLzZvWUpSM2FFSE9UaWhFcGNhWWg2ZzE4bzRHWnFva3ZXckJFcTRZSUd2ZWRLTjNKbVducGNJb0hTWDlQcW5sRkVtNUIvOTBhQlJ5UjFEN2RKb2lhSVVhakwrREFKelo0MjBOb2p4Y3gwNmxkdEwvd3FyRnJyVDhLa0pzSjZpMDFqbkxGNWxZeXdjTHc3SDhOdWcxMU10ZXlSR1ltTTdvZ29zUzdRdFlZYnBoa2RHcGVzaytXT0Q4bEVoTWRPYlAxSHl6QWZMb0kwdm9NR2dadXlmc3VmWUp0dTE1aytVS2dyWEg1eTRheG9Wcms2VkJXU21VdWxqVGI1Wk5uMUV6a1QvQXVGQWJ6N1c2WUlqcE53cE1scDhqZU5yQnlvN0ZsajVzK2w4QU4xYmZDUVlobUpKNTk4Qy80ODZTcHhTckxGYzlRZFFTaWVBL3kKME1JSUhuZ29CQUtDQ0I1Y3dnZ2VUQmdrckJnRUZCUWN3QVFFRWdnZUVNSUlIZ0RDQng2SVdCQlRhNWVlVXdkS1VTU3phRDBLd2o3NmNYM0JZcFJnUE1qQXlOakEzTVRnd09UQXlOVGxhTUhjd2RUQk5NQWtHQlNzT0F3SWFCUUFFRkthaUt0REhIckRSY0dvUGQ4Vnp5YU1yMTNGb0JCVDhLa3AxT29ENm1XT1Q4SE5YN0w2VHNIM0Rld0lVSnl0anlNd2RUUzJiaEZGeWJQU2NYakpScnQ2QUFCZ1BNakF5TmpBM01UZ3dPVEF5TlRsYW9CRVlEekl3TWpZd056STFNRGt3TWpVNFdxRWpNQ0V3SHdZSkt3WUJCUVVITUFFQ0JCSUVFRjd0MkFTQ0dpb0xDZ09ldzV5dWRXSXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnR0JBTFExR3k0NDFBMWczQ1hodGJ0cVM0V0Mybmpndm5GdEQ0YlI0V1FQTTNBMHRuRG8zMnZ4Ykp1OHRyeFhWNGk3enpqTy91QkZXRVZaRzJ3ckp6aitBMVM5aVNkNU9oSUhZaFhZQjFab0xFandZUDU4RnFSUldDRkNTK2lGd05FcnZHQmxDNUR4Vlh0c3Q4VTliTWF5RExsemo2amRQbTFFVDVIR3JkR3Y1WFlXS3U4MHBZY2RNaWE3ZCt4ZlZzcWtQZzFVTDVjVHZoazhqOVY3eDFmb2hPUzQ3RzV0cG4yako1TzdZcXg1Z1BrRW9Dd202ZGdiN1ZLUEhWWjZQem93dlI1cnIrTlhKT1lRd09KOXZyQzJRYS9TK1JjaUlvcWRGZHE5YSsrZGp3L1dZOFI2bWY3N0UvbDcyM1lYQ2xNeEZzbVBVNHgvNmZZNEJWSEhoSVZqMXJsNDd4d0pHM0orTVJSVE5rcGE5VTJEWlpyd3JoV1hxc2JMemg4Nzl1Z3FxNHYzMlR2a0tpa01VV05PaHlWeGphYTFqVG5FbjNrODVLOU9OcFhqaU5ncjFCOXpRT1FkRGNYemFzd2NMQlpYWDd0cElSM281YXVLL08vRklzazcwaE80c3NraHBLak80dXcrcnp0SE1NTCsyeExqY0hDRlVMR3k2d0dQTDZ2QTZxQ0NCUjR3Z2dVYU1JSUZGakNDQXY2Z0F3SUJBZ0lRVkdZd0l0eThXUDRVdTF5Tm5YRU4zVEFOQmdrcWhraUc5dzBCQVFzRkFEQlBNU1l3SkFZRFZRUUREQjFUVTB3dVkyOXRJRU15VUVFZ1VsTkJJRkp2YjNRZ1EwRWdNakF5TlRFWU1CWUdBMVVFQ2d3UFUxTk1JRU52Y25CdmNtRjBhVzl1TVFzd0NRWURWUVFHRXdKVlV6QWVGdzB5TmpBME1UVXlNVFEwTWpKYUZ3MHlOekEwTVRVeU1UUTBNakZhTUVVeEN6QUpCZ05WQkFZVEFsVlRNUkV3RHdZRFZRUUtEQWhUVTB3Z1EyOXljREVqTUNFR0ExVUVBd3dhVTFOTUxtTnZiUzFETWxCQkxWSnZiM1F0TWpBeU5TMVNVMEV3Z2dHaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQmp3QXdnZ0dLQW9JQmdRQzdSeTZseHpDUWYvSWlZSmNHQm56eGY1SndWbFN0MVB6QnZEaE5lV0xpcVA0QkI5THorbk1SK2hLTVdFRk1ZNkg4bjYrOU5HbWJnaUFjZDVpbkJ1dEVDTWhNVDJMWDNaeUovREU4TWJMbkRkZk9YYmpZTVVmTVd2ZWdCMWJTSS9hUE8wNm5kYi8vbWpnQ0dXeHpmRzZtQ0lpSWZRdUorbm82b2lSUXVhSW1OWVM4aDA5eWpnVTU3OWROZVVjUW9QRzNhdmU3OE8zbjZQZFV2S2pNOE1NREF2MTF3WXV4QXhicDJJL0Rkd0RaSng1NUQzaEYza0t4MU54T0lxaG42NmU0R3liMVY1WndrUTBrdVRBT0g2MklsU1BwcWYxMldPQXoyVkZIWVNaSEE4Sk5kaWNZMHEwZ1RtbWV0YVBNM1laMjJHQmdwbGt6Y3hSbU1rRDJzdmxmQWRrb01aQTVhRDBPbjAzSlErSGUyV255STVCRWh5TWN3SWJEeHhGU3QwZG9rM0REb3R0VVdtZnl0dEVzV205d0hrNlhLUmluZlJ2M0d1OEtJN1dSMXJKVk9idGtrUm92bXBUb2d6bTR4dk0rbG8zNXVYSUxzVWIrYUhhWjNyVWhqRCtJSGllaW5iY3BIaFVkN21tamZQczB2Tkdaaklna1VOdXNTaGpWODhFQ0F3RUFBYU40TUhZd0h3WURWUjBqQkJnd0ZvQVUvQ3BLZFRxQStwbGprL0J6Vit5K2s3Qjl3M3N3RHdZSkt3WUJCUVVITUFFRkJBSUZBREFUQmdOVkhTVUVEREFLQmdnckJnRUZCUWNEQ1RBZEJnTlZIUTRFRmdRVTJ1WG5sTUhTbEVrczJnOUNzSSsrbkY5d1dLVXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQ3l0TkQwOHQvZDBUSFU5N1U3L2E4ejVHMmp0R2owSmgzY3NNSC9QcGVZd0hUZnNzSjNvbkxiTy9EMERjZHp4U0hNeXVaR3JwY1RZUlFmQXJ6RnRVejV3UlV5QlVJcVZRMFBnMVppT0tQa0xXUjBUYWhYcmpoRlZCeHRWNWk1MXpUdk9PeXBZbUJHUkpSZVhPeXpVclFwWndNSldCSEYyaHhLVjhrTUFlSkdzVUQxWGhUeXpFdktOU1ZYZnNid2QvSWNwRUZPL01nWFQvVmZjN3BrQ1hZMStsQ2RDZnhOUnBUMExLdE1TbWkyWCtmVzJYVnlUbXE0c2pma1V5akI2VC95L005THVrZmFJb2MvNUp6alVrVmpmT2wxaHRoZkNYYWF6S1NYU3AzdytrZlBJYVRDVHJwZmgzc2xzbHdoWHFNbzVKcnUzVk9WMVROK0FGcUpsWXMzZGFoaEVvMTVLOTkvdC84cWdxeGQrVmdWK1B0Q0g2dWttSCs0bFMzL0ZxZ1F4eGs3VGUvQ1pxcnVFMGpXcjVidVd5SXF4U2pHcWFGZWlJT0luREVTVXFxTWhoemNyNjNIaFNnTEdHaUhpbllFbEo0SGxqY3k5S1FBR2xidkIvcEN0WVpRUllUV3R6bUhSRmYwQnYxUE1YZVZ5Sk9nSldzZU1FYm1Ic21HQmkrWitUYkRVWlQ1OGJDTU1iYUFlQ2l2cDV1eW1YdW5GV1FPaUNJclZBbjlJZ0M1bFFyNWFHeklwamZTL3BYOXB2WjJHT0pVTkpndkdLbGFWK1EvTlpYMHUvV0FTcllRVVNTeDJnVC9WUE41TjIzendsSlNjays1eGpmbnFnNElRRG9XekFsa0U1S0RTeWlxQWNuOVZ5VGRrWTRNM1VIU3NjQWRmcDZNQU9aVmx3PT0AAADDanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaKzEVW7RIfl02KGNZDdCvvQAAAB7Y2JvcqVqZXhjbHVzaW9uc4GiZXN0YXJ0FGZsZW5ndGgZcahkbmFtZW5qdW1iZiBtYW5pZmVzdGNhbGdmc2hhMjU2ZGhhc2hYIGUd3Q8WVSfx91zZvNzz0nvklixhs7T3KRc8/DNzGXGcY3BhZEkAAAAAAAAAAAAAAAMbanVtYgAAACdqdW1kYzJjbAARABCAAACqADibcQNjMnBhLmNsYWltLnYyAAAAAuxjYm9ypmppbnN0YW5jZUlEeCx4bXA6aWlkOmIyOTc1MmY2LTU3MTctNDEwYy1iYjk0LTkyZDkzNzE0M2Y1NnRjbGFpbV9nZW5lcmF0b3JfaW5mb6RkbmFtZXgYT3BlbkFJIE1lZGlhIFNlcnZpY2UgQVBJZGljb26iY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIFe4aYSgE0XUyKdIdMJaRg17CTH84WdOvlzBRFBgLm4Ed29yZy5jb250ZW50YXV0aC5jMnBhX3JzZjAuNzkuMmtzcGVjVmVyc2lvbmUyLjIuMGlzaWduYXR1cmV4TXNlbGYjanVtYmY9L2MycGEvdXJuOmMycGE6MTg5MjRmMmUtYTczOC00ZjkwLWJiMTAtODcwNmRiODRiNTk5L2MycGEuc2lnbmF0dXJlcmNyZWF0ZWRfYXNzZXJ0aW9uc4SiY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIFe4aYSgE0XUyKdIdMJaRg17CTH84WdOvlzBRFBgLm4EomN1cmx4KnNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuYWN0aW9ucy52MmRoYXNoWCDLDnOEk2pzfXyuofPU//NRh+W4Er1+1TLbzuc0FuSh2KJjdXJseDJzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmNlcnRpZmljYXRlLXN0YXR1c2RoYXNoWCBlYpDNlXq93A4kVTJu5hdhs5Cwh5FkwT6JrL5VmiVibaJjdXJseClzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmhhc2guZGF0YWRoYXNoWCB+FyxfnCDzyPmy5RE9aruUU7SIfnwQl/Gou2PRvLcMhGhkYzp0aXRsZWppbWFnZS5qcGVnY2FsZ2ZzaGEyNTYAAEy7anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAAEyLY2JvctKEWQvoogE4JBghglkFiDCCBYQwggNsoAMCAQICEAul/OkOcIzyBYAx7kQcZHMwDQYJKoZIhvcNAQELBQAwSjEhMB8GA1UEAwwYU1NMLmNvbSBDMlBBIElDQSBSMSAyMDI1MRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xCzAJBgNVBAYTAlVTMB4XDTI2MDQyMjE1NTEwNVoXDTI3MDQyMzE1NTEwNFowRzELMAkGA1UEBhMCVVMxGTAXBgNVBAoMEE9wZW5BSSBPcENvLCBMTEMxHTAbBgNVBAMMFE9wZW5BSSBNZWRpYSBTZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnbpqFExNApfqgYm2FtG+XlhOEwNyoZnfaRRxfOUhI9OBH6I1nEyjEko8724rv+ZkrteES2kkWmPP6nYKkLJl23wBPI3h/sEFM3evJ947IDq0D2OHmBvNTZwav7R/MxFEqlQwN0a4B/2aeUQLc1dVowNjEXwdEt2sWC/meq7epZjDE5NOSPBa+OB8pJJL1Wy6ysIFKsiSvnXUlGe1Vw2qapptMDAs11VhjGrSU7YAeB1eRUOeTpKjA4Dxr1vRsuv+ixnvFrrXNwmVq2QtmcmHmvgcvy7Q52OAlhqaeaA3kzajNclIySyYYwXpRJs1Hqy5CKdTbB2caHPICh45zAZJ8wIDAQABo4IBZzCCAWMwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQ5PRBH3JePr4h7TXMYHc3l7qSlKjBvBggrBgEFBQcBAQRjMGEwOQYIKwYBBQUHMAKGLWh0dHA6Ly9jcnQtYzJwYS5zc2wuY29tL1NTTC5jb20tQzJQQS1JLVIxLmNlcjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AtYzJwYS5zc2wuY29tMBcGA1UdIAQQMA4wDAYKKwYBBAGD6F4BATApBgNVHSUEIjAgBggrBgEFBQcDBAYIKwYBBQUHAyQGCisGAQQBg+heAgEwHQYDVR0OBBYEFPOdEE3UDcudcvhGCnYYR6UbaE90MA4GA1UdDwEB/wQEAwIGwDAZBgkrBgEEAYPoXgMEDAYKKwYBBAGD6F4DCjAzBgkrBgEEAYPoXgQEJgwkMDE5YmM0MDMtNWNkNy03NjY5LWFmZTYtZmRiMTcxNzdkNDI4MA0GCSqGSIb3DQEBCwUAA4ICAQCCOJdsZR+hNwAb8fntGnS61aZbHjX1Z2wazytmaUDN9fzSclbfypUo6vhmGN5CQz34BXigaB4oGYmtte5//PUy0oy4X+dsgG7rW3yXWzDnEw8uQrgDxnCa/v4gCaw1RtWgCIxJRYDDupIfVccEWhWdb9Lr2Hmbljq8RBKQNAUVNH30QaUzly8ubFFSCm09SbAVy8eGWBEHzNzuni7pxgc5uDNcINoS7gBXM1QucChKJSlPknwu0voc3WcueuhQeDlRuoM62oh+kCOQkvViWJrlwqhzhp7F2HHp7xhcZHuR7g83L3aYeFZk529C0RB9kgG8hRZqb20ZZIXY/yKW7bnvstBcGgWEfWhdNVtLscVpSBZ5BuZojqDEYZg6TPjAJHnlpmjg7xn91pDWLi1BDGR1EFZfk5S2oZyKAho8tsDobfPFQ+d2LGgXpPLmy4uIlRboEXsVKnIkgRA9IcZjbS8lgKOZW6oppf1H6uH3a+UE+1tQJm0roYJdMfXdYqh8MgPcTMelLHIwUIBXkwaC4uius6cIf69ZNK4Qcu8qna54rOIz7FO1yZnSKKgqN6FOq/zMflibJ21F4bQqB5wEvQUwV6ExLiAuyeLIEFTboZIWT74kNZj+LwVp3Bu4TePeBy8a6Gz1wYri0/5yd9MTqCvUV5euDAsGh9gABAG+k7YSiVkGUzCCBk8wggQ3oAMCAQICFCcrY8jMHU0tm4RRcmz0nF4yUa7eMA0GCSqGSIb3DQEBCwUAME8xJjAkBgNVBAMMHVNTTC5jb20gQzJQQSBSU0EgUm9vdCBDQSAyMDI1MRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xCzAJBgNVBAYTAlVTMB4XDTI1MTIyMjE4MTczMFoXDTMwMTIyMTE4MTczMFowSjEhMB8GA1UEAwwYU1NMLmNvbSBDMlBBIElDQSBSMSAyMDI1MRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xCzAJBgNVBAYTAlVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyzq0zbicyxYpVrh5px74a/b52I9yw6aYExqtAypB2mEeLkcIUr0edFG+XQTseoK2wPv6D+gnpYvo/mLzDGDxA19IGspzAX9zleQZTm7MTno13lgR4deCF9zSFkdDd5vfSBmIeZ+jOaRZTl7gTgtHl/J1Qtd2PbZ/pCLc7QfGbx/UckaM1lHHtbd68pP5IyfVgAISUHWKcKBo6ee8hCh8nCrqKanAL/7JdhEZRlWwL2PqfZ70FbBEpEDeQDZcRIpUa1dI/7sRb6TV6o7CHtd82LzOab+gHwBNk0U7mS550s8Bnp8pu0bZFHhjMJYzUZxek2365TRKWHizKWxdfLh1G5U8mXche9i0SuvazccICtYEyaLerpeztlGW2pKbw7K7UMT+tqRMA5VdLZJqT2Ll4Cr3aaAbnATVuZMA2tG7Xg4IDk8Ixguv+SlM0MkE7OvzsnFQe3YnaJH5UIi4dzXYzaHh19Mp50rGh1RZJMJnsm0HCTXbus4YuEal4AuL2uGnn2rOYBbSEBLE98HeGXN5VeBwtO/qzMf+dhyJTmYKaYgtEO3DRqIq5H+M1BKcV0YtWBhi1cqo+n74wtlhahbLNV2gk6OyZagv7e+Y5/x+ukj0qqFx/JOvf+qnThhziGnVQsD5hJKFTxDLVLM9OvjdKWURecpDnpa4h1iWIe/RkXsCAwEAAaOCASYwggEiMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdJQQiMCAGCCsGAQUFBwMEBggrBgEFBQcDJAYKKwYBBAGD6F4CATAdBgNVHQ4EFgQUOT0QR9yXj6+Ie01zGB3N5e6kpSowFwYDVR0gBBAwDjAMBgorBgEEAYPoXgEBMB8GA1UdIwQYMBaAFPwqSnU6gPqZY5Pwc1fsvpOwfcN7MHgGCCsGAQUFBwEBBGwwajAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AtYzJwYS5zc2wuY29tMEIGCCsGAQUFBzAChjZodHRwOi8vY3J0LWMycGEuc3NsLmNvbS9TU0wuY29tLUMyUEEtUm9vdC0yMDI1LVJTQS5jZXIwDQYJKoZIhvcNAQELBQADggIBAM42+j7vD5Y2LY6vEVVm/3t/AysNAGtW9cutHr0qga2lptBNoz4Uk+STEQxp1eSMqG7mN1QIFuIlnOxlZig8Mz2iGpqiu81nZErnvnQhBKFuw6smxDss2lW5/UdOBOCNeJs3g8R0O8VHYe9tQXKk211DU8mWTuUd4AQ636jdLtGvWJfW5/RfBHIjPGvPC705AasGjJOoj6cPdlk+4QSS9ffZ+0ZiBatubtSIRqCzLypqX6VO2vjU/MzZozypd0UbCsH5mLk5y8yhccAqghJx0+T2JeJRIW3WFd/kU41vSn0Xjl7AugzVDnd5IYF6zu33HB2bjrayikJWnY9rQSoO/muci+4aoyjPX/Pp0GQe1u7CiUsY65LP9a/CJwVNuJGhNyWZ5v2A3PS8xzd7vrQBLWdY8C/nw7OLceVEA3owtqWydT5bI34701SmOrnHzA4cMxXVajV6gXZ/L/5X2mn4DD4/71SPAYt7RsNjnvof7cR/L3CEK/ZWgvSnyyTXbF4kezq9qVg7GBFps5yP0nB0/4tuJrvDq0XHUwWWnEe1xkarXvX8iIsZaKM1D+V8apVltavruf+6uOCbSkeyzuwVL4kCfRXur5wMTcTJzgH1Mj2P9yY0C/4ii3rt+V5eZ19RFFvbJFb70Vmht94WmmYJttGGLvoHfX6VeZtEZnw2hfb1o2dzaWdUc3QyoWl0c3RUb2tlbnOBoWN2YWxZFIswghSHBgkqhkiG9w0BBwKgghR4MIIUdAIBATEPMA0GCWCGSAFlAwQCAQUAMIGHBgsqhkiG9w0BCRABBKB4BHYwdAIBAQYKKwYBBAGDvzABATAxMA0GCWCGSAFlAwQCAQUABCCyidHcKpig+nxNJD8QgqF5Gv4NkxJ3KEnUCuJZHicq2gIJAO3tSN3yeHOlGBYyMDI2MDcxOTE0NTcxMi45NjQ5NDlaMAOAAQECCCiBuOHH0kA2oIIQZjCCBPYwggNeoAMCAQICFGHbRigyioyNSga3v/5g4wJsP3G3MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZMBcGA1UECgwQT3BlbkFJIE9wQ28sIExMQzEMMAoGA1UECwwDVFNBMR4wHAYDVQQDDBVPcGVuQUkgVFNBIElzc3VpbmcgQ0EwHhcNMjYwNDA4MTc0NjI2WhcNMzcwNzA5MTc0NjI2WjB1MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xGTAXBgNVBAoMEE9wZW5BSSBPcENvLCBMTEMxDDAKBgNVBAsMA1RTQTEYMBYGA1UEAwwPT3BlbkFJIFRTQSBMZWFmMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA6srFrZT98P0nn8d4p2EEyv8OKWEq+6GIzV+oopedDokvi5HIH7ywlpA9CBxVgsGWjjZqFa2JaeiQ2yxEMoOoCs135TXo7qhkW/644I6d5wIgoSjDNd2nEDfpIvcJTZeatIRzwC58qVBHKKC08Gkf8LCHKXpZ/g8UFDVC+dlpUhdKIDfyaMwP8S23gpYgG0sRDkYSXD2kFIa4S0VmOKJOTSfKlbp1DMxOh2qfdMMgFQUBJF8NxH5crv4d8x8Lle0Akd889YabKhJeDtYPHNDdyfoNyE3DyYRaGEks5DhzGmBSuEzuxvO3ttjdaqnOILpd1sRcNRBk8gMjEVM/Yo5lBRFdcCvUyWsJgUVS6BpX7VpGXdpddpwleRBog1GkmIR1kXKYVf/Y40Nise1pZydBvMWP8moHK4NJ6OEtGDQOuzkHr2e9tJUeyAKyvUVnzXIBiJRfVUsGLK2v7aX0JK93Az6DimRRj5GMDDmWS7A9rvoEmaE+GIw98L4XNqEu9WO1AgMBAAGjeDB2MAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgbAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMB0GA1UdDgQWBBSkJ1SCooqAez3Fhs0/cNnCg5lReDAfBgNVHSMEGDAWgBTyFPCwxxdUPSNDhdzKc9BygD24qDANBgkqhkiG9w0BAQsFAAOCAYEAIPskT0HAwLyYsjISIBCNIJlINRJPxEZWfqc+P7alI/kqSD7gUZ0fRUB4wbuDTpNQyZsnlmjfTc7y9hzSeavv6sEf2j/1mFkI5nDNifTuR4uqy+z/jH4U4UbYkeacuB7kNEb/YdJ4+H04OeNS7RtfZuhzwAByO+Soq46GGyqjNyH5O997XFTYTMdqKkt/z0N0YAWAc6PJ0Xevh6n9tbGEam6/iCrOmqGaq6KegkgHDDfFAmNRl9tSfG8eZ8lpCELVz/X7rRtei5Di4Ah5PC4bE4NqnqXoJUGPhRAB7eQYwaA6jf6dUlAa74fe4WTNVfkhIN+2Ke+fJ27RujRGq0oiT+diFXfdRSPdYS3CMSmPxLl+eQIGq7RX1MHszx0G4Vx7ZUmwGetNq6THJ0BOprS1j898w7RDp3bTXjBj7qgXrjUodGSrWjXjWy86Pk4KYdYwTUOb/04uxiG5PjosIBlXMHVqjmRLotAJ0RbXoGcmQW1n+ANwdrglJlb5kSYnw0tJMIIFfjCCA2agAwIBAgIUBI0EysbFC8XaGbC88U4RlaXqvBkwDQYJKoZIhvcNAQELBQAweDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKDBBPcGVuQUkgT3BDbywgTExDMQwwCgYDVQQLDANUU0ExGzAZBgNVBAMMEk9wZW5BSSBUU0EgUm9vdCBDQTAgFw0yNjA0MDgxNzQ2MjZaGA8yMTI2MDQwOTE3NDYyNlowezELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKDBBPcGVuQUkgT3BDbywgTExDMQwwCgYDVQQLDANUU0ExHjAcBgNVBAMMFU9wZW5BSSBUU0EgSXNzdWluZyBDQTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAIm81LniyKELvmG73jxkZn6nvpxtENOpMAcmPAT04GsgOd+VNO2pomUISNs3hjKDjswKSqDA8zRsoMCYzSufpfTLfNkPJt5+yU2i72Nbkeb2WajSAfpO+dk4K1oOzWBamIGYqNdTxuMZ1i5IrENXCemU8kf5bEWKFWC3964vXqI1ToU4hWmfNJ3QTdhDPc00bfxjk/zTcLtK6Hboak5mSaDt/PgYvu+aF7eod6zvtzjMudQqM8R2D9ZAEXfL/sddFy1A096LPMAY1kAUQZnLlD8sfQBrUvyeylC3CUdFFeEFI1X6sU9vVJiV9H26+GjhIhx63IqRQ4sVti4SQ7FiHKC+yiSOLu+/pNFN6Lg/Mc8mPcUAUOry2SQgZO3Vc54ucHiq3lY8BfnUgKLora/2+6ijXMtoq0TbMHfyxDR0a1Vtxof78jI8nnEORRP37FAP+/7WBDEmu9DETWHiQtuvwytuXysZG+bisO+NXETNH8BzfY+i6b1tgrwlZYQIMGntFQIDAQABo3sweTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAdBgNVHQ4EFgQU8hTwsMcXVD0jQ4XcynPQcoA9uKgwHwYDVR0jBBgwFoAUWMJAoDxHdiuo5m6okZaOlsi32eQwDQYJKoZIhvcNAQELBQADggIBAJLsN1zebOtk2q6hEQkwcq7ccgj1O7wPej3WxuEv9oMzfegfV0AYTkyZqmvUmdkUi9tr1kz4ytBZM9OhoDhcI4hEJPuH4faTBie8oe1MX2dd/zWrMdLsexHUQEM3T8KEG5y6ZMgPsKIdfpo2+OHQgrNQQ7LgVb2AlMhZUk5KdN5dx0VYm7f6MKo73Ee81S4suTgYYyx5WrfdVa09Qt+IA8/xaP5zANRat94kApeRwOdn/tymCvOlRhGzURx/Es+Nr1/jGMi4QMa94/nWS3HQZF3lZMJLwF530T3HW54Vz3v9lJTnAUsIUdr7ZPSrEfA1lPH2vn4rDt2ymj1Q3VDDlmSObasMc58oBjsEd9CX7W9FT7EzLl9G64O2qWEfvNeCrviAb8LjaRUw5m18OkSSKwaYLa/cNMG+pSpI54fI3jgMtQQMM8rjhFBw8bIeS96NT/aRGdxfhfrx5tHXyqfutJ/2IXgpgfDjcFh3ARCGpDpLl4NG6NrCanbJqRLLIRwPRb5lsaCGLoC8WUtNm0MfbbTXhOD88NXIYZANQ44Tap3D8SE8hF0G/jvW2CM5RQtfHXEN+jL9oICVRLVPAOXDdP3iTodyhvTwUQGHHgi91LUrNWwGEJKkO2tqnbr9wDsHnHbCDNUYOX9J2uOUHD5QCGrXTOKJYZ3v68/Fw0BucHo4MIIF5jCCA86gAwIBAgIUE1A7bImM8CQDMyyP90+O+32C7BswDQYJKoZIhvcNAQELBQAweDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKDBBPcGVuQUkgT3BDbywgTExDMQwwCgYDVQQLDANUU0ExGzAZBgNVBAMMEk9wZW5BSSBUU0EgUm9vdCBDQTAgFw0yNjA0MDgxNzQ2MjVaGA8yMTI2MDQwOTE3NDYyNVoweDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKDBBPcGVuQUkgT3BDbywgTExDMQwwCgYDVQQLDANUU0ExGzAZBgNVBAMMEk9wZW5BSSBUU0EgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPaS6dIUuq2e4RqsdahWG9iqsbNqkl+WefWStxQtJPi/wBqvYL7Bms15mtxsmv42msGYFqQ/5CyduqWlUHOzCsL5GvPESS94vdLsvOc/9JvRGg/yoGGiLIklylEGERf5JRCc0sYv9InEQRIO/iYe0201zey7NWBAqIVRvvbukJjxKtidehBratku2WPz5RRcKcWGIsGKHGjN6zieqVCWWyND+zj/Qnw7OqFRLyXJSNwx/1By7vB8oXfNGG+BYfM/v27o0huxpgg25Gsy+/53qF6bXN3dMZBMjmX/FoHLQc4oMVPKGEPOSARufdZkFrMpEOS0Ljq3VFpyVlfzqGp9Hu/mYR/dZcgOSAlJmTJ08AqizN2TAFOsI72ChSCx777tHaF3AO46RjOinuyv6QYxZrRmb7KJk6B+lQ4PIc5B+F7wjunNucDVM1140NAnMc9QMHJzHR7aasLAk8+t3A9kh/b7CE6IdvU+7/+SLJl3Lgv2BtyYtp0JAzr99BoJx49fWul+SA0JK7UeioMbBPJbFTwsEAOvkaKdQbdSaNENERoZv7DA2k9gve4pqu2HjXFcKIyNiKMlFGNF2AX8e2GPbEZUOxhcybCCr4PIsSM/HJ8aW+6i11S1KlOuu4XbpvqXnuyEiXLzekDJFraFWEdb8SRhOaJM3tjGqCLynr9bTCzLAgMBAAGjZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRYwkCgPEd2K6jmbqiRlo6WyLfZ5DAfBgNVHSMEGDAWgBRYwkCgPEd2K6jmbqiRlo6WyLfZ5DANBgkqhkiG9w0BAQsFAAOCAgEAWPiBkQyY8mxh/siGHdZbhB2m1r64pl0MXUnLuKEpzS2duFj58ISJPTz4b9VqH7QqolWS8GeBmV61VAz7mkaA4wJRAFPADgPBiFfe74JVfuP0fRjrDyb8g/8hqMGs3tsbk6sZzdAwdhg6k53OqmcDDTkaLoB0323wfhN2L+nqUEGLOD1s5eA+7i/bZFQ2XhG+YkW20SG0gDyMGOvanNZKqdVUZVtr0Vh+wEmH6+tLX5IMO5TXmob2oVnOR/A4rMOwfwN0ZNHAUjuhsXsoa+EOaZf4AhgMKBc7J/+upBCe92XLoPTqub2UzkTimLEKSGjuVakhpWCP/srWfdF7hiCcDvOoeNDG2kAuyIEFC1xiqCrB+1bnGHkHjhGv7OXb03D+RsxjqGTxPOmvpWS8Xr+FCC0esM7judOkEddSu3CLhp37Lr8K9tJVKyNCK0Nc7KGCYT/Pce2w95fp5MvCPPysd7e23CDBTOmJsg+yL3/DfpJknAi1hN7Mlv2JsEu1Q33S6a2G/RnZLZ+9AO7AtEdWI3xIFZEOTg9niSB7YgjByV5V8fYGxlEjV2/vh74UIEZ5vpQCscggKJ2ViogmVQVmUu8Yf9lLuqhaFOnCLK2fC8NcQvOh9SdkeXGMClqe/bn5RXkHcB7hagO1N5aOWP1Fv1QljIMDPQ/ZJjMj0Fh3prgxggNoMIIDZAIBATCBkzB7MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xGTAXBgNVBAoMEE9wZW5BSSBPcENvLCBMTEMxDDAKBgNVBAsMA1RTQTEeMBwGA1UEAwwVT3BlbkFJIFRTQSBJc3N1aW5nIENBAhRh20YoMoqMjUoGt7/+YOMCbD9xtzANBglghkgBZQMEAgEFAKCCASUwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCAhNrMcdQ5NT2sDj5FSHHdnew1urXS/gUb4MupU5As3RDCB1QYLKoZIhvcNAQkQAi8xgcUwgcIwgb8wgbwEIL1PubKQTIE2Z4hu70Hhbf4E2SIHnb9bkkrQosRgRiJ6MIGXMH+kfTB7MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xGTAXBgNVBAoMEE9wZW5BSSBPcENvLCBMTEMxDDAKBgNVBAsMA1RTQTEeMBwGA1UEAwwVT3BlbkFJIFRTQSBJc3N1aW5nIENBAhRh20YoMoqMjUoGt7/+YOMCbD9xtzANBgkqhkiG9w0BAQsFAASCAYBl6FMHHN+3/IP+NUeHOGI2GcdO5Z+N5+uybSorJKhqzaDQbu0UqmkcV+n+H72mxZjbYPsPp61xpLSptEyYnb9ujgwHdxEcsl4q3TVjQ8FWPinIGQOpQ5HbY+f0cv6p5T+k/JGkVojK4c4aS0g/ZJ2YkB3ysci24X9/SplcJYmsmhbaIToHfMTkOm24ASibhtYYr6C7q2ANz63UcLvKOmFPAIgyrliOxZFA+8skPPMQnw4nCx0Tx1NVg/YQSn81MkrAqU52viHd1CCdUzsWYoMceCw9UkmGvQFiiP8Aw1E+6/gMXDHnra+MzK/DKgbrjeBausFh7A8tAm0bOxfuKhqqnb7uLielBX5pgX8wQm4hnHbSsI4MJzQIXCGsZTrCfwRsIJ93oK7w0xQUD3MTAc5Y5Mgpr1PRn/ea+NuIDxVeQboDljOQ76XYMgjlYruXz1eqgq9E2BvkZ4i73a9Sog5XiJBTyWtUuvGTe/eMgR+gsKbCwoHT1JE3S+tCHKjNnA9lclZhbHOhaG9jc3BWYWxzgVkH1zCCB9MKAQCgggfMMIIHyAYJKwYBBQUHMAEBBIIHuTCCB7UwgemiFgQUPaqqeI769kz6XmrRQE0O5VTyH64YDzIwMjYwNzE4MDkwMjU5WjCBmDCBlTBJMAkGBSsOAwIaBQAEFN+CN1NeU9gzseAEPSQ18XXm4QoZBBQ5PRBH3JePr4h7TXMYHc3l7qSlKgIQC6X86Q5wjPIFgDHuRBxkc4AAGA8yMDI2MDcxODA5MDI1OVqgERgPMjAyNjA3MjUwOTAyNThaoSIwIDAeBgkrBgEFBQcwAQYEERgPMjAxNjA3MjAwOTAyNTlaoSMwITAfBgkrBgEFBQcwAQIEEgQQcWrY/acMBCNDPa0y7OR/ETANBgkqhkiG9w0BAQsFAAOCAYEAWeQhKokj+BbbGZKXGqMZo84/CHzvinIJI9EA9uXtqkH+p4LExAhwdwGAXCRcuBY7FZkNtl9cbMCx7F8HuvyOEYJndUZTx3fAKQT6KlwXzXGBaIZR11oDka4ygbCR+bElLn2H44fkruhTLua9GazbZzrMlCi5bbTCs8vqQrF5nvceCqcpBa+RP5heKBgHiqHftNDYx8JNzzMIIRBqNndGkvzptSWmq598m30lM8dVt+5L+4UookceixIkuX3ok1A9wpOs2rcGBvnsca0Ca/7WNUAKMnBydYc6k5ACypCx3XApxTAs1x4vXsQBEj+FOaTwFniEznYE1i+H8WjSAhIVxk+PWTYCBH3Mgr82AQ1zJSQnm+ieau6QCF/+KinuKyIBusF9dFBftiRn2xyeFcfl+7ASOkjhfbRqoBQH0X9yd2oSDY8sHxBf59k3tzpiMEPx/tEWDAMH9SUcDdj80YCjgZiYJMS7DfIqcQnHfp596eXQt3iQOMzf1oiqq9XMWOiEoIIFMTCCBS0wggUpMIIDEaADAgECAhBaSrI/0CjG/kuzP2494ye6MA0GCSqGSIb3DQEBCwUAMEoxITAfBgNVBAMMGFNTTC5jb20gQzJQQSBJQ0EgUjEgMjAyNTEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMQswCQYDVQQGEwJVUzAeFw0yNjAxMDIyMDE0MTVaFw0yNzAxMDIyMDE0MTRaME0xCzAJBgNVBAYTAlVTMREwDwYDVQQKDAhTU0wgQ29ycDErMCkGA1UEAwwiU1NMLmNvbSBDMlBBIElDQSBSMSBPQ1NQIFJlc3BvbmRlcjCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAKJQk0HmSkveC5umlXQmWDzsUvy7lB0yzRTDxlDf0L2cxm5wiyOX14zuzAh8Vu5nvvmawJKw67qlM/9taRSQgy8IiC0V7bBLXR8sm7m4ZRckY+4TsCRgjQroBfh5H8bTYTVbjASXWJ+zjFzY5Mam0EPws6fTVNlsiPcYp7jE2G79MSjeDgkukCf1c9l3ptVQmiDZvMsyxUa5/KJVBU3uoJusaGrBGz84KnoG2NNdurSzHuudVSnu7NI3FJ+uxTapnLC33kQqi+hQpxEgCIALeXslz9k58p5Fm3e6B3gJoKZOe0COMf3qImiHFYDEgiHkT1ryEfOID6RLiSp+TCQBJqmgmgTJnXwF7mtihSIyAe7W3CvS39ZGNHaggih4jr4q3Q4U5NZqKnfbdHo1J6aHFhfBuB7wOlOBqprWK5Ov4x+bt2XSJjBKpRwOvsrxi39aNAGmodIBCIVyOFg5xOw+Mh0fhN83FHnWMNM3G3jm6M2S6W4rDW7sMOsyOC6pPNIt5QIDAQABo4GHMIGEMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUOT0QR9yXj6+Ie01zGB3N5e6kpSowDwYJKwYBBQUHMAEFBAIFADATBgNVHSUEDDAKBggrBgEFBQcDCTAdBgNVHQ4EFgQUPaqqeI769kz6XmrRQE0O5VTyH64wDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4ICAQC7c6ZVhKNoUOsQ8aBs18kphJ0+qC/tCrsOoOury8EeuAGGBbcwJUht8w3hvaFNKNIrZWBE3LaNq1U/192FHv7wl1skLOytSx9L9LsJ+p6w4LCw/Y5EcrSPDGrdY+jrstYL1Mfx54sO399sxAmi/T0fcxsRWMEoKaJrYGkwKTtVtIyppAiQqRJwPm5yxHYcMGmCTyW0T1XO6UjPX4sHf83wVmvf3J6GHzbwNY7BN5VzuO22GKhEvvaX3kkPvI+hPnIn0D0hfFJcUKnHFdyp+/dtsCoHJhAUoJTfFWSFjKc9ijoxBnSRIeEY7ErfhRFozmGppGsyM9No5sm/s/z/lfEc18IFZUpsTkf+qGCUd2hBzk4oRKXGmIeoNfKOBmaqJL1qwRKuGCBr3nSjdyZlp6XCKB0l/T6p5RRJuQf/dGgUckdQ+3SaImiFGoy/gwCc2eNtDaI8XMdOpXbS/8Kqxa60/CpCbCeotNY5yxeZWMsHC8Ox/DboNdTLXskRmJjO6IKLEu0LWGG6YZHRqXrJPljg/JRITHTmz9R8swHy6CNL6DBoGbsn7Ln2CbbteZPlCoK1x+cuGsaFa5OlQVkplLpY02+WTZ9RM5E/wLhQG8+1umCI6TcKTJafI3jawcqOxZY+bPpfADdW3wkGIZiSeffAv+POkqcUqyxXPUHUEongP2NwYWRZIvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2WQEAD5CfVJp4uiaZuKpR4iCNQzqcdih5Ys2AT08VMqEgdwjhfEtAVhK9s6Vom+zFOT/ryd4t368R2EEmAym4DaH3jX6/0PoZYRRkUqDtgKU68nOCgAbWD9nhPE7XTR1Uf7IXfPI93ucZZpblztCFvSeQtqg+GhzrjmlJljPcmrLfHUwbm1Fh78NdZCJfvtnXWMr4K3Ond6QEFiFPtMoZN0iVJfHJIJrGqwZfxRucWWRt9/91t1XYngTEHXKo2IQMUE3mxi1ijtcf/ySgs/fCk8wxSUdz8ISm+wKfM4J6Qdi5jPKYPdJPZO1OhrmQcSMcEA+qI+EAqee/89MWFdAEfwqUov/bAEMAUDc8RjwyUEZBRlpVUF94yIJ4bm549a+5kcj////////////////////////////////////////////////////bAEMBVVpaeGl464KC6//////////////////////////////////////////////////////////////////////////AABEIBAAEAAMBIgACEQEDEQH/xAAZAAEAAwEBAAAAAAAAAAAAAAAAAQMEBQL/xAApEAEAAgEBCQACAwEBAQAAAAAAAQMCMQQREhMUIUFSoTJxQ4GxImGR/8QAGAEBAAMBAAAAAAAAAAAAAAAAAAECAwT/xAAcEQEBAAIDAQEAAAAAAAAAAAAAAQIRAxJRQSH/2gAMAwEAAhEDEQA/ANoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9k=\",\"revised_prompt\":\"Edit the provided image: change the solid black equilateral triangle to a flat solid blue triangle (use color #0000FF). Keep the triangle centered and the exact shape, size, and crisp edges as in the original. Preserve the plain white background (pure white). No shading, gradients, outlines, or texture—flat uniform blue fill. Maintain original image resolution and aspect ratio. Ensure anti-aliased clean edges.\",\"size\":\"1024x1024\"},\"output_index\":1,\"sequence_number\":8}\n\nevent: response.output_item.added\ndata: {\"type\":\"response.output_item.added\",\"item\":{\"id\":\"msg_0a372a7fcba6b284016a5ce5cc22f481a18bbb28bae4f0ce38\",\"type\":\"message\",\"status\":\"in_progress\",\"content\":[],\"role\":\"assistant\"},\"output_index\":2,\"sequence_number\":9}\n\nevent: response.content_part.added\ndata: {\"type\":\"response.content_part.added\",\"content_index\":0,\"item_id\":\"msg_0a372a7fcba6b284016a5ce5cc22f481a18bbb28bae4f0ce38\",\"output_index\":2,\"part\":{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"\"},\"sequence_number\":10}\n\nevent: response.output_text.done\ndata: {\"type\":\"response.output_text.done\",\"content_index\":0,\"item_id\":\"msg_0a372a7fcba6b284016a5ce5cc22f481a18bbb28bae4f0ce38\",\"logprobs\":[],\"output_index\":2,\"sequence_number\":11,\"text\":\"\"}\n\nevent: response.content_part.done\ndata: {\"type\":\"response.content_part.done\",\"content_index\":0,\"item_id\":\"msg_0a372a7fcba6b284016a5ce5cc22f481a18bbb28bae4f0ce38\",\"output_index\":2,\"part\":{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"\"},\"sequence_number\":12}\n\nevent: response.output_item.done\ndata: {\"type\":\"response.output_item.done\",\"item\":{\"id\":\"msg_0a372a7fcba6b284016a5ce5cc22f481a18bbb28bae4f0ce38\",\"type\":\"message\",\"status\":\"completed\",\"content\":[{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"\"}],\"role\":\"assistant\"},\"output_index\":2,\"sequence_number\":13}\n\nevent: response.completed\ndata: {\"type\":\"response.completed\",\"response\":{\"id\":\"resp_0a372a7fcba6b284016a5ce5b6a12081a1be0e5db6b7067a0b\",\"object\":\"response\",\"created_at\":1784473014,\"status\":\"completed\",\"background\":false,\"completed_at\":1784473036,\"error\":null,\"frequency_penalty\":0.0,\"incomplete_details\":null,\"instructions\":null,\"max_output_tokens\":null,\"max_tool_calls\":null,\"model\":\"gpt-5-mini-2025-08-07\",\"moderation\":null,\"output\":[{\"id\":\"rs_0a372a7fcba6b284016a5ce5b7334081a1b3dc47c8448468b6\",\"type\":\"reasoning\",\"content\":[],\"encrypted_content\":\"gAAAAABqXOXMPG3ar_yhYbV9hXMqlRF9LZiYy0K1DHVeRg3CJAgnN8f--ijiLuuT9tlPsJaWLvSoiGxqFtHaUH1w-Msm38QXa2G5XMQlPmjkfevSwLrVavxhA8DFTwR_7kL9FSkvpQgATEMk12TCCOPLR7aZZBQKdz9OZXyD2OKYi5JEhZ-8QRR3DIW_LUIoQv5wkNA77zJ_WouJyCrsJ4cYkB6_3jLHUUTl0uieEswXEsq4UP_v9ffj1CyHfHBNwC1hjRkoIb1aEzW9DncsyHJUn7V-2lNg7aPSqRGKNxbz9931nyjfLEjQji-QW9XC0sEtORhDSPMJzokvmmvAtbEcR8fECguFiOz4SuSm3E3WbHfrvdAJKa5i4NpLluXpDRsRsb-L6O22BeU90JEJe69XLAC1nM7fp1W9mKxrHoplX1w0EzCfuSjvUjMO1GoTifVuBKOuwiry6NykzmpiiXVmej4qKX4o9K_YKN2QOK-u_f576lHDxDqHzeAz99bcqXVJtm5yDq-iIsOrg_CYpu0829lelz8mfgkK0426Icg3gzq09qWIZm7ly_VjOlLiqQJyzML-n20OzQBHXzYupeeicbx-qpxpxHsE6E5deHfSg-hKyLaBVLCIomd2V-EiObFW9hGc7HwMqz1ZGucNQ5hJtx-DxNzKG0z79vrvWo4qiPzsakHWL4AuhiPW4n8thbvLirRPDr2GOqBWI2wFySuUrMcceTxstivM2znrHEUcrbP19LI3y4cKQqHRwUUktxlC4vj99QApKsw26jNm-WQTuADFjYBYuEKLF2akU9Y5mvA3czEtK5lXFnDcUNwOB_Xn-va10N-g99e2pbm6CTXZjP0YjhnY5Ndx5czvksKhZabbtK4_pj3ha6NVhd59-erGAqZzJb6DuCbTwqw-HRa2gXIE011tOpGAbxp4OovBod7hDXOiJVk_qpEnjlxlZG0h7fHNVxU1Kf2Po7-VBo-4pPqU9pjG8Rk6TKqawlZ7ApZgMilUCEx4tVgiRUgSi_VgCA8X5_iW7ng24rfQ3PXUkm8Zn0Z860SJLRhsm_QlvzoJ3kXPmjOEcYI8gKtIjCzxpuu9JRZRBP4KQee3kk-yoQv0nTehVeTOCFbCRQ8xg6FwghAEEw9t6lN9spnDi9-S_mXgm9cezKFxQ1ai78WvWWTl4-om8DI0Qb82IxqASDhGPTgOX-bk8bXW-A80QXmbJm1aLDyKPztZ1jIWNY5Pcctba6nFK55ckd6EE8FptExQ-oTDsBFd_zbAh7DgA36ge9ZBXfMZ_8uhndX0YgWuALXfkP9XAfmTb_U0QJsSuk_7uKJ0TRgNBrIeeI90WRSwoDARh8wL-PLP_cl0u2tZGPHBo5Up75x_S3CX97jJ8_wOnzdwxbc-SJmBQ1FHRrib6s-7OT4IIpMunDb6cgqcE3kuazHG4sUqSD5k4CqvWl4lcc6DNtot9zJ3mXl-o1T1DfWhpa56kXkvC5DJwkGjej_ZeMeacHOKCXQwLMEMNheeRy-0_FhSH1ish-s7nwcLmWhZz6p6YVffFTTcHnKaFuYCcXPMDXcym1PFWJjxjwFJYTOOahtsBrVMx3Q1Hh7gZ83i4ND1JR7ezZp3Un_Gt_GnQL84QYYmqvordDxFh0mXGXXwza9ErAdco29q75qb-y-edT8OFY3VoPHCV6jgFUA8LgkFaI7-1mxoLBdHeflgxIcLoCFlsrCiuKtk2GDDIgIIeALA1JK7ePmsgSO-3nsHI2eMwpPdDHE8S4LnuY_e8zGw0T8xRN9STH6ug7dl-cNM50zCs4dPAaJXhL-tW33wjhuThxR5B_3j7keygP6k1pNNiyGuOUhuzGMHxKbhvmG_wD-fGT6hA3nX0d56JwqYYld8O6yQloBrDjJMSnshRHFg_FnCwboENZD0TTbKe6-9Y3L6rX_lWzFlsWWGTKjJ3fzuBrNfMunqoJOsVwYfmaECu5Wc1SuMpP6MWkn-J-pQWTT_b-SSDYCnok4xN09NgCCrtge5tDvnuwbeKeqNDLYlcDT-jxxFQN7R2PGbXxXezz-KJJxLzZxD7ImKN4WSDNXA__KaFgZ1S-icgSK2OjqwzqYi-onuluZPJguhRSsAEqmh50dQctpz6sb1UVgvzveCluuUuA-bveQ3382Vvmd01d35yRmpwHdxgnasJPq1hoG96qgORgAUZ6C1F4QyQRUvaO-XWzctSqOJKkcBdyfcKFjYOl3sCmR9H6NTEDhMkwczfEf4oET3W0kTEKlrhdHrp-02AHwmlNaCdoPQuyY4o86PSFZFwdvGdabBnU3K_FBr9UCURoRkZJRxeexBffWCFYTMSLFtFV_ZEXprLgkgb6LjybZ8srLbMgHE5AwqRUFMx_0kFmoMGN5OeKca3rIFsG7YURGsdaN6s22OLu_sgpk-y1S4fF6Cyy_b4AwiYRW4tzdkiQ11saUlI4q1_bPFhAtJ2_Fw9r6QSvViGgZFujXIMwral-8Nv1XZdT6w8ia-MLtb69eFiIq8wvnHgJfroeAbMZoF6CyORTWw6iM0ytb5sjSv28t28o-3X_r4zKjW4n-Q2e8ebiDRTsj0N81qGnmGtkzG4WmgQ116kQKiBITq2Gm3_HtTmLSKnz5OB505GF91NqDk-gHJk-1lC5xzCopnMdujJ2r_JrnysiUPRt4jwr2UJ5ZuhdUXNTVxuTO4OXhguZLz_Lb4Jzl4AEtoj8kr0jUwaddWyQWOFMjO2Oa5OSmP55nEkkZyHVa__0eT1UXAAWNOHn30doiyOQEuxh94d-Vhu9mTL0ftj12DKbb_f4vzNZtkkzxnS-e7-EL9STHwBiJlAJnm4sZTzoHOf88HJJfkCSPXkVdBHKKRiI81-jn2ZEAER22m02DzI4Mh0Ewdw9Wj2r5n0HZkKBI4TNiUqI-WKlptYhaJOwpa6zeMFYGF8_vah9wy_ef3APb623CF7-NNqJiQYdqq8auGuBhhRYCnU1ASwiWaOHVh5WkLwsTtKvHDAidTCUCN5e-Wm-y46CcMrmxUZZ2_498VT-iIplOuGig5aFKg9tzJwahpXlxAhxoyEXjxeG_ND7tgXS1AwORwvtiIOlv-J0pnPbw0U9UXXamuIZX3_xsaVil-JMDC_0Ee7f7klD0gUyeFBp2ZuaancXmqv58kN3m6fYGM1zxDGr_a25JJWGgowQ35PZt8tYWioAHCArqgYoCbV-uk3Gl0Y_PXc7kWIauhHbPXYJNYjm50u5TUwBo8MZA7TGZFFSLo1s9Eb9E-AVtfuA5Ag1A8e31yI7ifygerhIcaV66IefiSo0nG9LBdQBeLu-p35TvcPb5acfJdYUTmQ3Ans6UZSsNONgA3Yq0HdUG94_UWSS0FCetHrKm-ajS2mJ4ZF6MQ8ozGz2VN-_0OkOPgdniiVAu3F9gkKPGtjTQgjxtrgvkKvXgpnSMlTuDxAG8jLNRDZEVFNOg7D-27DDJeeAJhGlnDy2jQsq5D2szI4H7_sEXEIgcNqxDuzq3uKPagjFQM4Dj1BIKn3havdKzkQASGSdz1XoAvmDvUnc0zkIH6rZLp-tq4pS5LZCS_P8Lhcbjyb-Cw_DZi8iCuN1NfCmO9VFtxoUQCSkrt1e9UxxYcSPM1mugbsj4uo-6LVIe7uKcZ3VMjaerj-wNJmn0q9y60vlQL76JZOravQL1arK7CkqTKOs0YpkEmwBZkdBSbd0oRKNPoHkRuxQ3OpzSS-P-ZsP9rhqDK044u8s8X3K00DwF53rLvJTrRZYfzf7hymRYBjlXM1DQ7hreOqlFVBlOfv8Z7FaIVB28SIfrTB_GzmKPqy0FvxkwHGnLA8MLgGSxtxeALn0bxZblIiMtMG3xp7ZsmFInQ557YJc2itiTMdOg9UAKwsQjRe5UizldmKUUaVzfMlKWO5fCewHQ9REi9A3xx1CHLKr_IjSiRwSfbmkmEn0BJqkooAm2Lg1Gh9_lgDmPz9_kI3_aGn2pxyX2R85JElpeB4V-Ze085wrAq7mFDAP1XGai8FRxu0yZKDiCT_tjauLzs1l-SwM-tAZwzDOkogfFs7Hi8jVk3P58KamUVsua4mG-I_pfSgmwj3kkRgfN1ms_i76Yix8eVppxCnYXaiA4RbXXYtH0IEs6Z5V-W-4UY_ycKxjvOLxBqArXqSWX952-JYht9r1L6bP6jdV-V3l9P6McTAcjiOKaOfNuRN0AW1xfOGbaCAgb7bL1Ji-KrZfFpcFHvzyzkIo5kUikAc48ZG3Hp_voOE6YGTIcnhyiZSm9lvQKLigiT1f6zp2yKkCISsYN3twoYpDr4ZBicbFIhXav2fn59dtNfypTAPY5YEylch2--u3-7NEmIauzbqW3lIetzBAaRwlX_ZQHnx2eA2l8TM1cOIuOeJjQxweRR2LMNTQZMEwPsx3DYfCbdkJrPusXJuZ_QLoumDiF4tiHutM6spdPALnU9wGsfecce3-UW_6Xhp64hTaELYrB-_2kqhECY4PGPbwGZg9lU1AYeR-ibTJvrDUXZnbktxYXPXlyudxedWuIjPTCD_0h1ZfVgZAaSvMLH3kQE4h8kO4txZtJG7M5tc3zJQZJDjNY8LXSxbEZTQqTleD4TSZ7Uia7H7wdz4Jdc5x6cRm89aVFtmDJyCyiXgwOwppvnw5LGEsmfVAdmmIaoYd9u5WNTrPBgGV8_aiykflmZnD1enJToj3EvhgH3KKePqvjfg8ay61Q1A0f5PlqCe9knA6N3jGRM3IoB_s-5Rp9cYMF1jLCO7n9HB40t7W5mqEBTO-Qn55TF3os=\",\"summary\":[]},{\"id\":\"ig_0a372a7fcba6b284016a5ce5bf22e081a19e660657ce98596f\",\"type\":\"image_generation_call\",\"status\":\"generating\",\"action\":\"edit\",\"background\":\"opaque\",\"output_format\":\"jpeg\",\"quality\":\"low\",\"result\":\"/9j/4AAQSkZJRgABAQAAAQABAAD/63GmSlACEQAAAAEAAHGcanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAAcXZqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjE4OTI0ZjJlLWE3MzgtNGY5MC1iYjEwLTg3MDZkYjg0YjU5OQAAACFRanVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAAJ0Wp1bWIAAAA7anVtZEDLDDK7ikidpwsq1vR/Q2kTYzJwYS5pY29uAAAAABhjMnNo67z35LsqLoVg7O+vcvLhRAAAABdiZmRiAGltYWdlL3N2Zyt4bWwAAAAJd2JpZGI8c3ZnIHdpZHRoPSI3MTYiIGhlaWdodD0iNzE2IiB2aWV3Qm94PSIwIDAgNzE2IDcxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUwOC43NDkgMzE3LjM5OUM1MTYuNzc3IDI4Ny4zMTQgNTA4Ljk5MSAyNTMuODg0IDQ4NS4zODkgMjMwLjI4MkM0NjEuNzg4IDIwNi42ODEgNDI4LjM2IDE5OC44OTUgMzk4LjI3MyAyMDYuOTIzQzM3Ni4yMzEgMTg0LjkyOCAzNDMuMzkgMTc0Ljk1NiAzMTEuMTQ4IDE4My41OTZDMjc4LjkwNiAxOTIuMjM0IDI1NS40NSAyMTcuMjkyIDI0Ny4zNiAyNDcuMzYxQzIxNy4yOTEgMjU1LjQ1MSAxOTIuMjMzIDI3OC45MSAxODMuNTk1IDMxMS4xNDlDMTc0Ljk1NyAzNDMuMzkxIDE4NC45MjcgMzc2LjIzMiAyMDYuOTI0IDM5OC4yNzRDMTk4Ljg5NiA0MjguMzU5IDIwNi42ODMgNDYxLjc4OSAyMzAuMjg0IDQ4NS4zOTFDMjUzLjg4NSA1MDguOTkyIDI4Ny4zMTMgNTE2Ljc3OSAzMTcuNDAxIDUwOC43NUMzMzkuNDQyIDUzMC43NDUgMzcyLjI4NiA1NDAuNzE3IDQwNC41MjUgNTMyLjA3OUM0MzYuNzY3IDUyMy40NDEgNDYwLjIyMyA0OTguMzg0IDQ2OC4zMTMgNDY4LjMxNUM0OTguMzgzIDQ2MC4yMjQgNTIzLjQ0IDQzNi43NjYgNTMyLjA3OCA0MDQuNTI2QzU0MC43MTYgMzcyLjI4NSA1MzAuNzQ3IDMzOS40NDMgNTA4Ljc0OSAzMTcuNDAyVjMxNy4zOTlaTTQ3MC44OTkgMjQ0Ljc3NkM0ODYuODkyIDI2MC43NyA0OTMuNDg4IDI4Mi42MDEgNDkwLjY4NyAzMDMuNDEyTDQxNS41NzcgMjYwLjA0NkM0MTIuNDExIDI1OC4yMTggNDA4LjUwOSAyNTguMjE4IDQwNS4zNDUgMjYwLjA0NkwzMTcuNDAxIDMxMC44MlYyNzcuNTI2QzMxNy40MDEgMjc1LjE5MSAzMTguNjUyIDI3My4wMDUgMzIwLjY3NiAyNzEuODM3TDM4Ny42NDQgMjMzLjE3NEM0MTQuMTc4IDIxOC4zNTMgNDQ4LjM0NiAyMjIuMjIzIDQ3MC45MDEgMjQ0Ljc3Nkg0NzAuODk5Wk0zNTcuODM3IDMxMS4xNDRMMzk4LjI3NSAzMzQuNDkxVjM4MS4xODVMMzU3LjgzNyA0MDQuNTMyTDMxNy4zOTggMzgxLjE4NVYzMzQuNDkxTDM1Ny44MzcgMzExLjE0NFpNMjY0Ljc3NiAyNjkuNjkzQzI2NS4yMDcgMjM5LjMwNSAyODUuNjQ0IDIxMS42NDkgMzE2LjQ1MyAyMDMuMzkzQzMzOC4zIDE5Ny41NCAzNjAuNTA1IDIwMi43NDQgMzc3LjEyNyAyMTUuNTczTDMwMi4wMTQgMjU4LjkzN0MyOTguODQ4IDI2MC43NjQgMjk2Ljg5OCAyNjQuMTQ0IDI5Ni44OTggMjY3Ljc5OFYzNjkuMzQ2TDI2OC4wNjUgMzUyLjY5OUMyNjYuMDQzIDM1MS41MzEgMjY0Ljc3NiAzNDkuMzUzIDI2NC43NzYgMzQ3LjAxN1YyNjkuNjkxVjI2OS42OTNaTTIwMy4zOTEgMzE2LjQ1NEMyMDkuMjQ0IDI5NC42MDggMjI0Ljg1NCAyNzcuOTc4IDI0NC4yNzYgMjY5Ljk5OVYzNTYuNzNDMjQ0LjI3NiAzNjAuMzg0IDI0Ni4yMjYgMzYzLjc2MyAyNDkuMzkyIDM2NS41OTFMMzM3LjMzNyA0MTYuMzY1TDMwOC41MDMgNDMzLjAxM0MzMDYuNDgxIDQzNC4xODEgMzAzLjk2MSA0MzQuMTg4IDMwMS45MzkgNDMzLjAyTDIzNC45NzEgMzk0LjM1N0MyMDguODY4IDM3OC43ODkgMTk1LjEzOCAzNDcuMjYxIDIwMy4zOTEgMzE2LjQ1NFpNMjQ0Ljc3NSA0NzAuOUMyMjguNzgxIDQ1NC45MDYgMjIyLjE4NiA0MzMuMDc1IDIyNC45ODYgNDEyLjI2NEwzMDAuMDk2IDQ1NS42M0MzMDMuMjYzIDQ1Ny40NTcgMzA3LjE2NCA0NTcuNDU3IDMxMC4zMjggNDU1LjYzTDM5OC4yNzMgNDA0Ljg1NlY0MzguMTQ5QzM5OC4yNzMgNDQwLjQ4NSAzOTcuMDIyIDQ0Mi42NzEgMzk0Ljk5NyA0NDMuODM5TDMyOC4wMjkgNDgyLjUwMkMzMDEuNDk1IDQ5Ny4zMjIgMjY3LjMyNyA0OTMuNDUyIDI0NC43NzIgNDcwLjlIMjQ0Ljc3NVpNNDUwLjg5NyA0NDUuOTgyQzQ1MC40NjYgNDc2LjM3MSA0MzAuMDI5IDUwNC4wMjcgMzk5LjIyIDUxMi4yODNDMzc3LjM3MyA1MTguMTM2IDM1NS4xNjggNTEyLjkzMiAzMzguNTQ3IDUwMC4xMDJMNDEzLjY1OSA0NTYuNzM4QzQxNi44MjYgNDU0LjkxMSA0MTguNzc1IDQ1MS41MzIgNDE4Ljc3NSA0NDcuODc3VjM0Ni4zMjlMNDQ3LjYwOSAzNjIuOTc3QzQ0OS42MzEgMzY0LjE0NSA0NTAuODk3IDM2Ni4zMjMgNDUwLjg5NyAzNjguNjU5VjQ0NS45ODVWNDQ1Ljk4MlpNNTEyLjI4MiAzOTkuMjIxQzUwNi40MjkgNDIxLjA2OCA0OTAuODE5IDQzNy42OTcgNDcxLjM5NyA0NDUuNjc2VjM1OC45NDZDNDcxLjM5NyAzNTUuMjkyIDQ2OS40NDggMzUxLjkxMiA0NjYuMjgxIDM1MC4wODVMMzc4LjMzNiAyOTkuMzExTDQwNy4xNyAyODIuNjYzQzQwOS4xOTIgMjgxLjQ5NSA0MTEuNzEyIDI4MS40ODcgNDEzLjczNCAyODIuNjU1TDQ4MC43MDIgMzIxLjMxOEM1MDYuODA1IDMzNi44ODcgNTIwLjUzNiAzNjguNDE1IDUxMi4yODIgMzk5LjIyMVoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgoAAAF+anVtYgAAAEFqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmFjdGlvbnMudjIAAAAAGGMyc2j+lf0LRwjwk6l99FttgUeWAAABNWNib3KhZ2FjdGlvbnODpGZhY3Rpb25sYzJwYS5jcmVhdGVkZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVpZ3B0LWltYWdlZ3ZlcnNpb25jMi4wcWRpZ2l0YWxTb3VyY2VUeXBleEZodHRwOi8vY3YuaXB0Yy5vcmcvbmV3c2NvZGVzL2RpZ2l0YWxzb3VyY2V0eXBlL3RyYWluZWRBbGdvcml0aG1pY01lZGlhomZhY3Rpb25uYzJwYS5jb252ZXJ0ZWRkd2hlbsB0MjAyNi0wNy0xOVQwMDowMDowMFqiZmFjdGlvbngYYzJwYS53YXRlcm1hcmtlZC51bmJvdW5kZHdoZW7AdDIwMjYtMDctMTlUMDA6MDA6MDBaAAAVDmp1bWIAAABJanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5jZXJ0aWZpY2F0ZS1zdGF0dXMAAAAAGGMyc2iJ/+NtK3pzfjJ5leK6i9DYAAAUvWNib3KhaG9jc3BWYWxzgnkKdE1JSUgwd29CQUtDQ0I4d3dnZ2ZJQmdrckJnRUZCUWN3QVFFRWdnZTVNSUlIdFRDQjZhSVdCQlE5cXFwNGp2cjJUUHBlYXRGQVRRN2xWUElmcmhnUE1qQXlOakEzTVRnd09UQXlOVGxhTUlHWU1JR1ZNRWt3Q1FZRkt3NERBaG9GQUFRVTM0STNVMTVUMkRPeDRBUTlKRFh4ZGViaENoa0VGRGs5RUVmY2w0K3ZpSHROY3hnZHplWHVwS1VxQWhBTHBmenBEbkNNOGdXQU1lNUVIR1J6Z0FBWUR6SXdNall3TnpFNE1Ea3dNalU1V3FBUkdBOHlNREkyTURjeU5UQTVNREkxT0ZxaElqQWdNQjRHQ1NzR0FRVUZCekFCQmdRUkdBOHlNREUyTURjeU1EQTVNREkxT1ZxaEl6QWhNQjhHQ1NzR0FRVUZCekFCQWdRU0JCQnhhdGo5cHd3RUkwTTlyVExzNUg4Uk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQmdRQlo1Q0VxaVNQNEZ0c1prcGNhb3htanpqOElmTytLY2drajBRRDI1ZTJxUWY2bmdzVEVDSEIzQVlCY0pGeTRGanNWbVEyMlgxeHN3TEhzWHdlNi9JNFJnbWQxUmxQSGQ4QXBCUG9xWEJmTmNZRm9obEhYV2dPUnJqS0JzSkg1c1NVdWZZZmpoK1N1NkZNdTVyMFpyTnRuT3N5VUtMbHR0TUt6eStwQ3NYbWU5eDRLcHlrRnI1RS9tRjRvR0FlS29kKzAwTmpId2szUE13Z2hFR28yZDBhUy9PbTFKYWFybjN5YmZTVXp4MVczN2t2N2hTaWlSeDZMRWlTNWZlaVRVRDNDazZ6YXR3WUcrZXh4clFKci90WTFRQW95Y0hKMWh6cVRrQUxLa0xIZGNDbkZNQ3pYSGk5ZXhBRVNQNFU1cFBBV2VJVE9kZ1RXTDRmeGFOSUNFaFhHVDQ5Wk5nSUVmY3lDdnpZQkRYTWxKQ2ViNko1cTdwQUlYLzRxS2U0cklnRzZ3WDEwVUYrMkpHZmJISjRWeCtYN3NCSTZTT0Y5dEdxZ0ZBZlJmM0ozYWhJTmp5d2ZFRi9uMlRlM09tSXdRL0grMFJZTUF3ZjFKUndOMlB6UmdLT0JtSmdreExzTjhpcHhDY2Qrbm4zcDVkQzNlSkE0ek4vV2lLcXIxY3hZNklTZ2dnVXhNSUlGTFRDQ0JTa3dnZ01Sb0FNQ0FRSUNFRnBLc2ovUUtNYitTN00vYmozako3b3dEUVlKS29aSWh2Y05BUUVMQlFBd1NqRWhNQjhHQTFVRUF3d1lVMU5NTG1OdmJTQkRNbEJCSUVsRFFTQlNNU0F5TURJMU1SZ3dGZ1lEVlFRS0RBOVRVMHdnUTI5eWNHOXlZWFJwYjI0eEN6QUpCZ05WQkFZVEFsVlRNQjRYRFRJMk1ERXdNakl3TVRReE5Wb1hEVEkzTURFd01qSXdNVFF4TkZvd1RURUxNQWtHQTFVRUJoTUNWVk14RVRBUEJnTlZCQW9NQ0ZOVFRDQkRiM0p3TVNzd0tRWURWUVFERENKVFUwd3VZMjl0SUVNeVVFRWdTVU5CSUZJeElFOURVMUFnVW1WemNHOXVaR1Z5TUlJQm9qQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FZOEFNSUlCaWdLQ0FZRUFvbENUUWVaS1M5NExtNmFWZENaWVBPeFMvTHVVSFRMTkZNUEdVTi9Rdlp6R2JuQ0xJNWZYak83TUNIeFc3bWUrK1pyQWtyRHJ1cVV6LzIxcEZKQ0RMd2lJTFJYdHNFdGRIeXlidWJobEZ5Umo3aE93SkdDTkN1Z0YrSGtmeHROaE5WdU1CSmRZbjdPTVhOamt4cWJRUS9DenA5TlUyV3lJOXhpbnVNVFlidjB4S040T0NTNlFKL1Z6MlhlbTFWQ2FJTm04eXpMRlJybjhvbFVGVGU2Z202eG9hc0ViUHpncWVnYlkwMTI2dExNZTY1MVZLZTdzMGpjVW42N0ZOcW1jc0xmZVJDcUw2RkNuRVNBSWdBdDVleVhQMlRueW5rV2JkN29IZUFtZ3BrNTdRSTR4L2VvaWFJY1ZnTVNDSWVSUFd2SVI4NGdQcEV1SktuNU1KQUVtcWFDYUJNbWRmQVh1YTJLRklqSUI3dGJjSzlMZjFrWTBkcUNDS0hpT3ZpcmREaFRrMW1vcWQ5dDBlalVucG9jV0Y4RzRIdkE2VTRHcW10WXJrNi9qSDV1M1pkSW1NRXFsSEE2K3l2R0xmMW8wQWFhaDBnRUloWEk0V0RuRTdENHlIUitFM3pjVWVkWXcwemNiZU9ib3paTHBiaXNOYnV3dzZ6STRMcWs4MGkzbEFnTUJBQUdqZ1ljd2dZUXdEQVlEVlIwVEFRSC9CQUl3QURBZkJnTlZIU01FR0RBV2dCUTVQUkJIM0plUHI0aDdUWE1ZSGMzbDdxU2xLakFQQmdrckJnRUZCUWN3QVFVRUFnVUFNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01KTUIwR0ExVWREZ1FXQkJROXFxcDRqdnIyVFBwZWF0RkFUUTdsVlBJZnJqQU9CZ05WSFE4QkFmOEVCQU1DQjRBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFMdHpwbFdFbzJoUTZ4RHhvR3pYeVNtRW5UNm9MKzBLdXc2ZzY2dkx3UjY0QVlZRnR6QWxTRzN6RGVHOW9VMG8waXRsWUVUY3RvMnJWVC9YM1lVZS92Q1hXeVFzN0sxTEgwdjB1d242bnJEZ3NMRDlqa1J5dEk4TWF0MWo2T3V5MWd2VXgvSG5pdzdmMzJ6RUNhTDlQUjl6R3hGWXdTZ3BvbXRnYVRBcE8xVzBqS21rQ0pDcEVuQStibkxFZGh3d2FZSlBKYlJQVmM3cFNNOWZpd2QvemZCV2E5L2Nub1lmTnZBMWpzRTNsWE80N2JZWXFFUys5cGZlU1ErOGo2RStjaWZRUFNGOFVseFFxY2NWM0tuNzkyMndLZ2NtRUJTZ2xOOFZaSVdNcHoyS09qRUdkSkVoNFJqc1N0K0ZFV2pPWWFta2F6SXowMmpteWIrei9QK1Y4UnpYd2dWbFNteE9SLzZvWUpSM2FFSE9UaWhFcGNhWWg2ZzE4bzRHWnFva3ZXckJFcTRZSUd2ZWRLTjNKbVducGNJb0hTWDlQcW5sRkVtNUIvOTBhQlJ5UjFEN2RKb2lhSVVhakwrREFKelo0MjBOb2p4Y3gwNmxkdEwvd3FyRnJyVDhLa0pzSjZpMDFqbkxGNWxZeXdjTHc3SDhOdWcxMU10ZXlSR1ltTTdvZ29zUzdRdFlZYnBoa2RHcGVzaytXT0Q4bEVoTWRPYlAxSHl6QWZMb0kwdm9NR2dadXlmc3VmWUp0dTE1aytVS2dyWEg1eTRheG9Wcms2VkJXU21VdWxqVGI1Wk5uMUV6a1QvQXVGQWJ6N1c2WUlqcE53cE1scDhqZU5yQnlvN0ZsajVzK2w4QU4xYmZDUVlobUpKNTk4Qy80ODZTcHhTckxGYzlRZFFTaWVBL3kKME1JSUhuZ29CQUtDQ0I1Y3dnZ2VUQmdrckJnRUZCUWN3QVFFRWdnZUVNSUlIZ0RDQng2SVdCQlRhNWVlVXdkS1VTU3phRDBLd2o3NmNYM0JZcFJnUE1qQXlOakEzTVRnd09UQXlOVGxhTUhjd2RUQk5NQWtHQlNzT0F3SWFCUUFFRkthaUt0REhIckRSY0dvUGQ4Vnp5YU1yMTNGb0JCVDhLa3AxT29ENm1XT1Q4SE5YN0w2VHNIM0Rld0lVSnl0anlNd2RUUzJiaEZGeWJQU2NYakpScnQ2QUFCZ1BNakF5TmpBM01UZ3dPVEF5TlRsYW9CRVlEekl3TWpZd056STFNRGt3TWpVNFdxRWpNQ0V3SHdZSkt3WUJCUVVITUFFQ0JCSUVFRjd0MkFTQ0dpb0xDZ09ldzV5dWRXSXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnR0JBTFExR3k0NDFBMWczQ1hodGJ0cVM0V0Mybmpndm5GdEQ0YlI0V1FQTTNBMHRuRG8zMnZ4Ykp1OHRyeFhWNGk3enpqTy91QkZXRVZaRzJ3ckp6aitBMVM5aVNkNU9oSUhZaFhZQjFab0xFandZUDU4RnFSUldDRkNTK2lGd05FcnZHQmxDNUR4Vlh0c3Q4VTliTWF5RExsemo2amRQbTFFVDVIR3JkR3Y1WFlXS3U4MHBZY2RNaWE3ZCt4ZlZzcWtQZzFVTDVjVHZoazhqOVY3eDFmb2hPUzQ3RzV0cG4yako1TzdZcXg1Z1BrRW9Dd202ZGdiN1ZLUEhWWjZQem93dlI1cnIrTlhKT1lRd09KOXZyQzJRYS9TK1JjaUlvcWRGZHE5YSsrZGp3L1dZOFI2bWY3N0UvbDcyM1lYQ2xNeEZzbVBVNHgvNmZZNEJWSEhoSVZqMXJsNDd4d0pHM0orTVJSVE5rcGE5VTJEWlpyd3JoV1hxc2JMemg4Nzl1Z3FxNHYzMlR2a0tpa01VV05PaHlWeGphYTFqVG5FbjNrODVLOU9OcFhqaU5ncjFCOXpRT1FkRGNYemFzd2NMQlpYWDd0cElSM281YXVLL08vRklzazcwaE80c3NraHBLak80dXcrcnp0SE1NTCsyeExqY0hDRlVMR3k2d0dQTDZ2QTZxQ0NCUjR3Z2dVYU1JSUZGakNDQXY2Z0F3SUJBZ0lRVkdZd0l0eThXUDRVdTF5Tm5YRU4zVEFOQmdrcWhraUc5dzBCQVFzRkFEQlBNU1l3SkFZRFZRUUREQjFUVTB3dVkyOXRJRU15VUVFZ1VsTkJJRkp2YjNRZ1EwRWdNakF5TlRFWU1CWUdBMVVFQ2d3UFUxTk1JRU52Y25CdmNtRjBhVzl1TVFzd0NRWURWUVFHRXdKVlV6QWVGdzB5TmpBME1UVXlNVFEwTWpKYUZ3MHlOekEwTVRVeU1UUTBNakZhTUVVeEN6QUpCZ05WQkFZVEFsVlRNUkV3RHdZRFZRUUtEQWhUVTB3Z1EyOXljREVqTUNFR0ExVUVBd3dhVTFOTUxtTnZiUzFETWxCQkxWSnZiM1F0TWpBeU5TMVNVMEV3Z2dHaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQmp3QXdnZ0dLQW9JQmdRQzdSeTZseHpDUWYvSWlZSmNHQm56eGY1SndWbFN0MVB6QnZEaE5lV0xpcVA0QkI5THorbk1SK2hLTVdFRk1ZNkg4bjYrOU5HbWJnaUFjZDVpbkJ1dEVDTWhNVDJMWDNaeUovREU4TWJMbkRkZk9YYmpZTVVmTVd2ZWdCMWJTSS9hUE8wNm5kYi8vbWpnQ0dXeHpmRzZtQ0lpSWZRdUorbm82b2lSUXVhSW1OWVM4aDA5eWpnVTU3OWROZVVjUW9QRzNhdmU3OE8zbjZQZFV2S2pNOE1NREF2MTF3WXV4QXhicDJJL0Rkd0RaSng1NUQzaEYza0t4MU54T0lxaG42NmU0R3liMVY1WndrUTBrdVRBT0g2MklsU1BwcWYxMldPQXoyVkZIWVNaSEE4Sk5kaWNZMHEwZ1RtbWV0YVBNM1laMjJHQmdwbGt6Y3hSbU1rRDJzdmxmQWRrb01aQTVhRDBPbjAzSlErSGUyV255STVCRWh5TWN3SWJEeHhGU3QwZG9rM0REb3R0VVdtZnl0dEVzV205d0hrNlhLUmluZlJ2M0d1OEtJN1dSMXJKVk9idGtrUm92bXBUb2d6bTR4dk0rbG8zNXVYSUxzVWIrYUhhWjNyVWhqRCtJSGllaW5iY3BIaFVkN21tamZQczB2Tkdaaklna1VOdXNTaGpWODhFQ0F3RUFBYU40TUhZd0h3WURWUjBqQkJnd0ZvQVUvQ3BLZFRxQStwbGprL0J6Vit5K2s3Qjl3M3N3RHdZSkt3WUJCUVVITUFFRkJBSUZBREFUQmdOVkhTVUVEREFLQmdnckJnRUZCUWNEQ1RBZEJnTlZIUTRFRmdRVTJ1WG5sTUhTbEVrczJnOUNzSSsrbkY5d1dLVXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQ3l0TkQwOHQvZDBUSFU5N1U3L2E4ejVHMmp0R2owSmgzY3NNSC9QcGVZd0hUZnNzSjNvbkxiTy9EMERjZHp4U0hNeXVaR3JwY1RZUlFmQXJ6RnRVejV3UlV5QlVJcVZRMFBnMVppT0tQa0xXUjBUYWhYcmpoRlZCeHRWNWk1MXpUdk9PeXBZbUJHUkpSZVhPeXpVclFwWndNSldCSEYyaHhLVjhrTUFlSkdzVUQxWGhUeXpFdktOU1ZYZnNid2QvSWNwRUZPL01nWFQvVmZjN3BrQ1hZMStsQ2RDZnhOUnBUMExLdE1TbWkyWCtmVzJYVnlUbXE0c2pma1V5akI2VC95L005THVrZmFJb2MvNUp6alVrVmpmT2wxaHRoZkNYYWF6S1NYU3AzdytrZlBJYVRDVHJwZmgzc2xzbHdoWHFNbzVKcnUzVk9WMVROK0FGcUpsWXMzZGFoaEVvMTVLOTkvdC84cWdxeGQrVmdWK1B0Q0g2dWttSCs0bFMzL0ZxZ1F4eGs3VGUvQ1pxcnVFMGpXcjVidVd5SXF4U2pHcWFGZWlJT0luREVTVXFxTWhoemNyNjNIaFNnTEdHaUhpbllFbEo0SGxqY3k5S1FBR2xidkIvcEN0WVpRUllUV3R6bUhSRmYwQnYxUE1YZVZ5Sk9nSldzZU1FYm1Ic21HQmkrWitUYkRVWlQ1OGJDTU1iYUFlQ2l2cDV1eW1YdW5GV1FPaUNJclZBbjlJZ0M1bFFyNWFHeklwamZTL3BYOXB2WjJHT0pVTkpndkdLbGFWK1EvTlpYMHUvV0FTcllRVVNTeDJnVC9WUE41TjIzendsSlNjays1eGpmbnFnNElRRG9XekFsa0U1S0RTeWlxQWNuOVZ5VGRrWTRNM1VIU3NjQWRmcDZNQU9aVmx3PT0AAADDanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaKzEVW7RIfl02KGNZDdCvvQAAAB7Y2JvcqVqZXhjbHVzaW9uc4GiZXN0YXJ0FGZsZW5ndGgZcahkbmFtZW5qdW1iZiBtYW5pZmVzdGNhbGdmc2hhMjU2ZGhhc2hYIGUd3Q8WVSfx91zZvNzz0nvklixhs7T3KRc8/DNzGXGcY3BhZEkAAAAAAAAAAAAAAAMbanVtYgAAACdqdW1kYzJjbAARABCAAACqADibcQNjMnBhLmNsYWltLnYyAAAAAuxjYm9ypmppbnN0YW5jZUlEeCx4bXA6aWlkOmIyOTc1MmY2LTU3MTctNDEwYy1iYjk0LTkyZDkzNzE0M2Y1NnRjbGFpbV9nZW5lcmF0b3JfaW5mb6RkbmFtZXgYT3BlbkFJIE1lZGlhIFNlcnZpY2UgQVBJZGljb26iY3VybHgkc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pY29uZGhhc2hYIFe4aYSgE0XUyKdIdMJaRg17CTH84WdOvlzBRFBgLm4Ed29yZy5jb250ZW50YXV0aC5jMnBhX3JzZjAuNzkuMmtzcGVjVmVyc2lvbmUyLjIuMGlzaWduYXR1cmV4TXNlbGYjanVt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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2WQEAD5CfVJp4uiaZuKpR4iCNQzqcdih5Ys2AT08VMqEgdwjhfEtAVhK9s6Vom+zFOT/ryd4t368R2EEmAym4DaH3jX6/0PoZYRRkUqDtgKU68nOCgAbWD9nhPE7XTR1Uf7IXfPI93ucZZpblztCFvSeQtqg+GhzrjmlJljPcmrLfHUwbm1Fh78NdZCJfvtnXWMr4K3Ond6QEFiFPtMoZN0iVJfHJIJrGqwZfxRucWWRt9/91t1XYngTEHXKo2IQMUE3mxi1ijtcf/ySgs/fCk8wxSUdz8ISm+wKfM4J6Qdi5jPKYPdJPZO1OhrmQcSMcEA+qI+EAqee/89MWFdAEfwqUov/bAEMAUDc8RjwyUEZBRlpVUF94yIJ4bm549a+5kcj////////////////////////////////////////////////////bAEMBVVpaeGl464KC6//////////////////////////////////////////////////////////////////////////AABEIBAAEAAMBIgACEQEDEQH/xAAZAAEAAwEBAAAAAAAAAAAAAAAAAQMEBQL/xAApEAEAAgEBCQACAwEBAQAAAAAAAQMCMQQREhMUIUFSoTJxQ4GxImGR/8QAGAEBAAMBAAAAAAAAAAAAAAAAAAECAwT/xAAcEQEBAAIDAQEAAAAAAAAAAAAAAQIRAxJRQSH/2gAMAwEAAhEDEQA/ANoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9k=\",\"revised_prompt\":\"Edit the provided image: change the solid black equilateral triangle to a flat solid blue triangle (use color #0000FF). Keep the triangle centered and the exact shape, size, and crisp edges as in the original. Preserve the plain white background (pure white). No shading, gradients, outlines, or texture—flat uniform blue fill. Maintain original image resolution and aspect ratio. Ensure anti-aliased clean edges.\",\"size\":\"1024x1024\"},{\"id\":\"msg_0a372a7fcba6b284016a5ce5cc22f481a18bbb28bae4f0ce38\",\"type\":\"message\",\"status\":\"completed\",\"content\":[{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"\"}],\"role\":\"assistant\"}],\"parallel_tool_calls\":true,\"presence_penalty\":0.0,\"previous_response_id\":null,\"prompt_cache_key\":null,\"prompt_cache_retention\":\"in_memory\",\"reasoning\":{\"context\":\"current_turn\",\"effort\":\"medium\",\"mode\":\"standard\",\"summary\":\"detailed\"},\"safety_identifier\":null,\"service_tier\":\"default\",\"store\":false,\"temperature\":1.0,\"text\":{\"format\":{\"type\":\"text\"},\"verbosity\":\"medium\"},\"tool_choice\":{\"type\":\"image_generation\"},\"tool_usage\":{\"image_gen\":{\"input_tokens\":1116,\"input_tokens_details\":{\"image_tokens\":1024,\"text_tokens\":92},\"output_tokens\":196,\"output_tokens_details\":{\"image_tokens\":196,\"text_tokens\":0},\"total_tokens\":1312},\"web_search\":{\"num_requests\":0}},\"tools\":[{\"type\":\"image_generation\",\"background\":\"auto\",\"model\":\"gpt-image-2\",\"moderation\":\"auto\",\"n\":1,\"output_compression\":10,\"output_format\":\"jpeg\",\"quality\":\"low\",\"size\":\"1024x1024\"}],\"top_logprobs\":0,\"top_p\":1.0,\"truncation\":\"disabled\",\"usage\":{\"input_tokens\":3510,\"input_tokens_details\":{\"cache_write_tokens\":0,\"cached_tokens\":0},\"output_tokens\":669,\"output_tokens_details\":{\"reasoning_tokens\":512},\"total_tokens\":4179},\"user\":null,\"metadata\":{}},\"sequence_number\":14}\n\n" + } + } + ] +} diff --git a/packages/ai/test/fixtures/recordings/openrouter-reasoning-tool-loop.json b/packages/ai/test/fixtures/recordings/openrouter-reasoning-tool-loop.json new file mode 100644 index 0000000000..343f4d8160 --- /dev/null +++ b/packages/ai/test/fixtures/recordings/openrouter-reasoning-tool-loop.json @@ -0,0 +1,55 @@ +{ + "version": 1, + "metadata": { + "model": "anthropic/claude-sonnet-4.6", + "tags": [ + "prefix:openai-compatible-chat", + "provider:openrouter", + "protocol:openai-chat", + "reasoning", + "continuation", + "tool", + "tool-loop" + ], + "name": "openrouter-reasoning-tool-loop", + "recordedAt": "2026-07-18T18:02:15.859Z" + }, + "interactions": [ + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://openrouter.ai/api/v1/chat/completions", + "headers": { + "content-type": "application/json" + }, + "body": "{\"model\":\"anthropic/claude-sonnet-4.6\",\"messages\":[{\"role\":\"system\",\"content\":\"Use the get_weather tool exactly once. After the tool result, reply exactly: Paris is sunny.\"},{\"role\":\"user\",\"content\":\"What is the weather in Paris?\"}],\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"description\":\"Get current weather for a city.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}},\"required\":[\"city\"],\"additionalProperties\":false}}}],\"stream\":true,\"stream_options\":{\"include_usage\":true},\"max_tokens\":1536,\"reasoning\":{\"max_tokens\":1024}}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream" + }, + "body": ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1784397732-OaggEWvVIDtBtcPF4n0O\",\"object\":\"chat.completion.chunk\",\"created\":1784397732,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"The user wants\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1784397732-OaggEWvVIDtBtcPF4n0O\",\"object\":\"chat.completion.chunk\",\"created\":1784397732,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" to know the weather in Paris. I'll use the get_weather tool.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" to know the weather in Paris. I'll use the get_weather tool.\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784397732-OaggEWvVIDtBtcPF4n0O\",\"object\":\"chat.completion.chunk\",\"created\":1784397732,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"signature\":\"ErkCCosBCA8YAipAjKnRKpxkZ4eHrMPJ63IWEOYPSzb+XSHyG+vLK+2ks2O9T4N9M37Xn2kausQSH1rfsrdmKxgUlBg6yUFRgMVR7DIRY2xhdWRlLXNvbm5ldC00LTY4AEIIdGhpbmtpbmdaJDRjMGYwNDZmLTI1ZmQtNDVmYi1iZmIzLWEwOGE4ZTI0OWNhNxIMNFb5O6pb4nX0HojdGgyL5h+CAIpsxpdM1QgiMGm/i3ST6F5mAhxB+Uez0Cm95ra9yvQkrzHaA/AmWoXpdmPlczSn1S1RDk2IqeA57Spbf7JT44jygtLQt6yZmGzoTBHn3VkwaNZsuuAtbdo4B5QJXooa/AoKKs54QZ2kfS640vsv5flQVCg7CoQCFuLKjIeLMO7MnxVyuskXJr1DgesTa7I0ScF53U9JGhgB\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784397732-OaggEWvVIDtBtcPF4n0O\",\"object\":\"chat.completion.chunk\",\"created\":1784397732,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Sure! Let me check the weather in Paris for you right now!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784397732-OaggEWvVIDtBtcPF4n0O\",\"object\":\"chat.completion.chunk\",\"created\":1784397732,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":null,\"role\":\"assistant\",\"tool_calls\":[{\"index\":0,\"id\":\"toolu_01PaChhcyw3yu2P2bDS2bgAA\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"\"}}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784397732-OaggEWvVIDtBtcPF4n0O\",\"object\":\"chat.completion.chunk\",\"created\":1784397732,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":null,\"role\":\"assistant\",\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\"}}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784397732-OaggEWvVIDtBtcPF4n0O\",\"object\":\"chat.completion.chunk\",\"created\":1784397732,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":null,\"role\":\"assistant\",\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"{\\\"city\\\": \\\"Paris\"}}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784397732-OaggEWvVIDtBtcPF4n0O\",\"object\":\"chat.completion.chunk\",\"created\":1784397732,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":null,\"role\":\"assistant\",\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\"}\"}}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784397732-OaggEWvVIDtBtcPF4n0O\",\"object\":\"chat.completion.chunk\",\"created\":1784397732,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":null},\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_use\"}]}\n\ndata: {\"id\":\"gen-1784397732-OaggEWvVIDtBtcPF4n0O\",\"object\":\"chat.completion.chunk\",\"created\":1784397732,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_use\"}],\"usage\":{\"prompt_tokens\":623,\"completion_tokens\":95,\"total_tokens\":718,\"cost\":0.003294,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.003294,\"upstream_inference_prompt_cost\":0.001869,\"upstream_inference_completions_cost\":0.001425},\"completion_tokens_details\":{\"reasoning_tokens\":19,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + } + }, + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://openrouter.ai/api/v1/chat/completions", + "headers": { + "content-type": "application/json" + }, + "body": "{\"model\":\"anthropic/claude-sonnet-4.6\",\"messages\":[{\"role\":\"system\",\"content\":\"Use the get_weather tool exactly once. After the tool result, reply exactly: Paris is sunny.\"},{\"role\":\"user\",\"content\":\"What is the weather in Paris?\"},{\"role\":\"assistant\",\"content\":\"Sure! Let me check the weather in Paris for you right now!\",\"tool_calls\":[{\"id\":\"toolu_01PaChhcyw3yu2P2bDS2bgAA\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"{\\\"city\\\":\\\"Paris\\\"}\"}}],\"reasoning\":\"The user wants to know the weather in Paris. I'll use the get_weather tool.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants to know the weather in Paris. I'll use the get_weather tool.\",\"format\":\"anthropic-claude-v1\",\"index\":0,\"signature\":\"ErkCCosBCA8YAipAjKnRKpxkZ4eHrMPJ63IWEOYPSzb+XSHyG+vLK+2ks2O9T4N9M37Xn2kausQSH1rfsrdmKxgUlBg6yUFRgMVR7DIRY2xhdWRlLXNvbm5ldC00LTY4AEIIdGhpbmtpbmdaJDRjMGYwNDZmLTI1ZmQtNDVmYi1iZmIzLWEwOGE4ZTI0OWNhNxIMNFb5O6pb4nX0HojdGgyL5h+CAIpsxpdM1QgiMGm/i3ST6F5mAhxB+Uez0Cm95ra9yvQkrzHaA/AmWoXpdmPlczSn1S1RDk2IqeA57Spbf7JT44jygtLQt6yZmGzoTBHn3VkwaNZsuuAtbdo4B5QJXooa/AoKKs54QZ2kfS640vsv5flQVCg7CoQCFuLKjIeLMO7MnxVyuskXJr1DgesTa7I0ScF53U9JGhgB\"}]},{\"role\":\"tool\",\"tool_call_id\":\"toolu_01PaChhcyw3yu2P2bDS2bgAA\",\"content\":\"{\\\"temperature\\\":22,\\\"condition\\\":\\\"sunny\\\"}\"}],\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"description\":\"Get current weather for a city.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}},\"required\":[\"city\"],\"additionalProperties\":false}}}],\"stream\":true,\"stream_options\":{\"include_usage\":true},\"max_tokens\":1536,\"reasoning\":{\"max_tokens\":1024}}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream" + }, + "body": ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1784397734-HY78YkUzZ8xIXuimN9bb\",\"object\":\"chat.completion.chunk\",\"created\":1784397734,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Paris\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784397734-HY78YkUzZ8xIXuimN9bb\",\"object\":\"chat.completion.chunk\",\"created\":1784397734,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" is sunny.\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784397734-HY78YkUzZ8xIXuimN9bb\",\"object\":\"chat.completion.chunk\",\"created\":1784397734,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\"}]}\n\ndata: {\"id\":\"gen-1784397734-HY78YkUzZ8xIXuimN9bb\",\"object\":\"chat.completion.chunk\",\"created\":1784397734,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\"}],\"usage\":{\"prompt_tokens\":739,\"completion_tokens\":7,\"total_tokens\":746,\"cost\":0.002322,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.002322,\"upstream_inference_prompt_cost\":0.002217,\"upstream_inference_completions_cost\":0.000105},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + } + } + ] +} diff --git a/packages/ai/test/fixtures/recordings/openrouter-reasoning.json b/packages/ai/test/fixtures/recordings/openrouter-reasoning.json new file mode 100644 index 0000000000..46f8a28296 --- /dev/null +++ b/packages/ai/test/fixtures/recordings/openrouter-reasoning.json @@ -0,0 +1,34 @@ +{ + "version": 1, + "metadata": { + "model": "anthropic/claude-sonnet-4.6", + "tags": [ + "prefix:openai-compatible-chat", + "provider:openrouter", + "protocol:openai-chat", + "reasoning" + ], + "name": "openrouter-reasoning", + "recordedAt": "2026-07-18T11:28:39.267Z" + }, + "interactions": [ + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://openrouter.ai/api/v1/chat/completions", + "headers": { + "content-type": "application/json" + }, + "body": "{\"model\":\"anthropic/claude-sonnet-4.6\",\"messages\":[{\"role\":\"system\",\"content\":\"Think through the arithmetic, then reply with only the final integer.\"},{\"role\":\"user\",\"content\":\"What is 173 multiplied by 219?\"}],\"stream\":true,\"stream_options\":{\"include_usage\":true},\"max_tokens\":1536,\"temperature\":0,\"reasoning\":{\"max_tokens\":1024}}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream" + }, + "body": ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1784374117-AXXPsQRoclZeQGx2uHeK\",\"object\":\"chat.completion.chunk\",\"created\":1784374117,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"173\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"173\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1784374117-AXXPsQRoclZeQGx2uHeK\",\"object\":\"chat.completion.chunk\",\"created\":1784374117,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" × 219\\n\\n173 × 200 = 34,600\\n173 × 19 = 173 × 20 - 173 = 3,460 - 173 = 3,287\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" × 219\\n\\n173 × 200 = 34,600\\n173 × 19 = 173 × 20 - 173 = 3,460 - 173 = 3,287\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784374117-AXXPsQRoclZeQGx2uHeK\",\"object\":\"chat.completion.chunk\",\"created\":1784374117,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"\\n\\n34,600 + 3,287 = 37,887\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"\\n\\n34,600 + 3,287 = 37,887\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784374117-AXXPsQRoclZeQGx2uHeK\",\"object\":\"chat.completion.chunk\",\"created\":1784374117,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"signature\":\"EtgCCosBCA8YAipA0W4viH3kgBs43Cl5ewwVBPXTQElvzfbA2TLF4iSbKy9ZZDCSDjjAlF3Bs4ELEnP3vrrTuTioC6OB380lXQdyIDIRY2xhdWRlLXNvbm5ldC00LTY4AEIIdGhpbmtpbmdaJDRjMGYwNDZmLTI1ZmQtNDVmYi1iZmIzLWEwOGE4ZTI0OWNhNxIMMiUlJC3x/5p5PuTwGgwlc8eipZyoM94BHwMiMO45uQx/ymeOjbugi7RDVPZ4jZXSIiEbVi2CD7zPjAK5fFQoVGP1HD55v9CER823JCp6Dg5Xb7Lrk6NUd1XN2KTKrttK7mATE+IBrDTFmor/1cNeg+9gjIbxM/jn/6L5HPmh3/esEVu24Q0IGLZVoE7cTgGgxsrceKMD71Jp2XQgIWD8ltsPfWw3gSc4p+z18UuPN6LuR0mHHENTnClHrAPnOrxbDIl4ZwZgMX8YAQ==\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784374117-AXXPsQRoclZeQGx2uHeK\",\"object\":\"chat.completion.chunk\",\"created\":1784374117,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"37887\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1784374117-AXXPsQRoclZeQGx2uHeK\",\"object\":\"chat.completion.chunk\",\"created\":1784374117,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":null},\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\"}]}\n\ndata: {\"id\":\"gen-1784374117-AXXPsQRoclZeQGx2uHeK\",\"object\":\"chat.completion.chunk\",\"created\":1784374117,\"model\":\"anthropic/claude-sonnet-4.6\",\"provider\":\"Anthropic\",\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\"}],\"usage\":{\"prompt_tokens\":61,\"completion_tokens\":80,\"total_tokens\":141,\"cost\":0.001383,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001383,\"upstream_inference_prompt_cost\":0.000183,\"upstream_inference_completions_cost\":0.0012},\"completion_tokens_details\":{\"reasoning_tokens\":29,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + } + } + ] +} diff --git a/packages/ai/test/fixtures/recordings/vercel-ai-gateway-reasoning-tool-loop.json b/packages/ai/test/fixtures/recordings/vercel-ai-gateway-reasoning-tool-loop.json new file mode 100644 index 0000000000..518d75ea4b --- /dev/null +++ b/packages/ai/test/fixtures/recordings/vercel-ai-gateway-reasoning-tool-loop.json @@ -0,0 +1,55 @@ +{ + "version": 1, + "metadata": { + "model": "anthropic/claude-sonnet-4.6", + "tags": [ + "prefix:openai-compatible-chat", + "provider:vercel-ai-gateway", + "protocol:openai-chat", + "reasoning", + "continuation", + "tool", + "tool-loop" + ], + "name": "vercel-ai-gateway-reasoning-tool-loop", + "recordedAt": "2026-07-20T02:41:08.712Z" + }, + "interactions": [ + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://ai-gateway.vercel.sh/v1/chat/completions", + "headers": { + "content-type": "application/json" + }, + "body": "{\"model\":\"anthropic/claude-sonnet-4.6\",\"messages\":[{\"role\":\"system\",\"content\":\"Use the get_weather tool exactly once. After the tool result, reply exactly: Paris is sunny.\"},{\"role\":\"user\",\"content\":\"What is the weather in Paris?\"}],\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"description\":\"Get current weather for a city.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}},\"required\":[\"city\"],\"additionalProperties\":false}}}],\"stream\":true,\"stream_options\":{\"include_usage\":true},\"max_tokens\":1536,\"reasoning\":{\"enabled\":true,\"max_tokens\":1024}}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream" + }, + "body": "data: {\"id\":\"gen_01KXYPC0A2GBNS2101HEG2F5KR\",\"object\":\"chat.completion.chunk\",\"created\":1784515266,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\"},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_mcg1unonve\"}\n\ndata: {\"id\":\"gen_01KXYPC0A2GBNS2101HEG2F5KR\",\"object\":\"chat.completion.chunk\",\"created\":1784515266,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"reasoning\":\"The user wants\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants\",\"signature\":\"\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_mcg1unonve\"}\n\ndata: {\"id\":\"gen_01KXYPC0A2GBNS2101HEG2F5KR\",\"object\":\"chat.completion.chunk\",\"created\":1784515266,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"reasoning\":\" to know the weather in Paris. I'll use the get_weather tool.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" to know the weather in Paris. I'll use the get_weather tool.\",\"signature\":\"\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_mcg1unonve\"}\n\ndata: {\"id\":\"gen_01KXYPC0A2GBNS2101HEG2F5KR\",\"object\":\"chat.completion.chunk\",\"created\":1784515266,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"reasoning\":\"\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"\",\"signature\":\"ErkCCosBCA8YAipAjKnRKpxkZ4eHrMPJ63IWEOYPSzb+XSHyG+vLK+2ks2O9T4N9M37Xn2kausQSH1rfsrdmKxgUlBg6yUFRgMVR7DIRY2xhdWRlLXNvbm5ldC00LTY4AEIIdGhpbmtpbmdaJDNiOTNhNWRkLTczMDItNDgzZi1hZWFlLTM2MjA3NTU0OGFlMRIMM48xcuzdqvMYIVj0GgzNLyWlqYpowmh/ekwiMNJ+av0MqXkfQP9JJBuSQzhxreyzG6b3V4o6WMG4AkUForVcNy8B6FU3LLmarZghWCpbMd005YC11uuZgsB10K00Rc2RYIfbL13mm3KLNj/iImbEkB6E/7OqxcbQjG3rM6JJrcmRhQk+wWk26tlenw/upR99KkrILrAv22RFK5sxzqOkdWz8t4qzVPKfVxgB\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_mcg1unonve\"}\n\ndata: {\"id\":\"gen_01KXYPC0A2GBNS2101HEG2F5KR\",\"object\":\"chat.completion.chunk\",\"created\":1784515266,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Sure! Let me check the weather in Paris for you!\"},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_mcg1unonve\"}\n\ndata: {\"id\":\"gen_01KXYPC0A2GBNS2101HEG2F5KR\",\"object\":\"chat.completion.chunk\",\"created\":1784515266,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"id\":\"toolu_01KBCTV7MS4TY6U2zSTF2K2n\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_mcg1unonve\"}\n\ndata: {\"id\":\"gen_01KXYPC0A2GBNS2101HEG2F5KR\",\"object\":\"chat.completion.chunk\",\"created\":1784515266,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"{\\\"city\\\": \\\"Paris\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_mcg1unonve\"}\n\ndata: {\"id\":\"gen_01KXYPC0A2GBNS2101HEG2F5KR\",\"object\":\"chat.completion.chunk\",\"created\":1784515266,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_mcg1unonve\"}\n\ndata: {\"id\":\"gen_01KXYPC0A2GBNS2101HEG2F5KR\",\"object\":\"chat.completion.chunk\",\"created\":1784515266,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"provider_metadata\":{\"anthropic\":{\"usage\":{\"input_tokens\":623,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":93,\"service_tier\":\"standard\",\"inference_geo\":\"global\",\"output_tokens_details\":{\"thinking_tokens\":24}},\"cacheCreationInputTokens\":0,\"stopSequence\":null,\"iterations\":null,\"container\":null,\"contextManagement\":null},\"gateway\":{\"routing\":{\"originalModelId\":\"anthropic/claude-sonnet-4.6\",\"resolvedProvider\":\"anthropic\",\"fallbacksAvailable\":[\"vertexAnthropic\",\"bedrock\"],\"planningReasoning\":\"System credentials planned for: anthropic, vertexAnthropic, bedrock. Total execution order: anthropic(system) → vertexAnthropic(system) → bedrock(system)\",\"canonicalSlug\":\"anthropic/claude-sonnet-4.6\",\"finalProvider\":\"anthropic\",\"modelAttemptCount\":1,\"modelAttempts\":[{\"canonicalSlug\":\"anthropic/claude-sonnet-4.6\",\"success\":true,\"providerAttemptCount\":1,\"providerAttempts\":[{\"provider\":\"anthropic\",\"credentialType\":\"system\",\"success\":true,\"startTime\":1784515265180,\"endTime\":1784515267361,\"providerRequestId\":\"req_011CdCY7kJywwSSDhvHjPDNQ\",\"statusCode\":200,\"providerResponseId\":\"msg_011CdCY7n1gYrbgoik1oNbaP\"}]}],\"totalProviderAttemptCount\":1},\"cost\":\"0.003264\",\"marketCost\":\"0.003264\",\"surchargeCost\":\"0\",\"gatewayCost\":\"0.003264\",\"inferenceCost\":\"0.003264\",\"inputInferenceCost\":\"0.001869\",\"outputInferenceCost\":\"0.001395\",\"generationId\":\"gen_01KXYPC0A2GBNS2101HEG2F5KR\"}}},\"logprobs\":null,\"finish_reason\":\"tool_calls\"}],\"usage\":{\"prompt_tokens\":623,\"completion_tokens\":93,\"total_tokens\":716,\"cost\":0.003264,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":null,\"upstream_inference_prompt_cost\":0,\"upstream_inference_completions_cost\":0},\"completion_tokens_details\":{\"reasoning_tokens\":19,\"reasoning_tokens_estimated\":true,\"image_tokens\":0},\"cache_creation_input_tokens\":0,\"market_cost\":0.003264,\"gateway_cost\":0.003264},\"system_fingerprint\":\"fp_mcg1unonve\",\"generationId\":\"gen_01KXYPC0A2GBNS2101HEG2F5KR\"}\n\ndata: [DONE]\n\n" + } + }, + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://ai-gateway.vercel.sh/v1/chat/completions", + "headers": { + "content-type": "application/json" + }, + "body": "{\"model\":\"anthropic/claude-sonnet-4.6\",\"messages\":[{\"role\":\"system\",\"content\":\"Use the get_weather tool exactly once. After the tool result, reply exactly: Paris is sunny.\"},{\"role\":\"user\",\"content\":\"What is the weather in Paris?\"},{\"role\":\"assistant\",\"content\":\"Sure! Let me check the weather in Paris for you!\",\"tool_calls\":[{\"id\":\"toolu_01KBCTV7MS4TY6U2zSTF2K2n\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"{\\\"city\\\":\\\"Paris\\\"}\"}}],\"reasoning\":\"The user wants to know the weather in Paris. I'll use the get_weather tool.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants to know the weather in Paris. I'll use the get_weather tool.\",\"signature\":\"ErkCCosBCA8YAipAjKnRKpxkZ4eHrMPJ63IWEOYPSzb+XSHyG+vLK+2ks2O9T4N9M37Xn2kausQSH1rfsrdmKxgUlBg6yUFRgMVR7DIRY2xhdWRlLXNvbm5ldC00LTY4AEIIdGhpbmtpbmdaJDNiOTNhNWRkLTczMDItNDgzZi1hZWFlLTM2MjA3NTU0OGFlMRIMM48xcuzdqvMYIVj0GgzNLyWlqYpowmh/ekwiMNJ+av0MqXkfQP9JJBuSQzhxreyzG6b3V4o6WMG4AkUForVcNy8B6FU3LLmarZghWCpbMd005YC11uuZgsB10K00Rc2RYIfbL13mm3KLNj/iImbEkB6E/7OqxcbQjG3rM6JJrcmRhQk+wWk26tlenw/upR99KkrILrAv22RFK5sxzqOkdWz8t4qzVPKfVxgB\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},{\"role\":\"tool\",\"tool_call_id\":\"toolu_01KBCTV7MS4TY6U2zSTF2K2n\",\"content\":\"{\\\"temperature\\\":22,\\\"condition\\\":\\\"sunny\\\"}\"}],\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"description\":\"Get current weather for a city.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}},\"required\":[\"city\"],\"additionalProperties\":false}}}],\"stream\":true,\"stream_options\":{\"include_usage\":true},\"max_tokens\":1536,\"reasoning\":{\"enabled\":true,\"max_tokens\":1024}}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream" + }, + "body": "data: {\"id\":\"gen_01KXYPC2WN8PT0Y6ZDH00AF3K4\",\"object\":\"chat.completion.chunk\",\"created\":1784515268,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\"},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_ljjqzh6v2k\"}\n\ndata: {\"id\":\"gen_01KXYPC2WN8PT0Y6ZDH00AF3K4\",\"object\":\"chat.completion.chunk\",\"created\":1784515268,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Paris\"},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_ljjqzh6v2k\"}\n\ndata: {\"id\":\"gen_01KXYPC2WN8PT0Y6ZDH00AF3K4\",\"object\":\"chat.completion.chunk\",\"created\":1784515268,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" is sunny.\"},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_ljjqzh6v2k\"}\n\ndata: {\"id\":\"gen_01KXYPC2WN8PT0Y6ZDH00AF3K4\",\"object\":\"chat.completion.chunk\",\"created\":1784515268,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"provider_metadata\":{\"anthropic\":{\"usage\":{\"input_tokens\":737,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":7,\"service_tier\":\"standard\",\"inference_geo\":\"global\",\"output_tokens_details\":{\"thinking_tokens\":0}},\"cacheCreationInputTokens\":0,\"stopSequence\":null,\"iterations\":null,\"container\":null,\"contextManagement\":null},\"gateway\":{\"routing\":{\"originalModelId\":\"anthropic/claude-sonnet-4.6\",\"resolvedProvider\":\"anthropic\",\"fallbacksAvailable\":[\"vertexAnthropic\",\"bedrock\"],\"planningReasoning\":\"System credentials planned for: anthropic, vertexAnthropic, bedrock. Total execution order: anthropic(system) → vertexAnthropic(system) → bedrock(system)\",\"canonicalSlug\":\"anthropic/claude-sonnet-4.6\",\"finalProvider\":\"anthropic\",\"modelAttemptCount\":1,\"modelAttempts\":[{\"canonicalSlug\":\"anthropic/claude-sonnet-4.6\",\"success\":true,\"providerAttemptCount\":1,\"providerAttempts\":[{\"provider\":\"anthropic\",\"credentialType\":\"system\",\"success\":true,\"startTime\":1784515267510,\"endTime\":1784515268708,\"providerRequestId\":\"req_011CdCY7vEY4aNuG8jvsZXQR\",\"statusCode\":200,\"providerResponseId\":\"msg_011CdCY7w49RtKGdr45xU8Bx\"}]}],\"totalProviderAttemptCount\":1},\"cost\":\"0.002316\",\"marketCost\":\"0.002316\",\"surchargeCost\":\"0\",\"gatewayCost\":\"0.002316\",\"inferenceCost\":\"0.002316\",\"inputInferenceCost\":\"0.002211\",\"outputInferenceCost\":\"0.000105\",\"generationId\":\"gen_01KXYPC2WN8PT0Y6ZDH00AF3K4\"}}},\"logprobs\":null,\"finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":737,\"completion_tokens\":7,\"total_tokens\":744,\"cost\":0.002316,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":null,\"upstream_inference_prompt_cost\":0,\"upstream_inference_completions_cost\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0},\"cache_creation_input_tokens\":0,\"market_cost\":0.002316,\"gateway_cost\":0.002316},\"system_fingerprint\":\"fp_ljjqzh6v2k\",\"generationId\":\"gen_01KXYPC2WN8PT0Y6ZDH00AF3K4\"}\n\ndata: [DONE]\n\n" + } + } + ] +} diff --git a/packages/ai/test/fixtures/recordings/vercel-ai-gateway-reasoning.json b/packages/ai/test/fixtures/recordings/vercel-ai-gateway-reasoning.json new file mode 100644 index 0000000000..9cf18c3909 --- /dev/null +++ b/packages/ai/test/fixtures/recordings/vercel-ai-gateway-reasoning.json @@ -0,0 +1,34 @@ +{ + "version": 1, + "metadata": { + "model": "anthropic/claude-sonnet-4.6", + "tags": [ + "prefix:openai-compatible-chat", + "provider:vercel-ai-gateway", + "protocol:openai-chat", + "reasoning" + ], + "name": "vercel-ai-gateway-reasoning", + "recordedAt": "2026-07-18T11:28:42.077Z" + }, + "interactions": [ + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://ai-gateway.vercel.sh/v1/chat/completions", + "headers": { + "content-type": "application/json" + }, + "body": "{\"model\":\"anthropic/claude-sonnet-4.6\",\"messages\":[{\"role\":\"system\",\"content\":\"Think through the arithmetic, then reply with only the final integer.\"},{\"role\":\"user\",\"content\":\"What is 173 multiplied by 219?\"}],\"stream\":true,\"stream_options\":{\"include_usage\":true},\"max_tokens\":1536,\"temperature\":0,\"reasoning\":{\"enabled\":true,\"max_tokens\":1024}}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/event-stream" + }, + "body": "data: {\"id\":\"gen_01KXTFRJXJ8CKP0W3DKC3WC004\",\"object\":\"chat.completion.chunk\",\"created\":1784374121,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\"},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_zfth1fcyet\"}\n\ndata: {\"id\":\"gen_01KXTFRJXJ8CKP0W3DKC3WC004\",\"object\":\"chat.completion.chunk\",\"created\":1784374121,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"reasoning\":\"173\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"173\",\"signature\":\"\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_zfth1fcyet\"}\n\ndata: {\"id\":\"gen_01KXTFRJXJ8CKP0W3DKC3WC004\",\"object\":\"chat.completion.chunk\",\"created\":1784374121,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"reasoning\":\" × 219\\n\\n173 × 200 = 34,600\\n173 × 19 = 173 × 20 - 173 = 3,460\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" × 219\\n\\n173 × 200 = 34,600\\n173 × 19 = 173 × 20 - 173 = 3,460\",\"signature\":\"\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_zfth1fcyet\"}\n\ndata: {\"id\":\"gen_01KXTFRJXJ8CKP0W3DKC3WC004\",\"object\":\"chat.completion.chunk\",\"created\":1784374121,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"reasoning\":\" - 173 = 3,287\\n\\n34,600 + 3,287 = 37,887\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" - 173 = 3,287\\n\\n34,600 + 3,287 = 37,887\",\"signature\":\"\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_zfth1fcyet\"}\n\ndata: {\"id\":\"gen_01KXTFRJXJ8CKP0W3DKC3WC004\",\"object\":\"chat.completion.chunk\",\"created\":1784374121,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"reasoning\":\"\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"\",\"signature\":\"EtgCCosBCA8YAipA0W4viH3kgBs43Cl5ewwVBPXTQElvzfbA2TLF4iSbKy9ZZDCSDjjAlF3Bs4ELEnP3vrrTuTioC6OB380lXQdyIDIRY2xhdWRlLXNvbm5ldC00LTY4AEIIdGhpbmtpbmdaJDNiOTNhNWRkLTczMDItNDgzZi1hZWFlLTM2MjA3NTU0OGFlMRIMKkQaBkOSYB8cgQNiGgwDinVmv/KYSAKQEsUiMPSSFWvVpNuyEyYC8HlxrEZsb5KEEETuMjAI2hcC3m/NwGR+PC7chh2JWwD7wyK+eyp6OoF973UNMHAsWsKykCSJv60aXeOiDomxdfR9CRWVtaroVTkhtL2FPgplBPZYr75XvS0l6If3fqCPKevNE5WaOsSaXNfnMCCKGX7A0Pkhs4NazmCnntWGOsW7J03bAQKzIZ+c+Yr0rSwmwvuiocDqzsSE8bOeVv4352EYAQ==\",\"format\":\"anthropic-claude-v1\",\"index\":0}]},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_zfth1fcyet\"}\n\ndata: {\"id\":\"gen_01KXTFRJXJ8CKP0W3DKC3WC004\",\"object\":\"chat.completion.chunk\",\"created\":1784374121,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"37,887\"},\"logprobs\":null,\"finish_reason\":null}],\"system_fingerprint\":\"fp_zfth1fcyet\"}\n\ndata: {\"id\":\"gen_01KXTFRJXJ8CKP0W3DKC3WC004\",\"object\":\"chat.completion.chunk\",\"created\":1784374121,\"model\":\"anthropic/claude-sonnet-4.6\",\"choices\":[{\"index\":0,\"delta\":{\"provider_metadata\":{\"anthropic\":{\"usage\":{\"input_tokens\":61,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":81,\"service_tier\":\"standard\",\"inference_geo\":\"global\",\"output_tokens_details\":{\"thinking_tokens\":73}},\"cacheCreationInputTokens\":0,\"stopSequence\":null,\"iterations\":null,\"container\":null,\"contextManagement\":null},\"gateway\":{\"routing\":{\"originalModelId\":\"anthropic/claude-sonnet-4.6\",\"resolvedProvider\":\"anthropic\",\"fallbacksAvailable\":[\"vertexAnthropic\",\"bedrock\"],\"planningReasoning\":\"System credentials planned for: anthropic, vertexAnthropic, bedrock. Total execution order: anthropic(system) → vertexAnthropic(system) → bedrock(system)\",\"canonicalSlug\":\"anthropic/claude-sonnet-4.6\",\"finalProvider\":\"anthropic\",\"modelAttemptCount\":1,\"modelAttempts\":[{\"canonicalSlug\":\"anthropic/claude-sonnet-4.6\",\"success\":true,\"providerAttemptCount\":1,\"providerAttempts\":[{\"provider\":\"anthropic\",\"credentialType\":\"system\",\"success\":true,\"startTime\":1784374119500,\"endTime\":1784374122066,\"providerRequestId\":\"req_011Cd9SjHykKUqTQ1S8cAG17\",\"statusCode\":200,\"providerResponseId\":\"msg_011Cd9SjLvMmTFY8Pyj8n336\"}]}],\"totalProviderAttemptCount\":1},\"cost\":\"0.001398\",\"marketCost\":\"0.001398\",\"surchargeCost\":\"0\",\"gatewayCost\":\"0.001398\",\"inferenceCost\":\"0.001398\",\"inputInferenceCost\":\"0.000183\",\"outputInferenceCost\":\"0.001215\",\"generationId\":\"gen_01KXTFRJXJ8CKP0W3DKC3WC004\"}}},\"logprobs\":null,\"finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":61,\"completion_tokens\":81,\"total_tokens\":142,\"cost\":0.001398,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":null,\"upstream_inference_prompt_cost\":0,\"upstream_inference_completions_cost\":0},\"completion_tokens_details\":{\"reasoning_tokens\":26,\"reasoning_tokens_estimated\":true,\"image_tokens\":0},\"cache_creation_input_tokens\":0,\"market_cost\":0.001398,\"gateway_cost\":0.001398},\"system_fingerprint\":\"fp_zfth1fcyet\",\"generationId\":\"gen_01KXTFRJXJ8CKP0W3DKC3WC004\"}\n\ndata: [DONE]\n\n" + } + } + ] +} diff --git a/packages/ai/test/fixtures/recordings/xai-images/generates-an-image.json b/packages/ai/test/fixtures/recordings/xai-images/generates-an-image.json new file mode 100644 index 0000000000..f41a54bb16 --- /dev/null +++ b/packages/ai/test/fixtures/recordings/xai-images/generates-an-image.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "metadata": { + "tags": [ + "prefix:xai-images", + "provider:xai", + "protocol:xai-images" + ], + "name": "xai-images/generates-an-image", + "recordedAt": "2026-07-19T15:56:20.098Z" + }, + "interactions": [ + { + "transport": "http", + "request": { + "method": "POST", + "url": "https://api.x.ai/v1/images/generations", + "headers": { + "content-type": "application/json" + }, + "body": "{\"model\":\"grok-imagine-image\",\"prompt\":\"A simple flat black diamond centered on a plain white background.\",\"aspect_ratio\":\"1:1\",\"resolution\":\"1k\",\"response_format\":\"b64_json\"}" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json" + }, + "body": "{\"data\":[{\"b64_json\":\"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\",\"mime_type\":\"image/jpeg\"}],\"usage\":{\"cost_in_usd_ticks\":200000000}}" + } + } + ] +} diff --git a/packages/ai/test/image.test.ts b/packages/ai/test/image.test.ts new file mode 100644 index 0000000000..8f4c5bbb44 --- /dev/null +++ b/packages/ai/test/image.test.ts @@ -0,0 +1,127 @@ +import { describe, expect } from "bun:test" +import { Effect, Layer } from "effect" +import { HttpClientRequest } from "effect/unstable/http" +import { Image, ImageClient } from "../src" +import { OpenAI } from "../src/providers" +import { it } from "./lib/effect" +import { dynamicResponse } from "./lib/http" + +describe("Image", () => { + it.effect("generates images through the OpenAI Images API", () => + Effect.gen(function* () { + const response = yield* Image.generate({ + model: OpenAI.configure({ + apiKey: "test", + baseURL: "https://api.openai.test/v1", + queryParams: { "api-version": "v1" }, + http: { body: { deployment: "test" }, headers: { "x-default": "yes" } }, + }).image("gpt-image-2"), + prompt: "A robot tending a rooftop garden", + options: { + n: 2, + size: "2048x2048", + quality: "future-quality", + outputFormat: "jpeg", + output_format: "avif", + outputCompression: 30, + output_compression: 40, + background: "opaque", + native_default: true, + future_option: true, + }, + http: { + body: { output_format: "webp", output_compression: 50, future_option: "http", request_metadata: "value" }, + headers: { "x-request": "yes" }, + query: { trace: "1" }, + }, + }) + + expect(response.images).toHaveLength(2) + expect(response.image?.mediaType).toBe("image/webp") + expect(response.image?.data).toEqual(Uint8Array.from([1, 2, 3])) + expect(response.image?.providerMetadata).toEqual({ openai: { revisedPrompt: "A precise robot" } }) + expect(response.usage?.totalTokens).toBe(12) + }).pipe( + Effect.provide( + ImageClient.layer.pipe( + Layer.provide( + dynamicResponse((input) => + Effect.gen(function* () { + const request = yield* HttpClientRequest.toWeb(input.request).pipe(Effect.orDie) + expect(request.url).toBe("https://api.openai.test/v1/images/generations?api-version=v1&trace=1") + expect(request.headers.get("authorization")).toBe("Bearer test") + expect(request.headers.get("x-default")).toBe("yes") + expect(request.headers.get("x-request")).toBe("yes") + expect(JSON.parse(input.text)).toEqual({ + model: "gpt-image-2", + prompt: "A robot tending a rooftop garden", + n: 2, + size: "2048x2048", + quality: "future-quality", + background: "opaque", + output_format: "webp", + output_compression: 50, + native_default: true, + future_option: "http", + deployment: "test", + request_metadata: "value", + }) + return input.respond( + JSON.stringify({ + data: [{ b64_json: "AQID", revised_prompt: "A precise robot" }, { b64_json: "BAUG" }], + output_format: "webp", + usage: { input_tokens: 4, output_tokens: 8, total_tokens: 12 }, + }), + { headers: { "content-type": "application/json" } }, + ) + }), + ), + ), + ), + ), + ), + ) + + it.effect("preserves native snake_case and unknown request options", () => + Image.generate({ + model: OpenAI.configure({ + apiKey: "test", + baseURL: "https://api.openai.test/v1", + }).image("future-image-model"), + prompt: "A lighthouse in fog", + options: { + outputFormat: "jpeg", + output_format: "avif", + outputCompression: 30, + output_compression: 40, + provider_future_option: { enabled: true }, + }, + }).pipe( + Effect.tap((response) => + Effect.sync(() => { + expect(response.image?.mediaType).toBe("image/avif") + }), + ), + Effect.provide( + ImageClient.layer.pipe( + Layer.provide( + dynamicResponse((input) => { + expect(JSON.parse(input.text)).toEqual({ + model: "future-image-model", + prompt: "A lighthouse in fog", + output_format: "avif", + output_compression: 40, + provider_future_option: { enabled: true }, + }) + return Effect.succeed( + input.respond(JSON.stringify({ data: [{ b64_json: "AQID" }] }), { + headers: { "content-type": "application/json" }, + }), + ) + }), + ), + ), + ), + ), + ) +}) diff --git a/packages/ai/test/image.types.ts b/packages/ai/test/image.types.ts new file mode 100644 index 0000000000..9aa2f88e76 --- /dev/null +++ b/packages/ai/test/image.types.ts @@ -0,0 +1,95 @@ +import { + Image, + ImageModel, + type ImageModelOptions, + type ImageOptions, + type ImageRequestFor, + type ImageRoute, +} from "../src" +import { OpenAI, XAI } from "../src/providers" + +type GoogleLikeOptions = { + readonly aspectRatio?: "1:1" | "16:9" + readonly imageSize?: "1K" | "2K" +} & Record + +declare const route: ImageRoute +const google = ImageModel.make({ id: "gemini-image", provider: "google", route }) +// @ts-expect-error Extracted model options retain known provider fields. +const invalidGoogleOptions: ImageModelOptions = { aspectRatio: "wide" } +void invalidGoogleOptions + +Image.generate({ + model: google, + prompt: "A lighthouse", + options: { aspectRatio: "16:9", imageSize: "2K", futureOption: true }, +}) + +const openai = OpenAI.image("gpt-image-2") +// @ts-expect-error Image generation options are request-scoped, not provider configuration. +OpenAI.configure({ image: { options: { quality: "medium" } } }) +const futureOpenAIOptions: ImageModelOptions = { quality: "future-quality" } +void futureOpenAIOptions +Image.generate({ + model: openai, + prompt: "A lighthouse", + options: { quality: "hd", outputFormat: "webp", size: "2048x2048", future_option: true }, +}) +Image.generate({ model: openai, prompt: "A lighthouse", options: { quality: "future-quality", size: "256x256" } }) +Image.generate({ model: openai, prompt: "A lighthouse", options: { size: "1792x1024" } }) +Image.generate({ model: openai, prompt: "A lighthouse", options: { native_future_option: true } }) +// @ts-expect-error Known OpenAI string options retain their value kind. +Image.generate({ model: openai, prompt: "A lighthouse", options: { quality: 1 } }) +// @ts-expect-error Known OpenAI numeric options retain their value kind. +Image.generate({ model: openai, prompt: "A lighthouse", options: { outputCompression: "80" } }) +OpenAI.imageGeneration({ action: "future-action", quality: "future-quality", size: "2048x2048" }) +// @ts-expect-error Hosted image generation numeric options retain their value kind. +OpenAI.imageGeneration({ partialImages: "2" }) +// @ts-expect-error Known Google-like options are inferred from the selected model. +Image.generate({ model: google, prompt: "A lighthouse", options: { aspectRatio: "wide" } }) + +const xai = XAI.configure({ apiKey: "test" }).image("any-model-id") +// @ts-expect-error Image generation options are request-scoped, not provider configuration. +XAI.configure({ image: { options: { resolution: "1k" } } }) +Image.generate({ + model: xai, + prompt: "A lighthouse", + options: { + n: 2, + aspectRatio: "future-ratio", + resolution: "future-resolution", + responseFormat: "future-format", + future_option: true, + }, +}) +Image.generate({ + model: xai, + prompt: "A lighthouse", + options: { aspect_ratio: "16:9", response_format: "b64_json", native_future_option: true }, +}) +// @ts-expect-error Known xAI numeric options retain their value kind. +Image.generate({ model: xai, prompt: "A lighthouse", options: { n: "2" } }) +// @ts-expect-error Known xAI string options retain their value kind. +Image.generate({ model: xai, prompt: "A lighthouse", options: { resolution: 2 } }) + +declare const generic: ImageModel +Image.generate({ model: generic, prompt: "A lighthouse", options: { arbitrary: true } }) + +const request = Image.request({ + model: google, + prompt: "A lighthouse", + options: { aspectRatio: "1:1", futureOption: true }, +}) +const typedRequest: ImageRequestFor = request +void typedRequest + +// @ts-expect-error Image requests no longer expose a common count option. +Image.generate({ model: openai, prompt: "A lighthouse", count: 2 }) +// @ts-expect-error Image requests no longer expose a common size option. +Image.generate({ model: openai, prompt: "A lighthouse", size: { width: 1024, height: 1024 } }) +// @ts-expect-error Image requests no longer expose a common aspectRatio option. +Image.generate({ model: openai, prompt: "A lighthouse", aspectRatio: "16:9" }) +// @ts-expect-error Image requests no longer expose a common seed option. +Image.generate({ model: openai, prompt: "A lighthouse", seed: 1 }) +// @ts-expect-error Image requests do not expose metadata. +Image.generate({ model: openai, prompt: "A lighthouse", metadata: { trace: true } }) diff --git a/packages/ai/test/provider-error.test.ts b/packages/ai/test/provider-error.test.ts index cfad7a8726..ea0464089e 100644 --- a/packages/ai/test/provider-error.test.ts +++ b/packages/ai/test/provider-error.test.ts @@ -3,8 +3,30 @@ import { isContextOverflow } from "../src" import { classifyProviderFailure } from "../src/provider-error" describe("provider error classification", () => { - test("classifies Z.AI GLM token limit messages as context overflow", () => { - expect(isContextOverflow("tokens in request more than max tokens allowed")).toBe(true) + test("classifies provider token limit messages as context overflow", () => { + const messages = [ + "tokens in request more than max tokens allowed", + '{"error":{"type":"request_too_large","message":"Request exceeds the maximum size"}}', + "Requested token count exceeds the model's maximum context length of 131072 tokens.", + "Input length (265330) exceeds model's maximum context length (262144).", + "Input length 131393 exceeds the maximum allowed input length of 131040 tokens.", + "The input (516368 tokens) is longer than the model's context length (262144 tokens).", + "Prompt has 5,958,968 tokens, but the configured context size is 256,000 tokens", + "Too many tokens", + "Token limit exceeded", + ] + + expect(messages.every(isContextOverflow)).toBe(true) + }) + + test("does not classify rate limits as context overflow", () => { + const messages = [ + "Throttling error: Too many tokens, please wait before trying again.", + "Rate limit exceeded, please retry after 30 seconds.", + "Too many requests. Please slow down.", + ] + + expect(messages.some(isContextOverflow)).toBe(false) }) test("classifies V1 plain-text rate limit fallbacks", () => { diff --git a/packages/ai/test/provider/anthropic-messages.test.ts b/packages/ai/test/provider/anthropic-messages.test.ts index dcb20aa0ae..69a27e6228 100644 --- a/packages/ai/test/provider/anthropic-messages.test.ts +++ b/packages/ai/test/provider/anthropic-messages.test.ts @@ -484,6 +484,30 @@ describe("Anthropic Messages route", () => { }), ) + it.effect("keeps malformed server tool input terminal", () => + Effect.gen(function* () { + const body = sseEvents( + { type: "message_start", message: { usage: { input_tokens: 5 } } }, + { + type: "content_block_start", + index: 0, + content_block: { type: "server_tool_use", id: "call_1", name: "web_search" }, + }, + { + type: "content_block_delta", + index: 0, + delta: { type: "input_json_delta", partial_json: '{"query":"partial' }, + }, + { type: "content_block_stop", index: 0 }, + ) + + const error = yield* LLMClient.generate(request).pipe(Effect.provide(fixedResponse(body)), Effect.flip) + + expect(error).toBeInstanceOf(LLMError) + expect(error.message).toContain("Invalid JSON input for anthropic-messages tool call web_search") + }), + ) + it.effect("fails with a typed provider error for stream error frames", () => Effect.gen(function* () { const error = yield* LLMClient.generate(request).pipe( diff --git a/packages/ai/test/provider/bedrock-converse.test.ts b/packages/ai/test/provider/bedrock-converse.test.ts index c7b519d368..a550d1eb90 100644 --- a/packages/ai/test/provider/bedrock-converse.test.ts +++ b/packages/ai/test/provider/bedrock-converse.test.ts @@ -303,6 +303,32 @@ describe("Bedrock Converse route", () => { }), ) + it.effect("emits malformed tool input as an unexecuted tool error", () => + Effect.gen(function* () { + const body = eventStreamBody( + ["messageStart", { role: "assistant" }], + [ + "contentBlockStart", + { + contentBlockIndex: 0, + start: { toolUse: { toolUseId: "tool_1", name: "lookup" } }, + }, + ], + ["contentBlockDelta", { contentBlockIndex: 0, delta: { toolUse: { input: '{"query":"partial' } } }], + ["contentBlockStop", { contentBlockIndex: 0 }], + ["messageStop", { stopReason: "end_turn" }], + ) + const response = yield* LLMClient.generate(baseRequest).pipe(Effect.provide(fixedBytes(body))) + + expect(response.events.find((event) => event.type === "tool-input-error")).toMatchObject({ + id: "tool_1", + name: "lookup", + raw: '{"query":"partial', + }) + expect(response.finishReason).toBe("tool-calls") + }), + ) + it.effect("decodes reasoning deltas", () => Effect.gen(function* () { const body = eventStreamBody( diff --git a/packages/ai/test/provider/cloudflare.test.ts b/packages/ai/test/provider/cloudflare.test.ts index acd6396294..309f5db0ff 100644 --- a/packages/ai/test/provider/cloudflare.test.ts +++ b/packages/ai/test/provider/cloudflare.test.ts @@ -1,7 +1,7 @@ import { describe, expect } from "bun:test" import { ConfigProvider, Effect, Schema } from "effect" import { HttpClientRequest } from "effect/unstable/http" -import { LLM } from "../../src" +import { LLM, LLMEvent } from "../../src" import { CloudflareAIGateway, CloudflareWorkersAI } from "../../src/providers/cloudflare" import { LLMClient } from "../../src/route" import { it } from "../lib/effect" @@ -83,6 +83,59 @@ describe("Cloudflare", () => { }), ) + it.effect("preserves reasoning details for AI Gateway continuation", () => + Effect.gen(function* () { + const model = CloudflareAIGateway.configure({ + accountId: "test-account", + gatewayId: "test-gateway", + apiKey: "test-token", + }).model("anthropic/claude-sonnet-4.6") + const details = [ + { type: "reasoning.text", text: "Think", format: "anthropic-claude-v1", index: 0 }, + { type: "reasoning.text", text: "ing", format: "anthropic-claude-v1", index: 0 }, + { type: "reasoning.text", signature: "signed", format: "anthropic-claude-v1", index: 0 }, + ] + const merged = [ + { + type: "reasoning.text", + text: "Thinking", + signature: "signed", + format: "anthropic-claude-v1", + index: 0, + }, + ] + const response = yield* LLM.generate(LLM.request({ model, prompt: "Say hello." })).pipe( + Effect.provide( + dynamicResponse((input) => + Effect.succeed( + input.respond( + sseEvents( + deltaChunk({ reasoning: "Think", reasoning_details: [details[0]] }), + deltaChunk({ reasoning: "ing", reasoning_details: [details[1]] }), + deltaChunk({ reasoning_details: [details[2]] }), + deltaChunk({ content: "Hello" }), + deltaChunk({}, "stop"), + ), + { headers: { "content-type": "text/event-stream" } }, + ), + ), + ), + ), + ) + + expect(response.reasoning).toBe("Thinking") + expect(response.events.filter(LLMEvent.is.reasoningDelta)).toHaveLength(2) + expect(response.message.content.find((part) => part.type === "reasoning")?.providerMetadata).toEqual({ + openai: { reasoningField: "reasoning", reasoningDetails: merged }, + }) + + const replay = yield* LLMClient.prepare(LLM.request({ model, messages: [response.message] })) + expect(replay.body.messages).toEqual([ + { role: "assistant", content: "Hello", reasoning: "Thinking", reasoning_details: merged }, + ]) + }), + ) + it.effect("defaults AI Gateway id to default when omitted or blank", () => Effect.gen(function* () { expect( diff --git a/packages/ai/test/provider/golden.recorded.test.ts b/packages/ai/test/provider/golden.recorded.test.ts index ae09cf7120..2ab4bd66c5 100644 --- a/packages/ai/test/provider/golden.recorded.test.ts +++ b/packages/ai/test/provider/golden.recorded.test.ts @@ -1,4 +1,5 @@ import * as Anthropic from "../../src/providers/anthropic" +import * as AnthropicCompatible from "../../src/providers/anthropic-compatible" import { CloudflareAIGateway, CloudflareWorkersAI } from "../../src/providers/cloudflare" import * as Google from "../../src/providers/google" import * as OpenAI from "../../src/providers/openai" @@ -17,6 +18,11 @@ const anthropic = Anthropic.configure({ }) const anthropicHaiku = anthropic.model("claude-haiku-4-5-20251001") const anthropicOpus = anthropic.model("claude-opus-4-7") +const minimax = AnthropicCompatible.configure({ + apiKey: process.env.MINIMAX_API_KEY ?? "fixture", + baseURL: "https://api.minimax.io/anthropic/v1", + provider: "minimax", +}).model("MiniMax-M3") const google = Google.configure({ apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY ?? "fixture" }) const gemini = google.model("gemini-2.5-flash") const xai = XAI.configure({ apiKey: process.env.XAI_API_KEY ?? "fixture" }) @@ -108,6 +114,15 @@ describeRecordedGoldenScenarios([ { id: "image-tool-result", temperature: false, maxTokens: 40 }, ], }, + { + name: "MiniMax M3 Anthropic-compatible", + prefix: "anthropic-compatible-messages", + protocol: "anthropic-messages", + model: minimax, + requires: ["MINIMAX_API_KEY"], + options: { redact: { allowRequestHeaders: ["anthropic-version"] } }, + scenarios: ["text", "tool-call", "tool-loop"], + }, { name: "Gemini 2.5 Flash", prefix: "gemini", diff --git a/packages/ai/test/provider/openai-chat-reasoning.recorded.test.ts b/packages/ai/test/provider/openai-chat-reasoning.recorded.test.ts new file mode 100644 index 0000000000..5ac810db61 --- /dev/null +++ b/packages/ai/test/provider/openai-chat-reasoning.recorded.test.ts @@ -0,0 +1,142 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { LLM, LLMEvent, LLMResponse } from "../../src" +import { OpenAIChat } from "../../src/protocols/openai-chat" +import * as OpenAICompatible from "../../src/providers/openai-compatible" +import * as OpenRouter from "../../src/providers/openrouter" +import { LLMClient } from "../../src/route" +import { recordedTests } from "../recorded-test" +import { expectWeatherToolLoop, goldenWeatherToolLoopRequest, runWeatherToolLoop } from "../recorded-scenarios" + +const cases = [ + { + name: "OpenRouter", + model: OpenRouter.configure({ + apiKey: process.env.OPENROUTER_API_KEY ?? "fixture", + providerOptions: { openrouter: { reasoning: { max_tokens: 1024 } } }, + }).model("anthropic/claude-sonnet-4.6"), + requires: ["OPENROUTER_API_KEY"], + cassette: "openrouter-reasoning", + structured: true, + }, + { + name: "Vercel AI Gateway", + model: OpenAICompatible.configure({ + provider: "vercel-ai-gateway", + baseURL: "https://ai-gateway.vercel.sh/v1", + apiKey: process.env.AI_GATEWAY_API_KEY ?? "fixture", + http: { body: { reasoning: { enabled: true, max_tokens: 1024 } } }, + }).model("anthropic/claude-sonnet-4.6"), + requires: ["AI_GATEWAY_API_KEY"], + cassette: "vercel-ai-gateway-reasoning", + structured: true, + }, +] as const + +for (const item of cases) { + const recorded = recordedTests({ + prefix: "openai-compatible-chat", + provider: item.model.provider, + protocol: "openai-chat", + requires: item.requires, + tags: ["reasoning"], + metadata: { model: item.model.id }, + }) + + describe(`${item.name} reasoning recorded`, () => { + recorded.effect.with( + "streams scalar reasoning", + { cassette: item.cassette }, + () => + Effect.gen(function* () { + const response = yield* LLMClient.generate( + LLM.request({ + model: item.model, + system: "Think through the arithmetic, then reply with only the final integer.", + prompt: "What is 173 multiplied by 219?", + generation: { maxTokens: 1536, temperature: 0 }, + }), + ) + + expect(response.text.replaceAll(",", "").trim()).toBe("37887") + expect(response.reasoning.length).toBeGreaterThan(0) + expect(response.events.some(LLMEvent.is.reasoningDelta)).toBe(true) + const metadata = response.message.content.find((part) => part.type === "reasoning")?.providerMetadata + expect(metadata?.openai?.reasoningField).toBe(item.structured ? "reasoning" : "reasoning_content") + expect(Array.isArray(metadata?.openai?.reasoningDetails)).toBe(item.structured) + if (!item.structured) return + const details = metadata?.openai?.reasoningDetails + if (!Array.isArray(details)) return + expect( + details.some( + (detail) => + typeof detail === "object" && + detail !== null && + "signature" in detail && + typeof detail.signature === "string" && + detail.signature.length > 0, + ), + ).toBe(true) + + const replay = yield* LLMClient.prepare( + LLM.request({ model: item.model, messages: [response.message] }), + ) + expect(replay.body.messages).toMatchObject([ + { role: "assistant", content: response.text, reasoning: response.reasoning }, + ]) + const replayDetails = + replay.body.messages[0]?.role === "assistant" ? replay.body.messages[0].reasoning_details : undefined + expect(Array.isArray(replayDetails)).toBe(true) + if (!Array.isArray(replayDetails)) return + expect(replayDetails).toEqual(details) + expect(replayDetails).toHaveLength(1) + expect(replayDetails[0]).toMatchObject({ + type: "reasoning.text", + text: response.reasoning, + signature: expect.any(String), + }) + }), + 30_000, + ) + + recorded.effect.with( + "continues signed reasoning through a tool loop", + { cassette: `${item.cassette}-tool-loop`, tags: ["continuation", "tool", "tool-loop"] }, + () => + Effect.gen(function* () { + const events = yield* runWeatherToolLoop( + goldenWeatherToolLoopRequest({ + id: `${item.cassette}-tool-loop`, + model: item.model, + maxTokens: 1536, + temperature: false, + }), + ) + + expectWeatherToolLoop(events) + expect( + LLMResponse.text({ + events: events.slice(events.findIndex(LLMEvent.is.stepFinish) + 1), + }).trim(), + ).toMatch(/^Paris is sunny\.?$/) + const details = events + .filter(LLMEvent.is.reasoningEnd) + .map((event) => event.providerMetadata?.openai?.reasoningDetails) + .find(Array.isArray) + expect(Array.isArray(details)).toBe(item.structured) + if (!item.structured || !Array.isArray(details)) return + expect( + details.some( + (detail) => + typeof detail === "object" && + detail !== null && + "signature" in detail && + typeof detail.signature === "string" && + detail.signature.length > 0, + ), + ).toBe(true) + }), + 60_000, + ) + }) +} diff --git a/packages/ai/test/provider/openai-chat.test.ts b/packages/ai/test/provider/openai-chat.test.ts index a08a22b037..591e5f0be0 100644 --- a/packages/ai/test/provider/openai-chat.test.ts +++ b/packages/ai/test/provider/openai-chat.test.ts @@ -540,28 +540,401 @@ describe("OpenAI Chat route", () => { }), ) - it.effect("parses OpenAI-compatible reasoning content deltas", () => + it.effect("parses and replays OpenAI-compatible reasoning fields", () => Effect.gen(function* () { - const body = sseEvents( - { choices: [{ delta: { reasoning_content: "thinking" } }] }, - { choices: [{ delta: { content: "Hello" } }] }, - { choices: [{ delta: {}, finish_reason: "stop" }] }, + const fields = ["reasoning_content", "reasoning", "reasoning_text"] as const + for (const field of fields) { + const response = yield* LLMClient.generate(request).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { choices: [{ delta: { [field]: "thinking" } }] }, + { choices: [{ delta: { content: "Hello" } }] }, + { choices: [{ delta: {}, finish_reason: "stop" }] }, + ), + ), + ), + ) + + expect(response.reasoning).toBe("thinking") + expect(response.text).toBe("Hello") + expect(response.message.content.find((part) => part.type === "reasoning")?.providerMetadata).toEqual({ + openai: { reasoningField: field }, + }) + + const replay = yield* LLMClient.prepare( + LLM.request({ model, messages: [response.message] }), + ) + expect(replay.body.messages).toEqual([{ role: "assistant", content: "Hello", [field]: "thinking" }]) + } + }), + ) + + it.effect("preserves and replays reasoning details alongside scalar reasoning", () => + Effect.gen(function* () { + const details = [ + { type: "reasoning.text", text: "thinking", format: "anthropic-claude-v1", index: 0 }, + { type: "reasoning.encrypted", data: "opaque", format: "anthropic-claude-v1", index: 1 }, + ] + const response = yield* LLMClient.generate( + LLM.updateRequest(request, { + tools: [{ name: "lookup", description: "Lookup data", inputSchema: { type: "object" } }], + }), + ).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { choices: [{ delta: { reasoning: "thinking", reasoning_details: [details[0]] } }] }, + { choices: [{ delta: { reasoning_details: [details[1]] } }] }, + { + choices: [ + { + delta: { + tool_calls: [ + { index: 0, id: "call_1", function: { name: "lookup", arguments: '{"query":"weather"}' } }, + ], + }, + finish_reason: "tool_calls", + }, + ], + }, + ), + ), + ), ) - const response = yield* LLMClient.generate(request).pipe(Effect.provide(fixedResponse(body))) + expect(response.reasoning).toBe("thinking") + expect(response.message.content.find((part) => part.type === "reasoning")?.providerMetadata).toEqual({ + openai: { reasoningField: "reasoning", reasoningDetails: details }, + }) + + const replay = yield* LLMClient.prepare( + LLM.request({ model, messages: [response.message] }), + ) + expect(replay.body.messages).toEqual([ + { + role: "assistant", + content: null, + reasoning: "thinking", + reasoning_details: details, + tool_calls: [ + { + id: "call_1", + type: "function", + function: { name: "lookup", arguments: '{"query":"weather"}' }, + }, + ], + }, + ]) + }), + ) + + it.effect("uses reasoning details as display fallback without inventing a scalar replay field", () => + Effect.gen(function* () { + const details = [ + { type: "reasoning.summary", summary: "thinking", format: "openai-responses-v1", index: 0 }, + { type: "reasoning.encrypted", data: "opaque", format: "openai-responses-v1", index: 1 }, + ] + const response = yield* LLMClient.generate(request).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { choices: [{ delta: { reasoning_details: [details[0]] } }] }, + { choices: [{ delta: { reasoning_details: [details[1]] } }] }, + { choices: [{ delta: { content: "Hello" } }] }, + { choices: [{ delta: {}, finish_reason: "stop" }] }, + ), + ), + ), + ) expect(response.reasoning).toBe("thinking") - expect(response.text).toBe("Hello") - expect(response.events).toMatchObject([ - { type: "step-start", index: 0 }, - { type: "reasoning-start", id: "reasoning-0" }, - { type: "reasoning-delta", id: "reasoning-0", text: "thinking" }, - { type: "reasoning-end", id: "reasoning-0" }, - { type: "text-start", id: "text-0" }, - { type: "text-delta", id: "text-0", text: "Hello" }, - { type: "text-end", id: "text-0" }, - { type: "step-finish", index: 0, reason: "stop" }, - { type: "finish", reason: "stop" }, + expect(response.message.content.find((part) => part.type === "reasoning")?.providerMetadata).toEqual({ + openai: { reasoningDetails: details }, + }) + + const replay = yield* LLMClient.prepare( + LLM.request({ model, messages: [response.message] }), + ) + expect(replay.body.messages).toEqual([{ role: "assistant", content: "Hello", reasoning_details: details }]) + }), + ) + + it.effect("preserves unknown reasoning details while using scalar display text", () => + Effect.gen(function* () { + const details = [{ type: "reasoning.future", format: "provider-v2", state: { opaque: true } }] + const response = yield* LLMClient.generate(request).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { choices: [{ delta: { reasoning: "thinking", reasoning_details: details } }] }, + { choices: [{ delta: { content: "Hello" } }] }, + { choices: [{ delta: {}, finish_reason: "stop" }] }, + ), + ), + ), + ) + + expect(response.reasoning).toBe("thinking") + expect(response.message.content.find((part) => part.type === "reasoning")?.providerMetadata).toEqual({ + openai: { reasoningField: "reasoning", reasoningDetails: details }, + }) + + const replay = yield* LLMClient.prepare( + LLM.request({ model, messages: [response.message] }), + ) + expect(replay.body.messages).toEqual([ + { role: "assistant", content: "Hello", reasoning: "thinking", reasoning_details: details }, + ]) + }), + ) + + it.effect("uses scalar display text for signature-only reasoning details", () => + Effect.gen(function* () { + const details = [{ type: "reasoning.text", signature: "signed", format: "provider-v2", index: 0 }] + const response = yield* LLMClient.generate(request).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { choices: [{ delta: { reasoning: "thinking", reasoning_details: details } }] }, + { choices: [{ delta: { content: "Hello" } }] }, + { choices: [{ delta: {}, finish_reason: "stop" }] }, + ), + ), + ), + ) + + expect(response.reasoning).toBe("thinking") + expect(response.message.content.find((part) => part.type === "reasoning")?.providerMetadata).toEqual({ + openai: { reasoningField: "reasoning", reasoningDetails: details }, + }) + }), + ) + + it.effect("ignores scalar reasoning after content starts", () => + Effect.gen(function* () { + const details = [{ type: "reasoning.text", text: "detail", format: "unknown", index: 0 }] + const response = yield* LLMClient.generate(request).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { choices: [{ delta: { reasoning_details: details } }] }, + { choices: [{ delta: { content: "Hello" } }] }, + { choices: [{ delta: { reasoning: "scalar" } }] }, + { choices: [{ delta: {}, finish_reason: "stop" }] }, + ), + ), + ), + ) + + expect(response.reasoning).toBe("detail") + expect(response.events.filter(LLMEvent.is.reasoningStart)).toHaveLength(1) + expect(response.events.filter(LLMEvent.is.reasoningEnd)).toHaveLength(1) + expect(response.message.content.find((part) => part.type === "reasoning")?.providerMetadata).toEqual({ + openai: { reasoningDetails: details }, + }) + }), + ) + + it.effect("preserves an explicitly empty reasoning details array", () => + Effect.gen(function* () { + const response = yield* LLMClient.generate(request).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { choices: [{ delta: { reasoning_details: [] } }] }, + { choices: [{ delta: { content: "Hello" } }] }, + { choices: [{ delta: {}, finish_reason: "stop" }] }, + ), + ), + ), + ) + + expect(response.reasoning).toBe("") + expect(response.message.content.find((part) => part.type === "reasoning")?.providerMetadata).toEqual({ + openai: { reasoningDetails: [] }, + }) + + const replay = yield* LLMClient.prepare( + LLM.request({ model, messages: [response.message] }), + ) + expect(replay.body.messages).toEqual([{ role: "assistant", content: "Hello", reasoning_details: [] }]) + }), + ) + + it.effect("attaches signature-only details that arrive after content", () => + Effect.gen(function* () { + const details = [ + { type: "reasoning.text", text: "thinking", format: "anthropic-claude-v1", index: 0 }, + { type: "reasoning.text", signature: "signed", format: "anthropic-claude-v1", index: 0 }, + ] + const merged = [ + { + type: "reasoning.text", + text: "thinking", + signature: "signed", + format: "anthropic-claude-v1", + index: 0, + }, + ] + const response = yield* LLMClient.generate(request).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { choices: [{ delta: { reasoning: "thinking", reasoning_details: [details[0]] } }] }, + { choices: [{ delta: { content: "Hello" } }] }, + { choices: [{ delta: { reasoning_details: [details[1]] } }] }, + { choices: [{ delta: {}, finish_reason: "stop" }] }, + ), + ), + ), + ) + + expect(response.reasoning).toBe("thinking") + expect(response.message.content.filter((part) => part.type === "reasoning")).toHaveLength(1) + expect(response.message.content.find((part) => part.type === "reasoning")?.providerMetadata).toEqual({ + openai: { reasoningField: "reasoning", reasoningDetails: merged }, + }) + expect(response.events.filter(LLMEvent.is.reasoningStart)).toHaveLength(1) + expect(response.events.filter(LLMEvent.is.reasoningDelta)).toHaveLength(1) + expect(response.events.filter(LLMEvent.is.reasoningEnd)).toHaveLength(1) + expect(response.events.filter(LLMEvent.is.reasoningEnd).at(-1)?.providerMetadata).toEqual({ + openai: { reasoningField: "reasoning", reasoningDetails: merged }, + }) + expect(response.events.findIndex(LLMEvent.is.reasoningEnd)).toBeLessThan( + response.events.findIndex(LLMEvent.is.textStart), + ) + + const replay = yield* LLMClient.prepare( + LLM.request({ model, messages: [response.message] }), + ) + expect(replay.body.messages).toEqual([ + { role: "assistant", content: "Hello", reasoning: "thinking", reasoning_details: merged }, + ]) + }), + ) + + it.effect("preserves metadata-only reasoning when the stream ends", () => + Effect.gen(function* () { + const details = [{ type: "reasoning.encrypted", data: "opaque", format: "openai-responses-v1", index: 0 }] + const response = yield* LLMClient.generate(request).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { choices: [{ delta: { reasoning_details: details } }] }, + { choices: [{ delta: {}, finish_reason: "stop" }] }, + ), + ), + ), + ) + + expect(response.message.content).toEqual([ + { type: "reasoning", text: "", providerMetadata: { openai: { reasoningDetails: details } } }, + ]) + expect(response.events.filter(LLMEvent.is.reasoningStart)).toHaveLength(1) + expect(response.events.filter(LLMEvent.is.reasoningEnd)).toHaveLength(1) + + const replay = yield* LLMClient.prepare( + LLM.request({ model, messages: [response.message] }), + ) + expect(replay.body.messages).toEqual([{ role: "assistant", content: null, reasoning_details: details }]) + }), + ) + + it.effect("flushes details-only display reasoning when the stream ends", () => + Effect.gen(function* () { + const details = [{ type: "reasoning.summary", summary: "summary", format: "openai-responses-v1", index: 0 }] + const response = yield* LLMClient.generate(request).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { choices: [{ delta: { reasoning_details: details } }] }, + { choices: [{ delta: {}, finish_reason: "stop" }] }, + ), + ), + ), + ) + + expect(response.reasoning).toBe("summary") + expect(response.message.content).toEqual([ + { type: "reasoning", text: "summary", providerMetadata: { openai: { reasoningDetails: details } } }, + ]) + }), + ) + + it.effect("replays details from multiple reasoning parts in order", () => + Effect.gen(function* () { + const first = { type: "reasoning.text", text: "first", signature: "signed-0", index: 0 } + const second = { type: "reasoning.text", text: "second", signature: "signed-1", index: 1 } + const replay = yield* LLMClient.prepare( + LLM.request({ + model, + messages: [ + Message.assistant([ + { + type: "reasoning", + text: "first", + providerMetadata: { openai: { reasoningDetails: [first] } }, + }, + { + type: "reasoning", + text: "second", + providerMetadata: { openai: { reasoningField: "reasoning", reasoningDetails: [second] } }, + }, + ]), + ], + }), + ) + + expect(replay.body.messages).toEqual([ + { role: "assistant", content: null, reasoning: "firstsecond", reasoning_details: [first, second] }, + ]) + }), + ) + + it.effect("retains scalar replay for mixed structured reasoning parts", () => + Effect.gen(function* () { + const detail = { type: "reasoning.encrypted", data: "opaque", index: 0 } + const replay = yield* LLMClient.prepare( + LLM.request({ + model, + messages: [ + Message.assistant([ + { + type: "reasoning", + text: "A", + providerMetadata: { openai: { reasoningDetails: [detail] } }, + }, + { type: "reasoning", text: "B" }, + ]), + ], + }), + ) + + expect(replay.body.messages).toEqual([ + { role: "assistant", content: null, reasoning_content: "AB", reasoning_details: [detail] }, + ]) + }), + ) + + it.effect("replays native scalar reasoning alongside native details", () => + Effect.gen(function* () { + const details = [{ type: "reasoning.encrypted", data: "opaque", index: 0 }] + const replay = yield* LLMClient.prepare( + LLM.request({ + model, + messages: [ + Message.make({ + role: "assistant", + content: [{ type: "reasoning", text: "thinking" }], + native: { openaiCompatible: { reasoning_content: "thinking", reasoning_details: details } }, + }), + ], + }), + ) + + expect(replay.body.messages).toEqual([ + { role: "assistant", content: null, reasoning_content: "thinking", reasoning_details: details }, ]) }), ) @@ -602,6 +975,67 @@ describe("OpenAI Chat route", () => { }), ) + it.effect("ignores empty identity fields on later tool call deltas", () => + Effect.gen(function* () { + const body = sseEvents( + deltaChunk({ + tool_calls: [{ index: 0, id: "call_1", function: { name: "lookup", arguments: "{" } }], + }), + deltaChunk({ + tool_calls: [{ index: 0, id: "", function: { name: "", arguments: '\"query\":\"weather\"}' } }], + }), + deltaChunk({}, "tool_calls"), + ) + const response = yield* LLMClient.generate( + LLM.updateRequest(request, { + tools: [{ name: "lookup", description: "Lookup data", inputSchema: { type: "object" } }], + }), + ).pipe(Effect.provide(fixedResponse(body))) + + expect(response.toolCalls).toMatchObject([{ id: "call_1", name: "lookup", input: { query: "weather" } }]) + }), + ) + + it.effect("buffers tool call deltas until the function name arrives", () => + Effect.gen(function* () { + const body = sseEvents( + deltaChunk({ + tool_calls: [{ index: 0, id: "call_1", function: { arguments: "{" } }], + }), + deltaChunk({ + tool_calls: [{ index: 0, function: { name: "lookup", arguments: '\"query\":' } }], + }), + deltaChunk({ tool_calls: [{ index: 0, function: { arguments: '\"weather\"}' } }] }), + deltaChunk({}, "tool_calls"), + ) + const response = yield* LLMClient.generate( + LLM.updateRequest(request, { + tools: [{ name: "lookup", description: "Lookup data", inputSchema: { type: "object" } }], + }), + ).pipe(Effect.provide(fixedResponse(body))) + + expect(response.toolCalls).toMatchObject([{ id: "call_1", name: "lookup", input: { query: "weather" } }]) + }), + ) + + it.effect("fails when a buffered tool call never receives a function name", () => + Effect.gen(function* () { + const body = sseEvents( + deltaChunk({ + tool_calls: [{ index: 0, id: "call_1", function: { arguments: "{}" } }], + }), + deltaChunk({}, "tool_calls"), + ) + const error = yield* LLMClient.generate( + LLM.updateRequest(request, { + tools: [{ name: "lookup", description: "Lookup data", inputSchema: { type: "object" } }], + }), + ).pipe(Effect.provide(fixedResponse(body)), Effect.flip) + + expect(error.message).toContain("OpenAI Chat tool call delta is missing id or name") + }), + ) + it.effect("fails a streamed tool call when the provider ends without a finish reason", () => Effect.gen(function* () { const body = sseEvents( diff --git a/packages/ai/test/provider/openai-images.recorded.test.ts b/packages/ai/test/provider/openai-images.recorded.test.ts new file mode 100644 index 0000000000..a3180cb12a --- /dev/null +++ b/packages/ai/test/provider/openai-images.recorded.test.ts @@ -0,0 +1,33 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { Image } from "../../src" +import { OpenAI } from "../../src/providers" +import { recordedTests } from "../recorded-test" + +const model = OpenAI.configure({ + apiKey: process.env.OPENAI_API_KEY ?? "fixture", +}).image("gpt-image-1-mini") + +const recorded = recordedTests({ + prefix: "openai-images", + provider: "openai", + protocol: "openai-images", + requires: ["OPENAI_API_KEY"], +}) + +describe("OpenAI Images recorded", () => { + recorded.effect("generates an image", () => + Effect.gen(function* () { + const response = yield* Image.generate({ + model, + prompt: "A simple flat black circle centered on a plain white background.", + options: { quality: "low", outputFormat: "jpeg", outputCompression: 10, size: "1024x1024" }, + }) + + expect(response.images).toHaveLength(1) + expect(response.image?.mediaType).toBe("image/jpeg") + expect(response.image?.data).toBeInstanceOf(Uint8Array) + expect(response.image?.data.length).toBeGreaterThan(0) + }), + ) +}) diff --git a/packages/ai/test/provider/openai-responses-images.recorded.test.ts b/packages/ai/test/provider/openai-responses-images.recorded.test.ts new file mode 100644 index 0000000000..41b9ab84d4 --- /dev/null +++ b/packages/ai/test/provider/openai-responses-images.recorded.test.ts @@ -0,0 +1,66 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { LLM, LLMEvent, Message } from "../../src" +import { OpenAI } from "../../src/providers" +import { recordedTests } from "../recorded-test" + +const openai = OpenAI.configure({ + apiKey: process.env.OPENAI_API_KEY ?? "fixture", +}) + +const recorded = recordedTests({ + prefix: "openai-responses-images", + provider: "openai", + protocol: "openai-responses", + requires: ["OPENAI_API_KEY"], +}) + +describe("OpenAI Responses image generation recorded", () => { + recorded.effect("generates and edits an image with the hosted tool", () => + Effect.gen(function* () { + const initial = Message.user("Generate a simple flat black triangle centered on a plain white background.") + const tools = [ + OpenAI.imageGeneration({ + action: "auto", + quality: "low", + size: "1024x1024", + outputFormat: "jpeg", + outputCompression: 10, + partialImages: 0, + }), + ] + const response = yield* LLM.generate( + LLM.request({ + model: openai.responses("gpt-5-mini"), + messages: [initial], + tools, + toolChoice: "image_generation", + }), + ) + + const result = response.events.find(LLMEvent.is.toolResult) + expect(result).toBeDefined() + expect(result?.providerExecuted).toBe(true) + expect(result?.result.type).toBe("content") + if (result?.result.type !== "content") return + expect(result.result.value).toHaveLength(1) + expect(result.result.value[0]?.type).toBe("file") + if (result.result.value[0]?.type !== "file") return + expect(result.result.value[0].mime).toBe("image/jpeg") + expect(result.result.value[0].uri.startsWith("data:image/jpeg;base64,")).toBe(true) + + const edited = yield* LLM.generate( + LLM.request({ + model: openai.responses("gpt-5-mini"), + messages: [initial, response.message, Message.user("Now make the triangle blue.")], + tools, + toolChoice: "image_generation", + }), + ) + const editedResult = edited.events.find(LLMEvent.is.toolResult) + expect(editedResult?.result.type).toBe("content") + if (editedResult?.result.type !== "content") return + expect(editedResult.result.value[0]?.type).toBe("file") + }), + ) +}) diff --git a/packages/ai/test/provider/openai-responses.test.ts b/packages/ai/test/provider/openai-responses.test.ts index 7548340690..e345cd59b1 100644 --- a/packages/ai/test/provider/openai-responses.test.ts +++ b/packages/ai/test/provider/openai-responses.test.ts @@ -1,7 +1,7 @@ import { describe, expect } from "bun:test" import { ConfigProvider, Effect, Layer, Stream } from "effect" import { Headers, HttpClientRequest } from "effect/unstable/http" -import { LLM, LLMError, Message, Model, ToolCallPart, Usage } from "../../src" +import { LLM, LLMError, LLMEvent, Message, Model, ToolCallPart, ToolResultPart, Usage } from "../../src" import { Auth, LLMClient, RequestExecutor, WebSocketExecutor } from "../../src/route" import * as Azure from "../../src/providers/azure" import * as OpenAI from "../../src/providers/openai" @@ -58,6 +58,39 @@ describe("OpenAI Responses route", () => { }), ) + it.effect("lowers the hosted OpenAI image generation tool", () => + Effect.gen(function* () { + const prepared = yield* LLMClient.prepare( + LLM.request({ + model, + prompt: "Show me a rooftop garden.", + tools: [OpenAI.imageGeneration({ action: "generate", quality: "high", size: "1024x1024" })], + toolChoice: "image_generation", + }), + ) + + expect(prepared.body.tools).toEqual([ + { type: "image_generation", action: "generate", quality: "high", size: "1024x1024" }, + ]) + expect(prepared.body.tool_choice).toEqual({ type: "image_generation" }) + }), + ) + + it.effect("rejects invalid hosted image generation options locally", () => + Effect.gen(function* () { + const error = yield* LLMClient.prepare( + LLM.request({ + model, + prompt: "Show me a rooftop garden.", + tools: [OpenAI.imageGeneration({ outputCompression: -1, partialImages: 4, size: "bogus" })], + }), + ).pipe(Effect.flip) + + expect(error.reason._tag).toBe("InvalidRequest") + expect(error.message).toContain("image generation tool options are invalid") + }), + ) + it.effect("lowers semantic service tier options", () => Effect.gen(function* () { const input = LLM.updateRequest(request, { providerOptions: { openai: { serviceTier: "priority" } } }) @@ -1103,6 +1136,48 @@ describe("OpenAI Responses route", () => { }), ) + it.effect("continues stateless hosted image generation with the generated image", () => + Effect.gen(function* () { + const imageTool = OpenAI.imageGeneration({ action: "edit" }) + const prepared = yield* LLMClient.prepare( + LLM.request({ + model, + messages: [ + Message.user("Generate a black triangle."), + Message.assistant([ + ToolCallPart.make({ + id: "ig_1", + name: "image_generation", + input: {}, + providerExecuted: true, + providerMetadata: { openai: { itemId: "ig_1" } }, + }), + ToolResultPart.make({ + id: "ig_1", + name: "image_generation", + result: { + type: "content", + value: [{ type: "file", uri: "data:image/png;base64,AQID", mime: "image/png" }], + }, + providerExecuted: true, + providerMetadata: { openai: { itemId: "ig_1" } }, + }), + ]), + Message.user("Make it blue."), + ], + tools: [imageTool], + }), + ) + + expect(prepared.body.store).toBe(false) + expect(prepared.body.input).toEqual([ + { role: "user", content: [{ type: "input_text", text: "Generate a black triangle." }] }, + { role: "user", content: [{ type: "input_image", image_url: "data:image/png;base64,AQID" }] }, + { role: "user", content: [{ type: "input_text", text: "Make it blue." }] }, + ]) + }), + ) + it.effect("joins streamed summary blocks into one continuation reasoning item", () => Effect.gen(function* () { const prepared = yield* LLMClient.prepare( @@ -1259,6 +1334,69 @@ describe("OpenAI Responses route", () => { }), ) + it.effect("emits malformed final function arguments as an unexecuted tool error", () => + Effect.gen(function* () { + const body = sseEvents( + { + type: "response.output_item.added", + item: { type: "function_call", id: "item_1", call_id: "call_1", name: "lookup", arguments: "" }, + }, + { type: "response.function_call_arguments.delta", item_id: "item_1", delta: '{"query":"streamed"}' }, + { + type: "response.output_item.done", + item: { + type: "function_call", + id: "item_1", + call_id: "call_1", + name: "lookup", + arguments: '{"query":"partial', + }, + }, + { type: "response.completed", response: { usage: { input_tokens: 5, output_tokens: 1 } } }, + ) + const response = yield* LLMClient.generate( + LLM.updateRequest(request, { + tools: [{ name: "lookup", description: "Lookup data", inputSchema: { type: "object" } }], + }), + ).pipe(Effect.provide(fixedResponse(body))) + + expect(response.events.find(LLMEvent.is.toolInputError)).toEqual({ + type: "tool-input-error", + id: "call_1", + name: "lookup", + raw: '{"query":"partial', + }) + expect(response.finishReason).toBe("tool-calls") + expect(response.events.some(LLMEvent.is.toolCall)).toBeFalse() + }), + ) + + it.effect("settles malformed function arguments when output_item.added is absent", () => + Effect.gen(function* () { + const body = sseEvents( + { + type: "response.output_item.done", + item: { + type: "function_call", + id: "item_1", + call_id: "call_1", + name: "lookup", + arguments: '{"query":"partial', + }, + }, + { type: "response.completed", response: { usage: { input_tokens: 5, output_tokens: 1 } } }, + ) + const response = yield* LLMClient.generate(request).pipe(Effect.provide(fixedResponse(body))) + + expect(response.events.find(LLMEvent.is.toolInputError)).toMatchObject({ + id: "call_1", + name: "lookup", + raw: '{"query":"partial', + }) + expect(response.finishReason).toBe("tool-calls") + }), + ) + it.effect("decodes web_search_call as provider-executed tool-call + tool-result", () => Effect.gen(function* () { const item = { @@ -1298,6 +1436,59 @@ describe("OpenAI Responses route", () => { }), ) + it.effect("decodes image generation output as image content", () => + Effect.gen(function* () { + const item = { + type: "image_generation_call", + id: "ig_1", + status: "completed", + result: "AQID", + } + const response = yield* LLMClient.generate(request).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { type: "response.output_item.done", item }, + { type: "response.completed", response: { usage: { input_tokens: 5, output_tokens: 1 } } }, + ), + ), + ), + ) + + expect(response.events.find(LLMEvent.is.toolResult)).toMatchObject({ + id: "ig_1", + name: "image_generation", + providerExecuted: true, + result: { + type: "content", + value: [{ type: "file", uri: "data:image/png;base64,AQID", mime: "image/png" }], + }, + }) + }), + ) + + it.effect("rejects malformed image generation base64", () => + Effect.gen(function* () { + const error = yield* LLMClient.generate(request).pipe( + Effect.provide( + fixedResponse( + sseEvents( + { + type: "response.output_item.done", + item: { type: "image_generation_call", id: "ig_bad", status: "completed", result: "%%%" }, + }, + { type: "response.completed", response: {} }, + ), + ), + ), + Effect.flip, + ) + + expect(error.reason._tag).toBe("InvalidProviderOutput") + expect(error.message).toContain("invalid image base64") + }), + ) + it.effect("decodes code_interpreter_call as provider-executed events with code input", () => Effect.gen(function* () { const item = { diff --git a/packages/ai/test/provider/openrouter.test.ts b/packages/ai/test/provider/openrouter.test.ts index 86d1317b3e..ead7e7ea7c 100644 --- a/packages/ai/test/provider/openrouter.test.ts +++ b/packages/ai/test/provider/openrouter.test.ts @@ -1,6 +1,6 @@ import { describe, expect } from "bun:test" import { Effect } from "effect" -import { LLM } from "../../src" +import { LLM, Message } from "../../src" import { LLMClient } from "../../src/route" import * as OpenRouter from "../../src/providers/openrouter" import { it } from "../lib/effect" @@ -53,4 +53,102 @@ describe("OpenRouter", () => { }) }), ) + + it.effect("preserves manually supplied reasoning details", () => + Effect.gen(function* () { + const details = [ + { type: "reasoning.text", text: "Think", format: "anthropic-claude-v1", index: 0 }, + { type: "reasoning.text", text: "ing", format: "anthropic-claude-v1", index: 0 }, + { type: "reasoning.text", signature: "signed", format: "anthropic-claude-v1", index: 0 }, + { type: "reasoning.encrypted", data: "opaque", format: "openai-responses-v1", index: 1 }, + ] + const prepared = yield* LLMClient.prepare( + LLM.request({ + model: OpenRouter.configure({ apiKey: "test-key" }).model("anthropic/claude-sonnet-4.6"), + messages: [ + Message.assistant([ + { + type: "reasoning", + text: "Thinking", + providerMetadata: { openai: { reasoningField: "reasoning", reasoningDetails: details } }, + }, + ]), + ], + }), + ) + + expect(prepared.body.messages).toEqual([ + { + role: "assistant", + content: null, + reasoning: "Thinking", + reasoning_details: details, + }, + ]) + }), + ) + + it.effect("preserves opaque and duplicate continuation details", () => + Effect.gen(function* () { + const details = [ + { type: "reasoning.future", format: "provider-v2", state: { opaque: true } }, + { type: "reasoning.encrypted", id: "state", data: "opaque" }, + { type: "reasoning.encrypted", id: "state", data: "opaque" }, + ] + const prepared = yield* LLMClient.prepare( + LLM.request({ + model: OpenRouter.configure({ apiKey: "test-key" }).model("anthropic/claude-sonnet-4.6"), + messages: [ + Message.assistant({ + type: "reasoning", + text: "Thinking", + providerMetadata: { openai: { reasoningField: "reasoning", reasoningDetails: details } }, + }), + ], + }), + ) + + expect(prepared.body.messages).toEqual([ + { role: "assistant", content: null, reasoning: "Thinking", reasoning_details: details }, + ]) + }), + ) + + it.effect("does not merge distinct adjacent reasoning text blocks", () => + Effect.gen(function* () { + const details = [ + { type: "reasoning.text", id: "first", index: 0, text: "A", opaque: "first" }, + { type: "reasoning.text", id: "second", index: 1, text: "B", opaque: "second" }, + ] + const prepared = yield* LLMClient.prepare( + LLM.request({ + model: OpenRouter.configure({ apiKey: "test-key" }).model("anthropic/claude-sonnet-4.6"), + messages: [ + Message.assistant({ + type: "reasoning", + text: "AB", + providerMetadata: { openai: { reasoningField: "reasoning", reasoningDetails: details } }, + }), + ], + }), + ) + + expect(prepared.body.messages).toEqual([ + { role: "assistant", content: null, reasoning: "AB", reasoning_details: details }, + ]) + }), + ) + + it.effect("omits scalar reasoning without continuation details", () => + Effect.gen(function* () { + const prepared = yield* LLMClient.prepare( + LLM.request({ + model: OpenRouter.configure({ apiKey: "test-key" }).model("anthropic/claude-sonnet-4.6"), + messages: [Message.assistant({ type: "reasoning", text: "Thinking" })], + }), + ) + + expect(prepared.body.messages).toEqual([{ role: "assistant", content: null }]) + }), + ) }) diff --git a/packages/ai/test/provider/xai-images.recorded.test.ts b/packages/ai/test/provider/xai-images.recorded.test.ts new file mode 100644 index 0000000000..c77002e2c5 --- /dev/null +++ b/packages/ai/test/provider/xai-images.recorded.test.ts @@ -0,0 +1,33 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { Image } from "../../src" +import { XAI } from "../../src/providers" +import { recordedTests } from "../recorded-test" + +const model = XAI.configure({ + apiKey: process.env.XAI_API_KEY ?? "fixture", +}).image("grok-imagine-image") + +const recorded = recordedTests({ + prefix: "xai-images", + provider: "xai", + protocol: "xai-images", + requires: ["XAI_API_KEY"], +}) + +describe("xAI Images recorded", () => { + recorded.effect("generates an image", () => + Effect.gen(function* () { + const response = yield* Image.generate({ + model, + prompt: "A simple flat black diamond centered on a plain white background.", + options: { aspectRatio: "1:1", resolution: "1k", responseFormat: "b64_json" }, + }) + + expect(response.images).toHaveLength(1) + expect(response.image?.mediaType.startsWith("image/")).toBe(true) + expect(response.image?.data).toBeInstanceOf(Uint8Array) + expect(response.image?.data.length).toBeGreaterThan(0) + }), + ) +}) diff --git a/packages/ai/test/provider/xai-images.test.ts b/packages/ai/test/provider/xai-images.test.ts new file mode 100644 index 0000000000..ce801f2f91 --- /dev/null +++ b/packages/ai/test/provider/xai-images.test.ts @@ -0,0 +1,109 @@ +import { describe, expect } from "bun:test" +import { Effect, Layer } from "effect" +import { Headers, HttpClientRequest } from "effect/unstable/http" +import { Image, ImageClient } from "../../src" +import { XAI } from "../../src/providers" +import { Auth } from "../../src/route" +import { it } from "../lib/effect" +import { dynamicResponse } from "../lib/http" + +describe("xAI Images", () => { + it.effect("generates through the OpenAI-compatible Images API", () => + Effect.gen(function* () { + const response = yield* Image.generate({ + model: XAI.configure({ + apiKey: "test", + baseURL: "https://api.xai.test/v1", + http: { body: { configured: true }, headers: { "x-default": "yes" } }, + }).image("grok-imagine-image"), + prompt: "A robot tending a rooftop garden", + options: { + n: 2, + aspectRatio: "16:9", + aspect_ratio: "4:3", + resolution: "1k", + responseFormat: "url", + response_format: "b64_json", + future_option: true, + }, + http: { + body: { resolution: "2k", future_option: "http" }, + headers: { "x-request": "yes" }, + query: { trace: "1" }, + }, + }) + + expect(response.images).toHaveLength(2) + expect(response.image?.mediaType).toBe("image/jpeg") + expect(response.image?.data).toEqual(Uint8Array.from([1, 2, 3])) + expect(response.images[1]?.mediaType).toBe("application/octet-stream") + expect(response.images[1]?.data).toBe("https://api.xai.test/image.jpg") + expect(response.usage?.providerMetadata).toEqual({ xai: { num_images: 2 } }) + expect(response.providerMetadata).toEqual({ xai: { usage: { num_images: 2 } } }) + }).pipe( + Effect.provide( + ImageClient.layer.pipe( + Layer.provide( + dynamicResponse((input) => + Effect.gen(function* () { + const request = yield* HttpClientRequest.toWeb(input.request).pipe(Effect.orDie) + expect(request.url).toBe("https://api.xai.test/v1/images/generations?trace=1") + expect(request.headers.get("authorization")).toBe("Bearer test") + expect(request.headers.get("x-default")).toBe("yes") + expect(request.headers.get("x-request")).toBe("yes") + expect(JSON.parse(input.text)).toEqual({ + model: "grok-imagine-image", + prompt: "A robot tending a rooftop garden", + n: 2, + aspect_ratio: "4:3", + resolution: "2k", + response_format: "b64_json", + future_option: "http", + configured: true, + }) + return input.respond( + JSON.stringify({ + data: [ + { b64_json: "AQID", url: null, mime_type: "image/jpeg" }, + { b64_json: null, url: "https://api.xai.test/image.jpg", mime_type: null }, + ], + usage: { num_images: 2 }, + }), + { headers: { "content-type": "application/json" } }, + ) + }), + ), + ), + ), + ), + ), + ) + + it.effect("supports request-level custom auth", () => + Image.generate({ + model: XAI.configure({ + baseURL: "https://api.xai.test/v1", + auth: Auth.custom((input) => + Effect.succeed(Headers.set(input.headers, "x-custom-auth", new URL(input.url).hostname)), + ), + }).image("grok-imagine-image"), + prompt: "A robot tending a rooftop garden", + }).pipe( + Effect.provide( + ImageClient.layer.pipe( + Layer.provide( + dynamicResponse((input) => + Effect.gen(function* () { + const request = yield* HttpClientRequest.toWeb(input.request).pipe(Effect.orDie) + expect(request.headers.get("x-custom-auth")).toBe("api.xai.test") + return input.respond(JSON.stringify({ data: [{ b64_json: "AQID", mime_type: "image/png" }] }), { + headers: { "content-type": "application/json" }, + }) + }), + ), + ), + ), + ), + ), + ) +}) diff --git a/packages/ai/test/recorded-scenarios.ts b/packages/ai/test/recorded-scenarios.ts index cac348da65..daf57cae24 100644 --- a/packages/ai/test/recorded-scenarios.ts +++ b/packages/ai/test/recorded-scenarios.ts @@ -120,29 +120,8 @@ export const runWeatherToolLoop = (request: LLMRequest) => throw new Error("Weather tool loop exceeded 10 steps") }) -const assistantContent = (events: ReadonlyArray) => { - const content: ContentPart[] = [] - for (const event of events) { - if (event.type === "text-delta" || event.type === "reasoning-delta") { - const type = event.type === "text-delta" ? "text" : "reasoning" - const last = content.at(-1) - if (last?.type === type) { - content[content.length - 1] = { ...last, text: `${last.text}${event.text}` } - } else { - content.push({ type, text: event.text }) - } - continue - } - if (event.type === "text-end" || event.type === "reasoning-end") { - const type = event.type === "text-end" ? "text" : "reasoning" - const last = content.at(-1) - if (last?.type === type) content[content.length - 1] = { ...last, providerMetadata: event.providerMetadata } - continue - } - if (event.type === "tool-call") content.push(event) - } - return content -} +const assistantContent = (events: ReadonlyArray) => + events.reduce(LLMResponse.reduce, LLMResponse.empty()).message.content export const expectFinish = ( events: ReadonlyArray, diff --git a/packages/ai/test/recorded-test.ts b/packages/ai/test/recorded-test.ts index da40085779..a0df87d9ca 100644 --- a/packages/ai/test/recorded-test.ts +++ b/packages/ai/test/recorded-test.ts @@ -3,6 +3,8 @@ import { Layer } from "effect" import * as path from "node:path" import { fileURLToPath } from "node:url" import { LLMClient, RequestExecutor, WebSocketExecutor } from "../src/route" +import { ImageClient } from "../src/image-client" +import type { Service as ImageClientService } from "../src/image-client" import type { Service as LLMClientService } from "../src/route/client" import type { Service as RequestExecutorService } from "../src/route/executor" import type { Service as WebSocketExecutorService } from "../src/route/transport/websocket" @@ -15,7 +17,7 @@ import { const __dirname = path.dirname(fileURLToPath(import.meta.url)) const FIXTURES_DIR = path.resolve(__dirname, "fixtures", "recordings") -type RecordedEnv = RequestExecutorService | WebSocketExecutorService | LLMClientService +type RecordedEnv = RequestExecutorService | WebSocketExecutorService | LLMClientService | ImageClientService type RecordedTestsOptions = RecordedGroupOptions & { readonly options?: HttpRecorder.RecorderOptions @@ -81,6 +83,10 @@ export const recordedTests = (options: RecordedTestsOptions) => ), ) const deps = Layer.mergeAll(requestExecutor, WebSocketExecutor.layer) - return Layer.mergeAll(deps, LLMClient.layer.pipe(Layer.provide(deps))) + return Layer.mergeAll( + deps, + LLMClient.layer.pipe(Layer.provide(deps)), + ImageClient.layer.pipe(Layer.provide(deps)), + ) }, }) diff --git a/packages/ai/test/response.test.ts b/packages/ai/test/response.test.ts index 5e48e5ef45..d3402be6c3 100644 --- a/packages/ai/test/response.test.ts +++ b/packages/ai/test/response.test.ts @@ -95,4 +95,19 @@ describe("LLMResponse reducer", () => { { type: "tool-call", id: "call_1", name: "lookup", input: { query: "weather" } }, ]) }) + + test("clears malformed tool input without appending an executable call", () => { + const state = reduce([ + LLMEvent.toolInputStart({ id: "call_1", name: "lookup" }), + LLMEvent.toolInputDelta({ id: "call_1", name: "lookup", text: '{"query":"partial' }), + LLMEvent.toolInputError({ + id: "call_1", + name: "lookup", + raw: '{"query":"partial', + }), + ]) + + expect(state.toolInputs).toEqual({}) + expect(state.message.content).toEqual([]) + }) }) diff --git a/packages/ai/test/tool-stream.test.ts b/packages/ai/test/tool-stream.test.ts index b005d2666c..72160ed229 100644 --- a/packages/ai/test/tool-stream.test.ts +++ b/packages/ai/test/tool-stream.test.ts @@ -36,6 +36,33 @@ describe("ToolStream", () => { }), ) + it.effect("keeps accumulated identity when later deltas contain empty strings", () => + Effect.gen(function* () { + const first = ToolStream.appendOrStart( + ADAPTER, + ToolStream.empty(), + 0, + { id: "call_1", name: "lookup", text: '{"query"' }, + "missing tool", + ) + if (ToolStream.isError(first)) return yield* first + const second = ToolStream.appendOrStart( + ADAPTER, + first.tools, + 0, + { id: "", name: "", text: ':"weather"}' }, + "missing tool", + ) + if (ToolStream.isError(second)) return yield* second + const finished = yield* ToolStream.finish(ADAPTER, second.tools, 0) + + expect(finished.events).toEqual([ + { type: "tool-input-end", id: "call_1", name: "lookup" }, + { type: "tool-call", id: "call_1", name: "lookup", input: { query: "weather" } }, + ]) + }), + ) + it.effect("fails appendExisting when the provider skipped the tool start", () => Effect.gen(function* () { const error = ToolStream.appendExisting(ADAPTER, ToolStream.empty(), 0, "{}", "missing tool") @@ -64,6 +91,73 @@ describe("ToolStream", () => { }), ) + it.effect("finalizes malformed local input as a non-executable tool error", () => + Effect.gen(function* () { + const tools = ToolStream.start(ToolStream.empty(), "item_1", { + id: "call_1", + name: "lookup", + input: '{"query":"partial', + }) + const finished = yield* ToolStream.finish(ADAPTER, tools, "item_1") + + expect(finished).toEqual({ + tools: {}, + events: [ + { + type: "tool-input-error", + id: "call_1", + name: "lookup", + raw: '{"query":"partial', + }, + ], + }) + }), + ) + + it.effect("preserves valid siblings when one parallel input is malformed", () => + Effect.gen(function* () { + const valid = ToolStream.start(ToolStream.empty(), 0, { + id: "call_valid", + name: "lookup", + input: '{"query":"weather"}', + }) + const tools = ToolStream.start(valid, 1, { + id: "call_invalid", + name: "lookup", + input: '{"query":"partial', + }) + const finished = yield* ToolStream.finishAll(ADAPTER, tools) + + expect(finished).toEqual({ + tools: {}, + events: [ + { type: "tool-input-end", id: "call_valid", name: "lookup" }, + { type: "tool-call", id: "call_valid", name: "lookup", input: { query: "weather" } }, + { + type: "tool-input-error", + id: "call_invalid", + name: "lookup", + raw: '{"query":"partial', + }, + ], + }) + }), + ) + + it.effect("keeps malformed provider-executed input terminal", () => + Effect.gen(function* () { + const tools = ToolStream.start(ToolStream.empty(), "item_1", { + id: "call_1", + name: "web_search", + input: '{"query":"partial', + providerExecuted: true, + }) + const result = yield* Effect.exit(ToolStream.finish(ADAPTER, tools, "item_1")) + + expect(result._tag).toBe("Failure") + }), + ) + it.effect("preserves providerExecuted and clears all tools", () => Effect.gen(function* () { const first: ToolStream.State = ToolStream.start(ToolStream.empty(), 0, { diff --git a/packages/ai/tsconfig.types.json b/packages/ai/tsconfig.types.json new file mode 100644 index 0000000000..473bdc222a --- /dev/null +++ b/packages/ai/tsconfig.types.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": true, + "rootDir": "." + }, + "include": ["test/**/*.types.ts"] +} diff --git a/packages/cli/bin/opencode2.cjs b/packages/cli/bin/opencode2.cjs index 8795c71cd2..d3f1c9260d 100755 --- a/packages/cli/bin/opencode2.cjs +++ b/packages/cli/bin/opencode2.cjs @@ -31,11 +31,13 @@ function run(target) { const envPath = process.env.OPENCODE_BIN_PATH const scriptDir = path.dirname(fs.realpathSync(__filename)) -const cached = path.join(scriptDir, ".opencode2") +const command = path.basename(__filename).replace(/\.cjs$/, "") +const nodeBuild = command === "opencode2-node" +const cached = path.join(scriptDir, `.${command}`) const platform = { darwin: "darwin", linux: "linux", win32: "windows" }[os.platform()] || os.platform() const arch = { x64: "x64", arm64: "arm64", arm: "arm" }[os.arch()] || os.arch() -const base = "@opencode-ai/cli-" + platform + "-" + arch -const binary = platform === "windows" ? "opencode2.exe" : "opencode2" +const base = `@opencode-ai/cli${nodeBuild ? "-node" : ""}-` + platform + "-" + arch +const binary = platform === "windows" ? `${command}.exe` : command function supportsAvx2() { if (arch !== "x64") return false @@ -77,6 +79,7 @@ function supportsAvx2() { } const names = (() => { + if (nodeBuild) return [base] const baseline = arch === "x64" && !supportsAvx2() if (platform === "linux") { const musl = (() => { @@ -121,7 +124,7 @@ function findBinary(startDir) { const resolved = envPath || (fs.existsSync(cached) ? cached : findBinary(scriptDir)) if (!resolved) { console.error( - "It seems that your package manager failed to install the right opencode2 CLI package. Try manually installing " + + `It seems that your package manager failed to install the right ${command} CLI package. Try manually installing ` + names.map((name) => `"${name}"`).join(" or ") + " package", ) diff --git a/packages/cli/package.json b/packages/cli/package.json index ed28f3779f..144cf7368c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -12,20 +12,12 @@ ], "exports": { "./daemon": "./src/daemon.ts", - "./mini": "./src/mini/index.ts", - "./mini/footer.command": "./src/mini/footer.command.tsx", - "./mini/footer.menu": "./src/mini/footer.menu.tsx", - "./mini/footer.permission": "./src/mini/footer.permission.tsx", - "./mini/footer.prompt": "./src/mini/footer.prompt.tsx", - "./mini/footer.question": "./src/mini/footer.question.tsx", - "./mini/footer.subagent": "./src/mini/footer.subagent.tsx", - "./mini/footer.view": "./src/mini/footer.view.tsx", - "./mini/scrollback.writer": "./src/mini/scrollback.writer.tsx", - "./mini/*": "./src/mini/*.ts", + "./run": "./src/run/index.ts", "./server-process": "./src/server-process.ts" }, "scripts": { "build": "bun run script/build.ts", + "build:node": "bun run script/build-node.ts", "dev": "bun run src/index.ts", "test": "bun test --timeout 30000 --only-failures", "typecheck": "tsgo --noEmit" @@ -39,19 +31,16 @@ "@opencode-ai/server": "workspace:*", "@opencode-ai/tui": "workspace:*", "@opentui/core": "catalog:", - "@opentui/keymap": "catalog:", "@opentui/solid": "catalog:", "@parcel/watcher": "2.5.1", "effect": "catalog:", - "fuzzysort": "catalog:", "immer": "11.1.4", "jsonc-parser": "3.3.1", "open": "10.1.2", - "opentui-spinner": "catalog:", "semver": "catalog:", "solid-js": "catalog:", - "strip-ansi": "7.1.2", - "uqr": "0.1.3" + "uqr": "0.1.3", + "ws": "8.21.0" }, "devDependencies": { "@opencode-ai/script": "workspace:*", @@ -59,6 +48,19 @@ "@tsconfig/bun": "catalog:", "@types/bun": "catalog:", "@types/semver": "catalog:", - "@typescript/native-preview": "catalog:" + "@typescript/native-preview": "catalog:", + "@lydell/node-pty-darwin-arm64": "1.2.0-beta.12", + "@lydell/node-pty-darwin-x64": "1.2.0-beta.12", + "@lydell/node-pty-linux-arm64": "1.2.0-beta.12", + "@lydell/node-pty-linux-x64": "1.2.0-beta.12", + "@lydell/node-pty-win32-arm64": "1.2.0-beta.12", + "@lydell/node-pty-win32-x64": "1.2.0-beta.12", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1", + "vite": "catalog:", + "vite-plugin-solid": "catalog:" } } diff --git a/packages/cli/script/build-node.ts b/packages/cli/script/build-node.ts new file mode 100644 index 0000000000..9a67fd35d2 --- /dev/null +++ b/packages/cli/script/build-node.ts @@ -0,0 +1,203 @@ +#!/usr/bin/env bun + +import { spawnSync } from "node:child_process" +import { createHash } from "node:crypto" +import { chmod, copyFile, mkdir, mkdtemp, realpath, rename, rm, stat, writeFile } from "node:fs/promises" +import os from "node:os" +import path from "node:path" +import { build } from "vite" +import { Script } from "@opencode-ai/script" +import pkg from "../package.json" +import { modelsData } from "./generate" +import { collectNodeAssets, copyNodeAssets, hashNodeAssets, seaAssetMap } from "./node-assets" +import { mainConfig } from "../vite.node.config" +import { nodeExecArgv, nodeTarget, type NodeTarget } from "../src/node/target" + +const NODE_VERSION = "26.4.0" +const dir = path.resolve(import.meta.dirname, "..") +const outdir = path.resolve( + dir, + process.argv.find((arg) => arg.startsWith("--outdir="))?.slice("--outdir=".length) ?? "dist", +) +if (outdir === dir) throw new Error("--outdir must not be the package directory") +if (outdir === path.join(dir, "dist-node")) { + throw new Error("--outdir must not be dist-node because it contains temporary files") +} +const bundleOnly = process.argv.includes("--bundle-only") +const single = process.argv.includes("--single") +const skipInstall = process.argv.includes("--skip-install") +const requested = process.argv.find((arg) => arg.startsWith("--target="))?.slice("--target=".length) +const allTargets = [ + nodeTarget("linux", "arm64"), + nodeTarget("linux", "x64"), + nodeTarget("darwin", "arm64"), + nodeTarget("win32", "arm64"), + nodeTarget("win32", "x64"), +] +const targets = requested + ? allTargets.filter((target) => targetName(target) === requested) + : single || bundleOnly + ? [nodeTarget(process.platform, process.arch)] + : allTargets + +if (targets.length === 0) { + if (requested === "darwin-x64") throw new Error("Node 26.4 SEA does not support macOS x64") + throw new Error(`Unknown Node target: ${requested}`) +} +if (!bundleOnly && targets.some((target) => target.platform === "darwin" && target.arch === "x64")) { + throw new Error("Node 26.4 SEA does not support macOS x64") +} + +process.chdir(dir) +if (!skipInstall) run(process.execPath, ["install", "--os=*", "--cpu=*"]) +if (!bundleOnly) await rm(outdir, { recursive: true, force: true }) +const builder = + !bundleOnly || targets.some((target) => target.platform === process.platform && target.arch === process.arch) + ? await resolveHostNode() + : undefined + +for (const target of targets) { + console.log(`building cli-node-${targetName(target)}`) + const assets = await collectNodeAssets(target) + await rm("dist-node", { recursive: true, force: true }) + const assetHash = await hashNodeAssets(assets) + const input = { version: Script.version, channel: Script.channel, models: modelsData, assetHash, target } + await build(mainConfig(input)) + await copyNodeAssets(assets) + + const host = target.platform === process.platform && target.arch === process.arch + if (host) { + if (!builder) throw new Error("Node SEA builder is unavailable") + run(builder, [...nodeExecArgv, "dist-node/opencode.mjs", "--version"]) + run(builder, [...nodeExecArgv, "dist-node/opencode.mjs", "--help"]) + } + if (bundleOnly) continue + + const name = `cli-node-${targetName(target)}` + const binary = target.platform === "win32" ? "opencode2-node.exe" : "opencode2-node" + const output = path.join(outdir, name, "bin", binary) + if (!builder) throw new Error("Node SEA builder is unavailable") + await mkdir(path.dirname(output), { recursive: true }) + const config = { + main: "dist-node/opencode.mjs", + mainFormat: "module", + executable: await resolveTargetNode(target, builder), + output: path.relative(dir, output), + disableExperimentalSEAWarning: true, + useSnapshot: false, + useCodeCache: false, + execArgv: nodeExecArgv, + execArgvExtension: "none", + assets: await seaAssetMap(), + } + await writeFile("dist-node/sea.json", `${JSON.stringify(config, null, 2)}\n`) + run(builder, ["--build-sea", "dist-node/sea.json"]) + if (target.platform !== "win32") await chmod(output, 0o755) + if (target.platform === "darwin" && process.platform === "darwin") run("codesign", ["--sign", "-", output]) + if (target.platform === "darwin" && process.platform !== "darwin") { + console.warn(`${output} must be signed on macOS before it can run`) + } + await writeFile( + path.join(outdir, name, "package.json"), + `${JSON.stringify( + { + name: `@opencode-ai/${name}`, + version: Script.version, + license: pkg.license, + repository: { type: "git", url: "git+https://github.com/anomalyco/opencode.git" }, + os: [target.platform], + cpu: [target.arch], + }, + null, + 2, + )}\n`, + ) + if (host) await smoke(output) +} + +async function resolveHostNode() { + const candidates = [process.env.NODE_BIN, "node"].filter((item): item is string => Boolean(item)) + for (const candidate of candidates) { + const result = spawnSync( + candidate, + ["-p", "JSON.stringify({version:process.versions.node,path:process.execPath})"], + { + encoding: "utf8", + }, + ) + if (result.status !== 0) continue + const info = JSON.parse(result.stdout) as { version: string; path: string } + if (info.version === NODE_VERSION) return realpath(info.path) + } + return resolveTargetNode(nodeTarget(process.platform, process.arch)) +} + +async function resolveTargetNode(target: NodeTarget, host?: string) { + if (host && target.platform === process.platform && target.arch === process.arch) return host + const cache = path.resolve(dir, ".cache", "node") + const platform = target.platform === "win32" ? "win" : target.platform + const archiveName = `node-v${NODE_VERSION}-${platform}-${target.arch}` + const targetDirectory = path.join(cache, archiveName) + const executable = path.join(targetDirectory, target.platform === "win32" ? "node.exe" : "bin/node") + if ( + (await stat(executable).then( + () => true, + () => false, + )) && + (await stat(path.join(targetDirectory, ".verified")).then( + () => true, + () => false, + )) + ) + return realpath(executable) + await mkdir(cache, { recursive: true }) + const extension = target.platform === "win32" ? "zip" : "tar.gz" + const filename = `${archiveName}.${extension}` + const archive = path.join(cache, filename) + const base = `https://nodejs.org/dist/v${NODE_VERSION}` + const [response, sums] = await Promise.all([fetch(`${base}/${filename}`), fetch(`${base}/SHASUMS256.txt`)]) + if (!response.ok) throw new Error(`Failed to download Node ${NODE_VERSION}: ${response.status}`) + if (!sums.ok) throw new Error(`Failed to download Node ${NODE_VERSION} checksums: ${sums.status}`) + const data = new Uint8Array(await response.arrayBuffer()) + const expected = (await sums.text()) + .split("\n") + .find((line) => line.endsWith(` ${filename}`)) + ?.split(/\s+/)[0] + if (!expected) throw new Error(`Missing checksum for ${filename}`) + if (createHash("sha256").update(data).digest("hex") !== expected) throw new Error(`Checksum mismatch for ${filename}`) + await writeFile(archive, data) + const temporary = path.join(cache, `${archiveName}.${process.pid}.tmp`) + await rm(temporary, { recursive: true, force: true }) + await mkdir(temporary) + if (target.platform !== "win32") run("tar", ["-xzf", archive, "-C", temporary]) + if (target.platform === "win32" && process.platform === "win32") { + run(path.join(process.env.SystemRoot ?? "C:\\Windows", "System32", "tar.exe"), ["-xf", archive, "-C", temporary]) + } + if (target.platform === "win32" && process.platform !== "win32") run("unzip", ["-q", archive, "-d", temporary]) + await rm(targetDirectory, { recursive: true, force: true }) + await rename(path.join(temporary, archiveName), targetDirectory) + await writeFile(path.join(targetDirectory, ".verified"), `${expected}\n`) + await rm(temporary, { recursive: true, force: true }) + await rm(archive, { force: true }) + return realpath(executable) +} + +async function smoke(output: string) { + const root = await mkdtemp(path.join(os.tmpdir(), "opencode-node-smoke-")) + const executable = path.join(root, path.basename(output)) + await copyFile(output, executable) + if (process.platform !== "win32") await chmod(executable, 0o755) + run(executable, ["--version"], root) + run(executable, ["--help"], root) + await rm(root, { recursive: true, force: true }) +} + +function targetName(target: NodeTarget) { + return `${target.platform === "win32" ? "windows" : target.platform}-${target.arch}` +} + +function run(command: string, args: readonly string[], cwd = dir) { + const result = spawnSync(command, args, { cwd, stdio: "inherit", env: process.env }) + if (result.error) throw result.error + if (result.status !== 0) throw new Error(`${command} exited with status ${result.status ?? "unknown"}`) +} diff --git a/packages/cli/script/build.ts b/packages/cli/script/build.ts index aa498c8141..ca3b84bb06 100755 --- a/packages/cli/script/build.ts +++ b/packages/cli/script/build.ts @@ -1,7 +1,6 @@ #!/usr/bin/env bun import { $ } from "bun" -import fs from "fs" import { rm } from "fs/promises" import path from "path" import { Script } from "@opencode-ai/script" @@ -11,9 +10,14 @@ import { modelsData } from "./generate" const dir = path.resolve(import.meta.dirname, "..") const binary = "opencode2" +const outdir = path.resolve( + dir, + process.argv.find((arg) => arg.startsWith("--outdir="))?.slice("--outdir=".length) ?? "dist", +) +if (outdir === dir) throw new Error("--outdir must not be the package directory") process.chdir(dir) -await rm("dist", { recursive: true, force: true }) +await rm(outdir, { recursive: true, force: true }) const singleFlag = process.argv.includes("--single") const baselineFlag = process.argv.includes("--baseline") @@ -50,10 +54,6 @@ const targets = singleFlag if (!skipInstall) await $`bun install --os="*" --cpu="*" @opentui/core@${pkg.dependencies["@opentui/core"]}` -const localParserWorker = path.resolve(dir, "node_modules/@opentui/core/parser.worker.js") -const rootParserWorker = path.resolve(dir, "../../node_modules/@opentui/core/parser.worker.js") -const parserWorker = fs.realpathSync(fs.existsSync(localParserWorker) ? localParserWorker : rootParserWorker) - for (const item of targets) { const target = [ binary, @@ -67,7 +67,7 @@ for (const item of targets) { const name = target.replace(binary, "cli") console.log(`building ${name}`) const result = await Bun.build({ - entrypoints: ["./src/index.ts", parserWorker], + entrypoints: ["./src/index.ts"], tsconfig: "./tsconfig.json", plugins: [plugin], external: ["node-gyp"], @@ -81,7 +81,7 @@ for (const item of targets) { autoloadTsconfig: true, autoloadPackageJson: true, target: target.replace(binary, "bun") as Bun.Build.CompileTarget, - outfile: `./dist/${name}/bin/${binary}`, + outfile: path.join(outdir, name, "bin", binary), execArgv: [`--user-agent=${binary}/${Script.version}`, "--use-system-ca", "--"], windows: {}, }, @@ -93,10 +93,6 @@ for (const item of targets) { OPENCODE_LIBC: item.os === "linux" ? `'${item.abi ?? "glibc"}'` : "undefined", // FFF_LIBC selects the fff native lib variant: "musl" or "gnu". FFF_LIBC: item.os === "linux" ? `'${item.abi ?? "gnu"}'` : "undefined", - OTUI_TREE_SITTER_WORKER_PATH: - (item.os === "win32" ? '"B:/~BUN/root/' : '"/$bunfs/root/') + - path.relative(dir, parserWorker).replaceAll("\\", "/") + - '"', ...(item.os === "linux" ? { "process.env.OPENTUI_LIBC": JSON.stringify(item.abi ?? "glibc") } : {}), }, }) @@ -107,7 +103,7 @@ for (const item of targets) { } await Bun.write( - `./dist/${name}/package.json`, + path.join(outdir, name, "package.json"), JSON.stringify( { name: `@opencode-ai/${name}`, diff --git a/packages/cli/script/generate.ts b/packages/cli/script/generate.ts index d98565e298..b8151b46cf 100755 --- a/packages/cli/script/generate.ts +++ b/packages/cli/script/generate.ts @@ -1,7 +1,9 @@ +import { readFile } from "node:fs/promises" + const modelsUrl = process.env.OPENCODE_MODELS_URL || "https://models.dev" export const modelsData = process.env.MODELS_DEV_API_JSON - ? await Bun.file(process.env.MODELS_DEV_API_JSON).text() + ? await readFile(process.env.MODELS_DEV_API_JSON, "utf8") : await fetch(`${modelsUrl}/api.json`).then((response) => response.text()) console.log("Loaded models.dev snapshot") diff --git a/packages/cli/script/node-assets.ts b/packages/cli/script/node-assets.ts new file mode 100644 index 0000000000..749a0f74c2 --- /dev/null +++ b/packages/cli/script/node-assets.ts @@ -0,0 +1,83 @@ +import { createHash } from "node:crypto" +import { copyFile, mkdir, readdir, readFile, stat } from "node:fs/promises" +import { createRequire } from "node:module" +import path from "node:path" +import { fileURLToPath } from "node:url" +import { getNodeAssets } from "@opentui/core/node-assets" +import { attentionSoundAssets, type NodeTarget, photonWasmAsset } from "../src/node/target" + +const dir = path.resolve(import.meta.dirname, "..") + +// Bun's compiler discovers file imports and embeds them in its virtual filesystem. Vite only bundles the JavaScript +// portion of the Node executable, while SEA embeds only the assets explicitly listed in its build configuration. +// Collect and stage those files under stable keys so the SEA prelude can extract them to real paths at startup; +// native addons, helper executables, and other path-based consumers cannot use assets directly from SEA memory. +export type NodeAsset = { + readonly key: string + readonly source: string +} + +async function files(root: string, current = root): Promise { + return ( + await Promise.all( + (await readdir(current, { withFileTypes: true })).map((entry) => { + const target = path.join(current, entry.name) + return entry.isDirectory() ? files(root, target) : [path.relative(root, target)] + }), + ) + ).flat() +} + +export async function collectNodeAssets(target: NodeTarget) { + const ptyEntry = fileURLToPath(import.meta.resolve(target.nodePtyPackage)) + const ptyRoot = path.resolve(path.dirname(ptyEntry), "..") + const assets: NodeAsset[] = [ + ...getNodeAssets({ + platform: target.platform, + arch: target.arch, + ...(target.platform === "linux" ? { libc: "glibc" as const } : {}), + }), + { key: target.parcelWatcherAsset, source: fileURLToPath(import.meta.resolve(target.parcelWatcherPackage)) }, + { + key: photonWasmAsset, + source: createRequire(path.resolve(dir, "../core/package.json")).resolve(photonWasmAsset), + }, + ...attentionSoundAssets.map((key) => ({ + key, + source: path.resolve(dir, "../ui/src/assets/audio", path.basename(key)), + })), + ...(await files(ptyRoot)) + .filter((relative) => !relative.endsWith(".map") && !relative.endsWith(".pdb")) + .map((relative) => ({ + key: `${target.nodePtyPackage}/${relative}`, + source: path.join(ptyRoot, relative), + })), + ] + await Promise.all(assets.map((asset) => stat(asset.source))) + return assets +} + +export async function hashNodeAssets(assets: readonly NodeAsset[]) { + const hash = createHash("sha256") + for (const asset of assets.toSorted((left, right) => left.key.localeCompare(right.key))) { + hash.update(asset.key) + hash.update(await readFile(asset.source)) + } + return hash.digest("hex").slice(0, 16) +} + +export async function copyNodeAssets(assets: readonly NodeAsset[]) { + const root = path.join(dir, "dist-node", "assets") + await Promise.all( + assets.map(async (asset) => { + const target = path.join(root, asset.key) + await mkdir(path.dirname(target), { recursive: true }) + await copyFile(asset.source, target) + }), + ) +} + +export async function seaAssetMap() { + const root = path.join(dir, "dist-node", "assets") + return Object.fromEntries((await files(root)).map((key) => [key.replaceAll(path.sep, "/"), path.join(root, key)])) +} diff --git a/packages/cli/script/postinstall.mjs b/packages/cli/script/postinstall.mjs new file mode 100644 index 0000000000..c8619251cc --- /dev/null +++ b/packages/cli/script/postinstall.mjs @@ -0,0 +1,161 @@ +#!/usr/bin/env node + +import childProcess from "node:child_process" +import fs from "node:fs" +import os from "node:os" +import path from "node:path" +import { createRequire } from "node:module" +import { fileURLToPath } from "node:url" + +const directory = path.dirname(fileURLToPath(import.meta.url)) +const require = createRequire(import.meta.url) +const packageJson = JSON.parse(fs.readFileSync(path.join(directory, "package.json"), "utf8")) +const command = Object.keys(packageJson.bin ?? {})[0] +if (!command) throw new Error("OpenCode package does not declare a binary") + +const platform = { darwin: "darwin", linux: "linux", win32: "windows" }[os.platform()] ?? os.platform() +const arch = { x64: "x64", arm64: "arm64", arm: "arm" }[os.arch()] ?? os.arch() +const sourceBinary = platform === "windows" ? `${command}.exe` : command +const targetBinary = path.resolve(directory, packageJson.bin[command]) +const dependencies = packageJson.optionalDependencies ?? {} +const base = Object.keys(dependencies).find((name) => name.endsWith(`-${platform}-${arch}`)) +if (!base) throw new Error(`OpenCode does not provide a binary for ${platform}-${arch}`) + +function supportsAvx2() { + if (arch !== "x64") return false + if (platform === "linux") { + try { + return /(^|\s)avx2(\s|$)/i.test(fs.readFileSync("/proc/cpuinfo", "utf8")) + } catch { + return false + } + } + if (platform === "darwin") { + try { + const result = childProcess.spawnSync("sysctl", ["-n", "hw.optional.avx2_0"], { + encoding: "utf8", + timeout: 1500, + }) + return result.status === 0 && (result.stdout || "").trim() === "1" + } catch { + return false + } + } + if (platform === "windows") { + const script = + '(Add-Type -MemberDefinition "[DllImport(""kernel32.dll"")] public static extern bool IsProcessorFeaturePresent(int ProcessorFeature);" -Name Kernel32 -Namespace Win32 -PassThru)::IsProcessorFeaturePresent(40)' + for (const executable of ["powershell.exe", "pwsh.exe", "pwsh", "powershell"]) { + try { + const result = childProcess.spawnSync(executable, ["-NoProfile", "-NonInteractive", "-Command", script], { + encoding: "utf8", + timeout: 3000, + windowsHide: true, + }) + if (result.status !== 0) continue + const output = (result.stdout || "").trim().toLowerCase() + if (output === "true" || output === "1") return true + if (output === "false" || output === "0") return false + } catch { + continue + } + } + } + return false +} + +function isMusl() { + if (platform !== "linux") return false + try { + if (fs.existsSync("/etc/alpine-release")) return true + const result = childProcess.spawnSync("ldd", ["--version"], { encoding: "utf8" }) + return `${result.stdout || ""}${result.stderr || ""}`.toLowerCase().includes("musl") + } catch { + return false + } +} + +function packageNames() { + const baseline = arch === "x64" && !supportsAvx2() + const names = + platform === "linux" + ? isMusl() + ? arch === "x64" + ? baseline + ? [`${base}-baseline-musl`, `${base}-musl`, `${base}-baseline`, base] + : [`${base}-musl`, `${base}-baseline-musl`, base, `${base}-baseline`] + : [`${base}-musl`, base] + : arch === "x64" + ? baseline + ? [`${base}-baseline`, base, `${base}-baseline-musl`, `${base}-musl`] + : [base, `${base}-baseline`, `${base}-musl`, `${base}-baseline-musl`] + : [base, `${base}-musl`] + : arch === "x64" + ? baseline + ? [`${base}-baseline`, base] + : [base, `${base}-baseline`] + : [base] + return names.filter((name) => dependencies[name]) +} + +function copyBinary(source) { + if (!fs.existsSync(source)) throw new Error(`Binary not found at ${source}`) + fs.mkdirSync(path.dirname(targetBinary), { recursive: true }) + if (fs.existsSync(targetBinary)) fs.unlinkSync(targetBinary) + try { + fs.linkSync(source, targetBinary) + } catch { + fs.copyFileSync(source, targetBinary) + } + fs.chmodSync(targetBinary, 0o755) +} + +function resolveBinary(name) { + const packagePath = require.resolve(`${name}/package.json`) + return path.join(path.dirname(packagePath), "bin", sourceBinary) +} + +function installPackage(name) { + const temp = fs.mkdtempSync(path.join(os.tmpdir(), "opencode-install-")) + try { + const result = childProcess.spawnSync( + "npm", + ["install", "--ignore-scripts", "--no-save", "--loglevel=error", "--prefix", temp, `${name}@${dependencies[name]}`], + { stdio: "inherit", windowsHide: true }, + ) + if (result.status !== 0) return false + copyBinary(path.join(temp, "node_modules", name, "bin", sourceBinary)) + return true + } finally { + fs.rmSync(temp, { recursive: true, force: true }) + } +} + +function verifyBinary() { + return ( + childProcess.spawnSync(targetBinary, ["--version"], { + stdio: "ignore", + windowsHide: true, + }).status === 0 + ) +} + +function main() { + const names = packageNames() + for (const name of names) { + try { + copyBinary(resolveBinary(name)) + if (verifyBinary()) return + } catch { + if (installPackage(name) && verifyBinary()) return + } + } + + throw new Error(`Failed to install OpenCode. Try manually installing ${names.map((name) => JSON.stringify(name)).join(" or ")}.`) +} + +try { + main() +} catch (error) { + console.error(error instanceof Error ? error.message : String(error)) + process.exit(1) +} diff --git a/packages/cli/script/publish.ts b/packages/cli/script/publish.ts index 116e5efa32..fd0f5cdb18 100755 --- a/packages/cli/script/publish.ts +++ b/packages/cli/script/publish.ts @@ -18,37 +18,66 @@ async function publish(dir: string, name: string, version: string) { await $`npm publish *.tgz --access public --tag ${Script.channel}`.cwd(dir) } -const binaries: Record = {} -for (const filepath of new Bun.Glob("*/package.json").scanSync({ cwd: "./dist" })) { - const item = await Bun.file(`./dist/${filepath}`).json() - binaries[item.name] = item.version +async function publishDistribution(input: { root: string; name: string; binary: string; packagePrefix: string }) { + const binaries: Record = {} + for (const filepath of new Bun.Glob("*/package.json").scanSync({ cwd: input.root })) { + const item = await Bun.file(`${input.root}/${filepath}`).json() + if (!item.name.startsWith(input.packagePrefix)) continue + binaries[item.name] = item.version + } + console.log(input.name, "binaries", binaries) + const versions = new Set(Object.values(binaries)) + if (versions.size > 1) throw new Error(`Binary package versions do not match for ${input.name}`) + const version = versions.values().next().value + if (!version) throw new Error(`No binary packages found for ${input.name}`) + + await $`mkdir -p ${input.root}/${input.name}/bin` + await $`cp ./script/postinstall.mjs ${input.root}/${input.name}/postinstall.mjs` + await Bun.file(`${input.root}/${input.name}/bin/${input.binary}.exe`).write( + [ + `echo "Error: ${input.name}'s postinstall script was not run." >&2`, + 'echo "" >&2', + 'echo "This occurs when installation scripts are disabled." >&2', + 'echo "Run the package postinstall script or reinstall with scripts enabled." >&2', + "exit 1", + "", + ].join("\n"), + ) + await Bun.file(`${input.root}/${input.name}/package.json`).write( + JSON.stringify( + { + name: input.name, + bin: { [input.binary]: `./bin/${input.binary}.exe` }, + scripts: { postinstall: "node ./postinstall.mjs" }, + version, + license: pkg.license, + repository: { type: "git", url: "git+https://github.com/anomalyco/opencode.git" }, + os: ["darwin", "linux", "win32"], + cpu: ["arm64", "x64"], + optionalDependencies: binaries, + }, + null, + 2, + ), + ) + + await Promise.all( + Object.entries(binaries).map(([name, version]) => + publish(`${input.root}/${name.replace("@opencode-ai/", "")}`, name, version), + ), + ) + await publish(`${input.root}/${input.name}`, input.name, version) } -console.log("binaries", binaries) -const version = Object.values(binaries)[0] -const name = pkg.name -await $`mkdir -p ./dist/${name}/bin` -await $`cp ./bin/opencode2.cjs ./dist/${name}/bin/opencode2` -await Bun.file(`./dist/${name}/package.json`).write( - JSON.stringify( - { - name, - bin: { opencode2: "./bin/opencode2" }, - version, - license: pkg.license, - repository: { type: "git", url: "git+https://github.com/anomalyco/opencode.git" }, - os: ["darwin", "linux", "win32"], - cpu: ["arm64", "x64"], - optionalDependencies: binaries, - }, - null, - 2, - ), -) - -await Promise.all( - Object.entries(binaries).map(([name, version]) => - publish(`./dist/${name.replace("@opencode-ai/", "")}`, name, version), - ), -) -await publish(`./dist/${name}`, name, version) +await publishDistribution({ + root: "./dist", + name: pkg.name, + binary: "opencode2", + packagePrefix: "@opencode-ai/cli-", +}) +await publishDistribution({ + root: "./dist/node", + name: "opencode-node", + binary: "opencode2-node", + packagePrefix: "@opencode-ai/cli-node-", +}) diff --git a/packages/cli/script/service-smoke.ts b/packages/cli/script/service-smoke.ts index c86e9f8280..2a51fc22ff 100644 --- a/packages/cli/script/service-smoke.ts +++ b/packages/cli/script/service-smoke.ts @@ -7,9 +7,10 @@ import fs from "node:fs/promises" import os from "node:os" import path from "node:path" -const target = `cli-${process.platform === "win32" ? "windows" : process.platform}-${process.arch}` -const directory = path.join(import.meta.dir, "..", "dist", target, "bin") -const binary = path.join(directory, `opencode2${process.platform === "win32" ? ".exe" : ""}`) +const nodeBuild = process.argv.includes("--node") +const target = `cli${nodeBuild ? "-node" : ""}-${process.platform === "win32" ? "windows" : process.platform}-${process.arch}` +const directory = path.join(import.meta.dir, "..", "dist", ...(nodeBuild ? ["node"] : []), target, "bin") +const binary = path.join(directory, `opencode2${nodeBuild ? "-node" : ""}${process.platform === "win32" ? ".exe" : ""}`) if (!(await Bun.file(binary).exists())) throw new Error(`Missing compiled CLI in ${directory}`) const root = await fs.mkdtemp(path.join(os.tmpdir(), "opencode-service-smoke-")) diff --git a/packages/cli/src/commands/commands.ts b/packages/cli/src/commands/commands.ts index 89b109c961..771f57f42a 100644 --- a/packages/cli/src/commands/commands.ts +++ b/packages/cli/src/commands/commands.ts @@ -114,6 +114,10 @@ export const Commands = Spec.make(typeof OPENCODE_CLI_NAME === "string" ? OPENCO }), ], }), + Spec.make("plugin", { + description: "Manage plugins", + commands: [Spec.make("list", { description: "List active plugins" })], + }), Spec.make("migrate", { description: "Migrate v1 data to v2" }), Spec.make("mini", { description: "Start the minimal interactive interface", diff --git a/packages/cli/src/commands/handlers/default.ts b/packages/cli/src/commands/handlers/default.ts index 1f1a441571..535003ed1a 100644 --- a/packages/cli/src/commands/handlers/default.ts +++ b/packages/cli/src/commands/handlers/default.ts @@ -1,4 +1,4 @@ -import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder" +import { LayerNode } from "@opencode-ai/core/effect/layer-node" import { Global } from "@opencode-ai/core/global" import { run } from "@opencode-ai/tui" import { Commands } from "../commands" @@ -75,6 +75,6 @@ export default Runtime.handler(Commands, (input) => : Effect.logInfo(message, tags) runFork(effect) }, - }).pipe(Effect.provide(AppNodeBuilder.build(Global.node))) + }).pipe(Effect.provide(LayerNode.compile(Global.node))) }), ) diff --git a/packages/cli/src/commands/handlers/mcp/add.ts b/packages/cli/src/commands/handlers/mcp/add.ts index 695104b3f2..dc582a0e00 100644 --- a/packages/cli/src/commands/handlers/mcp/add.ts +++ b/packages/cli/src/commands/handlers/mcp/add.ts @@ -1,5 +1,6 @@ import { EOL } from "node:os" import path from "node:path" +import { readFile, stat, writeFile } from "node:fs/promises" import { Effect, Option } from "effect" import { applyEdits, modify } from "jsonc-parser" import { Global } from "@opencode-ai/core/global" @@ -35,7 +36,7 @@ export default Runtime.handler( }), ) -async function resolveConfigPath(directory: string) { +export async function resolveConfigPath(directory: string) { const candidates = [ path.join(directory, "opencode.json"), path.join(directory, "opencode.jsonc"), @@ -43,16 +44,24 @@ async function resolveConfigPath(directory: string) { path.join(directory, ".opencode", "opencode.jsonc"), ] for (const candidate of candidates) { - if (await Bun.file(candidate).exists()) return candidate + if ( + await stat(candidate).then( + (info) => info.isFile(), + () => false, + ) + ) + return candidate } return candidates[0] } async function write(configPath: string, name: string, server: unknown) { - const file = Bun.file(configPath) - const text = (await file.exists()) ? await file.text() : "{}" + const text = await readFile(configPath, "utf8").catch((error) => { + if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT") return "{}" + throw error + }) const edits = modify(text, ["mcp", "servers", name], server, { formattingOptions: { tabSize: 2, insertSpaces: true }, }) - await Bun.write(configPath, applyEdits(text, edits)) + await writeFile(configPath, applyEdits(text, edits)) } diff --git a/packages/cli/src/commands/handlers/mini.ts b/packages/cli/src/commands/handlers/mini.ts index e44f7e0b2d..e82b650a06 100644 --- a/packages/cli/src/commands/handlers/mini.ts +++ b/packages/cli/src/commands/handlers/mini.ts @@ -1,7 +1,9 @@ -import { Effect, Option } from "effect" +import { Context, Effect, FileSystem, Option } from "effect" import { Commands } from "../commands" import { Runtime } from "../../framework/runtime" import { ServerConnection } from "../../services/server-connection" +import { Config } from "../../config" +import { resolve } from "@opencode-ai/tui/config" export default Runtime.handler(Commands.commands.mini, (input) => Effect.gen(function* () { @@ -9,9 +11,17 @@ export default Runtime.handler(Commands.commands.mini, (input) => yield* Effect.promise(async () => validateMiniTerminal()) const serverURL = Option.getOrUndefined(input.server) const server = yield* ServerConnection.resolve({ server: serverURL, standalone: input.standalone }) + const config = yield* Config.Service + const resolved = resolve(yield* config.get(), { terminalSuspend: process.platform !== "win32" }) + const fileSystem = yield* FileSystem.FileSystem + const runServicePromise = Effect.runPromiseWith(Context.make(FileSystem.FileSystem, fileSystem)) + const service = server.service yield* Effect.promise(() => runMini({ - server, + server: { + endpoint: server.endpoint, + reconnect: service ? (signal) => runServicePromise(service.reconnect(), { signal }) : undefined, + }, continue: input.continue, session: Option.getOrUndefined(input.session), fork: input.fork, @@ -21,6 +31,7 @@ export default Runtime.handler(Commands.commands.mini, (input) => replay: input.replay, replayLimit: Option.getOrUndefined(input.replayLimit), demo: input.demo, + tuiConfig: resolved, }), ) }), diff --git a/packages/cli/src/commands/handlers/plugin/list.ts b/packages/cli/src/commands/handlers/plugin/list.ts new file mode 100644 index 0000000000..f7f9a258ca --- /dev/null +++ b/packages/cli/src/commands/handlers/plugin/list.ts @@ -0,0 +1,24 @@ +import { EOL } from "node:os" +import { Effect } from "effect" +import { OpenCode } from "@opencode-ai/client" +import { Service } from "@opencode-ai/client/effect/service" +import { Commands } from "../../commands" +import { Runtime } from "../../../framework/runtime" +import { ServiceConfig } from "../../../services/service-config" + +export default Runtime.handler( + Commands.commands.plugin.commands.list, + Effect.fn("cli.plugin.list")(function* () { + const options = yield* ServiceConfig.options() + const found = yield* Service.discover(options) + const endpoint = found ?? (yield* Service.ensure(options)) + const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) }) + const response = yield* Effect.promise(() => client.plugin.list({ location: { directory: process.cwd() } })) + const plugins = response.data.toSorted((a, b) => a.id.localeCompare(b.id)) + if (plugins.length === 0) { + process.stdout.write("No plugins loaded" + EOL) + return + } + process.stdout.write(plugins.map((plugin) => plugin.id).join(EOL) + EOL) + }), +) diff --git a/packages/cli/src/commands/handlers/run.ts b/packages/cli/src/commands/handlers/run.ts index 50fbaa4e2c..74a88e8e72 100644 --- a/packages/cli/src/commands/handlers/run.ts +++ b/packages/cli/src/commands/handlers/run.ts @@ -5,7 +5,7 @@ import { ServerConnection } from "../../services/server-connection" export default Runtime.handler(Commands.commands.run, (input) => Effect.gen(function* () { - const { runNonInteractive } = yield* Effect.promise(() => import("../../mini")) + const { runNonInteractive } = yield* Effect.promise(() => import("../../run/run")) const separator = process.argv.indexOf("--", 2) const server = yield* ServerConnection.resolve({ server: Option.getOrUndefined(input.server), diff --git a/packages/cli/src/commands/handlers/serve.ts b/packages/cli/src/commands/handlers/serve.ts index bd3e0c1217..0e4343f916 100644 --- a/packages/cli/src/commands/handlers/serve.ts +++ b/packages/cli/src/commands/handlers/serve.ts @@ -5,7 +5,7 @@ import { ServerProcess } from "../../server-process" export default Runtime.handler( Commands.commands.serve, - Effect.fn("cli.serve")(function* (input) { + Effect.fnUntraced(function* (input) { if (input.service && input.stdio) return yield* Effect.fail(new Error("--service and --stdio cannot be combined")) return yield* ServerProcess.run({ mode: input.service ? "service" : input.stdio ? "stdio" : "default", diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 9346dbe35f..7ee80846ed 100755 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -7,7 +7,6 @@ import { Runtime } from "./framework/runtime" import { Observability } from "@opencode-ai/core/observability" import { Updater } from "./services/updater" import { InstallationChannel, InstallationVersion, InstallationLocal } from "@opencode-ai/core/installation/version" -import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder" import { LayerNode } from "@opencode-ai/core/effect/layer-node" import { Global } from "@opencode-ai/core/global" import { AppProcess } from "@opencode-ai/core/process" @@ -32,6 +31,9 @@ const Handlers = Runtime.handlers(Commands, { auth: () => import("./commands/handlers/mcp/auth"), logout: () => import("./commands/handlers/mcp/logout"), }, + plugin: { + list: () => import("./commands/handlers/plugin/list"), + }, migrate: () => import("./commands/handlers/migrate"), mini: () => import("./commands/handlers/mini"), run: () => import("./commands/handlers/run"), @@ -58,7 +60,7 @@ Effect.logInfo("cli starting", { Effect.annotateLogs({ role: "cli" }), Effect.provide(Config.layer), Effect.provide(Updater.layer), - Effect.provide(AppNodeBuilder.build(LayerNode.group([Global.node, AppProcess.node, Npm.node]))), + Effect.provide(LayerNode.compile(LayerNode.group([Global.node, AppProcess.node, Npm.node]))), Effect.provide(Observability.layer), Effect.provide(NodeServices.layer), Effect.scoped, diff --git a/packages/cli/src/mini-host.ts b/packages/cli/src/mini-host.ts new file mode 100644 index 0000000000..d410dce09a --- /dev/null +++ b/packages/cli/src/mini-host.ts @@ -0,0 +1,176 @@ +import type { MiniFrontendInput } from "@opencode-ai/tui/mini" +import { createModelPreferenceRepository } from "@opencode-ai/tui/model-preference" +import { Flag } from "@opencode-ai/core/flag/flag" +import { Global } from "@opencode-ai/core/global" +import fs from "node:fs" +import { readFile } from "node:fs/promises" +import path from "node:path" +import { ReadStream } from "node:tty" + +export const INTERACTIVE_INPUT_ERROR = "opencode mini requires a controlling terminal for input" + +export type InteractiveStdin = { + stdin: NodeJS.ReadStream + cleanup(): void +} + +type MiniHost = MiniFrontendInput["host"] + +function preferences(statePath: string): MiniHost["preferences"] { + const repository = createModelPreferenceRepository(path.join(statePath, "model.json")) + return { + async resolveVariant(model) { + if (!model) return + return repository.resolveVariant(model) + }, + async saveVariant(model, variant) { + if (!model) return + await repository.saveVariant(model, variant).catch(() => undefined) + }, + } +} + +function signal(name: "SIGINT" | "SIGUSR2"): MiniHost["signals"]["sigint"] { + return { + subscribe(listener) { + let subscribed = true + process.on(name, listener) + return () => { + if (!subscribed) return + subscribed = false + process.off(name, listener) + } + }, + } +} + +function createTrace( + logPath: string, + diagnostics: { pid: number; cwd: string; argv: string[] }, +): MiniHost["diagnostics"]["trace"] { + if (!process.env.OPENCODE_DIRECT_TRACE) return + const stamp = new Date() + .toISOString() + .replace(/[-:]/g, "") + .replace(/\.\d+Z$/, "Z") + const target = path.join(logPath, "direct", `${stamp}-${diagnostics.pid}.jsonl`) + const text = (data: unknown) => + JSON.stringify(data, (_key, value) => (typeof value === "bigint" ? String(value) : value), 0) + fs.mkdirSync(path.dirname(target), { recursive: true }) + fs.writeFileSync( + path.join(logPath, "direct", "latest.json"), + text({ + time: new Date().toISOString(), + ...diagnostics, + path: target, + }) + "\n", + ) + const trace = { + write(type: string, data?: unknown) { + fs.appendFileSync( + target, + text({ + time: new Date().toISOString(), + pid: diagnostics.pid, + type, + data, + }) + "\n", + ) + }, + } + trace.write("trace.start", { + argv: diagnostics.argv, + cwd: diagnostics.cwd, + path: target, + }) + return trace +} + +function openTerminalStdin(target: string): NodeJS.ReadStream { + return new ReadStream(fs.openSync(target, "r")) +} + +export function resolveInteractiveStdin( + stdin: NodeJS.ReadStream = process.stdin, + open: (target: string) => NodeJS.ReadStream = openTerminalStdin, + platform: NodeJS.Platform = process.platform, +): InteractiveStdin { + if (stdin.isTTY) return { stdin, cleanup() {} } + const target = platform === "win32" ? "CONIN$" : "/dev/tty" + try { + const source = open(target) + let cleaned = false + return { + stdin: source, + cleanup() { + if (cleaned) return + cleaned = true + source.destroy() + }, + } + } catch (error) { + throw new Error(INTERACTIVE_INPUT_ERROR, { cause: error }) + } +} + +/** @internal Exported for owner-local resource cleanup tests. */ +export async function usingInteractiveStdin( + run: (terminal: InteractiveStdin) => Promise, + resolve: () => InteractiveStdin = resolveInteractiveStdin, +) { + const terminal = resolve() + try { + return await run(terminal) + } finally { + terminal.cleanup() + } +} + +/** @internal Exported for owner-local host capability tests. */ +export function createMiniHost(input: { + terminal: InteractiveStdin + directory: string + paths?: { home: string; state: string; log: string } +}): MiniHost { + const paths = input.paths ?? { + home: Global.Path.home, + state: Global.Path.state, + log: Global.Path.log, + } + const diagnostics = { + pid: process.pid, + cwd: input.directory, + argv: process.argv.slice(2), + } + return { + terminal: { stdin: input.terminal.stdin }, + platform: process.platform, + stdout: { + write(value) { + process.stdout.write(value) + }, + }, + files: { + readText: (url) => readFile(new URL(url), "utf8"), + }, + editor: { + async open(options) { + const { openEditor } = await import("@opencode-ai/tui/editor") + return openEditor(options) + }, + }, + paths: { home: paths.home }, + signals: { + sigint: signal("SIGINT"), + sigusr2: signal("SIGUSR2"), + }, + startup: { + showTiming: Flag.OPENCODE_SHOW_TTFD, + now: () => performance.now(), + }, + diagnostics: { + trace: createTrace(paths.log, diagnostics), + }, + preferences: preferences(paths.state), + } +} diff --git a/packages/cli/src/mini.ts b/packages/cli/src/mini.ts new file mode 100644 index 0000000000..035ac485a0 --- /dev/null +++ b/packages/cli/src/mini.ts @@ -0,0 +1,277 @@ +import { Service, type Endpoint } from "@opencode-ai/client/effect/service" +import { ClientError, OpenCode, type OpenCodeClient } from "@opencode-ai/client/promise" +import type { MiniFrontendInput } from "@opencode-ai/tui/mini" +import { setTimeout } from "node:timers/promises" +import { waitForCatalogReady } from "./services/catalog" +import { readStdin } from "./util/io" +import { createMiniHost, INTERACTIVE_INPUT_ERROR, usingInteractiveStdin } from "./mini-host" +import { parseSessionTargetModel, resolveSessionTarget, type SessionTargetPreparation } from "./session-target" + +export type MiniCommandInput = { + server: { + endpoint: Endpoint + reconnect?: (signal: AbortSignal) => Promise + } + continue?: boolean + session?: string + fork?: boolean + model?: string + agent?: string + prompt?: string + replay?: boolean + replayLimit?: number + demo?: boolean + tuiConfig?: MiniFrontendInput["tuiConfig"] +} + +type Model = MiniFrontendInput["model"] + +class MiniInputError extends Error {} + +export async function runMini(input: MiniCommandInput) { + try { + validate(input) + const result = await usingInteractiveStdin(async (terminal) => { + const initialInput = mergeInput(process.stdin.isTTY ? undefined : await readStdin(), input.prompt) + const frontendTask = import("@opencode-ai/tui/mini") + const directory = localDirectory() + const connection = createMiniConnection(input.server) + const sdk = connection.sdk + const requested = parseModel(input.model) + const model = requested ? { providerID: requested.providerID, modelID: requested.id } : undefined + const prepare = prepareTarget(input.agent) + const resolveTarget = async (initial: OpenCodeClient, signal: AbortSignal) => { + const resolved = await resolveMiniTarget({ + sdk: initial, + reconnect: connection.reconnect, + signal, + resolve: (client) => + resolveSessionTarget({ + client, + location: { directory }, + continue: input.continue, + session: input.session, + fork: input.fork, + model: requested, + agent: input.agent, + prepare, + signal, + }).catch((error) => { + if (error instanceof Error && error.message === "Session not found") + throw new MiniInputError(error.message) + throw error + }), + }) + const target = resolved.value + return { + sdk: resolved.sdk, + sessionID: target.session.id, + sessionTitle: target.session.title, + location: target.location, + model: target.model ? { providerID: target.model.providerID, modelID: target.model.id } : undefined, + variant: target.model?.variant, + agent: target.agent, + resume: target.resume, + } + } + const create = ( + client: OpenCodeClient, + next: { + location: { directory: string; workspaceID?: string } + agent: string | undefined + model: Model + variant: string | undefined + }, + signal?: AbortSignal, + ) => + resolveSessionTarget({ + client, + location: { directory: next.location.directory, workspace: next.location.workspaceID }, + agent: next.agent, + model: next.model + ? { providerID: next.model.providerID, id: next.model.modelID, variant: next.variant } + : undefined, + prepare, + signal, + }).then((target) => ({ + sessionID: target.session.id, + sessionTitle: target.session.title, + location: target.location, + model: target.model ? { providerID: target.model.providerID, modelID: target.model.id } : undefined, + variant: target.model?.variant, + agent: target.agent, + resume: false, + })) + const frontend = await frontendTask + return frontend.runMiniFrontend({ + host: createMiniHost({ terminal, directory }), + sdk, + directory, + target: resolveTarget, + reconnect: connection.reconnect, + createSession: create, + agent: input.agent, + model, + variant: requested?.variant, + files: [], + initialInput, + replay: input.replay ?? true, + replayLimit: input.replayLimit, + demo: input.demo, + tuiConfig: input.tuiConfig, + }) + }) + if (result.exitCode !== 0) process.exit(result.exitCode) + } catch (error) { + if (error instanceof MiniInputError || (error instanceof Error && error.message === INTERACTIVE_INPUT_ERROR)) + fail(error.message) + throw error + } +} + +/** @internal Exported for CLI boundary tests. */ +export function createMiniConnection(input: MiniCommandInput["server"]) { + const make = (endpoint: Endpoint) => + OpenCode.make({ + baseUrl: endpoint.url, + headers: Service.headers(endpoint), + }) + const reconnect = input.reconnect + return { + sdk: make(input.endpoint), + reconnect: reconnect + ? async (signal: AbortSignal) => { + const endpoint = await reconnect(signal) + return make(endpoint) + } + : undefined, + } +} + +/** @internal Exported for reconnect lifecycle tests. */ +export async function resolveMiniTarget(input: { + sdk: OpenCodeClient + reconnect?: (signal: AbortSignal) => Promise + signal: AbortSignal + resolve: (sdk: OpenCodeClient) => Promise +}) { + let sdk = input.sdk + while (true) { + try { + return { sdk, value: await input.resolve(sdk) } + } catch (error) { + if (!input.reconnect || !(error instanceof ClientError) || error.reason !== "Transport") throw error + while (true) { + try { + sdk = await input.reconnect(input.signal) + break + } catch (resolveError) { + if (input.signal.aborted) throw resolveError + await setTimeout(250, undefined, { signal: input.signal }) + } + } + } + } +} + +export function validateMiniTerminal() { + if (!process.stdout.isTTY) fail("opencode mini requires a TTY stdout") +} + +/** @internal Exported for testing. */ +export function mergeInput(piped: string | undefined, prompt: string | undefined) { + if (!prompt) return piped || undefined + if (!piped) return prompt + return piped + "\n" + prompt +} + +function validate(input: MiniCommandInput) { + validateMiniTerminal() + if (input.replayLimit !== undefined && (!Number.isInteger(input.replayLimit) || input.replayLimit <= 0)) { + fail("--replay-limit must be a positive integer") + } + if (input.fork && !input.continue && !input.session) fail("--fork requires --continue or --session") +} + +function localDirectory(): string { + const root = process.env.PWD ?? process.cwd() + try { + process.chdir(root) + return process.cwd() + } catch { + throw new MiniInputError(`Failed to change directory to ${root}`) + } +} + +function parseModel(value?: string) { + try { + return parseSessionTargetModel(value) + } catch { + throw new MiniInputError("--model must use the format provider/model[#variant]") + } +} + +function prepareTarget(requestedAgent?: string): SessionTargetPreparation { + return async (input) => { + if (input.model) + await waitForCatalogReady({ + sdk: input.client, + directory: input.location.directory, + workspace: input.location.workspaceID, + model: { providerID: input.model.providerID, modelID: input.model.id }, + signal: input.signal, + }) + return { + model: input.model, + agent: requestedAgent + ? await validateAgent( + input.client, + input.location.directory, + input.location.workspaceID, + requestedAgent, + input.signal, + ) + : input.agent, + } + } +} + +async function validateAgent( + sdk: OpenCodeClient, + directory: string, + workspace: string | undefined, + name?: string, + signal?: AbortSignal, +) { + if (!name) return + const deadline = Date.now() + 5_000 + let agents: Awaited> | undefined + while (Date.now() < deadline && !signal?.aborted) { + agents = await sdk.agent.list({ location: { directory, workspace } }, { signal }).catch((error) => { + if (signal && error instanceof ClientError && error.reason === "Transport") throw error + return undefined + }) + const agent = agents?.data.find((item) => item.id === name) + if (agent?.mode === "subagent") { + warning(`agent "${name}" is a subagent, not a primary agent. Falling back to default agent`) + return + } + if (agent) return name + await setTimeout(25, undefined, { signal }).catch(() => {}) + } + if (signal?.aborted) return + if (!agents) { + warning("failed to list agents. Falling back to default agent") + return + } + warning(`agent "${name}" not found. Falling back to default agent`) +} + +function warning(message: string) { + process.stderr.write(`\x1b[93m\x1b[1m!\x1b[0m ${message}\n`) +} + +function fail(message: string): never { + process.stderr.write(`\x1b[91m\x1b[1mError: \x1b[0m${message}\n`) + process.exit(1) +} diff --git a/packages/cli/src/mini/catalog.shared.ts b/packages/cli/src/mini/catalog.shared.ts deleted file mode 100644 index 0868d3a94b..0000000000 --- a/packages/cli/src/mini/catalog.shared.ts +++ /dev/null @@ -1,159 +0,0 @@ -import type { - AgentListOutput, - CommandListOutput, - ModelListOutput, - OpenCodeClient, - ProviderListOutput, - SkillListOutput, -} from "@opencode-ai/client/promise" -import type { RunAgent, RunCommand, RunProvider, RunReference } from "./types" - -type CurrentAgent = AgentListOutput["data"][number] -type CurrentCommand = CommandListOutput["data"][number] -type CurrentSkill = SkillListOutput["data"][number] -type CurrentProvider = ProviderListOutput["data"][number] -type CurrentModel = ModelListOutput["data"][number] - -function location(directory: string, workspace?: string) { - return { - location: { - directory, - workspace, - }, - } -} - -function defaultCost(model: CurrentModel) { - const picked = model.cost.find((cost) => cost.tier === undefined) ?? model.cost[0] - if (!picked) { - return undefined - } - - return { - ...picked, - input: model.cost.every((cost) => cost.input === 0) ? 0 : picked.input, - } -} - -export function runAgent(input: CurrentAgent): RunAgent { - return { - id: input.id, - name: input.name, - description: input.description, - mode: input.mode, - hidden: input.hidden, - } -} - -export function runCommand(input: CurrentCommand): RunCommand { - return { - name: input.name, - description: input.description, - } -} - -export function runSkill(input: CurrentSkill): RunCommand { - return { - name: input.id, - description: input.description, - source: "skill", - } -} - -export function runProviders(providers: CurrentProvider[], models: CurrentModel[]): RunProvider[] { - const grouped = new Map() - - for (const provider of providers) { - grouped.set(provider.id, { - id: provider.id, - name: provider.name, - models: {}, - }) - } - - for (const model of models) { - const provider = grouped.get(model.providerID) ?? { - id: model.providerID, - name: model.providerID, - models: {}, - } - provider.models[model.id] = { - id: model.id, - providerID: model.providerID, - name: model.name, - capabilities: model.capabilities, - cost: defaultCost(model), - limit: model.limit, - status: model.status, - variants: Object.fromEntries((model.variants ?? []).map((variant) => [variant.id, {}])), - } - grouped.set(provider.id, provider) - } - - return [...grouped.values()] -} - -// A location boots its plugins in a deferred background batch after the layer -// is built, so first-turn model resolution can observe empty catalog state. -// For explicit --model flows, wait for that exact ref to appear before prompt -// admission. On timeout, return and let the real execution error surface. -export async function waitForCatalogReady(input: { - sdk: OpenCodeClient - directory: string - workspace?: string - model: { providerID: string; modelID: string } - timeoutMs?: number -}) { - const deadline = Date.now() + (input.timeoutMs ?? 5_000) - while (Date.now() < deadline) { - const models = await input.sdk.model - .list(location(input.directory, input.workspace)) - .then((result) => result.data) - .catch(() => undefined) - if (models?.some((model) => model.providerID === input.model.providerID && model.id === input.model.modelID)) return - await new Promise((resolve) => setTimeout(resolve, 25)) - } -} - -export async function waitForDefaultModel(input: { - sdk: OpenCodeClient - directory: string - timeoutMs?: number - active?: () => boolean -}): Promise<{ providerID: string; modelID: string } | undefined> { - const deadline = Date.now() + (input.timeoutMs ?? 5_000) - while (Date.now() < deadline && (input.active?.() ?? true)) { - const model = await input.sdk.model - .default(location(input.directory)) - .then((result) => result.data) - .catch(() => undefined) - if (model) return { providerID: model.providerID, modelID: model.id } - await new Promise((resolve) => setTimeout(resolve, 25)) - } -} - -export async function loadRunAgents(sdk: OpenCodeClient, directory: string): Promise { - const result = await sdk.agent.list(location(directory)) - return result.data.map(runAgent) -} - -export async function loadRunCommands(sdk: OpenCodeClient, directory: string): Promise { - const [commands, skills] = await Promise.all([ - sdk.command.list(location(directory)), - sdk.skill.list(location(directory)), - ]) - return [...commands.data.map(runCommand), ...skills.data.filter((skill) => skill.slash !== false).map(runSkill)] -} - -export async function loadRunReferences(sdk: OpenCodeClient, directory: string): Promise { - const result = await sdk.reference.list(location(directory)) - return result.data.filter((reference) => !reference.hidden) -} - -export async function loadRunProviders(sdk: OpenCodeClient, directory: string): Promise { - const [providers, models] = await Promise.all([ - sdk.provider.list(location(directory)), - sdk.model.list(location(directory)), - ]) - return runProviders([...providers.data], [...models.data]) -} diff --git a/packages/cli/src/mini/footer.question.tsx b/packages/cli/src/mini/footer.question.tsx deleted file mode 100644 index f6014c1168..0000000000 --- a/packages/cli/src/mini/footer.question.tsx +++ /dev/null @@ -1,573 +0,0 @@ -// Question UI body for the direct-mode footer. -// -// Renders inside the footer when the reducer pushes a FooterView of type -// "question". Supports single-question and multi-question flows: -// -// Single question: options list with up/down selection, digit shortcuts, -// and optional custom text input. -// -// Multi-question: tabbed interface where each question is a tab, plus a -// final "Confirm" tab that shows all answers for review. Tab/shift-tab -// or left/right to navigate between questions. -// -// All state logic lives in question.shared.ts as a pure state machine. -// This component just renders it and dispatches keyboard events. -/** @jsxImportSource @opentui/solid */ -import type { TextareaRenderable } from "@opentui/core" -import { useKeyboard, useTerminalDimensions } from "@opentui/solid" -import { For, Show, createEffect, createMemo, createSignal } from "solid-js" -import type { QuestionV2Request } from "@opencode-ai/client/promise" -import { - createQuestionBodyState, - questionConfirm, - questionCustom, - questionInfo, - questionInput, - questionMove, - questionOther, - questionPicked, - questionReject, - questionSave, - questionSelect, - questionSetEditing, - questionSetSelected, - questionSetSubmitting, - questionSetTab, - questionSingle, - questionStoreCustom, - questionSubmit, - questionSync, - questionTabs, - questionTotal, -} from "./question.shared" -import { footerWidthPolicy } from "./footer.width" -import type { RunFooterTheme } from "./theme" -import type { QuestionReject, QuestionReply } from "./types" - -export function RunQuestionBody(props: { - request: QuestionV2Request - theme: RunFooterTheme - onReply: (input: QuestionReply) => void | Promise - onReject: (input: QuestionReject) => void | Promise -}) { - const dims = useTerminalDimensions() - const [state, setState] = createSignal(createQuestionBodyState(props.request.id)) - const single = createMemo(() => questionSingle(props.request)) - const confirm = createMemo(() => questionConfirm(props.request, state())) - const info = createMemo(() => questionInfo(props.request, state())) - const input = createMemo(() => questionInput(state())) - const other = createMemo(() => questionOther(props.request, state())) - const picked = createMemo(() => questionPicked(state())) - const disabled = createMemo(() => state().submitting) - const narrow = createMemo(() => footerWidthPolicy(dims().width).dialog.narrow) - const verb = createMemo(() => { - if (confirm()) { - return "submit" - } - - if (info()?.multiple) { - return "toggle" - } - - if (single()) { - return "submit" - } - - return "confirm" - }) - let area: TextareaRenderable | undefined - - createEffect(() => { - setState((prev) => questionSync(prev, props.request.id)) - }) - - const setTab = (tab: number) => { - setState((prev) => questionSetTab(prev, tab)) - } - - const move = (dir: -1 | 1) => { - setState((prev) => questionMove(prev, props.request, dir)) - } - - const beginReply = async (input: QuestionReply) => { - setState((prev) => questionSetSubmitting(prev, true)) - - try { - await props.onReply(input) - } catch { - setState((prev) => questionSetSubmitting(prev, false)) - } - } - - const beginReject = async (input: QuestionReject) => { - setState((prev) => questionSetSubmitting(prev, true)) - - try { - await props.onReject(input) - } catch { - setState((prev) => questionSetSubmitting(prev, false)) - } - } - - const saveCustom = () => { - const cur = state() - const next = questionSave(cur, props.request) - if (next.state !== cur) { - setState(next.state) - } - - if (!next.reply) { - return - } - - void beginReply(next.reply) - } - - const choose = (selected: number) => { - const base = state() - const cur = questionSetSelected(base, selected) - const next = questionSelect(cur, props.request) - if (next.state !== base) { - setState(next.state) - } - - if (!next.reply) { - return - } - - void beginReply(next.reply) - } - - const mark = (selected: number) => { - setState((prev) => questionSetSelected(prev, selected)) - } - - const select = () => { - const cur = state() - const next = questionSelect(cur, props.request) - if (next.state !== cur) { - setState(next.state) - } - - if (!next.reply) { - return - } - - void beginReply(next.reply) - } - - const submit = () => { - void beginReply(questionSubmit(props.request, state())) - } - - const reject = () => { - void beginReject(questionReject(props.request)) - } - - useKeyboard((event) => { - const cur = state() - if (cur.submitting) { - event.preventDefault() - return - } - - if (cur.editing) { - if (event.name === "escape") { - setState((prev) => questionSetEditing(prev, false)) - event.preventDefault() - return - } - - return - } - - if (!single() && (event.name === "left" || event.name === "h")) { - setTab((cur.tab - 1 + questionTabs(props.request)) % questionTabs(props.request)) - event.preventDefault() - return - } - - if (!single() && (event.name === "right" || event.name === "l")) { - setTab((cur.tab + 1) % questionTabs(props.request)) - event.preventDefault() - return - } - - if (!single() && event.name === "tab") { - const dir = event.shift ? -1 : 1 - setTab((cur.tab + dir + questionTabs(props.request)) % questionTabs(props.request)) - event.preventDefault() - return - } - - if (questionConfirm(props.request, cur)) { - if (event.name === "return") { - submit() - event.preventDefault() - return - } - - if (event.name === "escape") { - reject() - event.preventDefault() - } - return - } - - const total = questionTotal(props.request, cur) - const max = Math.min(total, 9) - const digit = Number(event.name) - if (!Number.isNaN(digit) && digit >= 1 && digit <= max) { - choose(digit - 1) - event.preventDefault() - return - } - - if (event.name === "up" || event.name === "k") { - move(-1) - event.preventDefault() - return - } - - if (event.name === "down" || event.name === "j") { - move(1) - event.preventDefault() - return - } - - if (event.name === "return") { - select() - event.preventDefault() - return - } - - if (event.name === "escape") { - reject() - event.preventDefault() - } - }) - - createEffect(() => { - if (!state().editing || !area || area.isDestroyed) { - return - } - - if (area.plainText !== input()) { - area.setText(input()) - area.cursorOffset = input().length - } - - queueMicrotask(() => { - if (!area || area.isDestroyed || !state().editing) { - return - } - - area.focus() - area.cursorOffset = area.plainText.length - }) - }) - - return ( - - - - - - {(item, index) => { - const active = () => state().tab === index() - const answered = () => (state().answers[index()]?.length ?? 0) > 0 - return ( - { - if (!disabled()) setTab(index()) - }} - > - - {item.header} - - - ) - }} - - { - if (!disabled()) setTab(props.request.questions.length) - }} - > - Confirm - - - - - - - - - Review - - - {(item, index) => { - const value = () => state().answers[index()]?.join(", ") ?? "" - const answered = () => Boolean(value()) - return ( - - - {item.header}:{" "} - - {answered() ? value() : "(not answered)"} - - - - ) - }} - - - - - } - > - - - - {info()?.question} - {info()?.multiple ? " (select all that apply)" : ""} - - - - - - - - {(item, index) => { - const active = () => state().selected === index() - const hit = () => state().answers[state().tab]?.includes(item.label) ?? false - return ( - { - if (!disabled()) { - mark(index()) - } - }} - onMouseDown={() => { - if (!disabled()) { - mark(index()) - } - }} - onMouseUp={() => { - if (!disabled()) { - choose(index()) - } - }} - > - - - {`${index() + 1}.`} - - - - {info()?.multiple ? `[${hit() ? "✓" : " "}] ${item.label}` : item.label} - - - - {hit() ? " ✓" : ""} - - - - - {item.description} - - - - ) - }} - - - - { - if (!disabled()) { - mark(info()?.options.length ?? 0) - } - }} - onMouseDown={() => { - if (!disabled()) { - mark(info()?.options.length ?? 0) - } - }} - onMouseUp={() => { - if (!disabled()) { - choose(info()?.options.length ?? 0) - } - }} - > - - - {`${(info()?.options.length ?? 0) + 1}.`} - - - - {info()?.multiple - ? `[${picked() ? "✓" : " "}] Type your own answer` - : "Type your own answer"} - - - - {picked() ? " ✓" : ""} - - - - - - {input()} - - - - } - > - -