Skip to content

Feature/multi runtime#6

Merged
AustinKelsay merged 19 commits intomainfrom
feature/multi-runtime
Feb 10, 2026
Merged

Feature/multi runtime#6
AustinKelsay merged 19 commits intomainfrom
feature/multi-runtime

Conversation

@AustinKelsay
Copy link
Copy Markdown
Owner

@AustinKelsay AustinKelsay commented Feb 8, 2026

Summary by CodeRabbit

  • New Features

    • Multi‑runtime support: run, manage and view benchmarks per runtime (e.g., Ollama, vLLM)
    • Managed vLLM lifecycle: start/stop local vLLM (Docker Compose) with optional OrbStack orchestration
  • Enhancements

    • Model aliasing to map models across runtimes
    • Dashboard: runtime column/tab, runtime‑aware charts, tables and drilldowns
    • CLI: --runtimes and vLLM management options; improved compare output
  • Documentation

    • New multi‑runtime MVP and vLLM/OrbStack setup guides and updated architecture docs

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 8, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR introduces a runtime-first architecture: adds a distinct "runtime" dimension (ollama, vllm) to the benchmark matrix (runtime × harness × model × test × passType), implements runtime adapters and discovery, updates harnesses to be runtime-aware, adds model-aliasing and managed vLLM lifecycle, updates schemas to 0.2.1, and wires runtime support through the runner, CLI, tests, dashboard, and docs.

Changes

Cohort / File(s) Summary
Runtime infra & lifecycle
src/runtimes/...
src/runtimes/runtime.ts, src/runtimes/ollama-runtime.ts, src/runtimes/vllm-runtime.ts, src/runtimes/discovery.ts, src/runtimes/index.ts, src/runtimes/vllm-lifecycle.ts
New runtime abstraction and types; Ollama & vLLM runtime implementations; discovery utilities; createRuntime factory; managed vLLM lifecycle (docker-compose / optional OrbStack).
Harnesses (runtime-aware)
src/harnesses/...
src/harnesses/harness.ts, src/harnesses/direct-adapter.ts, src/harnesses/goose-adapter.ts, src/harnesses/opencode-adapter.ts, src/harnesses/discovery.ts, src/harnesses/index.ts, src/harnesses/*output.ts, src/harnesses/opencode-*
Decoupled harnesses from Ollama; added direct HTTP harness; goose/opencode adapted to runtime-driven flows; output normalization, config helpers, discovery updated; old ollama-adapter removed.
Runner & plan building
src/runner/...
src/runner/index.ts, src/runner/plan-builder.ts, src/runner/item-executor.ts
Plan & execution refactored to iterate per-runtime; MatrixItem now includes runtime/modelAlias; per-runtime model discovery, runtime-aware timeouts, unload logic, and optional managed vLLM start/stop.
Schemas & types
src/schemas/...
src/schemas/common.schema.ts, src/schemas/config.schema.ts, src/schemas/plan.schema.ts, src/schemas/result.schema.ts, src/schemas/model-alias.schema.ts, src/schemas/index.ts
Schema bump to 0.2.1; added RuntimeNameSchema and runtime fields to MatrixItem/Result; model-alias schemas; vllmBaseUrl and ManagedVllm config.
Model aliasing & CLI
src/lib/model-aliases.ts, src/cli/run-command.ts, package.json
New model-alias loader/inline parser/merge utilities; CLI options for runtimes, model-config/alias, vllm management and OrbStack; package scripts for runtime runs and compare.
HTTP clients
src/lib/ollama-client.ts, src/lib/openai-compat-client.ts
New Ollama NDJSON client and OpenAI-compatible SSE client with timeout handling and exported generate helpers used by harnesses.
Dashboard runtime support
apps/dashboard/src/...
components/charts/composite-score-chart.tsx, components/compare/compare-table.tsx, components/run-detail/..., src/lib/aggregations*.ts, src/lib/types.ts, src/lib/tooltip-content.ts
Dashboard: new runtime column/views and "By Runtime" tabs; compare and run-detail updated to surface runtime; aggregations split into core/tooling/compare and extended to support groupByRuntime and composite metrics; types updated to include runtime/modelAlias.
Aggregation modules
apps/dashboard/src/lib/aggregations-core.ts, aggregations-tooling.ts, aggregations-compare.ts, aggregations.ts
Split aggregations into core/tooling/compare modules; top-level aggregations.ts re-exports them; many aggregation functions added (groupByRuntime, computeCompositeMetrics, compareRuns).
vLLM local setup & docs
docker/vllm/docker-compose.yml, docker/vllm/README.md, llm/implementation/vllm-orbstack-setup.md
Added docker-compose and docs for local CPU vLLM (macOS/arm64) and OrbStack integration; documented managed vLLM lifecycle.
Docs & project layout
README.md, llm/implementation/*, llm/project/*, AGENTS.md, CLAUDE.md, llm/context/*
Comprehensive docs updates to reflect runtime-first architecture, discovery, MVP notes, implementation doc added, and new src/runtimes layout.
Tests
test/*
Updated tests to include runtime field and direct-adapter usage; added harness-compatibility, vllm-runtime, opencode-model tests; schema tests updated to new shapes.
Utilities & tooling
src/lib/*, apps/dashboard/src/lib/*, apps/dashboard/vite.config.ts
New utilities: model-aliases, runtime clients, opencode helpers, output normalizers; dashboard dev server middleware improved; many smaller refactors.
Data & snapshots
models.json, models.example.json, results/index.json
Added model mapping JSON files and refreshed results/index.json with new run records containing runtime metadata.
Formatting & UI tweaks
apps/dashboard/src/components/ui/*, many dashboard files
Widespread formatting, import-order cleanup, component refactors, and minor behavior/typing tweaks (explicit exports, useCallback).
Misc
.gitignore, package.json, biome.json
Updated .gitignore to ignore results/* (preserve index.json), added scripts, formatting/manifest updates.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant CLI as CLI/Config
    participant Discovery
    participant RuntimeMgr as Runtime Manager
    participant Runtime as Runtime (Ollama/vLLM)
    participant Harness
    participant Scorer
    participant Dashboard

    User->>CLI: run --runtimes ollama,vllm
    CLI->>Discovery: discoverRuntimes(config)
    Discovery->>Runtime: ping()
    Runtime-->>Discovery: available?
    Discovery-->>CLI: [ollama, vllm]

    CLI->>RuntimeMgr: listModels(runtime)
    RuntimeMgr->>Runtime: listModels()
    Runtime-->>RuntimeMgr: [models]

    CLI->>CLI: build matrix (runtime × harness × model × test × passType)

    loop Each matrix item
        CLI->>RuntimeMgr: createRuntime(name, config)
        RuntimeMgr->>Runtime: init(baseUrl)
        Runtime-->>RuntimeMgr: ready

        CLI->>Harness: createHarness(name)
        Harness-->>CLI: ready

        CLI->>Harness: generate(prompt, { runtime })
        Harness->>Runtime: HTTP call (runtime.baseUrl)
        Runtime-->>Harness: output + tokens
        Harness-->>CLI: GenerateResult

        CLI->>Scorer: score(output)
        Scorer-->>CLI: AutomatedScore
    end

    CLI->>Dashboard: write run results (include runtime)
    Dashboard->>Dashboard: aggregate by runtime
    Dashboard-->>User: render runtime-aware charts/tables
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

Poem

🐰 I hopped through runtimes, two by two,
Ollama, vLLM — now broader view,
Prompts go direct, harnesses aware,
Docker hums, models load with care,
Dashboard blooms in runtime's light — hooray!

🚥 Pre-merge checks | ✅ 1 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 62.11% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'Feature/multi runtime' is vague and generic, using non-descriptive terms that don't clearly convey the scope or main objectives of this large, multi-faceted changeset. Provide a more descriptive title that captures the primary architectural change, such as 'Introduce runtime abstraction layer with Ollama and vLLM support' or 'Refactor harness architecture to separate runtimes from harnesses'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/multi-runtime

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 14

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (6)
src/harnesses/goose-adapter.ts (2)

30-235: 🛠️ Refactor suggestion | 🟠 Major

Split Goose parsing helpers to keep the file under 500 lines.
This file now exceeds the 500-line cap; consider moving normalization/extraction helpers into a small src/harnesses/goose-output.ts (or similar) to keep responsibilities separated.

As per coding guidelines: "Keep files under 500 lines; split aggressively by responsibility."


211-289: ⚠️ Potential issue | 🟠 Major

Add Zod validation for Goose JSON output.

Goose CLI output is a boundary input; it's parsed and then cast without schema validation. Define a GoosePayloadSchema using Zod and replace the unsafe type assertion in parseGooseJsonPayload with safeParse, returning only validated data.

Per guidelines: "Treat all boundary inputs (CLI args, env, JSON files, HTTP responses) as 'unknown' and parse immediately with Zod."

Example approach
 function parseGooseJsonPayload(raw: string): unknown | null {
   const trimmed = raw.trim();
   if (!trimmed) return null;
@@ 
   for (const candidate of candidates) {
     try {
-      return JSON.parse(candidate) as unknown;
+      const parsed = JSON.parse(candidate) as unknown;
+      const result = GoosePayloadSchema.safeParse(parsed);
+      if (result.success) {
+        return result.data;
+      }
     } catch {
       // Continue trying other candidate slices.
     }

Import Zod at the top and define the schema for the expected Goose message structure.

apps/dashboard/src/components/run-detail/matrix-table.tsx (1)

1-26: ⚠️ Potential issue | 🟡 Minor

Add header details and TSDoc for the exported component.
The file header should document purpose, exports, and invariants, and the exported MatrixTable function needs TSDoc with params/returns/throws.

📝 Suggested doc additions
 /**
  * Purpose: Matrix table component for displaying run items.
  * Shows all matrix items with status, model, harness, test, scores, and timing.
+ * Exports: MatrixTable
+ * Invariants: items are already validated and include runtime/harness/model/test/passType fields.
  */
@@
-export function MatrixTable({ items, onRowClick }: MatrixTableProps) {
+/**
+ * Render the matrix table for a run.
+ *
+ * `@param` items - Matrix items to display
+ * `@param` onRowClick - Optional row click handler
+ * `@returns` Table markup for matrix items
+ * `@throws` {Error} Never directly
+ */
+export function MatrixTable({ items, onRowClick }: MatrixTableProps) {
As per coding guidelines: "Every file must start with a descriptive header describing purpose, exports, and invariants" and "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)."
apps/dashboard/src/lib/aggregations.ts (1)

106-116: ⚠️ Potential issue | 🟡 Minor

Update groupByModelHarness docs to include runtime.

Line 115 now builds keys as runtime / model / harness, but the doc still says “model + harness”.

✍️ Suggested doc fix
-/**
- * Groups items by combined model + harness name.
- * `@param` items - Matrix items
- * `@returns` Map keyed by "model · harness"
- */
+/**
+ * Groups items by combined runtime + model + harness name.
+ * `@param` items - Matrix items
+ * `@returns` Map keyed by "runtime / model / harness"
+ */
llm/project/design-rules.md (1)

29-34: ⚠️ Potential issue | 🟡 Minor

Include runtime in the naming-consistency note.

Line 34 mentions model/harness/test/passType but runtime is now first-class.

✍️ Suggested edit
-  - keep naming consistent everywhere (model/harness/test/passType)
+  - keep naming consistent everywhere (runtime/model/harness/test/passType)
apps/dashboard/src/components/run-detail/dimension-detail-dialog.tsx (1)

350-356: ⚠️ Potential issue | 🟡 Minor

Add TSDoc for the exported dialog component.

Exported functions in this repo must include TSDoc/JSDoc with purpose, params, returns, and throws.

📚 Suggested doc block
+/**
+ * Renders the dimension detail dialog with summary, breakdowns, and item list.
+ *
+ * `@param` props - Dialog props including dimension, name, items, and open state.
+ * `@returns` The dialog JSX, or null when `name` is missing.
+ * `@throws` {Error} Never.
+ */
 export function DimensionDetailDialog({
   dimension,
   name,
   items,
   open,
   onOpenChange,
 }: DimensionDetailDialogProps) {

As per coding guidelines: “All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws).”

🤖 Fix all issues with AI agents
In `@apps/dashboard/src/lib/aggregations.ts`:
- Around line 64-76: Update the JSDoc for the exported function groupByRuntime
to include `@param` and `@returns` tags: add an `@param` describing the items
parameter (items: MatrixItemResult[] — array of items to group by runtime) and
an `@returns` describing the Map<string, MatrixItemResult[]> result (a Map keyed
by runtime name with arrays of MatrixItemResult). Keep the existing brief
purpose line, and include `@throws` if the function can throw (otherwise omit) so
the doc meets the project's TSDoc/JSDoc requirements.

In `@llm/project/project-rules.md`:
- Line 16: Update the documentation line that lists runtime adapters to include
vLLM alongside Ollama: edit the entry mentioning `src/runtimes/` to reference
both "Ollama" and "vLLM" (or similar phrasing), and ensure it aligns with the
implemented `vllm-runtime` (see `src/runtimes/vllm-runtime.ts`) and the
`RUNTIME_NAMES` constant so the docs reflect the actual supported runtimes.

In `@models.example.json`:
- Around line 6-9: The vLLM reference for the model key "qwen3-4b" is incorrect:
the "vllm" value currently points to an MLX-format package
("mlx-community/Qwen3-4B-Instruct-4bit") which vLLM cannot load; update the
"vllm" entry for "qwen3-4b" to a vLLM-compatible HuggingFace path (e.g.,
"Qwen/Qwen3-4B-Instruct") or to a compatible quantized format
(AWQ/GPTQ/bitsandbytes/GGUF) so vLLM can load it correctly. Ensure you only
change the "vllm" field for the "qwen3-4b" object and keep the "ollama" entry
("qwen3:4b") untouched.

In `@models.json`:
- Around line 2-4: The mapping for "qwen3-8b" is inconsistent: the vLLM target
"Qwen/Qwen2.5-14B-Instruct" is a 14B model while the id implies 8B; either
update the vllm value to an 8B variant (e.g., replace
"Qwen/Qwen2.5-14B-Instruct" with the correct 8B model name) or rename the key
"qwen3-8b" to reflect the 14B target, making sure to keep the "ollama" and
"vllm" entries coherent (check the "qwen3-8b" key, its "ollama" value, and the
"vllm" value when making the change).

In `@src/harnesses/goose-adapter.ts`:
- Around line 294-299: The JSDoc for the exported function createGooseAdapter is
missing a `@throws` tag; update the docblock above export function
createGooseAdapter(): Harness to include a `@throws` entry describing the error
conditions the function may raise (for example initialization/config or
resource-creation failures) and the type of the thrown error (e.g., Error), so
consumers know what exceptions to handle when calling createGooseAdapter.

In `@src/harnesses/harness.ts`:
- Around line 120-125: normalizeHarnessName currently casts any string to
HarnessName without validation; update it to validate input against
LEGACY_HARNESS_ALIAS and the canonical set (HARNESS_NAMES) and throw a clear
error on invalid inputs instead of returning an unsafe cast. Locate
normalizeHarnessName and change its logic to: if name equals
LEGACY_HARNESS_ALIAS return "direct"; else if name is included in HARNESS_NAMES
return name as HarnessName; otherwise throw a descriptive Error (e.g., `Invalid
harness name: ${name}`) so callers receive a programmer/config error rather than
a silent invalid value.

In `@src/lib/ollama-client.ts`:
- Around line 84-101: The streaming loop must buffer partial NDJSON lines and
validate each complete line with Zod instead of blindly JSON.parse; replace the
per-chunk parse in the reader loop (symbols: decoder, reader, output,
promptTokens, completionTokens) with a buffer string that appends
decoder.decode(value, {stream:true}), split complete lines on "\n", keep any
trailing partial line in the buffer for the next iteration, and for each
complete line parse it to JSON then validate against a Zod schema (e.g., create
an OllamaStreamSchema with optional fields response, done, prompt_eval_count,
eval_count) before using the fields; update promptTokens and completionTokens
only when the schema result has non-undefined values (use explicit !== undefined
checks so zero values are preserved) and handle Zod/parse errors by skipping or
logging the invalid line rather than crashing.

In `@src/lib/openai-compat-client.ts`:
- Around line 111-133: The SSE chunk handling currently does an unchecked
JSON.parse into ChatCompletionChunk; replace that cast with runtime Zod
validation: create a ChatCompletionChunkSchema (or equivalent) using zod that
matches the expected shape (choices[0].delta.content optional,
usage.prompt_tokens and usage.completion_tokens optional), then inside the try
block parse the raw data and call ChatCompletionChunkSchema.safeParse(parsed)
(or parse with try/catch) and only if validation succeeds update output,
promptTokens and completionTokens; if validation fails, skip the chunk and
optionally log/debug the validation error so malformed/attacker-controlled SSE
chunks cannot corrupt state.

In `@src/runner/plan-builder.ts`:
- Line 318: Replace the hardcoded schemaVersion "0.2.0" in plan-builder.ts with
the shared constant: import SCHEMA_VERSION from the schemas module (same module
used by src/runner/index.ts) and use that constant where schemaVersion is
assigned (the object or variable that currently contains schemaVersion:
"0.2.0"); update the top of the file to add the import for SCHEMA_VERSION from
src/schemas/common.schema.ts and replace the literal with SCHEMA_VERSION so the
file uses the single source of truth.

In `@src/runtimes/vllm-runtime.ts`:
- Around line 120-151: Replace console.debug calls in the ping() method with the
project Pino logger (e.g., logger.debug) and emit structured logs: when
healthResponse or modelsResponse are non-ok use logger.debug with an object like
{ status: healthResponse.status, url: `${baseUrl}/health` } and when catching
errors log the error object (e.g., logger.debug({ err: error }, 'vLLM /health
failed') or similar). Ensure the file imports/uses the shared Pino instance (or
the existing logger variable) and preserve existing messages and behavior in the
fallback to `${baseUrl}/v1/models` while replacing all console.debug occurrences
in ping().

In `@src/schemas/config.schema.ts`:
- Around line 10-18: BenchConfigSchema currently lacks a version marker; add a
schemaVersion property near the top of the z.object inside BenchConfigSchema
(before runtimes) to track schema versions. Add schemaVersion:
z.number().default(1) (or z.string() if you prefer string versions) as the first
property in BenchConfigSchema so new configs get a default version and existing
code can rely on an explicit version field.

In `@src/schemas/model-alias.schema.ts`:
- Around line 1-16: The file header for the model-alias schema is missing the
required "invariants" section; update the top-of-file comment to include a brief
invariants list (e.g., keys are canonical model names, values map runtime
identifier strings, values must be non-empty strings, and mapping is one-to-one
per runtime) and mention the exported symbols ModelAliasMapSchema and
ModelAliasMap; ensure the comment block directly above the module
exports/docstrings includes Purpose, Exports, and Invariants so readers and
linters can verify expectations for ModelAliasMapSchema and ModelAliasMap.

In `@src/schemas/plan.schema.ts`:
- Around line 65-69: The plan schema's config object validates vllmBaseUrl as
z.string() but should match BenchConfigSchema by using z.string().url(); update
the config object in src/schemas/plan.schema.ts to change the vllmBaseUrl
validator from z.string() to z.string().url(), keeping other fields
(ollamaBaseUrl, generateTimeoutMs, passTypes) unchanged so plan validation
aligns with BenchConfigSchema and enforces a proper URL format.

In `@test/harness-compatibility.test.ts`:
- Around line 1-3: Update the existing top-of-file comment block (the /* ... */
header) to include explicit "Exports" and "Invariants" entries: add "Exports:
none (this is a test file)" and one-line invariants such as "Invariants:
deterministic tests, no real network I/O, only mutate globals via harness mocks;
tests should be idempotent and independent." Put these lines directly beneath
the existing Purpose line in the header comment.
🧹 Nitpick comments (13)
llm/project/project-overview.md (1)

43-44: Consider aligning the “Harnesses” bullet above with the new runtime/harness split.

The Architecture & Stack section still reads like Ollama/Goose/OpenCode are all harnesses; updating that wording would prevent confusion now that runtimes and harnesses are separated.

Suggested wording tweak
-- **Harnesses:** shell out to Ollama / Goose / OpenCode CLIs or call APIs directly
+- **Runtimes:** inference backends (e.g., Ollama, vLLM)
+- **Harnesses:** adapters (direct, goose, opencode) that call CLIs/APIs
llm/project/user-flow.md (1)

48-59: Suggestion: mention runtimes in the catalog state for consistency.

Since S3 now includes runtime in the matrix, it would help to surface runtime discovery in S2 as well.

Suggested wording tweak
-### State S2 — Catalog Browse (Tests / Harnesses / Models)
-- **User sees**: Lists of available tests, harness adapters, and discoverable local models.
+### State S2 — Catalog Browse (Tests / Runtimes / Harnesses / Models)
+- **User sees**: Lists of available tests, runtimes, harness adapters, and discoverable local models.
@@
-  - Which harness(es) to run through?
-  - Which model(s) to benchmark?
+  - Which runtime(s) to use?
+  - Which harness(es) to run through?
+  - Which model(s) to benchmark?
test/opencode-model.test.ts (1)

36-40: Consider adding a test for models with multiple slashes.

The implementation uses replaceAll("/", "__"), which handles multiple slashes. A test case like "org/sub/model""org__sub__model" would document this behavior explicitly.

📝 Suggested additional test case
 	it("converts slash-separated models to stable keys", () => {
 		expect(toOpenCodeModelKey("Qwen/Qwen2.5-14B-Instruct")).toBe(
 			"Qwen__Qwen2.5-14B-Instruct",
 		);
 	});
+
+	it("handles models with multiple slashes", () => {
+		expect(toOpenCodeModelKey("org/sub/model-name")).toBe(
+			"org__sub__model-name",
+		);
+	});
src/schemas/result.schema.ts (1)

145-146: Use RuntimeNameSchema instead of z.string() for the runtime field.

The RuntimeNameSchema is defined in common.schema.ts and provides typed validation for runtime names. Using it instead of z.string() ensures consistent validation with the schema's intent and improves type safety across the codebase. Note that plan.schema.ts uses z.string() for the same field, so this change would also bring consistency across related schemas.

src/schemas/model-alias.schema.ts (1)

20-36: Consider a versioned wrapper schema for persisted alias files.

If alias maps are stored independently (e.g., as standalone JSON), add a versioned wrapper to keep schema evolution safe without changing the internal map shape.

♻️ Suggested addition
+import { SCHEMA_VERSION } from "./common.schema.js";

 export const ModelAliasMapSchema = z.record(
 	z.string(), // alias name (e.g., "qwen3-8b")
 	ModelAliasEntrySchema,
 );
+
+/** Versioned wrapper for persisted alias files. */
+export const ModelAliasFileSchema = z.object({
+	schemaVersion: z.string().default(SCHEMA_VERSION),
+	aliases: ModelAliasMapSchema,
+});
+
+export type ModelAliasFile = z.infer<typeof ModelAliasFileSchema>;

Based on learnings, "Maintain versioned schemas with 'schemaVersion' early in Zod schema definitions".

src/harnesses/direct-adapter.ts (1)

59-87: Add exhaustive check for runtime.apiFormat switch.

The switch statement handles "ollama" and "openai-compat" but lacks a default case. If a new API format is added to the ApiFormat type in the future, TypeScript won't catch the missing handler at compile time, and the function would silently produce undefined for output, promptTokens, and completionTokens.

♻️ Proposed fix: add exhaustive check
 			case "openai-compat": {
 				const response = await generateOpenAiCompat({
 					baseUrl: runtime.baseUrl,
 					model,
 					prompt: fullPrompt,
 					timeoutMs,
 					apiKey: process.env.VLLM_API_KEY,
 				});
 				output = response.output;
 				promptTokens = response.promptTokens;
 				completionTokens = response.completionTokens;
 				break;
 			}
+
+			default: {
+				const _exhaustive: never = runtime.apiFormat;
+				throw new Error(`Unsupported API format: ${_exhaustive}`);
+			}
 		}
src/runtimes/discovery.ts (1)

63-85: Consider parallelizing runtime discovery checks.

The current sequential approach works but could be optimized for faster startup when multiple runtimes are configured.

♻️ Optional: Parallelize discovery checks
 export async function discoverRuntimes(
 	config: RuntimeDiscoveryConfig,
 ): Promise<RuntimeName[]> {
-	const available: RuntimeName[] = [];
-
-	// Check Ollama
-	const ollamaAvailable = await isRuntimeAvailable("ollama", config);
-	if (ollamaAvailable) {
-		available.push("ollama");
-	} else {
-		logger.debug({ baseUrl: config.ollamaBaseUrl }, "Ollama runtime not available");
-	}
-
-	// Check vLLM
-	const vllmAvailable = await isRuntimeAvailable("vllm", config);
-	if (vllmAvailable) {
-		available.push("vllm");
-	} else {
-		logger.debug({ baseUrl: config.vllmBaseUrl }, "vLLM runtime not available");
-	}
-
-	return available;
+	const runtimes: RuntimeName[] = ["ollama", "vllm"];
+	const results = await Promise.all(
+		runtimes.map(async (name) => {
+			const available = await isRuntimeAvailable(name, config);
+			if (!available) {
+				const baseUrl = name === "ollama" ? config.ollamaBaseUrl : config.vllmBaseUrl;
+				logger.debug({ baseUrl }, `${name} runtime not available`);
+			}
+			return { name, available };
+		}),
+	);
+	return results.filter((r) => r.available).map((r) => r.name);
 }
src/runner/item-executor.ts (1)

57-61: Consider consolidating RuntimeUrls with the schema or runtimes module.

The RuntimeUrls interface duplicates fields from RuntimeConfig in src/runtimes/index.ts. This could be imported or shared to maintain single source of truth.

test/schemas.test.ts (1)

30-33: Consider adding a test for the "vllm" runtime name.

The current test only validates "ollama". Adding "vllm" would ensure complete coverage of the RuntimeNameSchema enum.

♻️ Add vllm runtime name test
 	it("should validate runtime names", () => {
 		expect(RuntimeNameSchema.parse("ollama")).toBe("ollama");
+		expect(RuntimeNameSchema.parse("vllm")).toBe("vllm");
 		expect(() => RuntimeNameSchema.parse("unknown")).toThrow();
 	});
src/harnesses/opencode-adapter.ts (3)

1-14: File exceeds 500-line limit; consider splitting by responsibility.

At 964 lines, this file is nearly 2x the 500-line guideline. Consider extracting:

  1. Output parsing (lines 264-367): normalizeOpenCodeOutput, tool-call extraction → opencode-output.ts
  2. Tool call extraction (lines 117-253): Tool name detection, content extraction → opencode-tool-call.ts
  3. Process management (lines 382-442): forceKillProcess, computeStaleOutputTimeoutMs → shared utility

This would improve testability and align with the "split by responsibility" guideline.

As per coding guidelines: "Keep files under 500 lines; split aggressively by responsibility."


279-312: JSON parsing without Zod validation.

The JSONL parsing at lines 279-312 uses plain JSON.parse with type assertions. Per coding guidelines, boundary inputs (including JSON responses) should be validated with Zod.

While this is internal parsing of OpenCode's output format (not a public boundary), using Zod would provide better error messages and runtime safety.

As per coding guidelines: "Treat all boundary inputs (CLI args, env, JSON files, HTTP responses) as 'unknown' and parse immediately with Zod."


689-762: Complex Promise.race pattern is hard to follow.

The timeout and stale-output detection setup (lines 689-762) uses nested closures and shared mutable state (killAttempted, timedOut, staleKilled). This works but is error-prone.

Consider extracting this into a dedicated timeout manager class or using a library pattern for cleaner abort handling.

src/runner/plan-builder.ts (1)

183-200: Redundant runtime creation in error path.

When models don't match the filter, the code creates new runtime instances (lines 187-192) just to fetch available models for the error message. These runtimes were already created earlier in the loop.

Consider caching the available models during the first discovery pass to avoid recreating runtimes.

♻️ Proposed refactor to cache discovered models
+	// Track all discovered models for error messages
+	const allDiscoveredModels = new Map<RuntimeName, string[]>();
+
 	for (const runtimeName of runtimes) {
 		const runtime = createRuntime(runtimeName, {
 			ollamaBaseUrl: config.ollamaBaseUrl,
 			vllmBaseUrl: config.vllmBaseUrl,
 			defaultTimeoutMs: config.generateTimeoutMs,
 		});

 		// ... ping check ...

 		const discovered = await runtime.listModels();
+		allDiscoveredModels.set(runtimeName, discovered);

 		// ... filtering logic ...
 	}

 	// In error path, use cached models instead of re-fetching
 	if (allModels.length === 0) {
 		if (config.models.length > 0) {
 			const availableByRuntime: string[] = [];
-			for (const runtimeName of runtimes) {
-				const runtime = createRuntime(runtimeName, { ... });
-				const available = await runtime.listModels();
+			for (const [runtimeName, available] of allDiscoveredModels) {
 				if (available.length > 0) {
 					availableByRuntime.push(`${runtimeName}: ${available.slice(0, 5).join(", ")}...`);
 				}
 			}

Comment thread apps/dashboard/src/lib/aggregations.ts Outdated
Comment thread llm/project/project-rules.md Outdated
Comment thread models.example.json Outdated
Comment thread models.json Outdated
Comment thread src/harnesses/goose-adapter.ts
Comment thread src/runtimes/vllm-runtime.ts
Comment thread src/schemas/config.schema.ts
Comment thread src/schemas/model-alias.schema.ts
Comment thread src/schemas/plan.schema.ts
Comment thread test/harness-compatibility.test.ts
- Harden streaming parsers (NDJSON/SSE) with Zod boundary validation
- Split Goose/OpenCode helpers to keep files <500 lines
- Fix model alias mismatches and schemaVersion single source of truth
- Split dashboard aggregations into focused modules
- Document vLLM + OrbStack setup and compose CLI args
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

🤖 Fix all issues with AI agents
In `@apps/dashboard/src/lib/aggregations-core.ts`:
- Around line 169-179: The p90 calculation currently uses
Math.floor(durations.length * 0.9) which for length 10 yields index 9 (the max);
update the p90Index calculation to use Math.ceil(durations.length * 0.9) - 1 to
select the element at which ~90% of observations are at or below (ensure you
clamp the index into [0, durations.length-1] and handle empty durations to avoid
division/index errors); modify the p90 assignment (the p90 property) to use this
new p90Index and keep the fallback to durations[durations.length - 1] if needed.

In `@llm/project/design-rules.md`:
- Line 34: The dimension ordering on the noted line uses
"runtime/model/harness/test/passType" which swaps harness and model; update that
instance to "runtime/harness/model/test/passType" to match the rest of the
document (see other occurrences at lines referencing
runtime/harness/model/test/passType) and verify there are no other swapped
occurrences of the phrase "runtime/model/harness/test/passType" remaining; keep
the exact token order "runtime/harness/model/test/passType".

In `@src/harnesses/goose-adapter.ts`:
- Around line 70-106: The switch on runtime.apiFormat in goose-adapter.ts sets
provider for "ollama" and "openai-compat" but lacks a default branch, so
provider can remain undefined; add a default case to the switch that assigns a
sensible fallback provider (e.g., provider = "unknown" or throw a clear error)
and/or log a warning; ensure the default handles extraEnv setup expectations or
short-circuits further logic that relies on provider to avoid runtime errors
(refer to symbols: runtime.apiFormat, provider, extraEnv,
normalizeOpenAiBasePath).

In `@src/harnesses/goose-output.ts`:
- Around line 138-150: The code treats obj.arguments as an object without
guarding against null (since typeof null === "object"), so update the checks
before casting to ensure obj.arguments !== null && typeof obj.arguments ===
"object"; then use the guarded value when creating args and reading
args.file_text / args.fileText in the developer__text_editor branch (and apply
the same null guard to the analogous blocks referenced around the other checks
at the locations that read args in the file, e.g., the other branches at the
spots you noted), so that args is only used when obj.arguments is non-null and
an object to avoid TypeError on property access.
- Around line 68-75: The replacements in decodeEscapedText currently run the
double-backslash replacement last, causing sequences like "\\n" to be
mis-decoded; change the order so the backslash unescape (pattern /\\\\/g ->
"\\") runs before the other escapes (e.g., /\\n/g, /\\r/g, /\\t/g, /\\"/g) to
ensure literal backslash+char sequences remain intact; update the
decodeEscapedText function accordingly so /\\\\/g is applied first.

In `@src/harnesses/opencode-adapter.ts`:
- Around line 44-48: Update the exported OpenCode harness factory JSDoc for the
function createOpenCodeHarness (the OpenCode harness adapter creator) to include
`@throws` tags: document that it may throw a timeout error, a stale-output error,
an error for non-zero exit codes, and an empty-output error; for each `@throws`
include the error type/name (or a brief description if there is no dedicated
Error subclass) and a short sentence describing the condition under which it’s
thrown so callers know what to catch.

In `@src/harnesses/opencode-config.ts`:
- Around line 125-144: The returned object spreads process.env (values
string|undefined) but asserts Record<string,string>, risking undefineds; update
the return in opencode-config.ts to first build a safeEnv by filtering out
undefined values from Object.entries(process.env) (keep only entries where value
!== undefined) and then spread safeEnv along with the OPENCODE_* keys (and the
runtimeName conditional OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX) so the final
object truly satisfies Record<string,string>; ensure you use
Object.fromEntries/back to an object before returning.

In `@src/lib/openai-compat-client.ts`:
- Around line 66-76: The generateOpenAiCompat function currently uses timeoutMs
without validating it, which can cause immediate aborts or undefined behavior;
add an early guard in generateOpenAiCompat to validate that timeoutMs is a
finite positive number (e.g., Number.isFinite(timeoutMs) && timeoutMs > 0) and
throw a clear Error if not, before creating the AbortController or calling
setTimeout; reference the timeoutMs parameter, the AbortController usage and
timeoutId creation so the check runs at the top of the function and prevents
proceeding with an invalid timeout.
- Around line 131-157: The try/catch around JSON.parse currently swallows parse
errors silently; update the catch to capture the error (e) and call log.debug
with the error and the raw data (e.g. log.debug({ err: e, raw: data }, "Skipping
malformed SSE chunk")) so malformed SSE JSON is recorded like schema failures;
keep behavior of skipping the chunk but ensure you only log parse errors (leave
other logic around ChatCompletionChunkSchema, parsed, chunk, delta,
promptTokens, completionTokens unchanged).
- Around line 111-185: The SSE parsing loop uses a TextDecoder with stream: true
but never flushes its internal buffer when the reader ends; after the
while(reader.read()) loop completes call decoder.decode() (without
{stream:true}) to get any remaining decoded text, append it to the existing
buffer, and then run the same "process remaining buffer content" logic that
checks buffer.trim().startsWith("data: ") and parses the final chunk (the code
around decoder, buffer, the reader.read() loop, and the final buffer processing
using ChatCompletionChunkSchema and output/promptTokens/completionTokens).
🧹 Nitpick comments (11)
src/runtimes/vllm-runtime.ts (2)

180-191: Consider defensive parsing for the models response.

The type assertion trusts the response structure. If the API returns an unexpected format, this could throw a confusing error.

♻️ Optional: Add defensive check
 			// OpenAI-compatible format
 			const data = (await response.json()) as {
 				data: Array<{
 					id: string;
 					object: string;
 					created?: number;
 					owned_by?: string;
 				}>;
 			};
 
+			if (!Array.isArray(data?.data)) {
+				throw new Error("Unexpected response format from /v1/models");
+			}
+
 			return data.data.map((m) => m.id);

193-206: Consider documenting the size estimation heuristic.

The 0.6 multiplier for estimating model size is a reasonable approximation for quantized models, but a brief inline comment explaining the rationale would aid maintainability.

📝 Optional: Add explanatory comment
 		async getModelInfo(model: string): Promise<ModelInfo> {
 			// vLLM doesn't expose parameter counts via API
 			// Estimate from model name
 			const parametersBillions = estimateParametersFromName(model);
 
-			// Estimate size in bytes (rough: ~0.5-1 byte per parameter for quantized)
+			// Estimate size in bytes: ~0.6 bytes/param assumes typical int4/int8 quantization
+			// fp16 would be ~2 bytes/param, fp32 ~4 bytes/param
 			const sizeBytes = parametersBillions * 1e9 * 0.6;
src/harnesses/opencode-process.ts (1)

56-66: Redundant try/catch with reject: false.

When reject: false is set, execa won't throw on non-zero exit codes, making the surrounding try/catch blocks unnecessary. You can simplify by removing the try/catch wrappers.

♻️ Suggested simplification
-	try {
-		await execa("pkill", ["-9", "-P", String(pid)], { reject: false });
-	} catch {
-		// ignore
-	}
+	await execa("pkill", ["-9", "-P", String(pid)], { reject: false });

-	try {
-		await execa("kill", ["-9", String(pid)], { reject: false });
-	} catch {
-		// ignore
-	}
+	await execa("kill", ["-9", String(pid)], { reject: false });
src/runner/plan-builder.ts (1)

182-206: Redundant runtime instantiation in error path.

When no models match the filter, the code re-creates runtime instances (lines 187-193) that were already created earlier in the loop (lines 134-138). Consider caching the runtime instances or the discovered models to avoid redundant work.

♻️ Suggested improvement
+	// Cache discovered models for error reporting
+	const allDiscoveredModels = new Map<RuntimeName, string[]>();
+
 	for (const runtimeName of runtimes) {
 		const runtime = createRuntime(runtimeName, {
 			// ...
 		});
 		// ...
 		const discovered = await runtime.listModels();
+		allDiscoveredModels.set(runtimeName, discovered);
 		// ...
 	}

 	// Later in error path:
 	if (allModels.length === 0) {
 		if (config.models.length > 0) {
 			const availableByRuntime: string[] = [];
 			for (const runtimeName of runtimes) {
-				const runtime = createRuntime(runtimeName, { ... });
-				const available = await runtime.listModels();
+				const available = allDiscoveredModels.get(runtimeName) ?? [];
 				// ...
 			}
 		}
 	}
src/harnesses/opencode-output.ts (1)

171-183: Regex may miss escaped content in JSON strings.

The regex pattern uses ["]to match both backticks and quotes as delimiters, but JSON string values typically use"for quotes. The pattern may not correctly extract content with embedded escaped characters or multiline strings encoded with\n`.

💡 Consider more robust JSON value extraction

The current regex approach is a reasonable fallback when JSON.parse fails, but may produce incomplete extractions for complex escaped strings. If this becomes an issue in practice, consider using a more robust JSON string parser or accepting that this is a best-effort fallback.

src/harnesses/goose-adapter.ts (1)

221-228: Consider using a typed error class instead of property augmentation.

The pattern of attaching output and durationMs properties to an Error via type assertion is awkward and loses type safety. Consider creating a custom error class or returning a structured failure result.

♻️ Alternative approach
class GooseEmptyOutputError extends Error {
  constructor(
    message: string,
    public readonly output: string,
    public readonly durationMs: number,
  ) {
    super(message);
    this.name = "GooseEmptyOutputError";
  }
}

// Usage:
throw new GooseEmptyOutputError(
  "Goose returned no usable output and did not produce code",
  output,
  durationMs,
);
src/harnesses/opencode-adapter.ts (2)

304-314: Redundant error checks after Promise.race.

If timeoutPromise or stalePromise won the race, they already rejected and execution wouldn't reach lines 305-314. These checks would only trigger if the rejection was caught and execution continued, but that's not the case here since exceptions propagate.

However, this defensive coding provides clarity and guards against future refactoring that might change error handling. Consider adding a comment explaining this is intentional defensive coding.


395-429: Code extraction fallback logic duplicates goose-adapter.

Lines 396-429 closely mirror the same pattern in goose-adapter.ts (lines 190-229). Consider extracting this into a shared helper to reduce duplication.

♻️ Potential shared helper
// In a shared module like lib/harness-utils.ts
export function handleCodeExtraction(opts: {
  output: string;
  solutionPath: string;
  durationMs: number;
  model: string;
  harnessName: string;
  toolCallDetected: boolean;
  log: pino.Logger;
}): { codeFilePath?: string } {
  const { output, solutionPath, durationMs, model, harnessName, toolCallDetected, log } = opts;
  
  if (durationMs < 2000 && (!output || output.trim().length < MIN_OUTPUT_LENGTH)) {
    throw new Error(
      `${harnessName} returned empty output instantly (${durationMs}ms) - model "${model}" may not be recognized`,
    );
  }

  const extracted = extractCode(output);
  const extractedCode = extracted.code.trim();
  
  if (extractedCode.length >= MIN_OUTPUT_LENGTH && extracted.method !== "raw") {
    fs.writeFileSync(solutionPath, extractedCode, "utf-8");
    log.info({ /* ... */ }, "Persisted extracted code");
    return { codeFilePath: solutionPath };
  }
  
  log.warn({ /* ... */ }, `${harnessName} finished without usable code output`);
  
  if (output.trim().length < MIN_OUTPUT_LENGTH) {
    throw new Error(`${harnessName} returned no usable output and did not produce code`);
  }
  
  return {};
}
apps/dashboard/src/lib/aggregations-tooling.ts (1)

30-35: Consider extracting duplicate failureType extraction logic.

The pattern to extract failureType from either generationFailure?.type or generation?.failureType is repeated in four places (inferToolHarnesses, computeToolUseStats, computeToolScoreBreakdown, computeCompositeMetrics).

♻️ Proposed helper extraction
+/** Extracts failure type from either generationFailure or generation. */
+function getFailureType(item: MatrixItemResult): string | undefined {
+  return item.generationFailure?.type ?? item.generation?.failureType;
+}
+
 export function inferToolHarnesses(items: MatrixItemResult[]): Set<string> {
   const toolHarnesses = new Set<string>();

   for (const item of items) {
-    const failureType = item.generationFailure?.type ?? item.generation?.failureType;
+    const failureType = getFailureType(item);
     if (item.test === TOOL_SMOKE_TEST_SLUG || failureType === "tool_missing") {
       toolHarnesses.add(item.harness);
     }
   }

Apply similar changes to the other three locations.

Also applies to: 48-51, 87-90, 185-188

apps/dashboard/src/lib/aggregations-core.ts (2)

127-143: Function name doesn't match key composition.

The function is named groupByModelHarness but the key includes runtime, model, and harness (line 137). Consider renaming to groupByRuntimeModelHarness to accurately reflect the grouping dimensions.

♻️ Proposed rename
 /**
- * Groups items by combined runtime + model + harness name.
+ * Groups items by combined runtime, model, and harness name.
  *
  * `@param` items - Matrix items
  * `@returns` Map keyed by `"runtime / model / harness"`
  */
-export function groupByModelHarness(
+export function groupByRuntimeModelHarness(
   items: MatrixItemResult[]
 ): Map<string, MatrixItemResult[]> {

65-125: Consider a generic groupBy helper to reduce duplication.

The four groupBy* functions share identical structure, differing only in the property accessor. A generic helper would reduce code duplication and simplify maintenance.

♻️ Proposed generic helper
function groupBy<K extends keyof MatrixItemResult>(
  items: MatrixItemResult[],
  key: K
): Map<string, MatrixItemResult[]> {
  return items.reduce((map, item) => {
    const groupKey = String(item[key]);
    const group = map.get(groupKey) || [];
    group.push(item);
    map.set(groupKey, group);
    return map;
  }, new Map<string, MatrixItemResult[]>());
}

// Then export thin wrappers:
export const groupByModel = (items: MatrixItemResult[]) => groupBy(items, "model");
export const groupByRuntime = (items: MatrixItemResult[]) => groupBy(items, "runtime");
// etc.

Comment thread apps/dashboard/src/lib/aggregations-core.ts Outdated
Comment thread llm/project/design-rules.md Outdated
Comment thread src/harnesses/goose-adapter.ts
Comment thread src/harnesses/goose-output.ts
Comment thread src/harnesses/goose-output.ts Outdated
Comment thread src/harnesses/opencode-adapter.ts
Comment thread src/harnesses/opencode-config.ts
Comment thread src/lib/openai-compat-client.ts Outdated
Comment thread src/lib/openai-compat-client.ts
Comment thread src/lib/openai-compat-client.ts
- Log JSON.parse errors for SSE chunks at debug level
- Flush TextDecoder at end of stream and process trailing buffer
- Validate timeoutMs is finite positive
- Filter undefined env values before building OpenCode env map
- Document OpenCode adapter throw conditions
- Fix escape decoding order for double-escaped sequences
- Guard tool-call arguments against null objects
- Add exhaustive default handling for runtime apiFormat
- Standardize dimension order to runtime/harness/model/test/passType
- Use ceil-based p90 index with clamping
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Fix all issues with AI agents
In `@llm/project/design-rules.md`:
- Around line 30-34: The document inconsistently uses "pass-type" and
"passType"; normalize to a single form (use "passType") throughout this section
and any related headings or bullet points (e.g., the runtime × harness × model ×
test × passType matrix and the naming guidance line that lists
runtime/harness/model/test/passType) so all occurrences match; update any inline
references and examples to use "passType" and ensure the naming consistency
sentence uses that exact token.

In `@src/harnesses/opencode-config.ts`:
- Around line 35-55: Update the JSDoc for all exported functions in this file
(including resolveOpenCodeToolOutputRoot and the OpenCode config builder
function) to add `@throws` tags describing the kinds of errors that can be raised
(e.g., validation errors and errors thrown by toOpenAiCompatBaseUrl and
toOpenCodeModelKey); for each function include a brief sentence under `@throws`
specifying the error type/condition (e.g., "throws Error when base URL is
invalid" or "throws ValidationError on invalid model key"). Ensure the `@throws`
entries are present alongside existing `@param/`@returns blocks and reference the
relevant converter/validator functions (toOpenAiCompatBaseUrl,
toOpenCodeModelKey) so readers know the source of exceptions.
- Around line 56-108: buildOpenCodeConfig (and the sibling functions
buildOpenCodeEnv and resolveOpenCodeToolOutputRoot) currently consume
runtime/env-derived inputs directly; add Zod validation at each function entry
to parse the incoming data as unknown and enforce required invariants (e.g.,
non-empty runtimeBaseUrl and model, allowed runtimeName values, optional apiKey
string) before using them. Create small Zod schemas that mirror the expected
BuildOpenCodeConfigOpts shape and use schema.parse(...) at the top of
buildOpenCodeConfig (and analogous schemas/parses in buildOpenCodeEnv and
resolveOpenCodeToolOutputRoot) so downstream code (e.g., use of
toOpenAiCompatBaseUrl, toOpenCodeModelKey, and providerOptions construction)
always receives validated, typed values and throws a clear error on invalid
inputs.

In `@src/lib/openai-compat-client.ts`:
- Around line 17-29: The OpenAiCompatGenerateOpts boundary object is not fully
validated (only timeoutMs is checked) so add a Zod schema for
OpenAiCompatGenerateOpts and parse the incoming opts immediately where it enters
the module (e.g., in the function that sends the request—locate usage of
OpenAiCompatGenerateOpts and any functions like generate/openaiCompatGenerate in
this file); the schema must validate baseUrl (string, url-like), model (nonempty
string), prompt (string), timeoutMs (number, positive integer), and apiKey
(optional string) and you should replace direct property access with the
parsed/validated result; apply the same schema/parse logic to the other entry
points mentioned (the code around lines 66-74) so all external inputs are
treated as unknown and validated before use.
🧹 Nitpick comments (3)
src/lib/openai-compat-client.ts (1)

126-199: Deduplicate SSE data handling to avoid drift.
The loop path and final-buffer path reimplement the same parsing logic. A small helper keeps behavior consistent and easier to maintain.

Proposed refactor
+		function handleSseData(data: string): void {
+			if (data === "[DONE]") return;
+			try {
+				const parsed = JSON.parse(data) as unknown;
+				const result = ChatCompletionChunkSchema.safeParse(parsed);
+				if (!result.success) {
+					log.debug(
+						{ issues: result.error.issues },
+						"Skipping SSE chunk that failed schema validation",
+					);
+					return;
+				}
+
+				const chunk = result.data;
+				const delta = chunk.choices?.[0]?.delta;
+				if (typeof delta?.content === "string" && delta.content.length > 0) {
+					output += delta.content;
+				}
+				if (chunk.usage?.prompt_tokens !== undefined) {
+					promptTokens = chunk.usage.prompt_tokens;
+				}
+				if (chunk.usage?.completion_tokens !== undefined) {
+					completionTokens = chunk.usage.completion_tokens;
+				}
+			} catch (err) {
+				log.debug(
+					{ err, raw: data },
+					"Skipping malformed SSE chunk",
+				);
+			}
+		}
+
 		while (true) {
 			const { done, value } = await reader.read();
 			if (done) break;
@@
 			for (const line of lines) {
 				const trimmed = line.trim();
 				if (!trimmed || !trimmed.startsWith("data: ")) continue;
-
-				const data = trimmed.slice(6); // Remove "data: " prefix
-				if (data === "[DONE]") continue;
-
-				try {
-					const parsed = JSON.parse(data) as unknown;
-					const result = ChatCompletionChunkSchema.safeParse(parsed);
-					if (!result.success) {
-						log.debug(
-							{ issues: result.error.issues },
-							"Skipping SSE chunk that failed schema validation",
-						);
-						continue;
-					}
-
-					const chunk = result.data;
-					const delta = chunk.choices?.[0]?.delta;
-					if (typeof delta?.content === "string" && delta.content.length > 0) {
-						output += delta.content;
-					}
-					// Token counts often come in the final chunk.
-					// Preserve zeros by checking undefined explicitly.
-					if (chunk.usage?.prompt_tokens !== undefined) {
-						promptTokens = chunk.usage.prompt_tokens;
-					}
-					if (chunk.usage?.completion_tokens !== undefined) {
-						completionTokens = chunk.usage.completion_tokens;
-					}
-				} catch (err) {
-					log.debug(
-						{ err, raw: data },
-						"Skipping malformed SSE chunk",
-					);
-				}
+				handleSseData(trimmed.slice(6));
 			}
 		}
@@
 		if (buffer.trim().startsWith("data: ")) {
-			const data = buffer.trim().slice(6);
-			if (data !== "[DONE]") {
-				try {
-					const parsed = JSON.parse(data) as unknown;
-					const result = ChatCompletionChunkSchema.safeParse(parsed);
-					if (result.success) {
-						const chunk = result.data;
-						const delta = chunk.choices?.[0]?.delta;
-						if (typeof delta?.content === "string" && delta.content.length > 0) {
-							output += delta.content;
-						}
-						if (chunk.usage?.prompt_tokens !== undefined) {
-							promptTokens = chunk.usage.prompt_tokens;
-						}
-						if (chunk.usage?.completion_tokens !== undefined) {
-							completionTokens = chunk.usage.completion_tokens;
-						}
-					}
-				} catch (err) {
-					log.debug(
-						{ err, raw: data },
-						"Skipping malformed SSE chunk",
-					);
-				}
-			}
+			handleSseData(buffer.trim().slice(6));
 		}
src/harnesses/opencode-adapter.ts (1)

190-323: Cap stdout/stderr buffering to avoid unbounded memory.

The current chunk arrays can grow without bound if OpenCode streams large outputs. Consider capping collected output to a max size (keeping the most recent N chars) to prevent memory spikes.

♻️ Suggested bounded buffering
-// Track stdout/stderr for output collection
-const stdoutChunks: string[] = [];
-const stderrChunks: string[] = [];
+// Track stdout/stderr for output collection (bounded)
+const MAX_OUTPUT_CHARS = 1_000_000;
+let stdout = "";
+let stderr = "";

 proc.stdout?.on("data", (chunk: Buffer) => {
 	lastOutputTime = Date.now();
-	stdoutChunks.push(chunk.toString());
+	stdout = (stdout + chunk.toString()).slice(-MAX_OUTPUT_CHARS);
 });
 proc.stderr?.on("data", (chunk: Buffer) => {
 	lastOutputTime = Date.now();
-	stderrChunks.push(chunk.toString());
+	stderr = (stderr + chunk.toString()).slice(-MAX_OUTPUT_CHARS);
 });

-// Collect output from chunks
-const stdout = stdoutChunks.join("");
-const stderr = stderrChunks.join("");
+// stdout/stderr already collected (bounded)
src/harnesses/goose-adapter.ts (1)

268-272: Temp directories accumulate without cleanup.

Each generate() call creates a new temp directory under /tmp/plebdev-bench-goose-* but no cleanup occurs. For long benchmark sessions, this could consume significant disk space. The comment mentions "leave cleanup to the caller/GC" but Node.js doesn't automatically clean filesystem resources.

Consider either:

  1. Cleaning up after scoring completes (requires coordination with caller)
  2. Reusing a single work directory per adapter instance
  3. Documenting this as expected behavior with guidance to clear /tmp/plebdev-bench-goose-* between runs

Comment thread llm/project/design-rules.md Outdated
Comment thread src/harnesses/opencode-config.ts
Comment thread src/harnesses/opencode-config.ts
Comment thread src/lib/openai-compat-client.ts Outdated
@AustinKelsay
Copy link
Copy Markdown
Owner Author

@CodeRabbit full review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 9, 2026

✅ Actions performed

Full review triggered.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 9, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds first-class runtimes (ollama, vllm), expands the benchmark matrix to runtime × harness × model × test × passType, introduces runtime discovery/clients/adapters, model-aliasing, schema bump to 0.2.x, major runner/CLI/harness refactors, dashboard runtime views/aggregations, tests, and vLLM Docker artifacts.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Docs & Project Layout** <br> `AGENTS.md`, `CLAUDE.md`, `README.md`, `llm/...`, `llm/implementation/...`, `llm/project/...`|Introduce runtimes concept, update matrix and MVP docs, add multi-runtime implementation notes and vLLM setup docs; adjust examples and project layout.|\n|**Runtime Core** <br> `src/runtimes/runtime.ts`, `src/runtimes/ollama-runtime.ts`, `src/runtimes/vllm-runtime.ts`, `src/runtimes/discovery.ts`, `src/runtimes/index.ts`|New Runtime abstraction, Ollama/vLLM runtime implementations, discovery APIs, createRuntime factory, and runtime config/types.|\n|**Harnesses & Adapters** <br> `src/harnesses/harness.ts`, `src/harnesses/index.ts`, `src/harnesses/direct-adapter.ts`, `src/harnesses/goose-adapter.ts`, `src/harnesses/opencode-adapter.ts`, `src/harnesses/discovery.ts`, (removed) `src/harnesses/ollama-adapter.ts`|Refactor harness contract to be runtime-aware; add direct/goose/opencode adapters; remove ollama adapter; change discovery signatures and add compatibility helpers.|\n|**OpenCode / Goose Helpers** <br> `src/harnesses/opencode-*`, `src/harnesses/goose-output.ts`, `src/harnesses/goose-openai.ts`, `src/harnesses/opencode-model.ts`|New OpenCode config/env builders, process helpers, and robust Goose/OpenCode output normalization and OpenAI base-path/model-key utilities.|\n|**Runner & CLI** <br> `src/runner/plan-builder.ts`, `src/runner/item-executor.ts`, `src/runner/index.ts`, `src/cli/run-command.ts`|Plan builder now discovers runtimes and per-runtime models; executeItem and runner wired to runtimeConfig; CLI adds runtimes, vllm URL, model-alias and vLLM lifecycle options.|\n|**Model Alias & Model Data** <br> `src/lib/model-aliases.ts`, `models.json`, `models.example.json`|New model-alias parsing/loading/merging and runtime-aware model resolution; add model mapping files.|\n|**HTTP Clients** <br> `src/lib/ollama-client.ts`, `src/lib/openai-compat-client.ts`|Add reusable Ollama and OpenAI-compatible clients with streaming/SSE parsing, timeouts and token extraction.|\n|**Schemas** <br> `src/schemas/common.schema.ts`, `src/schemas/config.schema.ts`, `src/schemas/plan.schema.ts`, `src/schemas/result.schema.ts`, `src/schemas/model-alias.schema.ts`, `src/schemas/index.ts`|Schema bump (0.2.x), add RuntimeName schema, add runtime and modelAlias fields, vllmBaseUrl and managed vLLM schema, and model-alias schemas/exports.|\n|**Dashboard & Aggregations** <br> `apps/dashboard/src/lib/aggregations-core.ts`, `apps/dashboard/src/lib/aggregations-tooling.ts`, `apps/dashboard/src/lib/aggregations-compare.ts`, `apps/dashboard/src/lib/aggregations.ts`, `apps/dashboard/src/lib/types.ts`, `apps/dashboard/src/lib/tooltip-content.ts`|Split aggregations into core/tooling/compare, add groupByRuntime and runtime-aware metrics; update re-exports and types to include runtime/modelAlias.|\n|**Dashboard UI** <br> `apps/dashboard/src/components/.../composite-score-chart.tsx`, `apps/dashboard/src/components/compare/compare-table.tsx`, `apps/dashboard/src/components/run-detail/*`|Add runtime column and \"By Runtime\" tabs; extend dimension types/labels/callbacks; show runtime in run details and lists.|\n|**Docker & vLLM Local Setup** <br> `docker/vllm/docker-compose.yml`, `docker/vllm/README.md`, `llm/implementation/vllm-orbstack-setup.md`|Add vLLM Docker Compose for CPU/arm64 and documentation for local vLLM/OrbStack setup and managed lifecycle.|\n|**Package, Tests & Results** <br> `package.json`, `test/*`, `results/*`|Add npm scripts for runtime flows, update tests for schemas and runtime/harness changes, and include multi-runtime run/plan JSON results.|\n\n## Sequence Diagram(s)\n\n```mermaid\nsequenceDiagram\n    participant CLI as CLI\n    participant Plan as PlanBuilder\n    participant Discovery as RuntimeDiscovery\n    participant Runtime as Runtime (Ollama / vLLM)\n    participant Matrix as MatrixExpander\n    participant Exec as ItemExecutor\n    participant Harness as HarnessAdapter\n    participant Dashboard as Dashboard\n\n    CLI->>Plan: buildRunPlan(config)\n    activate Plan\n    Plan->>Discovery: discoverRuntimes(config)\n    Discovery->>Runtime: ping(baseUrl)\n    Runtime-->>Discovery: available?\n    Discovery-->>Plan: runtimes[]\n    loop per runtime\n      Plan->>Runtime: listModels()\n      Runtime-->>Plan: models[]\n    end\n    Plan->>Matrix: expand(runtimes,harnesses,models,tests)\n    Matrix-->>Plan: RunPlan(items include runtime)\n    deactivate Plan\n\n    loop per item\n      CLI->>Exec: executeItem(item, runtimeConfig)\n      Exec->>Runtime: createRuntime(item.runtime)\n      Runtime-->>Exec: runtimeClient\n      Exec->>Harness: createHarness(item.harness)\n      Harness-->>Exec: harnessInstance\n      Exec->>Harness: generate({runtime,model,prompt,timeout})\n      Harness->>Runtime: call runtime endpoints\n      Runtime-->>Harness: responses\n      Harness-->>Exec: result\n      Exec-->>CLI: MatrixItemResult (with runtime)\n    end\n\n    CLI->>Dashboard: upload results\n    Dashboard->>Dashboard: groupByRuntime() / compute metrics\n    Dashboard-->>User: render runtime views\n```\n\n## Estimated code review effort\n\n🎯 5 (Critical) | ⏱️ ~120 minutes\n\n## Possibly related PRs\n\n- AustinKelsay/plebdev-bench#4 — overlaps schema/result-shape and failure fields that interact with MatrixItemResult/RunResult changes.  \n- AustinKelsay/plebdev-bench#5 — overlaps multi-runtime support and dashboard aggregation refactors (aggregations split and runtime grouping).\n\n## Poem\n\n> 🐰 I hopped from Ollama to vLLM blue,  \n> I carried runtimes, harnesses, and a plan anew.  \n> I mapped aliases, built runs that expand—  \n> Five dimensions now stretch across the land.  \n> Hop, hop — a rabbit's cheer for the runtime brand!\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 2 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 inconclusive)</summary>\n\n|  Check name | Status         | Explanation                                                                                                                                                                            | Resolution                                                                                                                                                                                                   |\n| :---------: | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Title check | ❓ Inconclusive | The title 'Feature/multi runtime' is vague and overly generic; it uses non-descriptive naming that doesn't clearly convey the main scope or deliverables of the substantial changeset. | Consider using a more descriptive title that summarizes the primary change, such as 'Add multi-runtime support (Ollama and vLLM) with runtime abstraction layer' or similar to better communicate the scope. |\n\n</details>\n<details>\n<summary>✅ Passed checks (2 passed)</summary>\n\n|     Check name     | Status   | Explanation                                                                         |\n| :----------------: | :------- | :---------------------------------------------------------------------------------- |\n|  Description Check | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                         |\n| Docstring Coverage | ✅ Passed | Docstring coverage is 89.01% which is sufficient. The required threshold is 80.00%. |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing touches</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> 📝 Generate docstrings\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"07f1e7d6-8a8e-4e23-9900-8731c2c87f58\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Post copyable unit tests in a comment\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Commit unit tests in branch `feature/multi-runtime`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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2/m3+24W2PC+gcZks23R2wa2pW5sLjW123vWz23oW7O362/VVavlan6vsO3GW6u3M22Y0q28ZAa2722mwAW3EaoTDywQeDU23q3026e222+u2L20LAr2zu3Nhbe37qhMDY5XkCV4Mu2J8GO3y21wA3TR+3EAF+3zW+B3f20cDk2feDH20B2022G3QO8xGJ2/PW5W7AAFW9e2f23O2729zjxxcB2y2+h3325O2c29O2823h292043R0f7iDcXzin2yO2QO6+3x2+e3yO9W3KO7W24O1IX00xVliO2h2hYB63MO163sOz63QWzx2iksBEtsgJ3WO2B32OyJ3N22J3t2zB28QJJ2lWaGjZO19BDW2R3FO1O2t2zO3qO5vWG2+GblWZQtNglp2PADp3K2xx3L21x3cO3W3jO/u26O6JojiYniZLJZ2dO2C3bO5+37O9+3uWzR2B21J3oIpGbRWch3n26h25O6R2O23p2KOwZ2qO+KV8OxPgConWaxTZ5212953Yu5x34u4q2/W052w27YaCRMbrj2/q3tOxl2N2/p3lO4Z2Au/l3A24gHwPQIJBbel2z25l2i61h2cO/53f20G3S3fLbmu2+2+mhV24u1V2qO300uu/V3cAxB68g+F3mOyR2hO1wArTZB3oO3nXmVUl3v9iZGKw9N2T22V2Wu4N3su8N3FWzV2AsiZ2F2zfGYwZt3Su1Z212xB2fO1B2/O6p2MgKt3eO1JY1U3122OzK2su3Z2cu7h2OcI92F24Q9vC+d2X29t232zZ2Pu752vu9+3HO0d3nO3937s5mmSu0D3Lu2e2Fuzd2luxW31O1JXjK6935OzF22u6J2Ou6p3Eu/63xqgYAJqr5WL8NLW/YrLWXgxEt10BLWoAHsgYKBjB64PLXMQKz2mSGlXuGBBVymzYJZzGA1SwAxA6AOsN1AHr7YgDuUGQGT3Ia4z3me/MBWezQBae/QB9AEAA= -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 09 Feb 2026 16:16:16 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"4026:21AE59:E6E5D3:3E314B9:698A084F","x-ratelimit-limit":"5000","x-ratelimit-remaining":"4891","x-ratelimit-reset":"1770655158","x-ratelimit-resource":"core","x-ratelimit-used":"109","x-xss-protection":"0"},"data":""}}

2 similar comments
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 9, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds first-class runtimes (ollama, vllm), expands the benchmark matrix to runtime × harness × model × test × passType, introduces runtime discovery/clients/adapters, model-aliasing, schema bump to 0.2.x, major runner/CLI/harness refactors, dashboard runtime views/aggregations, tests, and vLLM Docker artifacts.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Docs & Project Layout** <br> `AGENTS.md`, `CLAUDE.md`, `README.md`, `llm/...`, `llm/implementation/...`, `llm/project/...`|Introduce runtimes concept, update matrix and MVP docs, add multi-runtime implementation notes and vLLM setup docs; adjust examples and project layout.|\n|**Runtime Core** <br> `src/runtimes/runtime.ts`, `src/runtimes/ollama-runtime.ts`, `src/runtimes/vllm-runtime.ts`, `src/runtimes/discovery.ts`, `src/runtimes/index.ts`|New Runtime abstraction, Ollama/vLLM runtime implementations, discovery APIs, createRuntime factory, and runtime config/types.|\n|**Harnesses & Adapters** <br> `src/harnesses/harness.ts`, `src/harnesses/index.ts`, `src/harnesses/direct-adapter.ts`, `src/harnesses/goose-adapter.ts`, `src/harnesses/opencode-adapter.ts`, `src/harnesses/discovery.ts`, (removed) `src/harnesses/ollama-adapter.ts`|Refactor harness contract to be runtime-aware; add direct/goose/opencode adapters; remove ollama adapter; change discovery signatures and add compatibility helpers.|\n|**OpenCode / Goose Helpers** <br> `src/harnesses/opencode-*`, `src/harnesses/goose-output.ts`, `src/harnesses/goose-openai.ts`, `src/harnesses/opencode-model.ts`|New OpenCode config/env builders, process helpers, and robust Goose/OpenCode output normalization and OpenAI base-path/model-key utilities.|\n|**Runner & CLI** <br> `src/runner/plan-builder.ts`, `src/runner/item-executor.ts`, `src/runner/index.ts`, `src/cli/run-command.ts`|Plan builder now discovers runtimes and per-runtime models; executeItem and runner wired to runtimeConfig; CLI adds runtimes, vllm URL, model-alias and vLLM lifecycle options.|\n|**Model Alias & Model Data** <br> `src/lib/model-aliases.ts`, `models.json`, `models.example.json`|New model-alias parsing/loading/merging and runtime-aware model resolution; add model mapping files.|\n|**HTTP Clients** <br> `src/lib/ollama-client.ts`, `src/lib/openai-compat-client.ts`|Add reusable Ollama and OpenAI-compatible clients with streaming/SSE parsing, timeouts and token extraction.|\n|**Schemas** <br> `src/schemas/common.schema.ts`, `src/schemas/config.schema.ts`, `src/schemas/plan.schema.ts`, `src/schemas/result.schema.ts`, `src/schemas/model-alias.schema.ts`, `src/schemas/index.ts`|Schema bump (0.2.x), add RuntimeName schema, add runtime and modelAlias fields, vllmBaseUrl and managed vLLM schema, and model-alias schemas/exports.|\n|**Dashboard & Aggregations** <br> `apps/dashboard/src/lib/aggregations-core.ts`, `apps/dashboard/src/lib/aggregations-tooling.ts`, `apps/dashboard/src/lib/aggregations-compare.ts`, `apps/dashboard/src/lib/aggregations.ts`, `apps/dashboard/src/lib/types.ts`, `apps/dashboard/src/lib/tooltip-content.ts`|Split aggregations into core/tooling/compare, add groupByRuntime and runtime-aware metrics; update re-exports and types to include runtime/modelAlias.|\n|**Dashboard UI** <br> `apps/dashboard/src/components/.../composite-score-chart.tsx`, `apps/dashboard/src/components/compare/compare-table.tsx`, `apps/dashboard/src/components/run-detail/*`|Add runtime column and \"By Runtime\" tabs; extend dimension types/labels/callbacks; show runtime in run details and lists.|\n|**Docker & vLLM Local Setup** <br> `docker/vllm/docker-compose.yml`, `docker/vllm/README.md`, `llm/implementation/vllm-orbstack-setup.md`|Add vLLM Docker Compose for CPU/arm64 and documentation for local vLLM/OrbStack setup and managed lifecycle.|\n|**Package, Tests & Results** <br> `package.json`, `test/*`, `results/*`|Add npm scripts for runtime flows, update tests for schemas and runtime/harness changes, and include multi-runtime run/plan JSON results.|\n\n## Sequence Diagram(s)\n\n```mermaid\nsequenceDiagram\n    participant CLI as CLI\n    participant Plan as PlanBuilder\n    participant Discovery as RuntimeDiscovery\n    participant Runtime as Runtime (Ollama / vLLM)\n    participant Matrix as MatrixExpander\n    participant Exec as ItemExecutor\n    participant Harness as HarnessAdapter\n    participant Dashboard as Dashboard\n\n    CLI->>Plan: buildRunPlan(config)\n    activate Plan\n    Plan->>Discovery: discoverRuntimes(config)\n    Discovery->>Runtime: ping(baseUrl)\n    Runtime-->>Discovery: available?\n    Discovery-->>Plan: runtimes[]\n    loop per runtime\n      Plan->>Runtime: listModels()\n      Runtime-->>Plan: models[]\n    end\n    Plan->>Matrix: expand(runtimes,harnesses,models,tests)\n    Matrix-->>Plan: RunPlan(items include runtime)\n    deactivate Plan\n\n    loop per item\n      CLI->>Exec: executeItem(item, runtimeConfig)\n      Exec->>Runtime: createRuntime(item.runtime)\n      Runtime-->>Exec: runtimeClient\n      Exec->>Harness: createHarness(item.harness)\n      Harness-->>Exec: harnessInstance\n      Exec->>Harness: generate({runtime,model,prompt,timeout})\n      Harness->>Runtime: call runtime endpoints\n      Runtime-->>Harness: responses\n      Harness-->>Exec: result\n      Exec-->>CLI: MatrixItemResult (with runtime)\n    end\n\n    CLI->>Dashboard: upload results\n    Dashboard->>Dashboard: groupByRuntime() / compute metrics\n    Dashboard-->>User: render runtime views\n```\n\n## Estimated code review effort\n\n🎯 5 (Critical) | ⏱️ ~120 minutes\n\n## Possibly related PRs\n\n- AustinKelsay/plebdev-bench#4 — overlaps schema/result-shape and failure fields that interact with MatrixItemResult/RunResult changes.  \n- AustinKelsay/plebdev-bench#5 — overlaps multi-runtime support and dashboard aggregation refactors (aggregations split and runtime grouping).\n\n## Poem\n\n> 🐰 I hopped from Ollama to vLLM blue,  \n> I carried runtimes, harnesses, and a plan anew.  \n> I mapped aliases, built runs that expand—  \n> Five dimensions now stretch across the land.  \n> Hop, hop — a rabbit's cheer for the runtime brand!\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 2 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 inconclusive)</summary>\n\n|  Check name | Status         | Explanation                                                                                                                                                                            | Resolution                                                                                                                                                                                                   |\n| :---------: | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Title check | ❓ Inconclusive | The title 'Feature/multi runtime' is vague and overly generic; it uses non-descriptive naming that doesn't clearly convey the main scope or deliverables of the substantial changeset. | Consider using a more descriptive title that summarizes the primary change, such as 'Add multi-runtime support (Ollama and vLLM) with runtime abstraction layer' or similar to better communicate the scope. |\n\n</details>\n<details>\n<summary>✅ Passed checks (2 passed)</summary>\n\n|     Check name     | Status   | Explanation                                                                         |\n| :----------------: | :------- | :---------------------------------------------------------------------------------- |\n|  Description Check | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                         |\n| Docstring Coverage | ✅ Passed | Docstring coverage is 89.01% which is sufficient. The required threshold is 80.00%. |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing touches</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> 📝 Generate docstrings\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"07f1e7d6-8a8e-4e23-9900-8731c2c87f58\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Post copyable unit tests in a comment\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Commit unit tests in branch `feature/multi-runtime`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- DwQgtGAEAqAWCWBnSTIEMB26CuAXA9mAOYCmGJATmriQCaQDG+Ats2bgFyQAOFk+AIwBWJBrngA3EsgEBPRvlqU0AgfFwA6NPEgQAfACgjoCEYDEZyAAUASpETZWaCrKPR1AGxJcAYiWrYFCQA9MzYHuKQFNgY4mwGAHKOApRcAGwGAKo2ADJcsLi43IgcwcFE6rDYAhpMzMEAgtiI4hgA0iQeiGiywdxeAkoSYCkYDLB94R7BGZmIqZBNLfDtnd2uAMr4gQwkkAJUY7BcAGb+uIEhYRHwYNGx8PHQzqS4+4fjXMzaGAYbuAESvxuGQDDYSBJ4CQAO6UEoGHIqNYcAwAYSC1Do6E4kAATAAGXFpMCEkkADmguNxHAAjDSOABWADsAC0jABRAAeSFaRH4wlE4ikyAcThckAAFDFxphSLQAJQogBE7lwXl850uoXCkXucRIiWSC1muXyhWKpXKlWqtRYjWarQ6XR6fQGQxGZHGkw801m8woXCWjrWPT+2wou3emE+kDOASC2pudxi+oMzworyjRy+Pz+AIuQPwIN+4MhMLhKMRKS6KPR5yx1C4BKJJNx5Mp1LpjNZSvMllRLDYsRFjm+LiMUCDKyd6yiJAAjthpDR6GhY1M52XoegMPQh+J8OR6AABJhKKiqdQaAxQM/KS8A+AAbQE+FwAF054huIelPRoZUO44AQ3wrnO/TyCstDwAw1ArHy6goMgmDAYQpDkFQYFsIg3SkPs8gDkoNgqGobyYPQuCwNQ6Drj6m5Qtu0JoMguAUPARCkEEtAaDAsB7EEEEoGMHjYEoyEKD6aDFPAAheJASiPl0+wePgDAANb2Pm8GQEqgCg5IsYjwIeyAghQJz4BQbC0EqkAAZRkCUXsiDwXJ6gkMwXBKj4G5BFuDlsRxlB0BovY3mAhgGCYUBkPQ+AnKhxBkMoYF1PuXC8PyIiGcK+EKOeJFXtoujhZF4BQHAqCoChaB4GhSWYViqXsFwVDbqKY7yHIeX3qRWg6PoRilaYBgNAA4uyCTQBsGjMLQypKr2FiLAAkolGGYvQ7XOPIcWMFRGCkIgE7WBQijYGIkADrEJCcjimTcLQG0OXxChjCQ3AXGgHjydQa6gWxnKxqdzA0QALAAIpAzCKJ0ADrVEUOQOGwzQLSw9wzGINAsggg5+A0QykN6o8JDw84SOILD0NKB4KPLujmPYyCAA0QmsWdDDaWu5DbsTbDySTGDOYe15QOD8BBGIFnyP80RiJcXDLbEp20OdDaQDz9gRsEfPSMEAuSwQ4rmXwuvoI9H1wpKKxnEEb37Gg6kxYg8o7vQ2APU9jnydIDBsR9RlYLtCMU9IeNzicXgXdBhuQAAEtA0BWG7l05MtkDNGgpCs0EFlEJg8AAF7ad7vBGXwIfSIgYDmQwzRYh4PTbJoN6QODqmOOwcGHlwqKN2xJxQvQZsSMglc4fY73ON3WDkZA7Dij+Ky4IgADcGee2BQS256YcEFEKYk4gwRoBbNAUMhDBMBQ0EHR4sii5ACSHmAy/KNlewpFRkIWYGtB/vJDu+4Z4azfNpDAL835UA/rlJQJwaoRBTjddQYAX5+2YrASe3wHgMEQNeSAkADBLQaBEZKgcWL429koBg/cZ7IF2jdH8FAwIWR4NUDwMF54PHENIY6z956ciYSuSYslOHUNoQeIWtkgpQ0UPAQeWIVjPVQNBE4JxrwIhWGHGUB06BcAANQAGZghgFxAYBaoUIBgCMKiHIDRMjg3ZDNOa5iFpEMsA0Va6FkpYi2uKXaOjDo2P2nhfeABZAAasnXgHM3hMCFqxH4OIaoEDANBRATApDigyUWPYHtHpgROMDHSTRUnpMyZQHa8VqZrGCOPeYMh5BwIQbgGy+8lSlMIOU/AWSqkHweNhUIMMuh1PJlXMOXVmk6mZjZKCME4IHX6fqZCQRQHbhWDQ0SiisDexSV0pAFTslMBBDxfhb4+J8C/mgH+VBvqsJaHLC4ty9qymkBopafZFikMwuQ8OVDRASN+QwwRFkWF8G4Owzh7B1BQiOokQ8Bp3GQDCQXM4LRIA+HgHJBoGAvqyELpQIwOQtHIECXoyA+iaQmJpByZYoFGow3ojCeeajQVcDCXQeAjhXGWOGjYdkDRwZhKcbNeai0PFePqk9PxfSyVwqgPdApWJvYYloGwLgZKKIvVGOMMcGl/rwEBkUlgsiaaQFhpAep5qHLLmtRjHCTM9j7zNhaq1FqanfQtajN4Fr7VYxxiQVmdlMGnwAXAlYMLjKxlYWbOe9TH4NH/liMJOpbg2EPvzSJydUR8XUkvWIk9DKHh9opbSI8vrwAKYHdAft8AT3wJJb4wQJA+mYKzepYcY6CnKPgOtIRcljBhqzNc35RDyM4Tq2Aer+kKGYP0EgkiU5+qiJiYdu4I5BTehQn6iBYCvmcMPGKlAubrsePO4Bi6IGo0flyDGu4sQxKym8Rushm4brtrsIEy8VZq2HhmztEtBTS1ZjQ5w46sRBEbpI3d8BuD7AXbCMgSyj4pw7YgVm+SnpBAcBEZAYk/aweg+HDZIklDIf5gUtAa7Vy0CEA6CD0gdR4cA1LbJ7lMDiFwTewR5EsQAEVsAwTUi0Zwbx94ka2QItAc6vDIBNv0jA2lg32BBJzQeDByN7DjWMnCCak17lTcmAZews0oBk+5Lui7aCqWQNvTdkY54SByDkMJk8LhwavW81uiqnrWdwe+3e27t5RzeNccQRn9TIqia9Ggt0U6azPV4C91bPN4NbkrTZADNbYKzliJzLnIAcLOAwWQNC9g3Wk/OoSz09j8sFcK1mCltAcMWSOlyJAjO2QsmpSO+BtxzyLJIr6kAADyFABD/EdhpN+RAfki285vB9p0n2FabngQrPIS742C4KDWzLdbMcNtLFO2GmMGyA2x7BnG0uTn03t7cg85J2Y/XsJRVCgGWcDlwVtwREsWdiDPRM4XdZgGYBIbgr9zPJZFrNDRnySHnzoX8l64jp5EeBUIrErCIWiI09Cnh8qn4Is+SixTaK3iYuxbi++BKKBEpJS83Rc0KWgzSCYwxtK4hPTvEy7cJBWXMK4DkPrPKJzDSksUYIj1d37pvsERA2s6g/nIMOYIMpmHHyV3WtyYAclBDAOrzQK9ORiqRZ4taPjNqjm2vweKcrjqJoAWbaCQ5hZYAcNwIRXAz2gsgLN7Y3AABCsh03GfXkrvAWn1123PFDBdbF/NdV1uvCTZHdbg1+tVw3P0AQ8AEmjwO3G70AMPOLV3gc+5CcYF9DwAgptcAgf1q+70V4C3L8WiQX0lzICVB6myAAfHSusB86XqSPpU3qlSPwHHOvAIC56Ubz1PObGBvfKw5p/EP/6Tv/oz7n5o2l/ce2D6HyLc9eDL5IDm0Te+0CP0yMtBvzKlTB8gKfkmbSVDmwAcp6+2Hle3x8jO6Z4x7HqtbroARcSMAcLqSWrkQtZ8jyYqrb4u5kBu5w7pZzq+6hrkoAAGR+QeW+xmuBQMJquBx4wQHCAgJ8HEQQ+c0GJBSiuBEux80ue6+AB68uiuLAyu7AmuCMK8auPB2uNAuu18HWhuGgxuuBrcVgkKGmUC8CkYmGK4XAuBM+P4zkNAGw4h1+zCVgp0xQjBWAzBnurBGCsutAXBDAQhWBKughhumuwhWhHWeuEhAhUhiAnIMhBCUAuBpegsbule6kJBzkRAuKTyeSi29AxqHkBgBCvhkAuBEoqBQsX2OkfekAg+SoY+WROkk+rMuK6qmkbEB0rsAAvHoJABIPgJWj4QkQQCiAkboEkSkYEekb3sMuPsPnkTkTpogOPgURrNJt4CUfBBUVUTUXUfTkjIznKAYjSKDNSpzo8Nzoyr5AxCyibDiBytBNyhYmLtYgYCwVLhYRwXLgrjYVrvYU4XOs4CEErvcWAACLJCQJ4SbqLsQpKutGBDKrbnMbwq3I7uJJrDYJkJNMtMKhJI4FgHxKfJQOHBofcc8K8azOCLNlXOQiiV4NRpAMtHOqdFIPuFjCoDiSdkehfDRJrGbLsHRNRN7CJswv8f4OMAoBQP/r+GWn1uHOkv0D0CgDQMwBoLrDxBVMgNDDlMgssIsoPBfG8IvkwCJMwFgBKB6q7PvOZD6NyWgCcOfDVvdpptCcqdVjXs9EEE6qSW8kTgCduucgiYqTCfQnwLSd9PEjQMOPBq+uursndjSZ0B4BgcQt8kjvvP8qBivvQvFIwqCljuCvIVwuIATnwvjHKuHNGcwnQCIjAYsFYOnKjhGRosSrMZqgYmziSCsfSvQDzhscyvztseypyvsW4mFEcScWwZYdYbYbwarvcGkgus1lLu0S/E1limkvAF9PgEQO8abl8Rbg1FbmKLKiEoCVAErOzKrLsKuAaTjtmakW7kPv+jZI7KdBPN7A/lwGXmgYHI6mskJJlmHEqMPkXn2vQO/vzMxDRI3NWNVlQkOVgF+Z0FDBLtpBKODJCRNBsMtCNgkAAPp2KB7sg5DTRvkkDyh6ZO7/ojDMRYiPbnzaRvYvTLSClyZYp4WLIqQVAaYSi4WUDB6XlpGHiuxzygGlEIQ7KEXEXEroovFyQSgoVGkYBoWYGY6rgQGAb0AEEn7b7yYg517zASWnQez4Xu7VBjnt5YAHD+BqTWbQhCxF68b0D0Vu7gz9lYriwTl8gNC5n2CBBKGjFGWBwmWKTmUUUGFFjICN53mkZhxFGjEPLaSD4YBTDrwOWl6mUeAuWTlIQCIiVsK473yPyRV8gOACBqVXlRoUWcIqHKr4yp61bb4flrg/juniDDYEHwQYYYCyYsQvR1zsnsBt7pVYCoCPmHn37RE8CUBpUMUaUYjaV9ZSJzxuTMDIAcLcX4y8kvpLpFjhCYhv4oG/TtVKoxFYp7Bwmx5NQenOr84hbbnxnpkrwXl/lOXNZJUpyhUYCOrvKWDw7BlEahko4AoF5RoY4xmxRxm44JkwornWDxm4ABr2DsQRGXAbzLVqEXWOokGeV5XIC4GtXGZKjGFJFtlnGcGXFdkIo9kxB9mKSDnqU43NZjkWXvEyFQByGfWZx4Q6nFaqFJEXUnVmXjmuWGGIAkHPaBZ01/mQ2swxIYz0ElwvSawxDVpsDMApB8CUSKVECYLezXENVWXLSyHxkAXfTfCe7aTZXM64FgXCoJCQXQVwUNAIVIVQ3ckw2Glq3cAgW4EoW4GuxMEo0y7nFWHo1y1Y0YAE1Yp41NWe0eBE0UUk1K2fVu1vAK2g0bTg3HXhVJWm1N67AfTiS4G+VcD+WLKBVTAkG82Shzz1zICIRKLqAmQs3yhB3ZkHVjz+Cx6a1cC3qgoeVm3CSSba1R3OVM2Tm4GszN3qWQ0/kvSPZrWV32mDgNXBoO1mGnFO1o3cF2F8E6zY0jnTB7mBy+3+2TmB2txFnaLLnM76JLEkiSjxLx2fTfR/G7Q7mcJhHA2rJyol3uKWCk7yK2qU6Iqb2krb0GK4jGKmIVlrFp4QibF1lsrxzsSwCi4tlGCO3sFT1XHCE3Fz0e0L2/aCkr3QTE3G4zkSpznSrW7+J27LmE4P42pxbZXVZEXuQM0RVt1EBHUWUmUZL+yXrcksW2bb4pAmx7AeroA94ADew1wp/6AAvpAAAO2QC8OCkzTDJCOQhrjiPuQaD1ICM2QSgX4/zND3w6RyNCkerSPjliN8OKNKhoXWmpn7xumnTfS9bbisKL5BCsRQid4Bl9iaLFnv0UpUpgA0oGDsh0q/38T/21kC47ERrfAeAzFb2vI70eNeM+Nc4pTrEBN85BNC4i4HHgPHHj3tnO2dkh3Hy9mIMGqcjPGWnTmfGYPeLzk2WLn/H25Al3bczMpgkQlQkOnGkPUcPUAAwOSWmWqD0UA82NybnoC6kIkbDQANDQCZAbApxsMWQmYjaOI5CPzggWTnjKovTrUIniaN1kZNPQDgUpwwYjNW4CDzCLgNWtODVXyrMuQPzpbsUWmvH7CKCyA5zvSDMMb3qsX/HeycMKIeD/iAQsXaS7R8NmwEV7Cgngn7MtMNownrxqQt5zhfPaTyZhILOIXVaF3bkiGF6yHYaUBSD0BSm8jIvniousJxwNA2AJDsgbAbCszQB0vQCsxWAND0uMvMsMuQDsgRINA5C4kwvsiMD+noZeWiTaTMBIDOQHRpKZ77S0AIGSiTU9DaSAA4BIACgEgAuAS2R8RYCL5VSnPsBCVQDgiPhHh4wNq67QyIugI0DwYqTbjew8UkDrwSk5XoAcLhG2SATeyawPLnSRGPxrk/pDNrgh1gBeBSDfR+aySqQaT4ZsRqCLIHUpwrCd5sQcZpZm53W/LtM+zhlI6vUZnvVxVl3cKwrJkxVvVZliJPURmmrgbcQk6opP2rWLDU74qEouMRNM4LFEjUo0j4hgNWIQOZOo0XHT3dmCH5PhXwMr181vHoNlMrRYO/E4NLmvKE6O7qyayEMtavYPM8sYCQinQYD7jV43zPTUTMM8CNwYAaAyr8PGZit8kPtPtoa4lvuPsbtSHLh52zyzoYwXQHsOvcneyB4xDVFwiF68QqL4A+Vviet6m2Px4OPDasLmMNqxiOsp5vCHgaPU2Ci2YUkgt4AQotyDRBmI73WUKPWFvo5Rkgolv8AfXluJmVutz8IHWZnn147cJNL1tI6wirLUxNvXXIqtvorP0dt4q07hNv2RMGJf3DveO+PxN/1+SAOC7IqNnMAjvi7juT2TswMz3u2+3y7XzwQjB9U6UPvLsHGzkVPYPVMBL4MO7/wsPGaNU9U2We6+77x67aSaVoD9W6Xe5YEa5+6KWEEoUgY8GR6NL8UyNAeR6B62cDW4nRkNJUnP6v4oWf4CA+v2R/7SAAHaTpdaV2dcWaCQA+aox1fpzbP3k0RmwvEpxukNUTkHTORkYksVfyBhLDKsyv5xz9G4mv7QDLinIpn4PhyZUabyZ2l8BL3GQScI5kJRr5v5lFtMexXY77UVs/XPzkAKcAk71lmqexOrEaf+NafJO6d7H6dpOjsZOS5ZPQOUEyQ0EYn81reHUrvm7Ofruud4NbvHTgh8lDO/NnReAADkJk8ZYdDgZkjsewym+u5dpBIMWcv3dCBuczw6tBJAf3QszxvaCBuJuPdB+PjxQQrMdZgokgnQ8gQQEp2kKksEPogng8FrWPsR6AxPpPeCK8yz7kPSDYdEqjRk6jgn4ZD6f1AayE66Jw0oRGEobxU5rLmMxENA4IOGuAjLjw8Ek2K8rMPgZ7PCFApvYrlXoXdn5vzWlwNvjLFPcwJALvMAFPOhczdvYXGArMGhIhJAHK9juCI3LWtASsJsVkfvDvHXPB9xoe1ckG0qrEgblwLsnrh4fIymjkEsXDiAqk45YEC3rMjkQQXUnQxvERAth7Nc7bf20OUi8m5VB0rMIm4gyw4fCfdxbERfD7C2y1pq4Q5WzHbwKPdlPJnQJPc1ZjczlrSrc8dPSAxaTfn2UaKXmsqbnf/2Zvcx+FkXE/bkQWLP/AR7mP4/WICtcmxSzrsA5pI/smK6Ff17zVHt/dPsvPkaelx0GwQN8YPYKmRUbyFggPHYlkdyz5KJIGHZdGlQR+409oMnhJoi0R3b0A+O1bDXCgMSKpsAAVNjx0gaAEBs/aDATyCBKhV48RBItFHH6QB8BAvKfMQOF7k8G08ECgVQJwG0D6BxSRgdTxIHkICeffEgOwMSLgh3W9ACUBAkKw58ES4AstjBA0YC8+BwvTwkxXeAcFNoC6f4tL22CIANGcg/6iCGV4xE1e5CVmKnngjYCWiVgHXpiH146hrY10VHrsBLrNFbwCXGgDYJwi68SAEoYakCBRT2NOQZDZgPYIiBPh3wioawLYL16MYIgHAlohHhoAhCvBiAHwRKDcKBhaolZH3qskHwxBw0R4KIUFTFqEo3B0XAPMHiG40w/BxFdlJ00NQhCwhuACIVEJRTcBgAqdIgKzECEAwmhcQloe+EMDlDJKsgMbojCri1D3IAQhocEMFLNDWh9QjoV0J6GzD+hBvCIcMOoEVDj8sgKbi0CmEjV6hQQ9YTqEWGSdlh9jdvpJxOHzCBhmwhIVAFGHVDOg4wimIcJmG3D3ICwyIUsM6FXDuhNwvoXcI2FDDHhMAGvkQBt6ODz4dlVwdsKSEkB3AUrA6Dbw+HHDgR3w+4b8IhEoioR+YZAOnR9DgiLeh4K3tCL8FOC4R4IxEaSIeCUA0R/gjEY0JBFnCcRdI8kQSLyJBViR5Qi6nHwGowjKA1I8oYiIFG6V0RQIlkViNBGswCCPgQSkdXUriiMAEQkkU7yCAUjFCaPeEYkWgBu95gWoqkTqPBE2xKA+ohtG8PGSIBJRvQ6UaEOxFRCNgC6f4axS2GJFERFojwO70ZF1CpRcwmUWyKiFeifRBI8EV6NyEkAVRQo5wahRpEeCkR3vcQiqIlAaA0xwYpMb7wy66U1R5QoPi4VD4J5kAlI2ESaNFEJj8xbkQsTBBtFpiNAUQysTQGrG4Jcx2wwPJH2j4WRY+2YlUtqJcHxjZ8NAdsVBE7GWQ6AKYusVEOHG7hRx3YqrgNVbEejE+QQZPhKHuANAc4MQQPA2OXEkBmhVAycHSRwjF8noGMKgGwD1K7opIYcZigukCA7IleDkIeMjmkBj9Yq+OWFOgFWRs8JeMRO/ggHFKw8SAgATAJEen1HbkgKMAJBoK7IQaDmxo55s6OewCCUCj25vVWO8g/jhxx+rk0y6tAnAszjwEEDeBQvWnnMwoEmkjOUDEzl92oLKC6EnhUulCnwn6YuAREhgUQPomkCCArAg6BROgFUTYB2seAVxPISMSya+1FiX+DYlcDiJnE0iaQLp7CCU8s8QSdkzgHfdRJ/3I6BJM+qpsfxRLLgKkJ8HNC2YwotHgQJgHqThJmkhSWJJXhMS8ctAgyeSkRHGTMQtotYayPCE4j3JsQg3pZLUmfcRJdk7SY5MwFvAXJzORESkJiG+DMhiwbIRtEjF5ECh/OLRAqAbxGg+ASgoKTRJCl48kBDk3SXhKERzhxBXAZ4cMk8lfCHRoItoVJFdEVV/RpwnyVUVynvcJ2LtGyXRNCl6Vipv1PSc5PF6GSdhhBK0ThBqmYi6pQYv4SsJaneTBh7U4pFZOCm2TCp9knSYNNKm+4oplUmLsHn2G4App9on4Q1MuGsVVhtUn4ctJNSrT8p60xAZtPCn6SRp5KKqTTAmk2imRC0wMT5POlNTrhdogMTNLamBTOpxnbqTYQKlPSwpJU5iWVL2m4iTeXIvsXsA6nmFIZnZGGfwLhnbSEZu0t6dFITHIiUZ1Ab6X6OBmtTBhwYyEdCKJGWMVpeUqGbRKYEMSBpuEgmUySRkcioQ1vVGcaMjAYyJ61ElmTjJUEczJJiMomRqgTG8yGRBIk6SDLOm+BLefM+mRrA3DCyPuD03qRtLxmcynJ0siqW3D/LRi0Z4MzGaLOxmPTcZ/UraYbIinlTfxsswcVGJ7FKzqZEQuUTFwVGuxtZXUm2XrNhn2yXpw0k2T4A1Ee8BZpYoWUzIhnWyNJwcu2SLwdlSzCZJskMYaJjnmS45d05mUHLZlFS05Q042S7KEi2wvRX06QJ7MWnnDnRuAQGUQFuk48C5Scouc9PhlGyM55cz0QaOjnkza5f0mmVwCzkDzW8AcrGe3K0mhyu5TspGRGOTE9izJsYy2SLKEnQzbZEskuTtO5kyzUuNAReVmPnESifpVMuue+B9kB4FR5fCntXKz6TzE5PUjuQbPTl7yTZjYkPmh38wWzH5G81mTPNTlhyy5o0xEZ/ObEUzphzI5WdiKvkewb5i/e+f7PjlWz/54s9mTvK5mRT9504qPhgBj7jjl5v8lBevOsmbzk5284BT3NAUJjcFs4whSfIwBDzQZgwuBdwD9lrydZYsreRgqoXvzy5SJFcQMLuCdAvYj4ueKrzGCSJXZZ4vcTEBtHrjNxGAbcZwsDnTy+pQCxIDBLglLQH65OWMO2xUj4A1IHsM7iWQpQABOExGkEMRMgDOrZNuc/J4k3AIcnXWIMgMB7fFLcVTDqDU3c51MAEDTbcBgN5qUB/qhpfNoU0yiChGsvsJNnXwrn2ZP4U2GKBnHkqShNeGgVmA2kbjfBWYLaDwMwBNZ1cOq/yehoRmrTyZQI4wOgCEIA76klJhaRdM128qGkIWjANiHhTXAfCvxkLbktUr4j0B5EhpfRKakAqjKrUoy71BSh4CYwHIANCtOESEqDQoAofWAIoG/zkoIEp3VZQunWWbQABkRcOrTW2UGgoAESMDD0ztgjFmcpysxW430S4hlianOJgyk04AMHuuxLlPp3gmbcpE23IToxwimxlMJX1JMuFJQnFoCJahXWJnUMJhLIIR7OQYIBWy4FCmJBUeiYXuncLqCzi8QK4rJHsBPCMhHtopz7YUonlnjH+rd15xbEgGXypsrygcUJy0F33QwW8gB6OdymUqEHr4rc7g9W4589yH7h+AeVmU/zWgECF1gp0ARkoIIIuHEpMV10HqEhOOUQAAB+GVd8wlCDZA4X0eUOvH64ykoQALEjt8CUTSht6N6E9hLEPAXsVIOXb2OspaC+UDFnQCQXx2KVWB72V0QeHyHzgrAQS4qk1czgKXMBA82FTIBQA8Bar4IyzGIN6swA/tqmAawagaQlUtR/0QIEoeLUfiBCalUfQUiKsDW5cHsIazNcZljUHQJOt1BCVtyQkFtAUL1NCSxwO56TIBx0IVR5E2XoD4yEqpItKrGIHQkaphFlWQtZnsrU5pNX6d2oImgrdVh4YbP2rRXDJVVzETVUOqIAjrsVhcydcStbjsgbVZ7NKM7KJagrl1zq3AMnU3UkEBeo61BeOvgF7qV406xNRgF9XsQuAc6jAcurDURr5gUamNTeuqz3rSFa03FUr33WmsE197L9Xdh/UhqB1WarKaUIoBI1vYuBGVCQTjawFdooGrhbusg0vrBV1AAtSELg0AIEN7qpDZWuA1j0x14G4IM+tZr3KlOFKBkM8uu6VluotK7TjsT072KjAfmRFhQGbQ/Y6sQqEVC4i5WrtgeviDdn4oFXAlS1b+AVJJuxCAInYomsNcEAk3CpnEPscpcmz5DrKnW22KDmuE57DZ8srmf0FkmqJ6N24WmyUKiCsCZBUEVVV5qNnGwiZ1INcNiDFHvjygGeIKGVnyBQgjZiw5uR4uICeZh1qIBQIoJaCs0eBL1HAMkPiEy3NoaQPEDLN5WQCTYmSc8f4EWCEgBsi0QsBnkertUNUM245J5vEj9WBAQEEoCJM5jCQwUIk7IGwPrQSCsw2tLmGCui0Wb9b2tMFaACNhGw5AYKqIfltNrZY9buto2wbWEgaAAANIbRi2m05AJowWlOMJq6pa55gaS3LMOhUiLJlMqWc/pdDc0eaNG8SB5EkjFYpI9WnGEBAQERYB8U4EvdkpWjDjyYskbuVmB6lvnYczx/oXEt8EBicMvAB0SiOvFHRqZPxUyRBJwy+g3QalGAUGNoGCB8ZYQGAQxGADJCB4wASscrWRHXRXbbE6cGLTJCxTqBOo8gA/K1h4C4tF130F4J3ALRhrJ4FAKQJAGAAeoqi+8a5LUXoBKAL8sERdExERjwRs2UAQrRPyZ49w3MyAAbR1q609aoKfWyAOrs20jbddY2ibVNpm1zaYKC2jYEtsN0rb1t+uxCnBQmg74pEB250s4SiK6Bm2CuggHBnmAVaK1eGeNkPSwLHa7Oj8Z+KjC4B+YudreVze5oI7yAHtiSZeGKwXXU544PgcbSNjaATRcSP2tiGJGjR8BAdgcYHcN0X6zKL4lASHWgGh3DJCsZAIgPDsM0EYUgeGfnC0jGXfQrkNyafGnCA5wQ1AHCf6mvmghS694tVN3QYrki50aImhH/sNk50XsqldekXVMXF3vRJYICGXYph67rdc29a/UpCqkTFswUoKj8cd3xjgDa2GmHnOfsAmqJnxrCAiRJz0Vtsqccnbtq/XO7KcVOgmgwC7rE2FKpcgeigIIM0JvFZAzAGNZ4rXbybQeNpIwMpqCWaaRNYBvtBoEgOWMn90grntUXa03bMgMWH4AiVVKOwRs0zZwMwDSCgxjGJlXnmHDs0wQ9gPO5TKsTwh8cNAogCgFoGhDHx5wFi3AAyEQCGI0ATIQA8wDACUHqDBuCFCIq8DYURFP4DgBIAAAk3DPXZrt60cASQGgRYroYEaswWs2ATkCfEsjUG721AGPvFwBxaIKAMFV1WGtZgZbMt6WzLfiFZ3MJ20daN4MtCsCogqtp7GrdzsuWvE1dY2qZuyE600gU4ccDPRNuz06654ybWgKDlkQph/iahuOCNmFQCNggtQR2HxDqTYAOI8EKfvvB1i9pcAeR2CDUqKMlGDodlUUhPqcDrozmS4e2PMFbww8zU+8PXcNsxYpF29Dg9HZyEx3Y74AuO/HYTuJ2k6EkjyPbQJHOA1UOGde11R+Ts10BQcwyMAL5Sq2WlkItUcveMFqK7AO+qmcDBQitZc8/a4OkgyjreAXJsIe2y9ZAHxAaA3jHxnmr7mcP4hGs7KnDhwVwA0g0g1eoph6kjZIZBj8CBwWSBpAWLcQxjfhBLhgIgIeccqFSeuTVjiQ3SxBtiASnoCx6sK6SmzbzshCRhlMZAQI+e3YBpI2IUgfVkMdwyF7O9oO76Lcf6ZO7Isqe7NtRz+XbowyTa4/S2tP0YC79VbK/RgKP337xOLbMnG/r2A4oP9dOKjpYA2AKaSGVvVjeSqMT4gTEqnL/eYp1N6m/9P2TrrdCEJKA5KHWH7VuGcQYNZNPKuA3yrB66JCcU3SyCsAbSTl5Ac8QpqPJeg2mAGPGXcMsaApBCfO+5AXh6mQCup+iYcL1P+ztSMxHxzqLNdajQzWpoz1qb1DGdmUOpINQJCMAgBoDyxVk36WJOkSQPQF/AfAeYGeJAQpBcAiGLAAdkcE7x7YdeJ2CGaVX0AMzJY3OVpjPhwg9tl25lM4HGBuRSzHWWuPXE0EVbjB3TUI4/Edlh0pTXAermHB2wXRNY454s4KBBpFEQKB2RrCxjIhDmOTC6BgPWJ4iQ8PmJHds5+nDg5LpMaASQ+eeK6YIu0YgN81JD1JzxT4dGFoCRygxYhE2FStbq3Bk4vo30c8cuheQ+wA5GG24MC63ta4kA84BcfEyUQz5lmdmZaNM1+aNjyA1x/6TwtksbSvmRS+/bpL0jItCQlAnIVQahjjOHYLsxFwiz+ctjcHW8AkQZiCwoucXz4co3tPMEEuUA6LA6O8GJe4sp7iwUljYzJYZ64ArzI5wCEoSIszKseUEG6FPq8wK6al3wBc8XuMiKx18G5PWNlVJSDgRYGSPiN8E8IfnIAOhOy2uAiQwcO8SAOnUPuItvHcQ7xnswIndKSrQVtl9jAKWmGSgUKCQEYs5fYxXTppceB4IeHwvGZ1S+MRZVgAx7/pRkEwieHWeeqD8xYByH7T6fXT3GgQnSMcjkl6TN6GG1aTWuHHZr2xWzvp4ZCZARLJ4v+He7veXFvI0WrYLV5VW1YIHHn9tp5uArlbzoih8wDYZCB4CYiyBkIneLFCU3xaTlsMC58qzXU5CVY5IMSDEvWnI7rYGrLSyTLGjKvjWrUEqteF1bOyMIDKxGHZvxCzUYZcIewXaK2eX1mp+rLgXEprGusbZbWz574P+pICAa5Rjp5EehbwBhJnt66ZuBR3FjcHW4Tm6PSAl93QY/4f4HWDCE6XukmlvyeTA0CLOTmjlfFNM6PHjgsW9tKFFiJaVZjixqrlSV3lcZrzaQrUYFgOMZDRIDCvx4gdS2Kw3P0BYrhlxc2SQ6DyBA8JAb+OXDhv0AIkSAbAMNi4UBYt0j8L0QbjZuLIMzC+LqfBbrjN8I4IWS437WuPs2WLkoUaCJcDSjZiwhEVCinEst/IKe2kGJHOlbzn5gYCdOQ09B6sWREqXUlOM4rLT84klQIDPJDOwtTmg7LtxZJTScjK6pEJ19K160yuAQdzJNks0cuYrZWrU+VlfIGQ8T77/lDaqU8ySv6ltRTHarjgihLSChtkyiZjGomVYIWtIxaePevCkESmke1lS+oAOQAidBzf4N5uIOyXOlt6WeGGMsoNMPLDEVizxhzheU3c3ld3D5fWUe7fKtT8xClHPepSL2uNfjXjQ9zjggMTTQB9fohcDi6a1N+m0VDAbk0LlnTCBgJbu1rI7XzMmmtG4uk/5NXIw+bfEueg35YBw9YcPTeyC4BpSJaL0LkLtYYOJ3zBbwTymNVbxhZbgIOMHBDgvtt2H2s0E0v/B/4viBEm2FNmMBcBc2Pa5EPsn7BxiSJIcgDy+zDlEr0AIEDyMAOcwC3VwsHM8ZxIXa+R1qS7h+wFahOBWV3Du2EwnPwlMaX6K7GEyU0I4gukrv97jY00ve43VlEmdKnTsLmhBn36gXDyRDldDicOocQDu0/fcdOP2bc/K10xD35znibxmd/c6skC7L45qrZykQ+eSVdnJVyCk1H2Ytmnxfzw5sXr5QXPYZ0+U5sCdmTRnwhEiX0leVP2uVWRw4KFTuyMTdUAt5luMTVDWmviAEEqB4+at51TXiQrTgGvPLkmYSlWaMwVkHLsGVicJYIGMQfd9TSyiDt82XMOJwx+vyALxgT3PCl2QcvClIc8V4MM87FvMoertjYroL9yOmDcC8CdNLeuS9Xi0pceMmjO4xBWFzAFh0FE4vq2U0eKAuef2uhVFP9QGgMp9GvwQtF+KFskpzwHggSg9tQztq889xJjPhknY1UsMirVEBXYF4/ZW05aLxOLZbPUVVwxogPbO4fAXaHF32DrZsWcm4ICQwxj2RPKM+tcLJRSVW5YxeaiXiR2/DGQvLrT45xthaDDObRAVz5zTG+cAvfxBA+J/vBQqPxRo9UGsUuh6AqRT45sQC7gGJJku2XPxEgJFtbzQ0nrXnfUFwH4ouPdq3sTs59piKsJgeeLRIkK58SmTQ0VlpQM/RsGUQN1XQ5k84s1s+hzbk1vS23Fbvz5vSlAFEV6aIBM7FssTlon3DAwKJJXJMaomPH6KTx6zi6JRH5jFbx3q94Z+6z1RuyjZX+5O5ra6XwZkuVmGYTCwBiOzZIInRy5ePjHRqDXNo2sDM8pgauBOuLm14qzVbRewBgXq5My1iYNK6xDHVcc2EE8pIL4N9ogTEPQkyeHnFkOqgS4W71KAAkwnOzfne3Ve+eMpevM6Ki7/D/k/R0FORkRHsjsR60+OiOz8crPMgDcrUIWyvpJBAd7gQtm21e6ewDAWHRSI2Yjbu2IvjsH8bRvWK68Mt2Zn6DPiuomsaC3gBLonPENZzm2qRaudAauhJBHVSYX3f/o7a4U/40k7wJfTorbAHd0kSisjFb1rCDDb5VvWIb2l374ggk7R7hTRa4tHtWoRZdW0DozzoycDCQAkBgAr4BtP4AwB6BX18ZXDwiS/csvXnNMKl6R5YDkem5mw+j59UY98BmPpFml50G+ceo/nUQtylK3mDABxn+C/AHR/Cn/Xy1SRdVw1FFd4JB1ttRT8GvdVqFVPdggYbaB1erU9XsAA1wCJJUgP/TTkBTVudbyCA7NPTPu0ctTLn4e76cSfhZMwgXI3+K8tPfo+rQL1s2M9tjfogy3s4ru6nFe0ffXsn3pauj37CY4YcYAgcaDzChg7odJZTHd9mTUDwsc+KrHLpoJIkGDVyQtXULngkED1bOR+dKKCgP70/uG3RM8iR2PKXCoJKlcXgLCIZjNimYAvIsPEnEh+2I8KA4Bjvhuw77HI9glI4IM3D20xRyeYAVJTneMy65zj6meDDLYsjPbHHU5xrJnisbmDBZ0gaw01pXwd9RAgQBndkqNZ86VA9O/6vkorRVpi0/9JQG9AZ60A8IsEBpKzDUiN5/yxvbB7JaQznNlg3NjrsuTtZWkiKjXvgh0rrQp9t8HuMqd29yVrhHM7WpirWgnioOqsfZwi8Jb7TZK5LU9pRfqEkMy7BzjbsVirZmzneU4pmRxpWhASnZcMuWifut8/Fo6OEzEZqfAixSXARFeTmLNAmouB3F80ZrLtVupOxAhC+C9iLddwxnac+jls2EVlEClY5Ir4AoWBhvHroXt0KKXdWj9sXweI1+XRND+QBkAYXc1J2/PzuKxaHvvTqSM9vPNisSTEulSJAfYD7fI7oVvJUHdtQOA3IvLh0MSV4cbcG2AKhjsI+RVscoU1dk7i/QZyGnP6l3aldF5rJJN17DK57s2Ve4/Z+vKXzox7DADcAqIol4v2Y9y9eLKmp9Irz9WBkxVMA+5BfCW8qRYIOMHL8xVEuho0cw4P2zTLmYzPuphrCZoC0mfzNGDcSPT28nshxrEdh/petjyNZesTWjHuJHM44JaCV1y7myGr2fxGwCWrTe4OvT069XufDmBlkdIc8jBhvpJPa85yTGg9aZxIGAgP2uAOoYnQ2WIakmmeA41IXLDV9SLffmBtKLUANp8O/FwDoshqe9EYsV4deCScQWeKCtRh3SkgF5wA6Sx5JTzaS3XhItMgHtsG3It2OUPWQizGVHLBSw2xisLX2QkW3MfU91U4dOGX5DwM7xARLLJ/F5hMKGc3SVqdYEHV47gExAiwj4AKwatyrdeClsjgD9T5BPKclhygszAXgOx14UPDfUU4UPFMlP/ZAA9hZseEj/ETUN4xy1dTAwPeNw4XyxMDlMUNHn1LGENRusVA+9nCsQYcV3vIPXd8nXQ87djBwRkIWjHowKIbbB2pdscgPQCI3Zv2Gp7AKiGyc3GLtWLU01M2AlV14K60Q0GrTAIoscAw2ESorXRdH/NdvI5Su07PGtyzUiTUC2gCvNHc3d9Z/egOlRCWIPWnZs2WtT5NCHMuxP0QVKu3EcPOSjTfkcQDD31BX/ADyj19wa/RspYxe2hMJ0aTQNsJoYd9hv8oNRYHg0GPICS0CvmJIizcs1YIFwIyXXAiotWaSK23wLZKZSV54RPwiwDNggD2P90feOEThk4XWAOCkiHp2JVJQJyl2xrkZrCuUs1a4L3d4Au4PJtvOdS2OxRlcunfc38ddysgcbKHgV521RMkRUN/etyCD1g9GjQxByQ2GktPgpG12wE4JOGIDz4V2F4tHYCljHE+Afwh7dzzT4NOCXzc4PRD0AgEKFsoQnCB9swIFoIZ1hibCFhDc3Fi1m9SfJQCRCX1SUAID31RlD4D0Ak81jgakLEPYwS1PjkKdMNFkPNdj4SSxhhdcKoJksTgu20ZQqAjXxKwysAF2cBEWVcDb1JdJ6BAFPqZTAl1N9RdDNNcASkI6oP/G/wGDJ1ZkJsIxg3ATWDwRXAlSgbLKYK5DPKX+zDgugl/wQ9JQUU3H4Arc2k/9oOC+GrQ5kKXVYQJQMwPxBdRFokkDxgaQJc0+9JWAo5XYJwPy0aNZZD+cIhEgjngV1NjxzD3wUIg8DrsUgN8CfYOk3RlikA7HBE7AlCBUZ72DQCEAB+V2E/83LMMOLRk7HSBjCKJP4nNoNg5DU1lUNeokSIogjMK2RYaQdX/cU4XAnqQSCRxiXBywxq38DtzZlECD3zeOzrCYgUyRIsH2FsMYp7AG/w7D9ybsKVBew1uH4p2/JmxcABg5Hjv8h7H/mdc/CZYJfZ4GC52I1EiSUJsIDsWbwEtjgiUNfDlkQchvCH4T8JaJvw98KPhfsD4OI055QpiY0AaVMiYJXwjCDzD10SCLZ8uQuzwbsrQly1IDixesJS91AgYVvoQvbU1BgPGKkEz8qyBJnu5YvU+xe5hoH7EfRu0MSCBpkwWTBr83EJzny8G/Z+zJpSiTmCqwGQXplPhXbNXiVtMg7wN39mcJQR3RYAcv23hDUOgEqpFwN8CxB1qLbBogRMXcAPRJOerzs4xIwAkcsGrdSOvR8WDZFgw5IUSLcU3gaugjNq0RhA2tq0HJyjM69WM0mtszW1F9RMYZ4gBpUzbzk8iKYTMw8ibUdFF8jp/N4i45pMbSAe0eQT0E6gpgLQQcjVuLAE7c+QNyOKQPUOtxwgmNZcD6BkzXGECj9QXKOPgco71EKioovNVmEYAHpi0i47aIlOBikH5zNRgo+twn8fUPM39QQQNKzlVt8dqIngx/NqPCiuov1EdRilZv2xI6A6E0QQ/IUZxi5LBOcEKEPWAglyhYgiWBaBy+PVmpCxWRyCwAQdGrB2RpuEjXDNpogSi0CmoqGBCZHANzDnBVmIKArC8qQ0gyF8wZoHJ8SYdtHG4WTUaJ5oiom2238VGYIBOAmNBY2qAE8I8IX4/BeKEwBZAPbVVgGfeqAddQgcXnFAJQVvVwAlvIJnlBJoz0xykuxagF5A1ceQyCpuAODT5csQaEBuZWsRSm9IXoKJU5tMg6PCJkgIG6ESRyAWZ1A4lEE7jAArbL6Hl0+HeoJj9Z3cu324E/LCSXcoAZP07UpOCnHbZFTGnEJQoAciO3t9EMsjsVFHQ03VjnGTWIeVtY1R0Pts/TR340nuBL1YixAPoEr89YDLwr9sKbiPFQHTYV0sdcGASMuhlyazyixokK2NvIAQDMAXRxIDEFVpaoiwNnh8HIbEZkyRRyMPAO+OyAnMZSbKLCi3UUaKn8eop1HM0go3aNCiRo6ZUijU46fHdiMUTUFWQGgCwywAw3U8KajCnW8zR56AJUAX8frTvWLESQ74HlAbIZTDrjaoKq0ORh/bkIotW4m51uwAEDuLKRoAxuLX8X2KfBrt+AV/kkUKtYbAW4bSeeEhB3vN4AIoVEeRHUQJ3QWOj9S7eRyFN53NtXY4l3LRVpZZTR+mk55Yztnk5dY0Ly/ozEA2JpUjYvjQbJTYpiKOIWI5bG7RbYhpHlw7xCHG/i3iHLx4juVJ2IK8XY2pn0tckFODjAjlX2NeBLo4fn3h3Ib+KLhnrbziCDOTEmAb45SMyR0DpFKuPeY0edq1AMrrDuAHtAINcDudjvTBPfJ3fXuPR9XYfoGaAzSEgDWoLbNoljg0QqwFZgrbPtCYDWYHkKIDqdS/0+p7w1eTlQyXNAQNIqE2OUPYtYH8JWDNgxy12MHYADWjUeaJ5xeceQSl3ec5nXAFk9zIZ5wHiqbLyItkGrJRDhDWQ+NC6NcqJ60ZC3/ExIphX/FOFDRHnYjyYpztIgF649gOTSMTCnfTxoB1PQGnCJABFv3vQnouxM6sAkvcV5s2Yo9AiSWuO8F1dqAMzzD19sAqjcCfXYvx2d3fMlxDYN8HNwUS3wo4MgDJQM4GUtFI0/1GwUgq4OMT8k8y0KSyovWA4t0Ahy2opLzSpOwpxdS6x9dmdIAh/dI1aNSEpEiIWxPg7sSxOlCe0PtE5DixOJPCTw4DKxADVvNACp9+A8hGGSWiepN/R5EppJlD2QjrFaTW8DIQVCEQ3bBqQw/FoGJIArCZKMc2Qz0DlCFLNpNVDH6dUK8BilRm0ORenUQH2gaxSRPGTtYX8NuCbEuuwuhWzLqCI8KgRZGbiv/XcHzQW4RIikSbk60RAjPkhy33gFIR4OWsvyOSD7NqdQoKYdB3c0O4xLvJmPoBloYIBGwLk/lz4J43KDhugSU6tHmArsDl27CUgc/jQT9QbJXIBdorlJWMaYXlN+j2U7qJvIVGGZ1l5rozkEzJYAWQAOBK0V6DYCiMXZ1kiNk01l5tmvAWyXR72eBkgAAAKQ2BoKI8Jcs5rIGkpj07ZlBvdpvJJJM8UkvziER3kjIOrQ54HJFxgMrNKEKcqQ0v3/jvYt9mGJ2SOCH51tqSOF2wUKbBPRQJcU6AKNCiMczKCxrThIuDdo4xK5BEIAjC6Vlw/eH3Bq0EHFlJ0USAhPRVwZ9H8B0UWu1V5ueB9yy9roP9G84mE1iwuhWkwVQOQbSMlySA2ARShIoyvMOMQlQVMRKn5rwz5J9ZLpLhFJJtIBb1SRUlXWEABkAitQLIGpUe1JESP2Ltp3OgNj9m1A+PFiwVTjkHjyUNcgHM4PEDxA0gI6CIAjEif/hCTIiKwT8Jr1eDxg9nQ39z+dRwiCIhSSPE6E49pPKjxJiFPcoVwJWPNYCfTJPLjy6EePZ0OE8PAUT1+dN1CTzI9pPAxPk8SVBVCujt01eVwJt3fdKlDbk6xJY1EiKW3YY1Ca9X/dCnBoBGYAwJImvUoPBD3wzWJJIkfSIMl9Io830mjw/SWiEbFf5+PM1R+A1CXxMGwgQaJPU9qMqTwo9ok5oQU8h+COhgAA0eXEOUQaeTFwJuMhOnqIoALDLmY1Cbhh+i3bD6HL4SYN9AEY5MxYEIylMlTK9tDeJ8TYBm4D6P5gtM46CFtR5MTOc9JM1hGkzHTZoW0yFMoID0yEbPAEaxmtSRFhsGedkgsh1VSAHMyEU3TKSJlMtzMMyEYmeG8zuoZJP1cAs2DJmDH/BIGZQENZ/gNDsybtLLEIIg9MGQSk4zE+D//bzmL83gpFJwhmk3AMOStgyQXXDxrCkMAjUM5FKIBrbGZIA85k7Gz44a4HELKI6smwnhDZQjkIqyAPf1hOSOLJQi5hzzYrPqzSsvZPuSOQx5K5DjkvnQRI1Q2gK7TcyCbJ6zWQoFMqyObYoNWzlodbKgjBkLbIA9ncXbOPc1stoPJQQ0iyChAK0gWFAj+0+CG6zDssrNAjPgjFNrSsUl4JfZcoCFOHTYU2omHBb6TdOZxHZOf1zSZSVhDQxns+EOOzlWBdExTngp5gzMUuPgJsZTzYHISzyUKkMqilAaGEezwCStKxjticjIpjNoGgA8xnAH5ByhA03agRRhAtgHL8uqe4AEQGU4tDR110UriJddwLmGYQWvMQB5N76WWIxRL4pUy3tyUR5XnsaQDWIPtH4jR2fjgGeLzfijAD+PwAn0PoE/jvzQMxhB7Ys3Dr8XOJ+wgTFgbIJBoAAMicsAQdSGldCE6HhegdBZhN34L2FQDfQMzM2yhSKLYIF4T5gClOVCyMI0OIdQUtM20xpQ6vBoBGsjh1y0q3R8xasAOTxwdhvHWZI0AteapPR98lLH2YsQ8wqjoSOEmJT9xrbEnxmyHbSiGohrjJgOPgb+R+Bk5ZYHC1GJEUgFJWDmTWNDoTbxc1l8RJsn+OZM0A7PMJ8884n2BBC812CmUKeJSJ4I3gAQEEwAWbtl5Md4wR2XT94+PzP1q7KWOJwkUV/Qvj39RWOVMVYiXL3p747fJ3pd8s2M1yqjc2MxjogLiKASHYvL1AT+Io3KpD9RCHCjZAKQi2OxGY9InK9ssvWEhcm8mn0dsnXHZPhCVwoNIugMzPpMJSyQ5OEDUaAHl12hoUiAsfh4nN/K7CrogXglA4CrhJ4TrbH3MIC+QtOD6ic8i6AwLIAL3JCBBE3Av2zdWdtgvxGDRZGNdVMsfInzzwPNTxjC9UCFJYyUFqBZiUIZBPCUuYo9hfx+cBfhbTIUzKPwYbIDGzxZl81nLrgXWaQUooMJNE3wZ14ePTh9kvLrBvg80qOyDYt4qPxDJd4ufLncF8+kPBUpCvjjAEZHVd2CSr6MOEHtG2BRGbYDAXAicKT42CScKSVffI/oTEe+Nlys/eXIe5tHI/LVzu0euFAMrGXXN4ib8hTWsdivL3TmoNgXEGMi4oiewYFUQX6AopIAdLj6xjtCUCOlkAfWHvlIAfWEpdW48OCVBUigEHSLMi3g2m9ciwouf9sIOooKKiitqxKL/zO7Hhp9QI8nEgQisAEhBnIBrUxBw8h+F4g8kf0A6zOYcih5Bbyc2lbNoBDtLWdKEf9i+jpQyHTatg2LAHiKC2Ty2LQ4Ut3yHiAAdQQBWSXWAyE+o+uHVUjyTxO8SiHaUj5BqEbYt/5Yi+1g2BDEMMy6YkCrAG7Dno2NHEg0okDBCRUWHgRIRXSFgGTZduTvXTMfXTqJTisnYQVKLgS2dDBKgVF1EzjhowCmhLc42EpCgD1XcFQQTgeUIq1WCwmKWiDJDDhhiy426EOBobFiCoB6dSYvIBrqG6l+UZ8gUwKtDCmR0PjE/VoJrtTuVfOFyZOBWK7Yt81PweU96UGBoieNJ+M+UBNZXIMBozTg3ft50ZsIH57Ta/O8Vb8/xUHig1MtTkh5SirHMxlS4tBxMI0FnT1SDUlFV2xi80LFd8ISv7QeAFESknaYC+LnPK53cs4Lnh1dVW0/QmjDpnVoeucVjIx5wKYyJ0BAVmCDKyAQnVBhQywrHR9pjaMrnhwyjAD8sGQAnnPAwAJkCK4MeMriZ5+dJUHACjyddCVAw1cQoBE8Ea0gXjWESgFOgK4eAiSKt2O90uANGRfEsC50nQoXSGgvePZKxYxfO5KoAGTi/c9SxUq8BDSjADzCxMO3OPyogSoyIMTS8LV1T9UhIGiUxAMlyVBEyuMrbjAIPMooslQTyDXL0tAQALLa44ss8g8dMgEmMIyonRJ0ydNN17BEiVcuDKoyjcvsgty9Hx3KdIPcsfKU4IstbQ3ypUFPKUvf8sjKryuY0DZbyloiVAKLdcscsXyl81/LIK3Q33LDynSGPKMifskjZ0fYIByB0fMAEMRdDS8tmNydMCqgB7ysgGTLUyrqgzKnyzBBgrvgX8sTKyKu8ADBKKr8pQq/y/HXPKkyjQBTL7bUAyZBgKwirPj9FAUqvjP9EUtC8aQMkBUcfC2iPeVAmXPxlKC/YaHlKDw1fHMdIi+A1qYqzTWDNLFyxrXYhPMypXbZlKgfhnKd9OcstpcQmiE4Y7S/mz5lIANcpDLHLJswmp3mfAB98C0OBP9iuAcANZ1l4bSL3KyQIrkcxW0XyoeBaC/GH/KOK6Y34q03H0uqIQqzytXiRQLQX3hIqwCvwrryx5HnSp3DsoMLRY9CU5KJYkwpFz20x/wLC1gEcpIJjSsypQFuGBIRIqCdEMrfK6q5ogIQaKtADoqpjRCuZgEhNqtYq0q4MpmNMq0CoSEBGKgTGq+SuU3XyFTESuFLXGULwz8H43wvoj6VBSqZUjAQANywRy1Uv1zeVQr1dilYWZXUgtqlSuHQ7sf1gIwPoBMg4cM4RYKVBylBOl/LuAA8tZglQZ6o4B8y16veriyr6oEAOAGvCVBXqydEBqvypSUnjVU8QRuLSWB6reBFnMOEgcdIGGoGJPIZ6qQqlQYGvVsXoOdSRrQqsTHTizK/UkdQdCBhnosdLZTDq1ZnbN3lT9KiMnXgVUFmJxrbC1WEfcx9GUMnyVudKUUx7qKiHw4skRuE9xTU+yD9ZmUBFFqDW4YmsIx8PSjIEAR1TatIBKqyAF3ckajQGerp1CWquqv3d6vADZaqbBOqB+WD0w1Lq0Xi1qKLNWqNqpa3Am+rW0HWuOr5alSoNrlaq2sKUzakms1q/qmvBtqgAu2v1rFapYKNq8Ed6o9rxa82q/dJ0T2r1rDwB2v9rLnT0FgAXayWq/clJcOu9rI632sNqGGPBCTrg6kmqRlLamWpA05at4ntq06x2plrs6yWtzqw6gut1qU60cpLro6sOuMAT4TtmcgKEcol55hsO8AigPCilDLJvCqLxkrV7OStWrX4xSqOIsI4+GbA0gQkHxAyQTxipAGQIdgNwBANIAsU6QV0CTUVKnatgNnYzdhscRoTzhU1v2FSt0tq8D6Cu8WdOvAqT/iBkFBhk4/wWZNOGCEC7xuHEYtPrqq8Un7JF8DIWPD3LL7XuBloWgBAwMQFcAaBDMyk1tVZfQzL0r/nFxM6pQDUIOQcVMMdBOBZAfCiAaXonytYQw1Z4x9cCCwzMay+8vrJtt0cw2D20Oc1cF589o21DH0hiyUGNdEAG1httGG4xRtsueOuCgwLIIkxggQML6A4bqALht34S02+WsxJDT3D21z8f6MlBREeGz4AbYLsToBjGEuNMhOsP4i4ltEbYGHAuAAgAqK6lSAFvrTMsOFxAV/NYDxBliox0gBDEcvkTMGQOKotTB00I1Y4Z0xJDAh6UmQsdScfcUlTQqsKmrzdAIesx9Bq+LC2mV7gBcxUbQgv1H8jsnVgJpqGJExkZQy3J0nXApFX5HuI2YX/1oBlCzzRogFSGJqIADKnYq5cNBaKmf06glkpnc2S/KtbU10sUx5LEUXRX5LRczfPFyd6Ret/1ZSieuCAp6mernqaQBeqXqGAFerXqqUe4G2q1K9UqiLG/OFCrMlcKryvJ+dCevnKDUz/hvYBhSesJBp6gkF6b+m/EGXrV69etGaT6hei5gZ0BpH3Jqq7SFvqHAssvZACjBwLnA8nL9AwbdYExo8BzGquGsato4VIDQO+N6LFZGSUBugaeCLrzoAwGqnjmcfiatAtKLoZTAcBm8HCGyUjrN4ByKA0dWon5FMAWvw5XdJQHhiCmjACiz6Crsi69q0D7TQJc9ch07qYYGLNgBI85wPgbX4ItT2QchcQn9DMYTMgF8vAKwh0b9VSbxuyDoCBWVY8W2GwkaVeNWUoB2QRxklA3CN5mYhkra4UOiQLMYFkBhWjn2FUzAIkFMrxIILgOhI5QX1WRWDI/nnhfMi+Dw41WyiLCCsi1rmkoo5OcBAsKwlCB9wmSaViXBVWkalqsZIa9zOxjyRHyhhvG7XxSUQzSUHAD8lVtBDbClYgHzz+8wdCUBBQ3PMIb5gAKz7MGGpho74U2qNrvAifeYFjaxAJRs8brmiG0hb27JFut9B0O4gngKa5hKJrza2eP9ckvYH2zp/4Xho8B+Go2G4b7Qma2Ea8YURolxXYcmu2hASskT5kJWpdVYTaABV2u1SuMQAphGWaZkMFmpUWmOxTfXEmR5wgt4lGwskGvFZgGQV4ofrOvBHIwbojDltUjXjTqh5zq1NspyrhYypqaDRHcEOPjJHObiQSK7AYLLs0m6goao14pu03jJq8+LliN8oUqgltFG+O1NgTMkEWrpKyUr8KGIpXLHqjATpu0tGLLevGb6/SZuftq46HipioalK2urPxUcy4CDor+szxYLYMwAQqEX6E6NHLSzReBIWbKX+IWyvVW+gWcyWFWYyyuAHetbvTvAa05uPKhRA4M4fmzSxMTDpZy4aqVRiBAG35tExQWoFvMxAWjzJXwosp1IU1uWpSAlBlOolv3bgY5rEUbz3NcO3BFwi11vQHrSjE6MUNSgFmcCspco9t9MBnjuasrDAHE7NISTtoAwWoDhBbnO8LKFa5bHSIU0cNDSAubwqiovi4ZO49qPaMG8/BihUWGwMfg1TapmU65MSsu5BbinDoYMEAY5gIF7c5AH07E85POU79GmkCsbXO/drxBQYUGFZhQuvEFXq+oxhprwR3eKN39gjESDDgNeJPKyU8YCov0bSuwrrAht2srq076AGkF7b/GiLsWQ8qHUJPboQC5C0xPcFE1eJ0KCDHkULWvTr19YoPADqATvAMtRYpgeQDhbP0RABLT+kYsT3bXGxcH5i2ur6F67VqegFjDOXPnJrx5AcrtCbJQbZTABacfGFC6O+FgAXQUMX/GBaiu6ql89lO4xisBhuzKM0aPbVZHcNoBOkjuwRO6LrTcY3V6Fbr3SErGip32xbMIk7mlnOhbrS5eAhcGSdJwBs9whzoBapOoLvnRZO+SE87xvapjz43wL6HU7hEULr6AQe5ZTKa9C2fJFib2hdzvbiq6WJ/ahKppoA7gO1WOlzdTTxnFKlqwepi8R6ze1lLXaDhHnZUociA8Va/HerAS96mIoSyXAq4Dr0K0D8gVYECPJKjyfKZlEdbW8bl1oBhnNdV+8K9eYCVgD2a3vW7hCkgEd6FzK3qob2hYxOU1NYNHPIcgQQQIgBRrCAHBMYG3EmD7tjPXtfYRIZAAgAw1MAECAnGTDMYLsTUEoylO9V3qAo4MAXn7p8UtNiqotEL/gjRoMINEAgXSzknIpJyEQrqSMAJ9Hv1OgDPozdqaogFTD1sVqPr6qG/7RDUArTp0y7W0UG3KclEGBpb6W4KAEM7A2mBrxbEetNy+xyM4KxR8AufGB/AIUECyb7h+59mWQCBPgIm6kMGJGXjgoQpy2THzHLFIAL2bk2ZMSTCUGD7MAXLF6LQ24qDj7Do2PtbQ0DUS37pWYJ/vDaAWsv31A5vFODGwJsS3I0hL+0HGv7SAVBB81AB9/vAGBAMQBuMUkwbvshU+MCGZ8XvQfgRTD61PWs12tWkJwobA8OBgakEIWEz45wBVSgJ4kaCCIwqlUAY6wedNJrIATYTcj0w+XKyxaNcXHtPXQUBkBCsYyXDcwroPAODFiw3gL61Mbg8ixtpzdsHcyobY0s5OApd9Qpw6B3oa30S7SWTge/tHWBzTXAEw2AGkCRbKjFvJKnBZD5AoVCkuLwsQGwVu6PAYAC0HpAvQETTboZ2AMU09AgfvdTrMjCU93VYsRVUO+j3z77Bkt5qApcUOUAiQ7+0a0vNx3KAAUHigfgA3a6IJXtaN4e3C0ty3gCbvbZ13GRsyiTyJH285unYoNCBZB8LQ4H2tWb3Gx1AeeJeSVsrDi6BGSwhGZL2e1kobYuewqvXSfqAB2wIKM3An+N3etVXaFb1YpFwI0xSziNSYIhi2VKR1eXomNeyOIe4g4I/GQ0w+AywvMVBw3kNYGWsmRxnxsEBUGmKJXA0m5NZ+vAjuAoB1s2AADsOsQYyQctQg/6JDBPoF0E+s4axytacPppgCeBXz5BgAfujuG0BC4a2MnhyPoF04EU4d49syM2FN9xM09JBo5kt3HWCvBtVWkASCf43jt0mgpOqwUtSGJdTYaLoeYgehwp2FxcDM3qBAv0jQQxGGkDukoznAO3vz7yAV3pJG0VSgFIAqR8KQn6V8HPBHRV2wK3iT1gofowAKOWOgDLvQv9T8H0I+gHKqPAekcSJloeKF36/tDBpdC8mtfoOxGCEyBmo7WhkYSabUiEZn6xRikaPcyRzQpz6qknnxhHP6v2KGVYgdK0Bo74PYGFGqRyzrSUG7eV1jrp0GBsEr5TWTmabheiXIsUyyCXog71HFap048/P/RKyf4lpKJDOVYBMdiJmjSs1KtelTXICuEzOPQCNNIMbKzEQirLLS9+BJVBdjvZ8ii42sC0djBWvaWA1QQGkgBRCxARNEbdnnSguOK7xRGHEh4nbHsfgqMz1gWsSOJ5H+VogabyeCVrFp3CUMUj0wtYk8f9EKIkOJ1X6JilXxMYTFjQNr+gtQoyKktfOip3dsl8QeEBh82EIqXG1Mo6Puy0XGdLTJKgLZheg4C1hB5DotRPli05IGhFuyx8rpOu0RSKSHgAfAAmM4BCnJ8b4B2qt8uuNkAOTTgLlMX91eayuqYEk8txn/phsvOxFnehVVfnWjCUAeKBiALegjL1JUAdPkogvNZbgAhjtJUAZBmAIxnN9fzYgbCyeaAzP1FPtMViO7ryVht/5EiN8Z0gB0bQDANqAT8Zrxvxx01PH4AJEmSHAIf8Z+iS0jwGAnDM0Cf0SvOh8Ylsyk4pD10FaGCmz0AATWMZUi8+uwx+AJFqInR8kibJauuiidIm81QtOIHRFYoGVRPXFIk87/ZJDxeh5VbvAp1D0dsbzoyITxMcswsmO0+0FAFMAjd3eFPoSQOMNuGWh+UVEGgBzdGwGyMrAPydsB2QHwGWg1tR63J19SThn3gHJlQqraSannGgFzRogF1K5xwUR5xfOkvvRdpHN9gYlW4NjoxCESeYEDb6CmtLVB5AfNjNhg0GCwwACIPvWhAqAAWuRtah2jg57r24U2aDF3YqrWUNlL9zgQOlesDLHcACsa4sqx8KEcSq4JGmphR+JYPbyUxwUGayWmgxAsVJK8sjl75p1gmKCVe8MbVKUOqMYFUIahlzNg4CmpXUgwnURXiYXhvFp4hhpzOJSA1uua1bH0AL7NRI/+gS0R1x0DTETGER8/A55JyThDSaaYfdsfgkAL6QaBXpuSE8oDewf081I9cawlAvoZ6fT5UKTNum8+As6Y0h49EVtih9k5MJp1c0LGc80DVfUlOnsKGZgDb0Bf6fkLbCqKUSpdsheOcgZMJtnhmbwgos8okZnoAA46WpUEIskK8gasCNGc2iVB42uErng8y/ZJsgqk4tH5DXp533wCUgzGYum7Wlca9YCgaRG/EiZZcyv8JEghMhqPkkqyTD/jf8zohsWa6zw5oqKQU8TZBCu2MSqQsGf6IIZpHLkgbM1ZFQKSM/olf9TvT9VNlQI6QPwKPZya1f8VUkpWH4frAotdnqwk1AlAYGo6j9m8m/AomJn0vjOABSMtgE2F0gg2yAdjIhEm7C8g8gLQCnprmZennZqPErSz8OWe8s9oUQG1DfXNHBZ4FZ7CqQHKY6mKAItZtnran6h8EqMLupjdMBDIauRznzN3ahINnekaQIA8hqCeTwGCQ9H377o1QUaSJBJ2GztoCBSCNhztpmYcdka2xlIkzVkByL3dEAcGchnfBQOacSRib2eoZfZz5P9mDah2cmsnZnsa8BJBEYi4A051CkBHOEbeeLRI58sLUJw5lixjm8muOevmE5g2v/npQ55xJUGmqar/aZqsXPdGomSlVBgyQQMc2mpk0Swqzt6h+3V7FNfetVSqY+ryxASCoqYlo/A91hTyXzBZwacb9PJpjtWbOiDZixfQOHDwSxkgtGm9ST0NrG01eJxqn1sOJMRhKWl4f21j0HKElHY8U3w00RSS8JZjoU3PpyGHs+nxng73Qkj+05G2PKrKcKGsNIsHxt8dAhHLWgFkBDzfjipML2T1OZNTx1aFp0nmBV2dhouxLCbZNxifhcaSeSqb8CwfIQZWBhsBKclqecQi3vh14WgEMIQQdATYgkPNmJgpOUVtp4DYyZxqZGlEeBBqJYXGGJKJtAaWlwATYGXQwawtLwGeJ7xRxbF5QQ3swPRyK+gGIW+AxSlJY7OinyqSxF4qZn5CSpI3JnsgHIFARLICtELglFp/xBxAl5njLiZfYBG+g6tfY3MWotSxfPGZIf1oTzp8YyFYFh+YhfTZVId7TNHsljrHbGATfrAN87sAxaMWKnPftE1OGPPT+0ZAW8eLQpF/Be6wscJFrgJdwJfnXQqy7HBSTnwvEnigi+ESDnTW8VACvQKnBpNygSC4dEKAeC7dEYXWvHjQF5iFhyYlAUuW/UpLCxigACtTIJHoHsdozOFeJlCivgwn+IbQBy5GEGAkQh7ls30KcobF3NrLGoxBL8C48pebCaVFsjDKx7iV3R5zIJUfowB9oIZgooRCx6xa43GvAFcjCVOLA15JU9xsPBUQaEE2GVvSLCC9w8fuAcXsIXCF5zNG0pettpC7leMHmHAmI4QOlxdAnqw9NVdQSFVvhIcmUuP8HmRXGmFcJLEmlOHNUbDC1nn6mSGShWTggFSqY1h80vJaBZAOSDCyxWHgJBYsADupBK+uU1dbK55MOl1nj03eaiIlUYsfrA2F88yfT4nSQRTJaF+swvFKAV2EpsMu+7VYXrbdhcoBAFl4a4Bo1xt39nX5/okKdHZAta4skwsFxZiBecumYKMkf0kwBqSiOFhWnlsQQZdjQ1tzAg6CgzJO0qaZmJVm+IfgaHolABHVYh/AKAzT7E9LNiXRmculIFXlV/VlPNjsA3rjV3Ujqm2XYo4xcgbTFv+KALdqM2DDoY+aiE9sekVReiGqyo5b31L2/Qs57Op29qPiepvZQ2Uf5/edTYv5rAD9go1rNZjXY54gu/XC1hOeLXJrA2rfXTBI0szW+0bNYoBY1/og/nu5FjirWTZEgnLXz4ceae78Ya2b4A5BAXm6NR+W+mgXf2kqrgW3RnuspQCQLwtWnUFjbMmT0MrBb4jUOo3PQ6w4WRfqcw+CEuQclMIFkwoel+kwhK5/YGdJ514crw2jqNfeBkyPbO5ZI7kAATN5tXB962UnKe+Ttktw4vGFIncSK1K8BTPdYsxNHzKlhpY6WDYBgo9mcChm1ApiZmWhA8ZaDThoAaScz6IU1DE6BTIZJvnMkIL6Q4mJlkgH2LKgK8PXRXgdzdeICi9FJEWgBcZd7HOoBDFYTYSC2zFWj4dCmQAdtUaAaBUQaSZgo9N2lnpYYKflmWh2WSAHKJaJ7cuZMFXTJf70nfKuZzp/8tLYM2YKBIAaBhUWdvxgnwXmdPMQakWetsWt4hqVB3wMXndZkAaDKw8HMftaegWNxZw0xOGPp0owEdVLpQdz/XbJYDHfEl3CVmXTCiqTw0jgnGAxeH4MpIsx2RIbx0nf41TIBeQ1yH1lAJSH3g35kewJdyXfROGtRnBdD63AXRQDImpV91xLmex53y79PA5k3IDKbPFJsWil6UPXg5NW8i9DpN1iYTolki5wCV66NpfVXrXegFUHq0QdYRWG8HVYJQ355+bYBXYCabfm02RAAuUOEWgHR3fKLHaqI6MzAD2N0h+PLUhMlhiYvGy56ome8noK1HjslqNt1ULsHcYPh9xBwPNW8qkmxdPQEkPf12g8x1Kb2A4C/nYcKO5ztK7mgVHuZ56+5k9OsLf5+OGpZ0twzZq26tqfs8mLEtBfQzzuAgUa3PqnSFFn2tyWc/APyRPXDhGtvmdeqTd16o63zdqywSQ5u5nAS2ktlLcq2MtrLZy2p1gtB13qNtDP6I2kj8chdE9YpU+GVd/TYy3jN4VFM2wkNln2ZLN6zeknrcvJ1TnPZ8+bnBT4FQoAyhharGTHj4dDJd3vcQ+f6J/NrwC83KIFCglB6kIDbPm2AQxvE8uAMnff4ACqxKD3ReF+2Zw/N0La8B75PcKldwMuvarhX/CIXz3ddjvdcmro8TZFAw18fYD3kUvXbk3NMaV1IsD1EjvJQZNgKQtl/d3ZLKi0U2xJa4AbQicU3Is19mInKJjVTJ7iWw8DUmhYdVXi5jPTTZST1VbrfLk+t4hRNQC9/fc72+OkTO22d03ffhDaNwp1dV9tiezO2M9/mERnOc4egLQkg4pGhTggPgPRTTzdBf7R9kkObbWz1B7eCtv0roF/TIMij1z29AQHbu2vnOTzb6/3AEV4yuPaDNsHCnZsc2ozzMnL3WJBsc0rmGQplO78uMQpw4yE6fNbB2V4EUMtWZAdbBn2thulrOX7hlHZh3UEonZfmh9yaZwhnEoA/b3JrTwmL2kIfHcrQFD4oi6EohFvfn299oveWmKUJkHntDEfuteUpeqUug7QGDaYX2ps4YZugdpq/N2qnTfaqNyx+9oNETe7B8M4Klvcflv4/HIPZbDJD1pTd3kt1LdV2qt73e5YIEOQ7R2oDm2yQAdDwnZSPWYT3cM2Y9yI1RAzNxPas3loGzfMFS9ya3L3PN7zeHGU4Hvfm2AtliyO9v8AhzO3YjjLY126WBAp9dNt7brn3zFAXk/XMQL6Qx3Ric7ab7h9nCH9n8BksaGPcMmg8fgcgWfhR773FdYOhTLHTbDgVjxAlYQojj3daPDN+I8o6fYPUOl1yYTQrVpF08AqtQy3MPXSdEj0JiLgZ4NY9/9od+4+SOg59JxzocuRCHTSpIISAo5w4G1bAgrUUJ06OvIgY8XQF4hyLumrUcE7yw9GWE+GmoN550B3FVgbDxn64GrAL4ME3haG9rppkex6brWRc+mNvRkZAQCT09X36oASteoTSSoDTc3aFyeaLpKnAnCDaKLOef8H7jIlbAmRD38W4wqIB0F6X63TY+V3MgDAH+9BRK1HxXgd0OxexQzO4/aW6AV/2DZDWzz2UIro7A8URDW+TFhPoUqDaE27sPEeZN5T9VZIBRjnY5iOo9/Y7Th2WYBqGnTzPU7nBW8iSlRP4bPGaCD14NlYRIzenChsYKgk49l1z25WMr7lKMPJXxvsSvq9Oj+TRZNQqCNMilY2vY4+rRt9OXWyqhYm9Y6nV0nsuPjR+59o/859s50Orv9hDrotL+IRBCOQYRgXjQWwmyAnClAMl3NPsjzLetONgUA9R3TTlI8Kc0j57zfnCnRs9yO49hPYs2ijmzc7OyjimAqPK92ABQo+DhdAqP75Y6FroS2AYJfX4M93DQXizhyQ9Fpjn1x/msolgHPSnZd9cGnBj/omGPxjxAC9mxj5Q8QAi1684SECAcEVA2Um8DfrAZjxQ4MPzzhc9zP4yI/QpPmcQs/XPYIo6E1HZE686TCYDoZVbxQlPnMH82TvweEXZo3AC5OhJnk6JZjoVoaZJVToAQns0szhDPRWvRUD1mGXM3pqYSx3U/PM9hoZSP54uvgGNP5DzI8gAGzvY6bPst6ZgF4qzhcwRP7Tii/QGAEEi92hPTnKR4EBh+AUEvlSyxAyLlnG5BPhCS3C40ww6U31dgcncfMQckOEdFcd7WI/XrPFj+QFdVhTlLiYvLTli5y3m3RM+LQ2VkM4ybCnZ+CSPNIn11dUrGBC470pT+901pnR6atdGhe0jcMQxe3EBQXJeyDr9GTY2Xtg6DAb/awDMF5DoNyvD/xUKnP+cK8JDG3ByyYgzVXk8G8l8NRj0FIIOtobAsAdAvjTExxrS7FtI72AAPYxELTn1FkHU4osoNuKsTHTIAhRcQoAOOH8AIgTBExmNB4gvZBoAQoofHm0P+otW69d9vtgUucaB6uT4K2iY0s4YILr15Gx04C1JWlLisByDca76vd0bkgsCIS11Qxg3VjQVZceVatCWuVr3q8mugd2FrHXYoxZEBPrDUUHAQYQA9j7IOEeM6xAdKvaBiBhMKnivhHAWalJYHJlIbkhEkdSGmdR83vnJ6SWy/fVsNM9bGFPJabYGlpFgV8GYQrodmECbQDRqYlwcKDpOrwfQchPsgcVmCG+Oob0LCrgs4SysEmI3EbCuXhT0bqXxiwEyJHQufDTHoKVxw1HDgGB+TaKB1sQqhSm0pwyIynGULKYtWkkH4BOaIJiHArR+dfWAeRx14LikverQLg9gypTxKMwCazDgbQUjAFoha/lG9GNbrlxVksrnurPS/BlcG3qNC4lCpX518VgDlH1DBrhFoA4Ugsb1aLXf/gJR54dTkqVWELMyURgMzsTSVJWP1vRlENS9wjAmuj1Bgp5GpPKlQAyJNYRy7DJgHSNfTxSADrp4ZNbsNnIAlACs5Ak5rkBUYXPvTv0eChKnLijTBD4grvbvlZb7Hc+EQBA8LFA4Qo0Ad3zvg8VGGWVCz9ZU8N9SBz0JYemMlGipZaX7vtZaTujryuUgrhNz74nAUI27WsOiHIBnK+rxXlWvMwSMzobZ9ABmGAX5oxA8RLW4Z9rKuTzdu4mEvRcTjxTmDEUjBJBGCONEKACl2D9GXbj8OSmpqXzdOSiA2Vc66q/R8kT39fIuANl4aiFkM+JfbY151kIivQxljUrdQL3Os/uK1vJoxVKgdYNvSb1CUM5Oib2GxQ1xaKBaFyYFojc8vr40jd8vF6qjb33iGmZLo31Kw3OjGyCsjETGIcvkClY8E6M5Bhht6hdeau4kq3WXGrbjarC8r33JC28Tx4/IzG3YHYW7iGxy1qX9luvWJPnxD8iVBgAER70BggQXWGQ9AJCpn1gR+C/kwRHlABXiGdYxOIaRy+Xz9VoqbBZvZt8FLnHysUWgHIer8PJuCBTHgFgsfD1CQEmc+LK660g17iaxSM7wWiJeHjEix8X5UEKm5JW+QB6c+6mTvZcp80mqpZJhLnPweUKrlui41Xww66Fofm2UQRkWT/W8fkXPkvoGpnP5/8SPcr/LC7vdwEbkiZnBIJWdtscCsjFlmkc97ccw/67Wb8PmAsq07KyXOsCG2uHkhasLQk8xR1OuHpE5/u8GqQWcGU7rA5ZiMBCx6g3qT0C7R8Xzdk9iVEL5C5VaiLs9QwE+t/4wF54nWtcvDsrAgcUX8ExIh0eT61AGwXFA/9Ff8XshoCtpdF6gBez2ToZDNQjHvLMKd7H7da6510Zm+FPWUjlKwSVk+4jdZdejMGj1bRkJ9UWznv5mfHH4AgJXxO6uN0JWibw5gqLrTfx5uXJWGGFl0sLZTAaBEb3AGRuLGLwA5M/0+YGFI0eXEigRHGXPqVnJVmsxHcE8HzytvvHq5cVIQsVyIXgFTzJs0hrMPAHlxcAc8GdJ8JqAjng4nuE+QNuVofVhQ7BwG4hPV7rhBZWPWBFamKecbfqwBNCfoq8A0Vi5AxW5Czi8HagqGwsAhkzuQcSJhceo3C1ijfcEFrMEWt1/cYsNmMB386LmqZoHjxdERYrq+TBEwwthFziRntoeDrWXSRtd0F43FmP7g8IRACYhHIOdyJPGbo8Opp1bzQuNcHJ5Y4Cef/JEe6WOH+eAVVHGPgivW0z9qYaG717nofW+53qYOUwRveauiXQsi96eY1+UCRpP+AB8mTCHgbLTqenip5d6q388+nUEMxJ33lcCcZ/PM0N/lZEpr9BAcwQWM9YPAD2Tu9IQfGTJC6Qfs1bKTg3YSv87UJoM3oZNQsePDW/30M9wrEqQO7dusVgTfB96z9k74c6A3DvXLV6NSpTUPrkDbxauqZpsrwn40Fwh49Q0Unmt2WjlhyEw65BJHYrBW4AgDYmOJ9k/Ri/Bpvc3VIADVn8hHgADgo4LtmnNpKlWPQQwR1uq2+u0eCxFRg/CBlHnH1PWxBAcHlMbLUfh/3rh+GcJbKg9A/DXCD/sY3WlYAw+UP173dt0P9zIT4T2MJWV5EVc+DT1EP3dCa6lQYICMYeSbYFeJ4+r5jcJJQJUBgoYKfj/3gYkcyx0jG4XdF1wdSPYERZ7uk8fafdnvFgMBA8c5Gc2iMZ6Jo/1sBHZVW67Acc2wNMOJ8BxfYB8chzTYYx67x4a9JSUQLF7At5CyMDT7W5rSZbgikkmheLSbSm1qel2Km3N8zPjCvue8hnz0OLKqBpoj7IAGgdifPGgPuB4MPdAKohnC/7uSDrfbk59+GRpg8L4aX2h6L/wALHkj5IBZAMj/AyUvujR9X/78K+PeX34jX56XRwUuwed31WNBh2m0K/blwTSPo5V4QVXuwXL3/esP6bxA0nvenIZ+W6/vB19+ogsHFPuC6IS34eww4WRdEQBFrCRkgBRJpp3u9RX6QF47pBU+CJGa5fulM8ohC3qMtGdhrl+GLK/0vkjXrt/ttTQUYLh0/jLC1nRvmpokok3h4FZMz6Pv3G8wR/KC6ClPhTqpWlZIu5/jgCUBpZoSAuXx5EuAmxskZIB7erRGt7KRA9iiFbjLVvawhIUDl+HChAh12hvYGPk9Y1VcomlUPUJ8GZgyf4ZEvkHvvnKquvTKREDU/tLa5GIbrVQZvEpBtY2VV8hm6zsZ7xcSDVpDjlZeJ+PyBeDuYoAW4yR/KR7wdR+SUKIXUavGlxVcgtRkX7b1v+PT9NGdIrH6JHPe1uCQAUfj1EvOevl2A1RCZpFb2UmPP3F6WWf/mCqhC+i1kj7H4Jb48ApAYZzfHq9w38z2Xm1X+kAohZ35yhw2TAGStcDJ/Q76z/M1DAOzRkHHEeFCTR4dLO7F+F+HQnbqLNI4bzBEtVImJAK4WFglaKGV4oKQWu++QElhov9SaQ/9+Q+Nq3d//0Kg7FZvf4379/pABtAD+rt/4gUDsDCoF43vfh/y5hvB6BNIowCIweOsMAcv73Aefx+Gd7Xe1MTTFzjqISUB3oUHFpGunAO9V/M+v79Ww9Sc4/PXftEyJrMOEBElFrplgkmlt5m8rF1vgf1hHTZnvP47wAFzQv5utL/zNg9JnoyJthvi7o08T/Of1n8dt70eg0PQDec35bM2+Dv+vSmuiOEFXWBgBXcwRyf8JsHDOB31XU3gz+ileil+LvSoaiAPJGDvQQBSEGt6bzFeWrv2GQVf2MwOAKb+FfzY8BAM5SFq0X+rvSze5TSXSt6xC+vcx+oeX2kiZVQt6h3xtEx3xSSoHx1+UkGmmQEjmm5CjuenQEkMU3xmGTAMdS7Q0l+WoxR+KwAPYXAPgB3Qx4B1WDG+/ANZkk30NGuXzA2kXzwIkgIwBho1l+SMCLCbQnkBmI0UBSiGUBkEXgEagOwoU6kgsmgItq+vyoaVB1f8fzjO0ho3ZQxgMQA7QkMOFPBo8vANVgGXy6+EfREBIDwxQdgK/c5fzd+FkA9+wyGcBm6kb2cQJ9+AQg8BXgL+cqUh/+GUj8Bs0wsB33CsBDSA0BEXwtqEQMr+UQOr+0ZiLC8QPmkxv3cBNMGt6KQM3UuYSUBfAOyB1BFyBvX2nUYgKhU7Qwn+MvzrE5x2qB7fQUB3AHOE3AO4AmQICBE3yCB6gIa+pGypAe9GHYjh1ZkWASvGRKjDG7hwveDG38UWlWZQ+V3RCywILQygOog7ciWBe/3cUXRjfecFlbg0KRn2ssiEW8mG4mh0XoK6mWMyYE3JaKmzFuUE2iiUAC32Jtz8oCQwLu9kAcmaJxU29BTv2Wrxk6mkzQIj8B/GFFh1UCdHl+q3zGAun3DCdbW0g0t0uu/qgOuHljXA0KQR4J1wmMcmg0Qok1N8e3zcmsYCxu51w3uIFASA4MB0qAVhQgmL1BQOLxyUXVCqSgkwTQX12uAbOzRByTgcm4KR1GiyGpBr1wPYYrGFOZ4lKo30FA44+TUQA/1xICO3pKN4hKcZEENS7GC2cYvnoQFLW+gpLQ/WYPWLE9BQiWjjBgo8d1iADPANBRoPNCQtyiGjkBBg+bAwEHJCFggdw8GnRxuWYcHjGKHzNuMNWZ4ceBwguWAXMsN14MNEEEma3hQaUKF1uir1L+C4AsmS93oQeAGnwJMUui+pEEmmH2IG0FyNa1ZQqcfNG4cV9wEcN9xXScuwLeP1Aj2FsiuBQh3qURwIEsewKNwW0kLB1CW+BxkDkSZYOwqFYPEkMhyRBxaGhB6PlhBh1AoW3wBn2tB2k8tYPtBVRF328AmOB140YkjXw8uzX27YnyA3Mk8CyQDOjMOlKAsUYhnLICCwWIy4ONMCwJHBxYHomMWgNwJwMrBxD0jGpDyvewVhveqLXNqBwMfeAgLomtwD3BTYI+WKIPAI5TwwAZ4zqOckHjGFYOZM2WjVwPNQZ6vyGUw9LGFY3INRBit1BQkeXWOC5ix4AH3PGEh0GMVYT0COPDGIF0BZAz6xv81LjB2sX3i+jvk7BWfERmCIMW4mgOMY6RzZ2BnzeAKXBghjvhn2ug2ym/33OMw2BhumbgfCOTXNuAcEtuut3kwl/wJ2S92bgsNh4gpIIZBSNzJEuLwRIm1xUa5k1tQgkwR0YEKi4mA2+gYdBU+nVylsdK1U2ZAB4gwPTMgXYnEgy1zGY4cF/cP4JlAVRnImUaGUwFDS1++Yw3GMq1O0JRBluiyDtBeQMBCp8FDM9kIcSQEI2wsxAvwq43NeOkEownkHME4RD5afICfA4MBgkNP0kalemt8dzUXwO1wt6kLmvw2L37uFeCqAYp10GPEC5AErzb0EQDvwdkT0hjBX1IvqyUmnNycWA6WX4fLz3glE17W03j1BWoLBBYN0PAMFBqhvbR2iw11q4Rr3roH/DSKtvXwoOEG7wQtw8AjVzeuYp2QgbXnHyfICfyAZCpszoOQA8Y0NubQGNudYMaQ6YKzgttzXAb+XYhaYKtKvI2V4ayXZ0qYNYQr4AMWPEDG4U0J4hN/0OORqwYCp0OJu3oOzgSYMUmtK1JiPzBegiYP1AcjVngsQ2sBaUKgBr4CFqz0IWUdMXRkdgPkw/CzT0wbkdsOXBHQfwPoAgly+2JAFGhhUIo41ALqGQX27md9yzOvPWZQ/xnAEahEohaLhn2Yw2fkt4Np2+4LHBMwySyD2DsB2MKSIP4yi02ELRcuEK4AuMOoAvYI48KcwHB8wDo8KGRvBO4LvB54xJhKwJY0E4NgWWD1Eq81W1MuIAkqm4M6+TiiJuZ7wiKx4JiuAqkKmqiDgm/+TKURtU9BmzFd0rAHh8w4LZUssP34gSASU+pSqwwoJGsMp09A2kCQOFj09yiq1QOhsHQOdyWjaIQG+2lymHAM3FbBTg0ZQrCAXiVUG+QdACyaGjGdYbMSVs30BNhz/HaUfQWzmaTTE49hTiq4TiehTqDhe7DR+u1aAXi4LhLUGfyZwqZxoBjagzOeYK5K97RXyBGwF6/7Ra+YsNViZZAyAAV19Ga9hl6jKkOIRgFQilABcOCAT6+u0w8Ou9VwWmvQ0hDOT5SQgLmu5STjil82xCj5jLgyrhUgdeH8GKyz7htpV3uQ8MwQymHEh0lA6SDnziiJYx82W5Cp+ZqBU+qIIMsrrARcZjwDi/6D7cWZkF+pUL3GfWyc2PxRX2L7y2eyyVWSPqWI6bOVXwpcRwWnCzLOPcTNBprRBgXKyQsl7BuqdfzKshi03WV0JWQ17mIB6AhIM3vzVInV2Xh2Q1mucnkNU862SERakqgJ7FYagLHsgKEGx6plSe+AILguaiQ50HA18GRCJqigQzyw+BmWyZWFwSYZ2/wI4H84tq3uQvsVJYTqW909m1nGFCPh2VCPKGNCNeiomFJwuWFoAwQyAMLQCLAgiKCGraFdg0s21BQixi2/MB18ekQ4chqiIGik2oRLsxYRMgEEKbs02i5EPwMoQTYR7lGGYSE1bw8wCIAp/QE8sNV3AtEJogvqw0Y+TQPQ8x2DOhOT2hNZWReqx070r8HnhWNwoo3M1aUNJF5WuAACW07wLGPoHHa+8D4q5UghcET0ZyZoX26+ry8Syi3Ws9bl8RvIzaUzVCLUfiFhQdNWHyLDVtYVqEhOpSnSs1zHSMMlAySh6HYi4RByoVrDyRTkD+a/kCmwq63KguSKYahzDUgsGE28Kzl/gza1YwJtjAAMJzN+4cAxORVHjIxumm0s2mcwy0ASAo0AtOau2q2tWzpYfZAQhsJSImr4kWyIoHaRcGAkWSBGHyUnjC01eBt6J6wzBDXHBYmv2TarDUc6BYC9Bsq0DOdXCqoxTXThnNT34EDnuRPLnuK+5A5mJSI9IdwJ0+ZkLNgUoFeR/4B2i5ADiwoQTt+KsM3QoWDr02BghRdsEik/6Hm8uKEp2KYJh0vCLK8ebTx8T2CzU9TxgIYAgE4i8XsWWICTw7elYwa+HWOVZA3h5SPqKJAGcS7KlL0Z6j62N2UhSbDx+yY3yp4MkTAgoQT/h1aBihxTWX2saCuKzP1CClGGi6zENTIpkJCY88Sle6SGiA5DllkqyGnSfEFnSmaVFCQsHDwc3CBmPICTYkeFXAGKO2Mc13oIFyGakiYJThUGAPuXKJQRB91vEAUkZeidgBOMkLeA8CMiwpvhzhyMNoB+cLRhoXx+oN5EE8xmB6CjQP8Blo0/yx8A3OIQJ9R7QxXeAaKyBwaNbh+QPy+ZVVhO1e0vSpz0z23Ji4AoWUIRYNmjU5nlvc8VUKU7JxzR8EGCR8z1neG6hzUCJAEYUQhQoleHYAYwKDR9eTfCoaIA8P8zNE9VEQhlUIBCK7nxRu5wLiCIzw0kaMhqAvENOKEQbRGEFjRXIX3gKQEP4sVDvUMaKbRL0m7RvRwLig9zw0sJ1/uR/BRcb1i5h8DDHRTaLz6Om0XQq6MpRmHgguhfBPEXa32Cq8znRQFwXelhQRGHBXua3KLX41CVaysrzmUAqJz41xWFRmeH3guBD/hiP0FIAHl5RPLivEEQUiYZEVa+EuRpADIDWmdIH8uPozoidcJ04cXgcO0sKKSu6OQYf8P9sqwPPeA3w2Bh0x5YG+2JYlqO/mU3g5W/iO3w8dm9wRak8odQGTYm5lzs/REEB0wEqi40R+aQdmehRYAhM0bDYQo3j4SzB2XCjsDyctzGJSgqx9W6gw2I8lDXwu/hgKduBAaZrhCim1ytMdXFyAI423AsJ2PhhWQ8m9sAE620SQwGmJog9SC/YbLWch2+HzYHNgvqGIMLahVmpRtCMeOiIx+WKFEA0AHFAuZSO84pJ0XQ0zxBs8F2Cq+aL8GdILuwC8W2YukVKo9rCxcxj3hOx6MiwYBV1gSYSy6OKM4QwazjcSq1QRwqhXOZK1ycSLFixQC2pRzmLK00BVig8UHHefgyeBy9yiy8Ew0EiE0oAHpyioZoRwA5iPYA3kNORR60DW15y3uqJlNIDkRVcxaFrODGK0x+pBjuVd26iHrHjQBIOkWAUhqgDWOS80Cmpkt5Fggv2n18TRxU2ImwBYNWIKGJow4+w2F34aaXJW+60oxb1mYKiRwfcbQz5cArif8hp21OUWM9cc8CvSB8Kik4BQxOu0GKxRCOqwMJ3kx82AC+19xRhsu09RDAMJwnbwskvqP1AzmIJh6GJbhw1CCOJKWwxIQI6B7uDn2r6xQRAGPcghwhmxgpHIss8xA+CQMpWKDxHcFWNPgVWIoAG6hb21bzTq/6JCEKOJnUhjWkCq+2MwzmNKxvELneqGkqoCE0IyROJ8BmABJxI6LBxomghxWGMVCC6IhCnTxc8y6K4WNo16xU4T3S/aj8EnBla6uBC7UjmTZG8yWX2Sw0H2M4TVu9VG5yJkXZUwwRUB9wAwx7kEhxMhWhxC70NOSqVpoc6nLe9YAPc+YX+Mt2MYI1F1XmAw1/CxZxbCC83uxHQwBob8xIICIy5xO6PBxmGJQRxuPcuwsKnBc1V7YqsVxAK4LpA+Dz1xLcLfYIwEYK4lhwx8sP2mJ4LwWV8xYezqTfEBlGaiJqFkWIfRG2LKIp8rGwhiPTgT+yFmgC2vVfYs6wQRbHlxIn7DPuxeFDMUSiExrcwKcZNBrxkWE4YwpxNmaqi/Ay33SINjzPBP312gWZmvh/6GkhjCOm29z17+KXAcBaqhxsuAJIBnQDIBJMDpq0CGEw1eG2U8yCDifpS8SzJkW+jfzeWkhWpRYT1WQRn1ngKvH7+rFC4A7PxI47i3m6P2WWhUBUgA4p10o9iRus9cUrxPcTDBXy1qWbLzQIxA2P6lCIKw6CPvIefyb6lwEYCh6hlexLDP+ATw1Q8hiCAWG2NaAANAQw/mYx4CNe22KXesfADDBNFEpIaDWo0Bf1I0SqKSRe/Tb0ikAbAnB3CU8jTaWrWPic1NwJIEvDOxP1m9cIeRxO3YNfMMfx2haqNaWrxz1gd+MzioTiz+S+PO+BOzZ2aARoJ4v0ugoW3e2BBOUobxVZuiekeQ6RGBhmPWqOBBPYJFjS6gVi3lmmr3sAmyOCWMESsWOKRYs4eG1evUJ+674PesSMH0o8ySiUKhMDY6RCiUD9V6xmmAAmvBOGw0I2YgnzUMykjSii8QR9cehKrmqAHoG06QfQneLXxW0PT6UgzDByJnmQs3VkI9gSO0BDg4CyoO+AJ4RVRhS0csJeNZeTllRAccHZAq2k603Wl60KiJMWH7W2GkHA9ozcz3AhHVzwmPhyA4amieTfRiJ/IxexvpmoGwiJCqYYLSGnLVFR1TAvERYmle0YGeR78KYY70Drot1XgA5zDHi3rQngVNXLRSS2H8d7iiJ/MDNBbY2IMjARXM/h1XkZuLOx8eKHxCJE4We/3oQ6UXSSxmDKiGcHEAO31v+kwP16jmzhAd7i1SQ+KIiQuPBG0oI/g+giIxWLCcEaegkWKlxCsc+wzhUiDeJMGiTU9aSOxndzu8XHS3YFagp8PGx36KROcIP/CO8B/iha8UHywLRKIRwOm6JIiLbQg1xqBUg0BOSgNqi/gnXgDVilOVkMOgKcAsu4VR06iDmqyD2UcwF30ZSFOTFq0+TdRecOC+BcKKqhby8kaWPhxV0VcSVGkycKuJJgd6W+0GoKSIPhI1UUpPS+8UldgB1G0gXanjUGAFUCP82y4INCI4YgG2Qfi1kAZLh9SbhO5I82PFAEpJg8QtwT0VOXkAVoyoauBGkh1THFxWYSPgOOLQ0s4TKBw4VQekoGFocxIWJVeJES2ZHjxdRLjwAIAVIML0SI37AIGzpNwIHRKzRHgAXmaKnxJ1tUlAfRKRRnLR1x3sDkE7xItSxiW/YEDWPUDVAecdWJDJ+8BqJoYTb8bzygwRP35WxDkQIeAzsY2xNHWsP2voFkFOgiN19s8gHcg6gDpC97GKUi52EQGAl92ghEnUDmO2SnEP+Jw2CoeZLg2AhROKJDQFKJWugNSlUCjOSrj4AGJ3aUISnvYDPC+JQoDP4RsNoKduXjIIYS9Ch7lLi20TT+BRKKJJRM0M2ugFI8wH6hlsyQ4pZzeo2qwNI2G00BA9hkQBEgbKDT0GCXb1EOh8IBYREVZgQJOxYMn22SOZL+BHGJMwgpJBgoGK0w19G3ow6F3JILA46TnjDWwXkgxO9FxAoMDF6TIG9GA9UCuSGJxAKGJjxKwS2yR4NTxisP3qWwO3AygJjRW2WvYcSBZeJp2162BO2+DITKevaRKsF90IxZZzJcSABQoD8xwJZ52pRl51/WKFFHmlSFvOBL1oy7ONo84H2rm50w4p7r3kwa4A7+SGGBGiKhCxJfASUq2zLgbjm3wX4NKhprkWQEKWMSP1lpsuaz9UNOP1A0lJcAslKIOwAFuxmwiUpbRmhQd3WUpm+LgKTRNcw3Yy/IzvjeY7YxOaSDWF2x81WJBhMtMxRmuRPoN1YSGHCxhWXroZEGPmxiSkpxQUmeO6WUw11gPOz2PjJfznBEcZMA0BVPKE2OK9JSsVmGsJVbWu+AyptC1nMuUB+hmCA/JEXwrc4lL22ANBXJM6OEuL2XEu4MNmss+hTusdxxsay3ZUhZGlR4VHhAfZRPGFFkjWbOwi0NSW3wf4x8x3pCJuemI/WzEzcSRAD8SU1KL07Wlmpl32t0rmGqmXExKxV0OXa1lEUhNa36WDVAkmuZCkm7IGkma1OxuSkCoyj8CspQeQUkm5jWa3uBhix8zOqwVnzYyDjVelAA1eqSNWhcMJipNJP+BMtG1QTS1yAiVBCRP3jkSQlP/QIlKuU2f1CRhLyzBFx0aCebyaGtTSlipXlGImEQopG80qycgnOy+2S44pvWO8BHhqp8cxeG2mUxQHgzUIeVOKpN6k7oRVOjUd6U7oZVOWJ06nJhnsM3caQlRpx8zEpt2IvmdlJJgDlNkATlJoylHgUpCnkJpFMIi+f82gC1lMkp9NJAW391ZhXHlcpQwm3eFcIlyZIA4060zQxL2RDRQFyop0V3ASmwOvee1E+orZjDoV4J2SzuKAuzFLnAQR0/hbXCV4N1wBAw4Fn8u2RFerTi/Y1KxG+3R09hUx3rA6SN0i3pTxIxvWQA1aNoWymDZp6iTzROJPjJ5QRLRzwKEmuWjrapKCuxbAGGOF8z6iUBW78c1BIAB4wE8w9zOCrCE9K3vyoe1WE9KCkNK+BAgLJQRiEGpkz2A9dKpRyJjQa5lLDp9AGUxzS19BssPjpdLRug/J2WA9JiFOAT2ZM71wB8hpBBOgIS9pddClpDezapG9OgyrMAuej42fGygWhYJm3aO3LEkmPgBGwNgFW0U0ACW6tPX8KNOMwaNKSJKpm3i3JNxp9APl23qIBoVMJ9CbADQ2ZgKaB16JGG82R5gAIVhxIjjUIiaOr+yaL9Rme01pxmFvOB7j/pgaN1xKwT3RVWWhAAIRvIL5KwEu6WIIndDtxndBXendF3pVz1wAq7xBg/Qx6pruM6uJNMbRN6Ke6MIABC+OyXCWDK7BNtEPpse2Pp1I1Pp59MvpGwDIZSRCIEIpCoZKXBoZwEVQZwDJRsu2RYZ+I3epL7GpGd9P1AD9K8A/DIoZtwWEZejFEZ0EXEZDDMXB09SkqRFNrhw9X9Ga1UbhYVwbRwEVyyH4XbhawLwxB01op9tM1gcBTNgLtJjRljMieovHjpkEKAg0KSTpQiwCcBvmPOgSQos1exga/slhWlUzfefPzrGNEDucT4L5AEKUMM2iTasHznIOtLjk8tLUzCa4AXhk52QuvTCHWUDmog4RJDuxCREU7izARnV0EhCUPXwqNw4xp0H9B4NI9BAaThe+Kx4g9m3Ycn4gmuExhe+5JGsmNEBb2HpySZq/naZYcE6ZU1y8ST3gkJJyLK4dYNxIUTMGos8D9SfSE4Yyf2BWepPbRIqOjMEQkju12zSZ5kFZ0k/nKMa11M0TlXpiqxg+ObzwR+JkEGpSEzk89BMqUxSErpzGWGQ4d3SZznGju1zMoAhoLB6/oWewXEFdgid2awyd0runzPzuT1MREs+wJQTd3186Ag+ZF8BruprijQLeX5+NED62l2kz2jd1kAqMGMxwLNd0LkwyZk4VcRetyVY8mGe6xinmh9oNHpOdKPC67lCWYrApBNeTgJaYKhpnJMnc2bxzB8+V+x79P+x1CS/cPjP/Qv9JGC5jOgibjLYAcaOYBeBFfuL5hCZOWL5ZcDMA21KNBxFtL/CTc0gCaD0k4GD2Eq8C1I2wJnA6BjMQxRjNIpjEXNpv4U2C1tL2qttNPB2pUNIKgEe0hJWUBE5LjyEu3hA6+0/h/Z2PpkLnDYxkDIgizMgAhu23Kr1WLK5uyaeyyNuxWJRdZ0xO4ZF9ImYFBncmYaR9ZfrNfK9ux5htO062wi2WRxDOfGYbJzOn8I/21CTRZ0BwMOHfFQSULOLEyxJxmFehGIVd3hZddykQkgmyk/ZKgBMiR3SeP1WOhTlVQKhSgZ3QRGIbbMroKhSS+AIh7Z2e2yaOi2fGgYEuez40YOmiV1pr6UVphTnwO7HmTm/6QBEDwkSIPt0oOYniUOclJk8FB3MgEUDoYLehG+ukUegGhSws5jBBWDrKSUVOwcGSCXTJA9C+gJXDN+rzXuynyUh0DRKxcaHGfqXenkAaGCRhnc2+xt927KXqIkcb9i9wU/Tfw7DMiM7rLy2CbNgqAbJ/Kjuyn668FU6ANFDZeW2Q5IIDhcEHPmRdW3lAT4GWJkQmppfOHH4NwPRQkbN4ZuW19ZH4yTZ67l5hjvlTZFuy9ZSHP+MGbPoJFHPQ56FnigZHOjZuHPw5AIUFpB1DJRO6T62ymVmOuaIxZEenKpFADvcsLOrutd3IQbpPXgY1WVpEUkE5q8n4oLVRaI7bOyanbN9CbAEoEiRC05GjH7Zt7kHZ1mGHZ47PoJY7L3p9BP05LRCoy07Pkp1HkwApBznZgzJ/SfYOIOy7KGEtnKeEqTJE867LAyH50XZUGR3Z8nls5E1T7Kq1BToQrMGQmwWDxmD1DxujIz8CwN/CcfVNZUV3NZGvQLBDjOZQJJnBYdbS4Gan1i+YyxsJEBRzI6cARqMaLS5kAW02zx110raF8Z+j3n4eJ2SUuJKV8M7xzpCnVdOKmxEmpX2VO9DgnkHSRyZcL2k+woi7EV0KW8t7JiIq8LX+a0KThVLLpeUOz3uy9nMGlbLhApImYAr/icBIxD6itxht+TXUyUr1QEslFVeqUnkSQftD4qLW3oq6ZVxAB5QCsczOW53GkH0NbLncg2KtgUJg70TIAbZ4BgLp9YAJJ0rO/uHtKHx4kH4owaDJcrqm/KhShBq3E3/MFnL0WEsxo5KbLzJmiXTGGaW1srVwfZNc06udSAx5i8LUsNeHCR+MB/BUvj9utBSJuk3MtI03OvqQIIY6iUifueJhAQWsOMS87KrGm0IXhIzIkAVKCzMSLOiZlmimKo+Lr0y0HBg9SgsWtOw82H32MSa7MMSsCM2hy4GXsVzJxZ5Z2imZzNcC6+irCAcUvJ4nP+0uT0e5mIEfgkHCPhdPLbujr0R2fTHipqkngAok1QA/+PiwSHF5mo4FkAFEk5mi1hiJyNxpMjqC/U03WNWV9hUq1qnZuJTIkh3FCJuF016Zc3KuhriMFyz9L/Z7qN5JnLPzBwHPWQtNKSI/3P5ZUD23RqXOf6R6WsE8Khgu+I2M58EGpGiD065jONQendF65sgELRw6kI5QtKSIsJxT5xmBspPs3r5+oHgZe6V9xGfPDaAEWU576zUIcvPpQq3NTuiAA25W3M9++hxoObpJII2Gz6GVXMz5qrMXBWzSlh61TMZ9oRv8txAmCj7HdC1jNwx9GzsZmvUg4c6AK0c5JvJZRLvJDAmMC+IDaQ+MHPCGgD8sNIHBqMY01gAYU/hbmMiwGUTJcusFf8QIE9ZCSAcgHsDkgMHNoqcHKh5XWyriKaLYAugy/UkAELgGyht8IMBkRmmE/5aVLAFoxDXAt7zEwHVPwUGi3bRt2NShBUyVRj4SIwrWQGxV/gJ+L0CvEUBE0CT/Ghpb6AMkILAE83yGHSyg0YFn8Oa6yeVSEjqBwGEAnEcUSItURwHAxv7MC+MfNRhgHL+xx0CugIWOV2s5OvJC5NvJy5LXOK/KGGroUmCLlgcsA7mv5t/OUYKVx7CuhneMRjFbg4gv9pZ5kf8H/K/+0HKo5yFXg5oey9ZGSgrsfHNrIJQgyJGPgoyOApv8FHMLgnBhKEA+105vvxsFIlDsFTrAWUzguQFbgo0AraOAA7KjhcyAt0GVRAHeb1Hw26D0I2mrJI22FIMQcwIlKhjJz89cJ+U2rMpUZiAWBYwRgaG/JUFyeJASCsItZ6eIwuYECkF85MXJvWgIERAiUFRQpVB4RzngIwN0G9QuYxwgLVUTQvssLYVq5BSQkRdAAJJEAodp2ZBDCVA0CG2kBJM6iOhpGTklUbEim50jQUp5DTr0r0QHSKIkgAA3TJ6faBk4awvnaSiBpAczxaQe2i/63AAWeuoNxY/OmXgRwocEPl2uiglF+aRYAJxoeCWFTnK+09xn8gS4HIa1A3/6k2FgI6MQUpNwsQQ8CC6AqM1Y4MAzVApnilaAImB0BwqBFbwDzK42FgGuE3uG6rKERBJKNmANDkCdD0bsjgv15sdR0GN/go0YIWzIOVMKc7YQGuewuuEHwuqFx/KXJCQGuC7jipyPQCbkegHhFvrII5iRC5p30CpFfIGaW7IsS0ZMTKAKWjS0PxmuCcpKa6bQpv87Iu4YlaMKcwBJ6JhSklAgwsVFzABohXhI8AFoWH4D/3HIHpAExgaUvZn1k9ubVnyiQFj32Jwy72owonQnPD86cB0++i71+GaLGTJhSmuoi4OQWKjk7UT6xqc5KBVFwwtcFqbF32BQryaPQrvwA0nDRj/l9FraCTCAYvkFgw3YwThC8en/mbB7Qoci1gzya7QpjFOySDFiYs355GMkwFIs7C/9XX83ItearvWr0XCIJJwlF9wDkTnUtIpkFJ/INSrQuSBUkHaFw6NjF2Yr9UIYvHBpGwZASC3SF+rMyFyGKNZS/NGCq/PHRW/JTxNtKy527EPqj/I6CpYO1gYwVDRBAkaFSYpbCCJO8FYrBcFLli38f0Nxgt2Li2Vovg2Hy3bFY4uXF/R2DFa4pmEFYtbQ7QrngzrABokYsKU0gUPFc4tLk0xMDFZ4vdp7kR+GVDS7F64uRQHgMPUrEFkA6oofFuMCJGwEt+sgEuJJgwPVF94r3FJmGbF3AAwIc8lTYZzhMFDRQ4k4wTdCKgurOfCiMFV2SiFrguwlq4qmC+ErQlUknJQtuOCFpEussyguaFAxAIlUtSfFaopIl3VMKFV4t7AlErKkZzk6GzouYASYTolOYrwlTEp4lbQwjFQEuVgoEvYlJqEYEuQP/FYksqp6EooynQyklIErkknQsd+XEuYlZzilF+EWwlCkp0l4kqK0qksfFyEs0lRkvIlTErXB7jEpUkXhsOxFINZL8RCuI4sXFY4qslxQonFpQuop5QuK8dFNEyIIDRajgqoFSY3clQw08lKoLOB1EBWi2JkyGs8ING6xjW+8jE8ZzxxRAgqnUlLgBGFa4GgFh6BF8hfyXpX/15FfUWj+kb2sqcfz5kxYgMO+LlglJgO4A2UqgFz91EAqzDs2cUSD+imFwMSfyKlyX3CQmUpklKgoyltUsQAUEsNJNEDQFi71bRUBAF4kEukluAtWUyEsgF40v+Mk0pxF+kpVBg0oGBzEGfoDUpe+lMSamTm1wR/nWSov9ULF0IoHS5VnDgdYtqF2ujpBvfwlAa0pbiNUs2lQ/Ki5Y0ovBJNWWlmArbRBAiJG20qmCRgDy0BLKjhahWI6z/ND+J9FX5Qdl9pjlh1F063/MFJVgc9Fm95VV3ilzjPyGNaEyGPcVYFrXWDa6dOMYcV0b4DuKulsgsXKF4tYAuEsYlfVJsmkLn+QiF2ZMBYv3ISiF+lq1FwFBgCfAAIEvm74GxpuVToBfJOaGhOAHJDKG0xnQRmlIEt0GirLGCkUvssMw0FlnjxCxy72Ql4su3RksoeJeCCTFMspkc7KgVlQ0pGlEso8lqsq7F82RWl7aLlxfUvFlAIVllsJW1lz0p6Gysv1lv4u6F6ssqyxstXmD0rQAoHmzZ6EmHJ1spFGVDT+lLlj1lEUoNlTsunUlsq1lSRGZlyjLtlQcodlzEENlzsq+lU0r6Gkco94N/lA8QsIS5s1UXBDIHnsDkuXsthyg6WQvweYwW/YTsrNZnhz8l2XIwo3wUQ0BPxQ5xEvwi4SDgpc0tRFckNiJfeP7UTctqkLcsOqREVShofSf83ItSBkKwu+/VOaWAWIAQCooJJ9QhvFhSlShckO2p8dKKcb6n7leTX+KkTH4AmaPKcF+IIEhrkC4AIiMSCfUXlvcohJGAFShMqH+pj+OzCknNdR0fJ5JwgoKq9917KM6hGFUiWXUmngbl7GDhGDajkEqEM2g/0tWUzcqJFrcplJy6jlJlfK3UhDl/laEIGl0Gg1J97FXlea1RFv6lIR+VOA0+bGgV/8tgVy8oQVUwV/WVIRnmMzwFG4cEIV3mKIRXAHcFXQkPl0akgWZ5MwVeIvvhK8rwVOWLfliGiTJs8u7UrEvnlGoNoVGCpkcf8oYVcCqYVKgplQWNlwG1GgtJu30k538v1I9CqTFi4MWIJiEIpjkoyFxsVfmw4tMZo4qGGWEXjl5cq7h0RRaGq5M3pqcoMlxSAaF9EsUlLiXqY6akQ0H8ugZ4AtcFXcumkzQnVFUzhG6ZEEIyGjxmY2iP7hE0LOQUbhIleAx9hUr01QqErxIhrTOc24rCsAvHMV5MoYlvQoXFCgvjFi+J1A8csgsn7goydiq7ZDivwiTMrgpLitcFn4u0Vhnidl8XKSFXlxSFLOH0ZKioHFaio3sDcPSYlUSUkf7BaAcsJ8lU4u7hVcqvlkpLA+0F0W2+MHlxaqVaMWgnLQjXVKK+ZWqwQ+JCE6qI3lV1h4EEyvaQfM1Z2Xa1tQjCEFAdCBzAFSSxAKn3ro24AxOTW0NgsyEF2smPy2r5UDhsgCVgDQAlsC5nj0SsEDw1yp2xjJMziBysFARysxO2sPAM9AB2VCaDogIOx/IiZhX4iyB2VLiUWZCCSegreI0Kd8FcWTyuFq+HVKiVqHixF7TZZ/7NzBcfMLhxVTcopkHCU4QP/QUpO2YsiUQiuMDlx+SoGE6GiPJn1BDCsQpLYyyhLhTXyzltkrViJiAZA/Ytkqg4uCuDSte4lUXqQYvLC2LSsPBGXIrl04sQMOXKdYtqE/4XKv6IPKud8fKuSugEGFoYmETMcoL5AfZyw5+R3j25myT2xR1s29jQQlXzw2JchKrmP7zN8b9W38hyD2+w10jAu0B7yos3JaheWS69ShVVzTDyOBRyHOye0uBiswNVDIXUpdEGhyUABJMIRK9V4Mt2ivCCgAd83HOve0qOVe1YYct1YQ8mF8pebVNIvqtc2ZewjVk534o2yOwa+Bn9JnrG+gSarDVVcAnOVR2+C/MXRkrCAXpgolrCvnIShNhIKKczLmsuaots8mBD24s2LKrcFqOaLg82taoxp3BQY+X4ioAqn3fG5at0ooUAfaW7DTIaKo0wr7USGGTQEFX2KEFP2JEFXLKrYUjjfpu5E7KIKU5R7FHXiaiBf0jTTLhosPDxEuSZAptPmBoV0qiQDySu3qDaVEY18lQqukWoIS0CW6NgKNV3fMymFlZZ+E2Ww+M1giJyJCykqgBe5xBgkrO+AUGyjpmIHfV12M5yJYx/VSVwKmiZk8o9KQjA5HhiZOwWoSKjGak87LpBpsljgE9ygKQu3igpcDFSyAF8pRIVkI6Grc5XQBSZwrlGi95lhWj1kRwMLUAg4GtV5WGsFADp0FBC5Rsh6IOioCGs5g6Slf+8N29g0Gq4s1GsOO0MFgI0hybZq8m38c6mGOFMxexSs0zuNWXfM2/gf8HrHnBqDUJS5fhtSEi3kR2oxwg/Gppa4UgyyDmH9hzOBXR8UAgeQljHJhJWfV6Pk3hLGvLG75jF+uNRus8Iy3R3YRZc3MqvasfMXV8fNsckNQpp3U1GlQGrQAIGuooxSASu2FVaSLYQBCUiUC1PPWC1ZF2CZ2+HC1X+xi5esBFZRdRdglovi1D60S1dp0NgYWsO2aCxDGSVxi1loowE4Hgth9sCoxx2KZI/xmUy/FCEYHEiIEMaKEZNktpVk4PpV0ElPiDKrXq7ODsUspXPVdXxy+V6pKFN6o6VBirhQw3wWC3x0TMcavaenDGDpBOD2+tRRi+r4Lph1AAnehTnU1n4gxuZ7T5A2WnN5oALC0O2uPQL2zR6kIBTYTAsWQR2tvE7PFoK8H1RB8n1AYXIvO1n4j9B2kCVAPj2HpuQF9a6KDZSz3TQ+NkHo+H0EY+uAFg1BzKK+xH2GQEtjJcu2rDgl2pReEfy/+nBK4+/3w0u23jO1A8E/E8SCyQ0NRe18oT9cWICzM+8p6YwKuJRbisO1jlgk+2OouMRLO0gQvLX+mKKcgL2oO5LXTHsRAHlw1QGYxvtTzgEnxSoEnzVIdOpe2n2sWQ32sW1dejCAAOr6UHtGB1qH17VZEK816Zx81j8vRhnHD56nWpDx9Kp7FHjFPVS/MqimgRlV42r2mk2qmal2VfIn8u+A3nyD8QFnXgxMobFi5XHyc6BxF5/NMCN/J0FrcDTFLwxGFBWQ36/aluMEglz2JM3Kspotbwec1XCsNV7VVNQtVciXB0TSJflwCr91nrn7Ua/GIoP8PX6nrkD15hU+VyCLrJmcX7UoJLEO1pXC2VKTtG/7HVJwivYwNwP0ezpO5FP8L8RZ1gnxOCxmKWajpqiZgLc1zEhVqUxkJgyoN4IwpNJifJa4nVm383YVqWh939A8KMeecCoKVLlmoxEVncJI+o71RSPfeFDwN8pWW5ka+yfpuhTvlr9L5lBNL/VvEvaGUSu+AgcuSVLuJCBjsmHJyu1wIDuvpFC4Xs++uzP5Ogov5pRTMCd/OqwcgilMBEtBGSu2yoahG91fqiVl8esWQzpLFJQo3lGZ0vggrQmqwgeq/AOoB/16WMxAy7yAVAcq6hoBu1IzeATow1ORZkiqlJaeumEKkgo4s3iuWCFKUGQVg9Yz0UkVt6PH4v+tCS/+pwZVetP16BqL+9g3H6ydMAgsZNQVgGmbRNBwb1aSLwNN6kdJvigHCB2An5iBuFJEawjlJKv71acpYNiuOCsD9WUwghrwyJkqqMSBpoAdNIwAs+q/l8htayNkwisyhunCFnnn589ngxerNZVdSoDGQ2oKinfBF403BN1ncJwWU2uOgR0mZGVKRPUh1WmURqsCZMSQN4l8vLmKesQ0H3IcEH4wCsOTg+FcyrklCyqv5Syrg45BocGfeocEy+xwRMpLNgfSuqcxP3CILEFtQi+ANFL2B8hzW0ziZgOX+SNIjcbhrWVYgCRwDkQRKfyrewiZk2h6ax9MPUOScVqGbVpbwyxLyrEANkDuBYwm+ixqHpEHJlu21mM4FgvH1kelFGwVyxaxrCI31iqUp06TjKe8GsEQu2C6NrSHyxeGtOVsFWqwkGGfqBaAkKEFipOP2mAC+F2XK1pHfWUqPkKqZGbg1xWmUzZUk2qmGB84eD4aqcKjQywDoga0S6g9SGYxwMTFaAni0R7DFAp62Dz4ZkyBCdly8iikN1V+QRrl1Ghah12mmUq40iILLKj5ggvvlC6rV1QHOXcQWo+JHRpEySRsQQRSvP1HwRbClFw1F6YIRUG4rYAECsA6vWtI2ZhpZVQ9TZVLko5Vw0Eqi1XLyyY2u8lE2sy5nSumaIqpmJCqvRQ4qoKibJo/CDhsy6bJJTYUXgH5sdyH5wMGcSOmrzaaLg4+QIAzKrMCZA+IGjK9xVCYGSg51mwq4qrMD8sX3NhFCLJVIh3NeMGgEMQDIFZgOWkMQe2iHVSr0JilAGd00720iTIFmZrV325sygBWdY1FIiZhIuffMxA0pqruw/IJ6EWvS1x8BFNkTxaFkm0oAvGo4YpRusBnVwVs0ykqNwPlvlKJr31E6v5lyZF5KWuszlWrMqVu9DF6ecrUctSoVy1htCuO6nUU4xurgzSscN6wN35VcqtZBwMcUAgMAUDEyCADliwcKVkW8LORX4JlWW1n4iQIKOC6kX0J+55kNF256jsBSkmT4HtKUkLECE6C3Q14tnS429nSyWLCNJ61zXu53atkJQglMkZtyoJo/wqS+FGIowiyyhB8nym8mWT6VlV+OoLFPNJz1fBr+NK+RKNZ4/6H7wHqH7w9SH7w3qH7wbGJBAprQagXnEDwbNyggYZj3GXUHx6/MBU+PEBomAynW6LklDMl1OyiUkBLic2wo4naE6AAICeWnfGaAJlCyh8M2lBsp3z29SMbMzZgcCqFtPQgpEDw5IvEIeFoBAP1OeY9kG8S3rn50TLWSk4hDJ6iXGGxVhCZ6uXRpgWFu+0MQzZMcUjota4ChWCYlik3gkxAhTk/ZoloItceXiWvxuHaAZFE+YYMapUNUKcEWUkQcloFghFt3g1WG6xD7C0tgcFhsx2vUtJLCBIHIJ+uI3zgt0MKmKrBkFIG4gcCgeHU2CYnX0WUJustqIFy1zXP4GjFhNSiGAtH5FuVyimCR6vN8tFysfNigVVRkrBQt9qsP+6FrHgIDG4xgFB7uwxN+SnZ2YJRLBxsB1nSUmxNUSWOHdw9SPZiWhF+QiM19qAgGuC2rSIAols6uRxql476Lmornm9IdPU1BiZn4taAEKcAxqt4ylpqtKXGuQygDwgXVrsqon1hRgWGkWvTMhhLZO4e5rGw6WSKa6yyABAB/L20eVtU6LVvzUgylvkFRRGwnmkuVm1q+g21vvgdypOF9SLlQvLVYoolrK6SlscYF1rvYzCQXoJOtIJuV3ctAIEUQxFB4gYSAlg1ZWQAGM13EchU4QCtynxjXB9g55r6KocJN5xaE4J+uG7NiyAGU+Fi4iyupzeD8uqa6uqb8XootqT50JKM5vkUe4QaA6aP6QgDT+co6yc6YDUJt1zVRxw8jH2Bhn6QgeDxtADWZwXQiJtJbBJtm6gb15NpYUlNp3Ee5tJV1WFreVZufk7ZrrNgsLzN5SvLhh6qiYrOEX5pjL5tbZo0UZAiXYnJtN13JpcNBgBm1KmnGlLZoY0ushfkZPHEI030dRYdJYGF+Gq8noJVsM8huJD3jFeG31bpQHO8VW3gDAfCGZQfkj8NDgn8ZLiCXEbsidtzChVk0Qikt/kgcE4LLO6xCKgRCDSLUy6EAtlkiSkK4BSkcXWCp94ldscUj+ipWQwaynSz+vTNe6aBKkEbhFapMUkFIntoSknSGZaC/HyE6QKKEbpMrCzPGQAuzWiMYdrmo8kWF+bhFZci0XR5+TKeWH0k6AbCikohALGkweC+kHdr2Ey4D7twzi+k+0gDwM6lMkD9Ub6m/xU+L5p+i3vyMxgqWwMqRIHu2VhyiVqGgtBU0hE0CV+NlyLM+Ty1JkqIhzk+xNgObsn3t+IkHkZ8hkNs0mRkB9vJk3Ig3AAdpREeJM5AwOk5Q5Ozjwb9osU+IHsgpkFY27bBUYn9vLZZoIIEhltP20GFTtyLJ5E30GGUUgjiA2kBFRr41+N0IldtB8hIA8sn5k59spkl9v+kqskHaCslvtDMhQdS1ihEHFvuFkYiftZDucmBaGz6V1q2x4hF5+GNMgdsE3QJWdv15y8kMtZLn5ERCh5Zx9vQtKYn8EbCj9kSoiaoKojH2AdpUaa0Rrt9rBC4/vEfVcUQTETtp6ZyLMWaRfBY4fIN9tdAXrWB2sryNrWv698FbqZLl1aIkE1Eh9vYGtETdkhjud4isn8EUQgsdxjtvtCv3axkiFsd0LMhirFGcdi0ONmzVoqKEblwUXrh4gdBOSc0jrs4ZLjoUtzLnE9vEFEyDrFEHYjCdDCgidp8mIoAjsVEGRRidjVxEdn4DEdXVA+NkfBgiA0Mkd63U2J5QXPNHjgUae4BWAzCRkaCoBC0mWBPNhhsAgtSOeIkkOD8IkCIAohLOwKjrAgkyEwtDTPqcgBB+VYcKgBaTU1gZdhw2WNTuw/dBUkdLXP+WG17VlGDK61+JQCt1Vz+DO0a6XnTdeckAfw/mluyirHkA3yoRt7LK7K6JtEF1fLRkahCdtCuPo0D6kY0AtrmY0wUFpPfNr58jrikXtsdERkjikjmWr5DzplGbskktaQg8k+dsjtdABSkxdtz+xQnnenzs0B7GQOkyrWqkF9uukrzouETcnisp0mxEStKfg4qkhd1MOhd1ezhdzioRd7QiRdY9tRdAtIxdqtKxdlQj6Nk1hed9UjmkMIqJdoIjRd9zsxd+BGhdR0mpdV9oJd80jxNS0hJdKtL905Lt2EQ9tPOuLpRdNLsRdXLqwdPLpOdSfNwIp9pt426lbNAClltutrJhpLv5d3zvQtcrqsdmDvhdYrq1d+Ds1kPoF5d/W2JpaDvldIGmltSrprNctrudarukUjzvMdiDu1dUCnpdV9rNdXIgZkxrtOdnNGVEPYgVdmtpxU2ttrNtztVdfLvtdGrrS4HshFdMCllEY0gVEXAHZd/0ly2VRE5ddLu5dmwiiEnDsYUuYWldO2ySIzjvNdlzrA0WtpudnZtDdNfIjdNAALdzrqOErruwdGKCjk8rtzdA5gANqTtKdKon9dVzpLdyrpDdIQKZdZLsrdUYjbdY4loAfDp1deLtjd8olfhibppkybvFdabsldGbq4AoTrSdPYhzd8KAj0QJFiGGqP/gR4pt1ozqHsuA1Ve6BNpOSTQg87JXz1lNJrUGcpFtB6rJUqsUMQEtrNpS/Mtd6Cm4ksdinI9ZtsZaeOK8qtuQMwdllYPz1WQZtpdpr7p4U77t4kn7rLKblAoJ5truJK4Vlas8B18eNWw4v0x4dwfFcdXMDzaBBAet4Zn8EPEFEmWPCSMMaovg6UtDVX0qrkAC2sda+Ftg2hOtEHtLoGyxrWZQyOO0zikWhGSEwABNQfqOyIbQMFD2RqLCjkSTQad0yjgt9DomtTli0EwcHsurP0fgfcgbQoYgwd0wiiEAduU6dSlZMH1rAB1wnvF3vHOgu3R8EB+IkgTL3bs+GuHyqZtet0wlk9JMkzEQQDHd0wiSdrJnvk6qiiEcmhKZa0SPkNnuXkzHRvgZZVh8BBAMNbrRS4U7vmd3yH5Mw+StQ/DsodNiV49/HupFwWxNs+ona62nobQapnhafzpoArlrFoDOEu0L8HORtrHydB9DctnVzckcUj6iRPzqZEbjFBP/AjETDQ+E6P2a8en1PNjfWcUGwFaRqnUTMEYOGw+8DGRMFA2A6LGz042mZYPXpyAmQFGg25vya/cGualnrdk4Cm/kkChGo9nsQULFic9Mii4tS9o4Ys3vgaY0nRJpGHjt6juv2X3UPAPglZMKXr09q6FIIgxohmgInhlWxBzKqcqhisIBAY8TEy9tfBV0eFIAApN1EjvZY18QB97jIdoazvT5cPvc17dPVXAfBMYwzWMiy/PfYB0JF07NHTv9UKVIBIxBog1TFPiS4ErxVtf3IbeHjbVPYk7F+Bp6wtMd6Qfeo6AsgVNrPe7JGFHjaVEs4p8fcaiKeAl7zuovwTvaD6zvW4QnbWdaSAKkJj2m4R6fd9AlObua59E2JZvZT7M9n6gvvX6hj2sp19vZIgvvUd1alLj6cfXZ7GfUT60vQDE6fS1bLrbg6KAJd6NfYMaBwCmAdyTTRmeClIJqkyDLGOoNUsCSCvjhR675BbYunXTKgtufAURGnErWHm5gUUhx/8VN7NXWT7oxGhbI8DN6w+JfAj6DRA2+IgQ7AdJ9f/PS01oro7FrBa4eYrl7XsKea0mvVS1Hn5EGoNjcW2r8gMdEiwwwd7A1oq6pRPfqRakfYAWnY0cUhqyQkaTmqfLWk14omsw1ySn8GoJXlt7f1aqALSSgZsFt20UNbxWpK0s7cdqWoRoh2QPAT3ESPDq+LDMsOvT8PbXFJDmEp8/cErZvPYLxRVG8BXuhCY4dJggofWuI2dh8L94O4ZWEIw6DKZmwaAEFpZ1dmCUVRyzfNeiq+5tWDQLmPIkHapIA3YXJ2zQB6oPV3tTgHYDW0ZR6IFtG6vZDiIG5KyLKJHf7qzSHJq4I/7mwRHsjznJ7vRNnJFPbW703TiJr/QLJ0AIq633QIJgAwNJL/Tul3PeT74na3swPRQp8eCgGqwRRkwA1Z7kvUvJGFBKAqBJ/6L5D1UCEFO6E3ZQGKbZEI53am6B0jAG2RVQJnFPfIuAD/6uhFUQ8tm/6bfR/7iKCXQMxCQHj5FgGx9gJJ//fzbZbfgHn/ZHTKvZIhqvaw0Z3ecJlMs16mGmzafhFn9xvc4BNA9iIAsn/6u3YG6H/R+6QAxRkLZP76RiZIGjA/f6ZA6YHUA4QHpzRWJUSYL6A/eQGCEPQH2bZfIqBLQHrYOO7RXUGImA41IJXbq62RGwGCEBwGWLFwGXRDwGKOfwHLRFR6hAwYBObQL6v5AH6JA7f6bAwAGU5CwIECOODhbYL1Rbfe6JclSA9dQl5i/OIZoBr5o1IPKF3MOEV2lUrbzdQfUv1euEHUsWhP+ChYElCiML+r8LABjMonNCJp+fX2g2wrut2cmQYKDGYY76hKBCTNjNUMNyR50IMAIQB6AjgCa61/leA36sDL8OHgAzYbsgTcqshIVvgZqqiO4XjLEZq8DUo0jGFV/nCBhAgHCjOkTcg5VJXQSUG/Qa5mKwYoLsUg0JXS0loAhdKLFCrGOQ1UYuFs7bfXjwOJm4WEVy9StAyRABhz4S0ICzICUyM41eNg/hfqgAQ4DRi4NcJ/VZPp26VA0GdpmxQjKzA2gBEgzg89DhaNcJfdFd5/qBrlJAI7AE9MS58oMX1+QI553Xrv5igJ95vvNYCC8lgB3Fovd/zACRofOgBkPYfoQDC/1RiltVx6ZmFD6HYwQtqwMS/qkT6ftUyZWrfB63ErNcSJOhp0E+ivtNWkdInaioVDzcOsCzkFRdQFNfDQiU6TKTeg1NghIDUQXfnvweICQgi+O61ULMrc9cZKwUQzX76gnGgQQ7a1C0ut7oYOKAILTWY4HYKI+7lasR3B+RYQEeJSTTMKnGkqiXGo6laYtwiXMOma51aiaAOUc6l1a3AylYUG73Uo5KUEyAVwSWbDYoXKtHKkxzafCFRZqggeYderFbYKqeTW0ErWera+AcQtReeo9mlvwT2luwFbia04cxmK42zmxNQbKZ4VGCklROeMQ/nNqskjiAgFuDOT7GFEN5DPTdvSE9qrrmzqleWW5fKMWiWkNugiyh/rhlFhFuNQx86kvhrBaG2cYWXjdA2u3Ffwdc8/vQMQD6AoZA1FeQ9ycdb/YDVRDgdgA1EIagU8Pn9zkCHZAKTqRLxFOGEmY6dkWRuHJ4ik9embLQSYse0kBp6DlMfe541vXpxIguGMEMUolYEMstGgQl2xkSjyZve47fhBH+dEUgs4PuBE0r2rzVoK9Sipzz7+duklcYv1fIA1RmaiiZD0fFBePoZD/wcZA3lW8HAcvaL94GLcOnozM/sImHj/fOqUw8jaMTYKo0bV+4MbYwxbLr2HsKP2Hlw++dx+VV9T6pl8Gsk1lbwfuob3ZmGw8cUGd6IYhf9DXCyzdKVR6m5KnDj/Eyw2FlKw04bBvv5K+TfWGkGYcC0FiZGkWnrbWw2xS/1nwk0clctG+iLtLxnKEUgGBhaCmzFZlLtdT4GOa+0NJtrbDZcBCUW8xPq1Bx8CpVx8P3QGoWzFBiBTxDQQDU9tCQVwo6y9KbkVCxGAjC8AKTbcDvmswo22dIo1TaBXm2cSCllGKOOv7oQKB90o4eHKozGC36mN8yPW3AnkeJABFZSqSCjYJAo7QBdBrtyEfinB2fi5HjtK9dgMcFYjpYXweQJ5NmWcuYDbXB7WnHjAyXP5Q4MHV4GvJlMbRehhNLc1KaVvRK3bk05fEBGDAsNQGWiKsyPFl4AEo3FgwVnbDnVqaQ9UB7AMJEYpWPf5HIlrGrnxptHOBBK9QVsUgK2n0iXVqu1ixOQFnFClH6rT1HqGrdAIlhQNsGm7D9+MMbj0DQtroAWg3vgitEI/nTbeiQASCjqkB+N1HYoaGRxQCzqofsX6mDFvjoIEqhkIIqDhoxz6imqfAW5RlHYdmoM+sJIkAVu7Zypr49S8qdHDKjglVrbx7S8rgdjteZAChCHNxRjRBIfsQtRo1TGhlArz5KETxCpDeIwARILmWWzBlllj8uhHuHArEwti0EQTTVDxoUuMa5S8rGrVqBdHDMnWrcnG3j5AKZC0bUDG9YzlIDY4INvHuiskNcbHdkJ9SdQkj1PJoINHLLzHTqhhIQRUpBCeSuh1kO+HKIFMKr/qgB+Y7uBWXLP7AloCyuAGLGwwjKRBPYAg7WKn9oQOvAfYwq51w9FHjtXv6S+AfCMYsTlfcOzH2g0h4bo3RB4HZ9i+I8mHUVWf7+ST9Qw5YEKyqv8Y6o7ZdIo3ltHyCskYowPw4ozbHEo70RLYwDVFWaWHlIw5GNZbFQAnO0MLZE3GBCeY8rlqFkkWvlGvRYVG+0LTHUEkW9FOQPHWQvZGiodMFLZUedRI7QIjzoK8Ko0i1qo7VGio7Zdp40VD145MlN44jCGvgUH91RpHsw5Hj7JYe9AHse9ChV+6d+T+7ASAFKXGU+9348GLopfrbT1gXojVduhGRvTsWchY8Wo6raDebY8uHtIEgknPALHtIE4E7QBTJE/y66M+QcuOX8LHl6IGo7gAbAJUYn0nvKE1m7IdIrIUfHnG8rlqdAkOAjU1tODBRoO4b1lKKzw2Tlwh8Sgm8mrhCohJwmXhmgnTJCLpSsmLQyvEHB9kiOUm+tt6JWAPSQEwiQgvJt7/kSHtWEJDycJisKzUMADKRDU6gVa3TI+lMK9GOtr7bCV84YudT04IpDpnVG1dweeMxJiahbqctB7qbZsTxlYAJoJ4hMtndSZJjYj7eawBHeaEja8FNhvuSFGgKeY8uHvY9uE6ntVmIS7Yg81yopliHT+lkh89P9oY0DEACahY8GeKUJ8HHKH9HmW55fCVRCBkOkWdABAyMBR1doDAkhfJHBprjgFugE8w2LZ06SPZ/j7aaVLgwcYscQ/Vo5IGGDMJa9ge8MWUEafQYiNY4mEgPkdHEJnoTdCNhMgEnARkz17MgIHgE9nHAqZXjAmYbgB2TjHZivrDrW6TEqnYVJYX3uEd5MC2GLPqSlPEYpDC/vrzrzTzywSTp9vYK9dDXI3yiAJjHDwgNgBQBdBLkyKEWoeCVvYAc8TKh5iT8SRCGuGRDOrh1HV+XKJI41oi7bflbYoIAD7FZAnUaXDzqAPXj4CGHAUPuxcniXwBmlrzq7/taosPsgAW6fIBY9cyYiYTFoKAiwEGVgx0hZtsMPUKJMwwaNaqHTryy4L4o74Uih9nSf7DnYJHjncpzvXWgneE36ogkmod63gAmvHgNJBad662U+xB+E7zZOU1l9uU52LeU3a70iLgmuHvgmkWkQm3wCQnZVCKnkUoQ8P41tJ+3fy6OEwgmuE5xll3YwUBU0QAeMozDtU3wnGCuPbYxUe9C8s8NxU+qnJUyrotUy29gk7qmcozA1TPKTaYGtcnX4QzaEBYocQ9tkRiyopyq0c1Kb4OEmAREOCLU2/GrU2qmMww/GFFUyAdIwhjLDQrkyKQsDLU87C/HlvHP4yQ8aKZZGWg9uBrI7NNbI0ZGMtce9TI0AmnI6gkiNe08+AjpUWlg5MPI7qGiGMfQAoxb0CPa3Stvr2NYUHt9diY/gnZKOSLHsvGCUJFHkE1w9B03QACE1lx943YDBXhY8CEyfHwMl0mT/lD8WliAbL5jEhdumHAzYR+Ra0x3wjCUU8PaLDaU2PSZf9jABnowGt38lZaQLMhA5Y4YKm023Tj02EFrxLqDRMH+xboIgDNAO1bX04Zli44/kIQIBRBBsUoNbGzHz0yroPslF7TbKaQLUlBCA1koMSUt3dCVAWhAFji0CBEjAu1iXHGOi24Spo8bafq3gfo1+J8mhewZsimcSNHzd38ZsdY1FEN1o/GwB7PtKG7G4V4MOwwWDaqCF7sWgwEzJIJXm7zYgBtzibOMy1Y614NuV6JUij6ARsHcnwGgGsBMxTwhM/4NiOhK8JMw2gpM217boFV0xUYygcoQLxUM9UiIM3RByTswjWKBG5Tfest0oKEtOlJWnF+MDGBnRK8kzs1CCWLEA3w02nQ4da8C0MX9/loKRwdkFsqwgGDko6XkyZfRiKIDa9p4uq8HYzuaT6rzGfumMBMQBERlUP5mfY8ctYCM6hvvt8noHaO0A4Xth7NH6DEABqxneW2NkWQOn6o1ctNrrzGIwgI1kbHPJX2qxJCnLlnm4xbGAaBKA249CAO44eAko9zHUoxVnR03lnsoxbJZ40VD540/dmcJVmIo2jaxqokQZ01w85061BxPJ7C6U/xGq46mG/NRVrFeCCAcYW1mqs71mr46KmrU2WmtgkvDEfOLysukPh2470RYo73GvMwDV5s59RvXT29ls1PGCE2tmVU6Wnh41tm1LNPMwslKT8wgVGXwfbYx00W9p1FIkf1My6Rsy28xsyslxPLdnnDoQ9Ns2zQuFtpBLsy28x0xfHuRjGniNhUqjaThSLFB19DIwQ9j3uumq4GZGGzd/HeTXmnQpUWnMc1ansc7pgoLtSsS4Jh0MBIOb4k3wAfHmTnxSNQM3Uq3B2bm0Ba7m5RduqKlVIBokMGhRQZWq2Fl3cuB84/VrbXJ4s6I8H7rfozm02K3hoUKshpc2Os12m1Ca0PSGSpsFZIKKNAmWBfTCHIzmg0NoAPbHCGemDTAegP8UXgxtgZ6eW09GLmRwYE9THTczHw4O0i6IARrVIPW5Fc6Tz4mY7mg7a/ja7riQ7EZBAeoWHANc20ArNi0sks3QBgoJNDFWF05Qfoshrc9Fw0eLxNMjSj4NrLCnUCbvLqgB5SC0J7nsQK5mT04iJJsF4ACE+cLVOrO8Ug1xbVoSAipWBpgRMDksHJomD4BQ60uRutg6rZqDVqaJqboiDBdoH018QM9ogKNyAwgJ3n4oD5ce8+C0pWPbc2I+Xaz1OxcvoEVj9w4ex/jmyCbEF6zp1itEWEutdTVHt8xmPyxIjMMnRk35MhWLvmhtNMw8tt3mYKG4ZBVLbot8ztoYKLvm3NPvnwKIfmwkMfnvvfiAz85lpILOfTUQJEZg885gYKIswGgClsn8xRyCQO/nvGMEdTgBET2cz6BOc9CEeHZHgC8yK4kWucK4qsoCZ9G40smQl0GUkCra7rOgNhsrNPxDqG843xoEAzEg7mptDRdJWgaqHUzvVp6xVULIA+yDy5rc0iad9Rmb11Y0Mn5dmd+KehJd4+0M2cxznToFzn107znDDJOQBc4xQa3jV9/46TmBCzjmuQg3cw1moQ+C9AWZC5NJ109bkDeHJTec2XaQXU8i+c5OR0oJ6YNAEa9OIGIWvU3JGt2Wvo6PF2GcKGED2hvnmEXkXnZ3iXni+ZzjqvuMDi09Nl004zm7gvIWS3sTT7C+jpHC8XznC2ViS+SmsJ+buqNWepHFwWSA1pvmG5ckFcmTfn4Mcx3yJDDMLcc9+6c04CQ/3aN8+ATPzw2ukXy07Us86C7rqcnsBIw2AnH6qANQqYstBlvgYzFhKATQypszQ+pBjGLXR0lO+tnWVAAAWqxLSDFwiw2hnTANFEIAWpl18DIasQDEBwiGhqD9BKojmNoiG+g6gAnQ6SH/YodS7dAKxpqDjdCipzzMCbdVbiQmDqOlCj7ngLUyRh+ZkpqcKroY/AxEdwBeiwqLhi97pRiwVhxi85ojtGXNzBHbg8mlATHhVEMWi2pBH4IASggD8XQ8GZUdVEiLIRfAMFhWin54FXTLXM5pFiyyQqIE8wTxvMXzQ6gASemy9hlAMGvTgsEAqfTZHOlFwfiynAmIGbNWEJiWBPNISNEAhk09GxnjoP8XSxiAYgS1OzQwvTrSSz9BxeLPBUvQtt5AE8XBg/I06ag/xLWsph8miz57YNA7nyfCXVrAYAfAOoMgvC1HDikhgFRTNAfhciXYCMhNOxlVosPoCXEk91CLQ5gjgaRQAMVuqXLgKSWGSyN0AODURa5hqRmsAWN0UBiWJi0gAMAMBIUqaXM4es15FkDZp/dCgZqgnwl7o5tceCS8XT6q1YzUClxokzdSxtP0YcgFk0bKKl7JnPWAdnWSCtlQ8WwkLc9ti1mZD4JqCJ9C1zw/oBQ4S7FQPyLCau6XiX3MOHy9JnkDpFnBGlQ4Mj0iqiigLHrnEYEw6syUx6sILNdEAA6W3gLIAtBC1DXLWFUlwj+AzKbnxAIBJoUtstdf80AXSXvzE4ekWAIUpHoJi/6WjIugjzSylnhlASXUAAqKBEsqXpsNNZJy09aI+SACsLiCnQEB7RXukQ4hvGJANEIbIc9ehIys9JIaS/hICIZHTaS5qWMAMCWLIBCK+JpwDN2c5TLC63B0JXeWjzj0WBJX0WhETPL0RVGK15enSJ3h+X5aV+WaBLxLfy3YCrizcXuicBXJEc+L5WRYWxdBFBCpqgXsVgKsMC3wA+AlAgWM5VpPyBGd1yR2HHvDBS0RShXBJbQs1npSnJykbqps5XHT/bNnz/ThIOgjYWCgT/MznA+X1yyaWtqS+XYBm6mKvpURguRR5LC8YdUi5Gw0UfLaCJZxXCStxWKMv+WOFYBXt7KxLpAgMWIK8l9RK+hXK0OGnXaSsE4+oUXMFMeL5Kyt98zkpXvdIhWuEchWhhaBXAeTpXPyxhXJK4ZXn+sZWFFdQZJbWFAIoFFA7bnR1O4tgtmDi1Bvvn8RdCai8CoJoAioANBfK6lB1AOHdJVDBRs/HQAYKJrcBoENBooLdz8QGkASAEyAdSGgAyQOqaNTWgB8QCcBP7QwBcQLQALFCcAbFARTWEqIANTWSAcq0OxioIYBfK9pG8KVSBDEGSALFLQBcQGgAcqzlXDEP/BP7X1XYIDSASAPCY0AI+7MtGkABAPiBaABloWq+lX9gPs0GQCQB8QEyAqQMuDcQKIAmQAwA4EKDBcw0yA4TGkBaAMgtVAAwANq3hSGAH00lq75XeqycBQYH5cTaUoAdq2kAyQE9WGAL2KLFFGU4MWkA0gIM1aABJVpq4MANq2SA7q2VBIAGSBSq9joh2LQAGQGkApq/Gm8KQjX+q0yA0gNu0SAADWYBoYg68AIA4TCV1cKfFBoq5DXP6IYg4TLYpQYLsAYBtu1aACcAGAPTXaABjXKIvAgGQLQANTejX+cENX8a7iANMGlWYq4OA4q5QXEq4kxkq6koSaxAAl8Hx7F/oaCzfilWWEUtWDABpylQEgBbAO2JA9LQB1huwArAN4Y6AG+UQRVm0qBPdV1lOEBR3TaLbAPrWS1cdGVa4gARsLEnK0O95La6CLrayTHQ8E5pZYHLoc0DXM3yijMXa5WhQ8KqAvAF7X1ID7W1S0bXXazEB92XVYhVoTMna4bW2qi1htQstAA84gBZYL+VAakbX5Pti9CZs0Jkar6yEhBpzmiEqBMZq/5fylHXwLFgBg62pAM661VEan81Q60uBjo0XWcVtf1JEL+Uq64YTYMMEsXXDDBiIA+BQJJagkreNCW9SW1KeSFAm6wkROiEoBfygkia661VERexBPFh4Aq66XXPIB8UwKgQgDDAXXeqjpAS6yMRfyoHXsLt7WJ621UcLXnWDa4Ggd60qAW6y96MAAfXnoZ4A9gHDw/AIAJUvJpg4eNFRO8Pk16dj9p7Eey4GABbMZ9M90w+RlEPadZhpABgA4eJ69d/jSGWPhEyOmBYkyMb6cOEBu1HGqQKbPKcxDBUzQbSAuhx61fXnfgut267SHc5vsi/oAvww+YmQAbm+8skQShQzFSmbcGShxvKyQPyHDxHcL60kwGbBSSWgUUgn5Th3tazMG+rH/yD0BKAB/X7kMbwJvZOiF0HqRUoMLQx9IX6pvHg3a61PXhBJ5BZ6yfWh8M1KWuQ3XL60o2mUUvWV6/vXPIJQ3hBKNUJ64XXJ63vW2AGXWbMLKoBwBu1SAHPWi62fXtG+o3r64Ih72DPBrG7ghZVIchjjcgBuq+8YaQB96y/ZghUS8+H1MGOC36uZNxKGvn1lJk5UABlp3jD97FG/PWakDPXTjnxJXG3o3qcAY2rG2vWbG3pmN6yT6CEN4GE68xBcALYBD67+VDEPTXVpuqbbFHTX5q49WaQGgBP6G03qDAwAmQEDWqqyIZQYCcAFq6IYTgLEXHq6tNBmoSBaAOVWga/1WmawIALFGjnaAEyA567zMCm/BA7GwNbEfpOSPAKbwVG2Ix6qpa7cmF2R7iIc39cC6x3iM1Ur68p1YcXnWrGlfXOi5OcnNF0I862YhmiFvWi6/s3YGLPRZ2LjQIcQvRV6FB7OQOc2lG5c3PyW+VDhbc3Pyfc2Vmz1w3ysOwXmxPW64oq6Dm44QMaC4QxCHMwDcB4RjcIC3568C2WqaC3XG3c3KgA83SyjC3TG3s3EWx83zOAUxZhMUxZuli300Rc2WrVc38W+C2WqZC3vG4U2uADSg4W+S2pA6ZwagvOxEGGlEUGFQwzmwy2gW0y2QW1wAbm0o3CW5RBiW5y3LGmS23mxS2zODOx56HOwqrTZxGFGK3dmxK2Kisy2uWwS2IW0S2oW14lSWzy2VW3y2MaHAwvmwOQ7W6ORF2Lq3zG21VcW/OYWW7K2TW/K2zW3nXYWwkRXm5PWcA0G7PCNi2i6263oMG+VSuqy35zOy3Hm5G3lW5PXv9qVquLCG3xWzi3JW3i2jW9G3oMLG2SW1y2E26fWStWTTQ25PXw2+Qg3ysY1s2+Qhc24q3nm/634W5u9J9iW3XWxm33W1wAo25622W6a2OW3Lp425a3E24BdAGXnWXW/kRW2xG2s2522Y292242/m3+24W2PC+gcZks23R2wa2pW5sLjW123vWz23oW7O362/VVavlan6vsO3GW6u3M22Y0q28ZAa2722mwAW3EaoTDywQeDU23q3026e222+u2L20LAr2zu3Nhbe37qhMDY5XkCV4Mu2J8GO3y21wA3TR+3EAF+3zW+B3f20cDk2feDH20B2022G3QO8xGJ2/PW5W7AAFW9e2f23O2729zjxxcB2y2+h3325O2c29O2823h292043R0f7iDcXzin2yO2QO6+3x2+e3yO9W3KO7W24O1IX00xVliO2h2hYB63MO163sOz63QWzx2iksBEtsgJ3WO2B32OyJ3N22J3t2zB28QJJ2lWaGjZO19BDW2R3FO1O2t2zO3qO5vWG2+GblWZQtNglp2PADp3K2xx3L21x3cO3W3jO/u26O6JojiYniZLJZ2dO2C3bO5+37O9+3uWzR2B21J3oIpGbRWch3n26h25O6R2O23p2KOwZ2qO+KV8OxPgConWaxTZ5212953Yu5x34u4q2/W052w27YaCRMbrj2/q3tOxl2N2/p3lO4Z2Au/l3A24gHwPQIJBbel2z25l2i61h2cO/53f20G3S3fLbmu2+2+mhV24u1V2qO300uu/V3cAxB68g+F3mOyR2hO1wArTZB3oO3nXmVUl3v9iZGKw9N2T22V2Wu4N3su8N3FWzV2AsiZ2F2zfGYwZt3Su1Z212xB2fO1B2/O6p2MgKt3eO1JY1U3122OzK2su3Z2cu7h2OcI92F24Q9vC+d2X29t232zZ2Pu752vu9+3HO0d3nO3937s5mmSu0D3Lu2e2Fuzd2luxW31O1JXjK6935OzF22u6J2Ou6p3Eu/63xqgYAJqr5WL8NLW/YrLWXgxEt10BLWoAHsgYKBjB64PLXMQKz2mSGlXuGBBVymzYJZzGA1SwAxA6AOsN1AHr7YgDuUGQGT3Ia4z3me/MBWezQBae/QB9AEAA= -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 09 Feb 2026 16:16:16 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"4026:21AE59:E6E5D3:3E314B9:698A084F","x-ratelimit-limit":"5000","x-ratelimit-remaining":"4891","x-ratelimit-reset":"1770655158","x-ratelimit-resource":"core","x-ratelimit-used":"109","x-xss-protection":"0"},"data":""}}

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 9, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds first-class runtimes (ollama, vllm), expands the benchmark matrix to runtime × harness × model × test × passType, introduces runtime discovery/clients/adapters, model-aliasing, schema bump to 0.2.x, major runner/CLI/harness refactors, dashboard runtime views/aggregations, tests, and vLLM Docker artifacts.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Docs & Project Layout** <br> `AGENTS.md`, `CLAUDE.md`, `README.md`, `llm/...`, `llm/implementation/...`, `llm/project/...`|Introduce runtimes concept, update matrix and MVP docs, add multi-runtime implementation notes and vLLM setup docs; adjust examples and project layout.|\n|**Runtime Core** <br> `src/runtimes/runtime.ts`, `src/runtimes/ollama-runtime.ts`, `src/runtimes/vllm-runtime.ts`, `src/runtimes/discovery.ts`, `src/runtimes/index.ts`|New Runtime abstraction, Ollama/vLLM runtime implementations, discovery APIs, createRuntime factory, and runtime config/types.|\n|**Harnesses & Adapters** <br> `src/harnesses/harness.ts`, `src/harnesses/index.ts`, `src/harnesses/direct-adapter.ts`, `src/harnesses/goose-adapter.ts`, `src/harnesses/opencode-adapter.ts`, `src/harnesses/discovery.ts`, (removed) `src/harnesses/ollama-adapter.ts`|Refactor harness contract to be runtime-aware; add direct/goose/opencode adapters; remove ollama adapter; change discovery signatures and add compatibility helpers.|\n|**OpenCode / Goose Helpers** <br> `src/harnesses/opencode-*`, `src/harnesses/goose-output.ts`, `src/harnesses/goose-openai.ts`, `src/harnesses/opencode-model.ts`|New OpenCode config/env builders, process helpers, and robust Goose/OpenCode output normalization and OpenAI base-path/model-key utilities.|\n|**Runner & CLI** <br> `src/runner/plan-builder.ts`, `src/runner/item-executor.ts`, `src/runner/index.ts`, `src/cli/run-command.ts`|Plan builder now discovers runtimes and per-runtime models; executeItem and runner wired to runtimeConfig; CLI adds runtimes, vllm URL, model-alias and vLLM lifecycle options.|\n|**Model Alias & Model Data** <br> `src/lib/model-aliases.ts`, `models.json`, `models.example.json`|New model-alias parsing/loading/merging and runtime-aware model resolution; add model mapping files.|\n|**HTTP Clients** <br> `src/lib/ollama-client.ts`, `src/lib/openai-compat-client.ts`|Add reusable Ollama and OpenAI-compatible clients with streaming/SSE parsing, timeouts and token extraction.|\n|**Schemas** <br> `src/schemas/common.schema.ts`, `src/schemas/config.schema.ts`, `src/schemas/plan.schema.ts`, `src/schemas/result.schema.ts`, `src/schemas/model-alias.schema.ts`, `src/schemas/index.ts`|Schema bump (0.2.x), add RuntimeName schema, add runtime and modelAlias fields, vllmBaseUrl and managed vLLM schema, and model-alias schemas/exports.|\n|**Dashboard & Aggregations** <br> `apps/dashboard/src/lib/aggregations-core.ts`, `apps/dashboard/src/lib/aggregations-tooling.ts`, `apps/dashboard/src/lib/aggregations-compare.ts`, `apps/dashboard/src/lib/aggregations.ts`, `apps/dashboard/src/lib/types.ts`, `apps/dashboard/src/lib/tooltip-content.ts`|Split aggregations into core/tooling/compare, add groupByRuntime and runtime-aware metrics; update re-exports and types to include runtime/modelAlias.|\n|**Dashboard UI** <br> `apps/dashboard/src/components/.../composite-score-chart.tsx`, `apps/dashboard/src/components/compare/compare-table.tsx`, `apps/dashboard/src/components/run-detail/*`|Add runtime column and \"By Runtime\" tabs; extend dimension types/labels/callbacks; show runtime in run details and lists.|\n|**Docker & vLLM Local Setup** <br> `docker/vllm/docker-compose.yml`, `docker/vllm/README.md`, `llm/implementation/vllm-orbstack-setup.md`|Add vLLM Docker Compose for CPU/arm64 and documentation for local vLLM/OrbStack setup and managed lifecycle.|\n|**Package, Tests & Results** <br> `package.json`, `test/*`, `results/*`|Add npm scripts for runtime flows, update tests for schemas and runtime/harness changes, and include multi-runtime run/plan JSON results.|\n\n## Sequence Diagram(s)\n\n```mermaid\nsequenceDiagram\n    participant CLI as CLI\n    participant Plan as PlanBuilder\n    participant Discovery as RuntimeDiscovery\n    participant Runtime as Runtime (Ollama / vLLM)\n    participant Matrix as MatrixExpander\n    participant Exec as ItemExecutor\n    participant Harness as HarnessAdapter\n    participant Dashboard as Dashboard\n\n    CLI->>Plan: buildRunPlan(config)\n    activate Plan\n    Plan->>Discovery: discoverRuntimes(config)\n    Discovery->>Runtime: ping(baseUrl)\n    Runtime-->>Discovery: available?\n    Discovery-->>Plan: runtimes[]\n    loop per runtime\n      Plan->>Runtime: listModels()\n      Runtime-->>Plan: models[]\n    end\n    Plan->>Matrix: expand(runtimes,harnesses,models,tests)\n    Matrix-->>Plan: RunPlan(items include runtime)\n    deactivate Plan\n\n    loop per item\n      CLI->>Exec: executeItem(item, runtimeConfig)\n      Exec->>Runtime: createRuntime(item.runtime)\n      Runtime-->>Exec: runtimeClient\n      Exec->>Harness: createHarness(item.harness)\n      Harness-->>Exec: harnessInstance\n      Exec->>Harness: generate({runtime,model,prompt,timeout})\n      Harness->>Runtime: call runtime endpoints\n      Runtime-->>Harness: responses\n      Harness-->>Exec: result\n      Exec-->>CLI: MatrixItemResult (with runtime)\n    end\n\n    CLI->>Dashboard: upload results\n    Dashboard->>Dashboard: groupByRuntime() / compute metrics\n    Dashboard-->>User: render runtime views\n```\n\n## Estimated code review effort\n\n🎯 5 (Critical) | ⏱️ ~120 minutes\n\n## Possibly related PRs\n\n- AustinKelsay/plebdev-bench#4 — overlaps schema/result-shape and failure fields that interact with MatrixItemResult/RunResult changes.  \n- AustinKelsay/plebdev-bench#5 — overlaps multi-runtime support and dashboard aggregation refactors (aggregations split and runtime grouping).\n\n## Poem\n\n> 🐰 I hopped from Ollama to vLLM blue,  \n> I carried runtimes, harnesses, and a plan anew.  \n> I mapped aliases, built runs that expand—  \n> Five dimensions now stretch across the land.  \n> Hop, hop — a rabbit's cheer for the runtime brand!\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 2 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 inconclusive)</summary>\n\n|  Check name | Status         | Explanation                                                                                                                                                                            | Resolution                                                                                                                                                                                                   |\n| :---------: | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Title check | ❓ Inconclusive | The title 'Feature/multi runtime' is vague and overly generic; it uses non-descriptive naming that doesn't clearly convey the main scope or deliverables of the substantial changeset. | Consider using a more descriptive title that summarizes the primary change, such as 'Add multi-runtime support (Ollama and vLLM) with runtime abstraction layer' or similar to better communicate the scope. |\n\n</details>\n<details>\n<summary>✅ Passed checks (2 passed)</summary>\n\n|     Check name     | Status   | Explanation                                                                         |\n| :----------------: | :------- | :---------------------------------------------------------------------------------- |\n|  Description Check | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                         |\n| Docstring Coverage | ✅ Passed | Docstring coverage is 89.01% which is sufficient. The required threshold is 80.00%. |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing touches</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> 📝 Generate docstrings\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"07f1e7d6-8a8e-4e23-9900-8731c2c87f58\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Post copyable unit tests in a comment\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Commit unit tests in branch `feature/multi-runtime`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- DwQgtGAEAqAWCWBnSTIEMB26CuAXA9mAOYCmGJATmriQCaQDG+Ats2bgFyQAOFk+AIwBWJBrngA3EsgEBPRvlqU0AgfFwA6NPEgQAfACgjoCEYDEZyAAUASpETZWaCrKPR1AGxJcAYiWrYFCQA9MzYHuKQFNgY4mwGAHKOApRcAGwGAKo2ADJcsLi43IgcwcFE6rDYAhpMzMEAgtiI4hgA0iQeiGiywdxeAkoSYCkYDLB94R7BGZmIqZBNLfDtnd2uAMr4gQwkkAJUY7BcAGb+uIEhYRHwYNGx8PHQzqS4+4fjXMzaGAYbuAESvxuGQDDYSBJ4CQAO6UEoGHIqNYcAwAYSC1Do6E4kAATAAGXFpMCEkkADmguNxHAAjDSOABWADsAC0jABRAAeSFaRH4wlE4ikyAcThckAAFDFxphSLQAJQogBE7lwXl850uoXCkXucRIiWSC1muXyhWKpXKlWqtRYjWarQ6XR6fQGQxGZHGkw801m8woXCWjrWPT+2wou3emE+kDOASC2pudxi+oMzworyjRy+Pz+AIuQPwIN+4MhMLhKMRKS6KPR5yx1C4BKJJNx5Mp1LpjNZSvMllRLDYsRFjm+LiMUCDKyd6yiJAAjthpDR6GhY1M52XoegMPQh+J8OR6AABJhKKiqdQaAxQM/KS8A+AAbQE+FwAF054huIelPRoZUO44AQ3wrnO/TyCstDwAw1ArHy6goMgmDAYQpDkFQYFsIg3SkPs8gDkoNgqGobyYPQuCwNQ6Drj6m5Qtu0JoMguAUPARCkEEtAaDAsB7EEEEoGMHjYEoyEKD6aDFPAAheJASiPl0+wePgDAANb2Pm8GQEqgCg5IsYjwIeyAghQJz4BQbC0EqkAAZRkCUXsiDwXJ6gkMwXBKj4G5BFuDlsRxlB0BovY3mAhgGCYUBkPQ+AnKhxBkMoYF1PuXC8PyIiGcK+EKOeJFXtoujhZF4BQHAqCoChaB4GhSWYViqXsFwVDbqKY7yHIeX3qRWg6PoRilaYBgNAA4uyCTQBsGjMLQypKr2FiLAAkolGGYvQ7XOPIcWMFRGCkIgE7WBQijYGIkADrEJCcjimTcLQG0OXxChjCQ3AXGgHjydQa6gWxnKxqdzA0QALAAIpAzCKJ0ADrVEUOQOGwzQLSw9wzGINAsggg5+A0QykN6o8JDw84SOILD0NKB4KPLujmPYyCAA0QmsWdDDaWu5DbsTbDySTGDOYe15QOD8BBGIFnyP80RiJcXDLbEp20OdDaQDz9gRsEfPSMEAuSwQ4rmXwuvoI9H1wpKKxnEEb37Gg6kxYg8o7vQ2APU9jnydIDBsR9RlYLtCMU9IeNzicXgXdBhuQAAEtA0BWG7l05MtkDNGgpCs0EFlEJg8AAF7ad7vBGXwIfSIgYDmQwzRYh4PTbJoN6QODqmOOwcGHlwqKN2xJxQvQZsSMglc4fY73ON3WDkZA7Dij+Ky4IgADcGee2BQS256YcEFEKYk4gwRoBbNAUMhDBMBQ0EHR4sii5ACSHmAy/KNlewpFRkIWYGtB/vJDu+4Z4azfNpDAL835UA/rlJQJwaoRBTjddQYAX5+2YrASe3wHgMEQNeSAkADBLQaBEZKgcWL429koBg/cZ7IF2jdH8FAwIWR4NUDwMF54PHENIY6z956ciYSuSYslOHUNoQeIWtkgpQ0UPAQeWIVjPVQNBE4JxrwIhWGHGUB06BcAANQAGZghgFxAYBaoUIBgCMKiHIDRMjg3ZDNOa5iFpEMsA0Va6FkpYi2uKXaOjDo2P2nhfeABZAAasnXgHM3hMCFqxH4OIaoEDANBRATApDigyUWPYHtHpgROMDHSTRUnpMyZQHa8VqZrGCOPeYMh5BwIQbgGy+8lSlMIOU/AWSqkHweNhUIMMuh1PJlXMOXVmk6mZjZKCME4IHX6fqZCQRQHbhWDQ0SiisDexSV0pAFTslMBBDxfhb4+J8C/mgH+VBvqsJaHLC4ty9qymkBopafZFikMwuQ8OVDRASN+QwwRFkWF8G4Owzh7B1BQiOokQ8Bp3GQDCQXM4LRIA+HgHJBoGAvqyELpQIwOQtHIECXoyA+iaQmJpByZYoFGow3ojCeeajQVcDCXQeAjhXGWOGjYdkDRwZhKcbNeai0PFePqk9PxfSyVwqgPdApWJvYYloGwLgZKKIvVGOMMcGl/rwEBkUlgsiaaQFhpAep5qHLLmtRjHCTM9j7zNhaq1FqanfQtajN4Fr7VYxxiQVmdlMGnwAXAlYMLjKxlYWbOe9TH4NH/liMJOpbg2EPvzSJydUR8XUkvWIk9DKHh9opbSI8vrwAKYHdAft8AT3wJJb4wQJA+mYKzepYcY6CnKPgOtIRcljBhqzNc35RDyM4Tq2Aer+kKGYP0EgkiU5+qiJiYdu4I5BTehQn6iBYCvmcMPGKlAubrsePO4Bi6IGo0flyDGu4sQxKym8Rushm4brtrsIEy8VZq2HhmztEtBTS1ZjQ5w46sRBEbpI3d8BuD7AXbCMgSyj4pw7YgVm+SnpBAcBEZAYk/aweg+HDZIklDIf5gUtAa7Vy0CEA6CD0gdR4cA1LbJ7lMDiFwTewR5EsQAEVsAwTUi0Zwbx94ka2QItAc6vDIBNv0jA2lg32BBJzQeDByN7DjWMnCCak17lTcmAZews0oBk+5Lui7aCqWQNvTdkY54SByDkMJk8LhwavW81uiqnrWdwe+3e27t5RzeNccQRn9TIqia9Ggt0U6azPV4C91bPN4NbkrTZADNbYKzliJzLnIAcLOAwWQNC9g3Wk/OoSz09j8sFcK1mCltAcMWSOlyJAjO2QsmpSO+BtxzyLJIr6kAADyFABD/EdhpN+RAfki285vB9p0n2FabngQrPIS742C4KDWzLdbMcNtLFO2GmMGyA2x7BnG0uTn03t7cg85J2Y/XsJRVCgGWcDlwVtwREsWdiDPRM4XdZgGYBIbgr9zPJZFrNDRnySHnzoX8l64jp5EeBUIrErCIWiI09Cnh8qn4Is+SixTaK3iYuxbi++BKKBEpJS83Rc0KWgzSCYwxtK4hPTvEy7cJBWXMK4DkPrPKJzDSksUYIj1d37pvsERA2s6g/nIMOYIMpmHHyV3WtyYAclBDAOrzQK9ORiqRZ4taPjNqjm2vweKcrjqJoAWbaCQ5hZYAcNwIRXAz2gsgLN7Y3AABCsh03GfXkrvAWn1123PFDBdbF/NdV1uvCTZHdbg1+tVw3P0AQ8AEmjwO3G70AMPOLV3gc+5CcYF9DwAgptcAgf1q+70V4C3L8WiQX0lzICVB6myAAfHSusB86XqSPpU3qlSPwHHOvAIC56Ubz1PObGBvfKw5p/EP/6Tv/oz7n5o2l/ce2D6HyLc9eDL5IDm0Te+0CP0yMtBvzKlTB8gKfkmbSVDmwAcp6+2Hle3x8jO6Z4x7HqtbroARcSMAcLqSWrkQtZ8jyYqrb4u5kBu5w7pZzq+6hrkoAAGR+QeW+xmuBQMJquBx4wQHCAgJ8HEQQ+c0GJBSiuBEux80ue6+AB68uiuLAyu7AmuCMK8auPB2uNAuu18HWhuGgxuuBrcVgkKGmUC8CkYmGK4XAuBM+P4zkNAGw4h1+zCVgp0xQjBWAzBnurBGCsutAXBDAQhWBKughhumuwhWhHWeuEhAhUhiAnIMhBCUAuBpegsbule6kJBzkRAuKTyeSi29AxqHkBgBCvhkAuBEoqBQsX2OkfekAg+SoY+WROkk+rMuK6qmkbEB0rsAAvHoJABIPgJWj4QkQQCiAkboEkSkYEekb3sMuPsPnkTkTpogOPgURrNJt4CUfBBUVUTUXUfTkjIznKAYjSKDNSpzo8Nzoyr5AxCyibDiBytBNyhYmLtYgYCwVLhYRwXLgrjYVrvYU4XOs4CEErvcWAACLJCQJ4SbqLsQpKutGBDKrbnMbwq3I7uJJrDYJkJNMtMKhJI4FgHxKfJQOHBofcc8K8azOCLNlXOQiiV4NRpAMtHOqdFIPuFjCoDiSdkehfDRJrGbLsHRNRN7CJswv8f4OMAoBQP/r+GWn1uHOkv0D0CgDQMwBoLrDxBVMgNDDlMgssIsoPBfG8IvkwCJMwFgBKB6q7PvOZD6NyWgCcOfDVvdpptCcqdVjXs9EEE6qSW8kTgCduucgiYqTCfQnwLSd9PEjQMOPBq+uursndjSZ0B4BgcQt8kjvvP8qBivvQvFIwqCljuCvIVwuIATnwvjHKuHNGcwnQCIjAYsFYOnKjhGRosSrMZqgYmziSCsfSvQDzhscyvztseypyvsW4mFEcScWwZYdYbYbwarvcGkgus1lLu0S/E1limkvAF9PgEQO8abl8Rbg1FbmKLKiEoCVAErOzKrLsKuAaTjtmakW7kPv+jZI7KdBPN7A/lwGXmgYHI6mskJJlmHEqMPkXn2vQO/vzMxDRI3NWNVlQkOVgF+Z0FDBLtpBKODJCRNBsMtCNgkAAPp2KB7sg5DTRvkkDyh6ZO7/ojDMRYiPbnzaRvYvTLSClyZYp4WLIqQVAaYSi4WUDB6XlpGHiuxzygGlEIQ7KEXEXEroovFyQSgoVGkYBoWYGY6rgQGAb0AEEn7b7yYg517zASWnQez4Xu7VBjnt5YAHD+BqTWbQhCxF68b0D0Vu7gz9lYriwTl8gNC5n2CBBKGjFGWBwmWKTmUUUGFFjICN53mkZhxFGjEPLaSD4YBTDrwOWl6mUeAuWTlIQCIiVsK473yPyRV8gOACBqVXlRoUWcIqHKr4yp61bb4flrg/juniDDYEHwQYYYCyYsQvR1zsnsBt7pVYCoCPmHn37RE8CUBpUMUaUYjaV9ZSJzxuTMDIAcLcX4y8kvpLpFjhCYhv4oG/TtVKoxFYp7Bwmx5NQenOr84hbbnxnpkrwXl/lOXNZJUpyhUYCOrvKWDw7BlEahko4AoF5RoY4xmxRxm44JkwornWDxm4ABr2DsQRGXAbzLVqEXWOokGeV5XIC4GtXGZKjGFJFtlnGcGXFdkIo9kxB9mKSDnqU43NZjkWXvEyFQByGfWZx4Q6nFaqFJEXUnVmXjmuWGGIAkHPaBZ01/mQ2swxIYz0ElwvSawxDVpsDMApB8CUSKVECYLezXENVWXLSyHxkAXfTfCe7aTZXM64FgXCoJCQXQVwUNAIVIVQ3ckw2Glq3cAgW4EoW4GuxMEo0y7nFWHo1y1Y0YAE1Yp41NWe0eBE0UUk1K2fVu1vAK2g0bTg3HXhVJWm1N67AfTiS4G+VcD+WLKBVTAkG82Shzz1zICIRKLqAmQs3yhB3ZkHVjz+Cx6a1cC3qgoeVm3CSSba1R3OVM2Tm4GszN3qWQ0/kvSPZrWV32mDgNXBoO1mGnFO1o3cF2F8E6zY0jnTB7mBy+3+2TmB2txFnaLLnM76JLEkiSjxLx2fTfR/G7Q7mcJhHA2rJyol3uKWCk7yK2qU6Iqb2krb0GK4jGKmIVlrFp4QibF1lsrxzsSwCi4tlGCO3sFT1XHCE3Fz0e0L2/aCkr3QTE3G4zkSpznSrW7+J27LmE4P42pxbZXVZEXuQM0RVt1EBHUWUmUZL+yXrcksW2bb4pAmx7AeroA94ADew1wp/6AAvpAAAO2QC8OCkzTDJCOQhrjiPuQaD1ICM2QSgX4/zND3w6RyNCkerSPjliN8OKNKhoXWmpn7xumnTfS9bbisKL5BCsRQid4Bl9iaLFnv0UpUpgA0oGDsh0q/38T/21kC47ERrfAeAzFb2vI70eNeM+Nc4pTrEBN85BNC4i4HHgPHHj3tnO2dkh3Hy9mIMGqcjPGWnTmfGYPeLzk2WLn/H25Al3bczMpgkQlQkOnGkPUcPUAAwOSWmWqD0UA82NybnoC6kIkbDQANDQCZAbApxsMWQmYjaOI5CPzggWTnjKovTrUIniaN1kZNPQDgUpwwYjNW4CDzCLgNWtODVXyrMuQPzpbsUWmvH7CKCyA5zvSDMMb3qsX/HeycMKIeD/iAQsXaS7R8NmwEV7Cgngn7MtMNownrxqQt5zhfPaTyZhILOIXVaF3bkiGF6yHYaUBSD0BSm8jIvniousJxwNA2AJDsgbAbCszQB0vQCsxWAND0uMvMsMuQDsgRINA5C4kwvsiMD+noZeWiTaTMBIDOQHRpKZ77S0AIGSiTU9DaSAA4BIACgEgAuAS2R8RYCL5VSnPsBCVQDgiPhHh4wNq67QyIugI0DwYqTbjew8UkDrwSk5XoAcLhG2SATeyawPLnSRGPxrk/pDNrgh1gBeBSDfR+aySqQaT4ZsRqCLIHUpwrCd5sQcZpZm53W/LtM+zhlI6vUZnvVxVl3cKwrJkxVvVZliJPURmmrgbcQk6opP2rWLDU74qEouMRNM4LFEjUo0j4hgNWIQOZOo0XHT3dmCH5PhXwMr181vHoNlMrRYO/E4NLmvKE6O7qyayEMtavYPM8sYCQinQYD7jV43zPTUTMM8CNwYAaAyr8PGZit8kPtPtoa4lvuPsbtSHLh52zyzoYwXQHsOvcneyB4xDVFwiF68QqL4A+Vviet6m2Px4OPDasLmMNqxiOsp5vCHgaPU2Ci2YUkgt4AQotyDRBmI73WUKPWFvo5Rkgolv8AfXluJmVutz8IHWZnn147cJNL1tI6wirLUxNvXXIqtvorP0dt4q07hNv2RMGJf3DveO+PxN/1+SAOC7IqNnMAjvi7juT2TswMz3u2+3y7XzwQjB9U6UPvLsHGzkVPYPVMBL4MO7/wsPGaNU9U2We6+77x67aSaVoD9W6Xe5YEa5+6KWEEoUgY8GR6NL8UyNAeR6B62cDW4nRkNJUnP6v4oWf4CA+v2R/7SAAHaTpdaV2dcWaCQA+aox1fpzbP3k0RmwvEpxukNUTkHTORkYksVfyBhLDKsyv5xz9G4mv7QDLinIpn4PhyZUabyZ2l8BL3GQScI5kJRr5v5lFtMexXY77UVs/XPzkAKcAk71lmqexOrEaf+NafJO6d7H6dpOjsZOS5ZPQOUEyQ0EYn81reHUrvm7Ofruud4NbvHTgh8lDO/NnReAADkJk8ZYdDgZkjsewym+u5dpBIMWcv3dCBuczw6tBJAf3QszxvaCBuJuPdB+PjxQQrMdZgokgnQ8gQQEp2kKksEPogng8FrWPsR6AxPpPeCK8yz7kPSDYdEqjRk6jgn4ZD6f1AayE66Jw0oRGEobxU5rLmMxENA4IOGuAjLjw8Ek2K8rMPgZ7PCFApvYrlXoXdn5vzWlwNvjLFPcwJALvMAFPOhczdvYXGArMGhIhJAHK9juCI3LWtASsJsVkfvDvHXPB9xoe1ckG0qrEgblwLsnrh4fIymjkEsXDiAqk45YEC3rMjkQQXUnQxvERAth7Nc7bf20OUi8m5VB0rMIm4gyw4fCfdxbERfD7C2y1pq4Q5WzHbwKPdlPJnQJPc1ZjczlrSrc8dPSAxaTfn2UaKXmsqbnf/2Zvcx+FkXE/bkQWLP/AR7mP4/WICtcmxSzrsA5pI/smK6Ff17zVHt/dPsvPkaelx0GwQN8YPYKmRUbyFggPHYlkdyz5KJIGHZdGlQR+409oMnhJoi0R3b0A+O1bDXCgMSKpsAAVNjx0gaAEBs/aDATyCBKhV48RBItFHH6QB8BAvKfMQOF7k8G08ECgVQJwG0D6BxSRgdTxIHkICeffEgOwMSLgh3W9ACUBAkKw58ES4AstjBA0YC8+BwvTwkxXeAcFNoC6f4tL22CIANGcg/6iCGV4xE1e5CVmKnngjYCWiVgHXpiH146hrY10VHrsBLrNFbwCXGgDYJwi68SAEoYakCBRT2NOQZDZgPYIiBPh3wioawLYL16MYIgHAlohHhoAhCvBiAHwRKDcKBhaolZH3qskHwxBw0R4KIUFTFqEo3B0XAPMHiG40w/BxFdlJ00NQhCwhuACIVEJRTcBgAqdIgKzECEAwmhcQloe+EMDlDJKsgMbojCri1D3IAQhocEMFLNDWh9QjoV0J6GzD+hBvCIcMOoEVDj8sgKbi0CmEjV6hQQ9YTqEWGSdlh9jdvpJxOHzCBhmwhIVAFGHVDOg4wimIcJmG3D3ICwyIUsM6FXDuhNwvoXcI2FDDHhMAGvkQBt6ODz4dlVwdsKSEkB3AUrA6Dbw+HHDgR3w+4b8IhEoioR+YZAOnR9DgiLeh4K3tCL8FOC4R4IxEaSIeCUA0R/gjEY0JBFnCcRdI8kQSLyJBViR5Qi6nHwGowjKA1I8oYiIFG6V0RQIlkViNBGswCCPgQSkdXUriiMAEQkkU7yCAUjFCaPeEYkWgBu95gWoqkTqPBE2xKA+ohtG8PGSIBJRvQ6UaEOxFRCNgC6f4axS2GJFERFojwO70ZF1CpRcwmUWyKiFeifRBI8EV6NyEkAVRQo5wahRpEeCkR3vcQiqIlAaA0xwYpMb7wy66U1R5QoPi4VD4J5kAlI2ESaNFEJj8xbkQsTBBtFpiNAUQysTQGrG4Jcx2wwPJH2j4WRY+2YlUtqJcHxjZ8NAdsVBE7GWQ6AKYusVEOHG7hRx3YqrgNVbEejE+QQZPhKHuANAc4MQQPA2OXEkBmhVAycHSRwjF8noGMKgGwD1K7opIYcZigukCA7IleDkIeMjmkBj9Yq+OWFOgFWRs8JeMRO/ggHFKw8SAgATAJEen1HbkgKMAJBoK7IQaDmxo55s6OewCCUCj25vVWO8g/jhxx+rk0y6tAnAszjwEEDeBQvWnnMwoEmkjOUDEzl92oLKC6EnhUulCnwn6YuAREhgUQPomkCCArAg6BROgFUTYB2seAVxPISMSya+1FiX+DYlcDiJnE0iaQLp7CCU8s8QSdkzgHfdRJ/3I6BJM+qpsfxRLLgKkJ8HNC2YwotHgQJgHqThJmkhSWJJXhMS8ctAgyeSkRHGTMQtotYayPCE4j3JsQg3pZLUmfcRJdk7SY5MwFvAXJzORESkJiG+DMhiwbIRtEjF5ECh/OLRAqAbxGg+ASgoKTRJCl48kBDk3SXhKERzhxBXAZ4cMk8lfCHRoItoVJFdEVV/RpwnyVUVynvcJ2LtGyXRNCl6Vipv1PSc5PF6GSdhhBK0ThBqmYi6pQYv4SsJaneTBh7U4pFZOCm2TCp9knSYNNKm+4oplUmLsHn2G4App9on4Q1MuGsVVhtUn4ctJNSrT8p60xAZtPCn6SRp5KKqTTAmk2imRC0wMT5POlNTrhdogMTNLamBTOpxnbqTYQKlPSwpJU5iWVL2m4iTeXIvsXsA6nmFIZnZGGfwLhnbSEZu0t6dFITHIiUZ1Ab6X6OBmtTBhwYyEdCKJGWMVpeUqGbRKYEMSBpuEgmUySRkcioQ1vVGcaMjAYyJ61ElmTjJUEczJJiMomRqgTG8yGRBIk6SDLOm+BLefM+mRrA3DCyPuD03qRtLxmcynJ0siqW3D/LRi0Z4MzGaLOxmPTcZ/UraYbIinlTfxsswcVGJ7FKzqZEQuUTFwVGuxtZXUm2XrNhn2yXpw0k2T4A1Ee8BZpYoWUzIhnWyNJwcu2SLwdlSzCZJskMYaJjnmS45d05mUHLZlFS05Q042S7KEi2wvRX06QJ7MWnnDnRuAQGUQFuk48C5Scouc9PhlGyM55cz0QaOjnkza5f0mmVwCzkDzW8AcrGe3K0mhyu5TspGRGOTE9izJsYy2SLKEnQzbZEskuTtO5kyzUuNAReVmPnESifpVMuue+B9kB4FR5fCntXKz6TzE5PUjuQbPTl7yTZjYkPmh38wWzH5G81mTPNTlhyy5o0xEZ/ObEUzphzI5WdiKvkewb5i/e+f7PjlWz/54s9mTvK5mRT9504qPhgBj7jjl5v8lBevOsmbzk5284BT3NAUJjcFs4whSfIwBDzQZgwuBdwD9lrydZYsreRgqoXvzy5SJFcQMLuCdAvYj4ueKrzGCSJXZZ4vcTEBtHrjNxGAbcZwsDnTy+pQCxIDBLglLQH65OWMO2xUj4A1IHsM7iWQpQABOExGkEMRMgDOrZNuc/J4k3AIcnXWIMgMB7fFLcVTDqDU3c51MAEDTbcBgN5qUB/qhpfNoU0yiChGsvsJNnXwrn2ZP4U2GKBnHkqShNeGgVmA2kbjfBWYLaDwMwBNZ1cOq/yehoRmrTyZQI4wOgCEIA76klJhaRdM128qGkIWjANiHhTXAfCvxkLbktUr4j0B5EhpfRKakAqjKrUoy71BSh4CYwHIANCtOESEqDQoAofWAIoG/zkoIEp3VZQunWWbQABkRcOrTW2UGgoAESMDD0ztgjFmcpysxW430S4hlianOJgyk04AMHuuxLlPp3gmbcpE23IToxwimxlMJX1JMuFJQnFoCJahXWJnUMJhLIIR7OQYIBWy4FCmJBUeiYXuncLqCzi8QK4rJHsBPCMhHtopz7YUonlnjH+rd15xbEgGXypsrygcUJy0F33QwW8gB6OdymUqEHr4rc7g9W4589yH7h+AeVmU/zWgECF1gp0ARkoIIIuHEpMV10HqEhOOUQAAB+GVd8wlCDZA4X0eUOvH64ykoQALEjt8CUTSht6N6E9hLEPAXsVIOXb2OspaC+UDFnQCQXx2KVWB72V0QeHyHzgrAQS4qk1czgKXMBA82FTIBQA8Bar4IyzGIN6swA/tqmAawagaQlUtR/0QIEoeLUfiBCalUfQUiKsDW5cHsIazNcZljUHQJOt1BCVtyQkFtAUL1NCSxwO56TIBx0IVR5E2XoD4yEqpItKrGIHQkaphFlWQtZnsrU5pNX6d2oImgrdVh4YbP2rRXDJVVzETVUOqIAjrsVhcydcStbjsgbVZ7NKM7KJagrl1zq3AMnU3UkEBeo61BeOvgF7qV406xNRgF9XsQuAc6jAcurDURr5gUamNTeuqz3rSFa03FUr33WmsE197L9Xdh/UhqB1WarKaUIoBI1vYuBGVCQTjawFdooGrhbusg0vrBV1AAtSELg0AIEN7qpDZWuA1j0x14G4IM+tZr3KlOFKBkM8uu6VluotK7TjsT072KjAfmRFhQGbQ/Y6sQqEVC4i5WrtgeviDdn4oFXAlS1b+AVJJuxCAInYomsNcEAk3CpnEPscpcmz5DrKnW22KDmuE57DZ8srmf0FkmqJ6N24WmyUKiCsCZBUEVVV5qNnGwiZ1INcNiDFHvjygGeIKGVnyBQgjZiw5uR4uICeZh1qIBQIoJaCs0eBL1HAMkPiEy3NoaQPEDLN5WQCTYmSc8f4EWCEgBsi0QsBnkertUNUM245J5vEj9WBAQEEoCJM5jCQwUIk7IGwPrQSCsw2tLmGCui0Wb9b2tMFaACNhGw5AYKqIfltNrZY9buto2wbWEgaAAANIbRi2m05AJowWlOMJq6pa55gaS3LMOhUiLJlMqWc/pdDc0eaNG8SB5EkjFYpI9WnGEBAQERYB8U4EvdkpWjDjyYskbuVmB6lvnYczx/oXEt8EBicMvAB0SiOvFHRqZPxUyRBJwy+g3QalGAUGNoGCB8ZYQGAQxGADJCB4wASscrWRHXRXbbE6cGLTJCxTqBOo8gA/K1h4C4tF130F4J3ALRhrJ4FAKQJAGAAeoqi+8a5LUXoBKAL8sERdExERjwRs2UAQrRPyZ49w3MyAAbR1q609aoKfWyAOrs20jbddY2ibVNpm1zaYKC2jYEtsN0rb1t+uxCnBQmg74pEB250s4SiK6Bm2CuggHBnmAVaK1eGeNkPSwLHa7Oj8Z+KjC4B+YudreVze5oI7yAHtiSZeGKwXXU544PgcbSNjaATRcSP2tiGJGjR8BAdgcYHcN0X6zKL4lASHWgGh3DJCsZAIgPDsM0EYUgeGfnC0jGXfQrkNyafGnCA5wQ1AHCf6mvmghS694tVN3QYrki50aImhH/sNk50XsqldekXVMXF3vRJYICGXYph67rdc29a/UpCqkTFswUoKj8cd3xjgDa2GmHnOfsAmqJnxrCAiRJz0Vtsqccnbtq/XO7KcVOgmgwC7rE2FKpcgeigIIM0JvFZAzAGNZ4rXbybQeNpIwMpqCWaaRNYBvtBoEgOWMn90grntUXa03bMgMWH4AiVVKOwRs0zZwMwDSCgxjGJlXnmHDs0wQ9gPO5TKsTwh8cNAogCgFoGhDHx5wFi3AAyEQCGI0ATIQA8wDACUHqDBuCFCIq8DYURFP4DgBIAAAk3DPXZrt60cASQGgRYroYEaswWs2ATkCfEsjUG721AGPvFwBxaIKAMFV1WGtZgZbMt6WzLfiFZ3MJ20daN4MtCsCogqtp7GrdzsuWvE1dY2qZuyE600gU4ccDPRNuz06654ybWgKDlkQph/iahuOCNmFQCNggtQR2HxDqTYAOI8EKfvvB1i9pcAeR2CDUqKMlGDodlUUhPqcDrozmS4e2PMFbww8zU+8PXcNsxYpF29Dg9HZyEx3Y74AuO/HYTuJ2k6EkjyPbQJHOA1UOGde11R+Ts10BQcwyMAL5Sq2WlkItUcveMFqK7AO+qmcDBQitZc8/a4OkgyjreAXJsIe2y9ZAHxAaA3jHxnmr7mcP4hGs7KnDhwVwA0g0g1eoph6kjZIZBj8CBwWSBpAWLcQxjfhBLhgIgIeccqFSeuTVjiQ3SxBtiASnoCx6sK6SmzbzshCRhlMZAQI+e3YBpI2IUgfVkMdwyF7O9oO76Lcf6ZO7Isqe7NtRz+XbowyTa4/S2tP0YC79VbK/RgKP337xOLbMnG/r2A4oP9dOKjpYA2AKaSGVvVjeSqMT4gTEqnL/eYp1N6m/9P2TrrdCEJKA5KHWH7VuGcQYNZNPKuA3yrB66JCcU3SyCsAbSTl5Ac8QpqPJeg2mAGPGXcMsaApBCfO+5AXh6mQCup+iYcL1P+ztSMxHxzqLNdajQzWpoz1qb1DGdmUOpINQJCMAgBoDyxVk36WJOkSQPQF/AfAeYGeJAQpBcAiGLAAdkcE7x7YdeJ2CGaVX0AMzJY3OVpjPhwg9tl25lM4HGBuRSzHWWuPXE0EVbjB3TUI4/Edlh0pTXAermHB2wXRNY454s4KBBpFEQKB2RrCxjIhDmOTC6BgPWJ4iQ8PmJHds5+nDg5LpMaASQ+eeK6YIu0YgN81JD1JzxT4dGFoCRygxYhE2FStbq3Bk4vo30c8cuheQ+wA5GG24MC63ta4kA84BcfEyUQz5lmdmZaNM1+aNjyA1x/6TwtksbSvmRS+/bpL0jItCQlAnIVQahjjOHYLsxFwiz+ctjcHW8AkQZiCwoucXz4co3tPMEEuUA6LA6O8GJe4sp7iwUljYzJYZ64ArzI5wCEoSIszKseUEG6FPq8wK6al3wBc8XuMiKx18G5PWNlVJSDgRYGSPiN8E8IfnIAOhOy2uAiQwcO8SAOnUPuItvHcQ7xnswIndKSrQVtl9jAKWmGSgUKCQEYs5fYxXTppceB4IeHwvGZ1S+MRZVgAx7/pRkEwieHWeeqD8xYByH7T6fXT3GgQnSMcjkl6TN6GG1aTWuHHZr2xWzvp4ZCZARLJ4v+He7veXFvI0WrYLV5VW1YIHHn9tp5uArlbzoih8wDYZCB4CYiyBkIneLFCU3xaTlsMC58qzXU5CVY5IMSDEvWnI7rYGrLSyTLGjKvjWrUEqteF1bOyMIDKxGHZvxCzUYZcIewXaK2eX1mp+rLgXEprGusbZbWz574P+pICAa5Rjp5EehbwBhJnt66ZuBR3FjcHW4Tm6PSAl93QY/4f4HWDCE6XukmlvyeTA0CLOTmjlfFNM6PHjgsW9tKFFiJaVZjixqrlSV3lcZrzaQrUYFgOMZDRIDCvx4gdS2Kw3P0BYrhlxc2SQ6DyBA8JAb+OXDhv0AIkSAbAMNi4UBYt0j8L0QbjZuLIMzC+LqfBbrjN8I4IWS437WuPs2WLkoUaCJcDSjZiwhEVCinEst/IKe2kGJHOlbzn5gYCdOQ09B6sWREqXUlOM4rLT84klQIDPJDOwtTmg7LtxZJTScjK6pEJ19K160yuAQdzJNks0cuYrZWrU+VlfIGQ8T77/lDaqU8ySv6ltRTHarjgihLSChtkyiZjGomVYIWtIxaePevCkESmke1lS+oAOQAidBzf4N5uIOyXOlt6WeGGMsoNMPLDEVizxhzheU3c3ld3D5fWUe7fKtT8xClHPepSL2uNfjXjQ9zjggMTTQB9fohcDi6a1N+m0VDAbk0LlnTCBgJbu1rI7XzMmmtG4uk/5NXIw+bfEueg35YBw9YcPTeyC4BpSJaL0LkLtYYOJ3zBbwTymNVbxhZbgIOMHBDgvtt2H2s0E0v/B/4viBEm2FNmMBcBc2Pa5EPsn7BxiSJIcgDy+zDlEr0AIEDyMAOcwC3VwsHM8ZxIXa+R1qS7h+wFahOBWV3Du2EwnPwlMaX6K7GEyU0I4gukrv97jY00ve43VlEmdKnTsLmhBn36gXDyRDldDicOocQDu0/fcdOP2bc/K10xD35znibxmd/c6skC7L45qrZykQ+eSVdnJVyCk1H2Ytmnxfzw5sXr5QXPYZ0+U5sCdmTRnwhEiX0leVP2uVWRw4KFTuyMTdUAt5luMTVDWmviAEEqB4+at51TXiQrTgGvPLkmYSlWaMwVkHLsGVicJYIGMQfd9TSyiDt82XMOJwx+vyALxgT3PCl2QcvClIc8V4MM87FvMoertjYroL9yOmDcC8CdNLeuS9Xi0pceMmjO4xBWFzAFh0FE4vq2U0eKAuef2uhVFP9QGgMp9GvwQtF+KFskpzwHggSg9tQztq889xJjPhknY1UsMirVEBXYF4/ZW05aLxOLZbPUVVwxogPbO4fAXaHF32DrZsWcm4ICQwxj2RPKM+tcLJRSVW5YxeaiXiR2/DGQvLrT45xthaDDObRAVz5zTG+cAvfxBA+J/vBQqPxRo9UGsUuh6AqRT45sQC7gGJJku2XPxEgJFtbzQ0nrXnfUFwH4ouPdq3sTs59piKsJgeeLRIkK58SmTQ0VlpQM/RsGUQN1XQ5k84s1s+hzbk1vS23Fbvz5vSlAFEV6aIBM7FssTlon3DAwKJJXJMaomPH6KTx6zi6JRH5jFbx3q94Z+6z1RuyjZX+5O5ra6XwZkuVmGYTCwBiOzZIInRy5ePjHRqDXNo2sDM8pgauBOuLm14qzVbRewBgXq5My1iYNK6xDHVcc2EE8pIL4N9ogTEPQkyeHnFkOqgS4W71KAAkwnOzfne3Ve+eMpevM6Ki7/D/k/R0FORkRHsjsR60+OiOz8crPMgDcrUIWyvpJBAd7gQtm21e6ewDAWHRSI2Yjbu2IvjsH8bRvWK68Mt2Zn6DPiuomsaC3gBLonPENZzm2qRaudAauhJBHVSYX3f/o7a4U/40k7wJfTorbAHd0kSisjFb1rCDDb5VvWIb2l374ggk7R7hTRa4tHtWoRZdW0DozzoycDCQAkBgAr4BtP4AwB6BX18ZXDwiS/csvXnNMKl6R5YDkem5mw+j59UY98BmPpFml50G+ceo/nUQtylK3mDABxn+C/AHR/Cn/Xy1SRdVw1FFd4JB1ttRT8GvdVqFVPdggYbaB1erU9XsAA1wCJJUgP/TTkBTVudbyCA7NPTPu0ctTLn4e76cSfhZMwgXI3+K8tPfo+rQL1s2M9tjfogy3s4ru6nFe0ffXsn3pauj37CY4YcYAgcaDzChg7odJZTHd9mTUDwsc+KrHLpoJIkGDVyQtXULngkED1bOR+dKKCgP70/uG3RM8iR2PKXCoJKlcXgLCIZjNimYAvIsPEnEh+2I8KA4Bjvhuw77HI9glI4IM3D20xRyeYAVJTneMy65zj6meDDLYsjPbHHU5xrJnisbmDBZ0gaw01pXwd9RAgQBndkqNZ86VA9O/6vkorRVpi0/9JQG9AZ60A8IsEBpKzDUiN5/yxvbB7JaQznNlg3NjrsuTtZWkiKjXvgh0rrQp9t8HuMqd29yVrhHM7WpirWgnioOqsfZwi8Jb7TZK5LU9pRfqEkMy7BzjbsVirZmzneU4pmRxpWhASnZcMuWifut8/Fo6OEzEZqfAixSXARFeTmLNAmouB3F80ZrLtVupOxAhC+C9iLddwxnac+jls2EVlEClY5Ir4AoWBhvHroXt0KKXdWj9sXweI1+XRND+QBkAYXc1J2/PzuKxaHvvTqSM9vPNisSTEulSJAfYD7fI7oVvJUHdtQOA3IvLh0MSV4cbcG2AKhjsI+RVscoU1dk7i/QZyGnP6l3aldF5rJJN17DK57s2Ve4/Z+vKXzox7DADcAqIol4v2Y9y9eLKmp9Irz9WBkxVMA+5BfCW8qRYIOMHL8xVEuho0cw4P2zTLmYzPuphrCZoC0mfzNGDcSPT28nshxrEdh/petjyNZesTWjHuJHM44JaCV1y7myGr2fxGwCWrTe4OvT069XufDmBlkdIc8jBhvpJPa85yTGg9aZxIGAgP2uAOoYnQ2WIakmmeA41IXLDV9SLffmBtKLUANp8O/FwDoshqe9EYsV4deCScQWeKCtRh3SkgF5wA6Sx5JTzaS3XhItMgHtsG3It2OUPWQizGVHLBSw2xisLX2QkW3MfU91U4dOGX5DwM7xARLLJ/F5hMKGc3SVqdYEHV47gExAiwj4AKwatyrdeClsjgD9T5BPKclhygszAXgOx14UPDfUU4UPFMlP/ZAA9hZseEj/ETUN4xy1dTAwPeNw4XyxMDlMUNHn1LGENRusVA+9nCsQYcV3vIPXd8nXQ87djBwRkIWjHowKIbbB2pdscgPQCI3Zv2Gp7AKiGyc3GLtWLU01M2AlV14K60Q0GrTAIoscAw2ESorXRdH/NdvI5Su07PGtyzUiTUC2gCvNHc3d9Z/egOlRCWIPWnZs2WtT5NCHMuxP0QVKu3EcPOSjTfkcQDD31BX/ADyj19wa/RspYxe2hMJ0aTQNsJoYd9hv8oNRYHg0GPICS0CvmJIizcs1YIFwIyXXAiotWaSK23wLZKZSV54RPwiwDNggD2P90feOEThk4XWAOCkiHp2JVJQJyl2xrkZrCuUs1a4L3d4Au4PJtvOdS2OxRlcunfc38ddysgcbKHgV521RMkRUN/etyCD1g9GjQxByQ2GktPgpG12wE4JOGIDz4V2F4tHYCljHE+Afwh7dzzT4NOCXzc4PRD0AgEKFsoQnCB9swIFoIZ1hibCFhDc3Fi1m9SfJQCRCX1SUAID31RlD4D0Ak81jgakLEPYwS1PjkKdMNFkPNdj4SSxhhdcKoJksTgu20ZQqAjXxKwysAF2cBEWVcDb1JdJ6BAFPqZTAl1N9RdDNNcASkI6oP/G/wGDJ1ZkJsIxg3ATWDwRXAlSgbLKYK5DPKX+zDgugl/wQ9JQUU3H4Arc2k/9oOC+GrQ5kKXVYQJQMwPxBdRFokkDxgaQJc0+9JWAo5XYJwPy0aNZZD+cIhEgjngV1NjxzD3wUIg8DrsUgN8CfYOk3RlikA7HBE7AlCBUZ72DQCEAB+V2E/83LMMOLRk7HSBjCKJP4nNoNg5DU1lUNeokSIogjMK2RYaQdX/cU4XAnqQSCRxiXBywxq38DtzZlECD3zeOzrCYgUyRIsH2FsMYp7AG/w7D9ybsKVBew1uH4p2/JmxcABg5Hjv8h7H/mdc/CZYJfZ4GC52I1EiSUJsIDsWbwEtjgiUNfDlkQchvCH4T8JaJvw98KPhfsD4OI055QpiY0AaVMiYJXwjCDzD10SCLZ8uQuzwbsrQly1IDixesJS91AgYVvoQvbU1BgPGKkEz8qyBJnu5YvU+xe5hoH7EfRu0MSCBpkwWTBr83EJzny8G/Z+zJpSiTmCqwGQXplPhXbNXiVtMg7wN39mcJQR3RYAcv23hDUOgEqpFwN8CxB1qLbBogRMXcAPRJOerzs4xIwAkcsGrdSOvR8WDZFgw5IUSLcU3gaugjNq0RhA2tq0HJyjM69WM0mtszW1F9RMYZ4gBpUzbzk8iKYTMw8ibUdFF8jp/N4i45pMbSAe0eQT0E6gpgLQQcjVuLAE7c+QNyOKQPUOtxwgmNZcD6BkzXGECj9QXKOPgco71EKioovNVmEYAHpi0i47aIlOBikH5zNRgo+twn8fUPM39QQQNKzlVt8dqIngx/NqPCiuov1EdRilZv2xI6A6E0QQ/IUZxi5LBOcEKEPWAglyhYgiWBaBy+PVmpCxWRyCwAQdGrB2RpuEjXDNpogSi0CmoqGBCZHANzDnBVmIKArC8qQ0gyF8wZoHJ8SYdtHG4WTUaJ5oiom2238VGYIBOAmNBY2qAE8I8IX4/BeKEwBZAPbVVgGfeqAddQgcXnFAJQVvVwAlvIJnlBJoz0xykuxagF5A1ceQyCpuAODT5csQaEBuZWsRSm9IXoKJU5tMg6PCJkgIG6ESRyAWZ1A4lEE7jAArbL6Hl0+HeoJj9Z3cu324E/LCSXcoAZP07UpOCnHbZFTGnEJQoAciO3t9EMsjsVFHQ03VjnGTWIeVtY1R0Pts/TR340nuBL1YixAPoEr89YDLwr9sKbiPFQHTYV0sdcGASMuhlyazyixokK2NvIAQDMAXRxIDEFVpaoiwNnh8HIbEZkyRRyMPAO+OyAnMZSbKLCi3UUaKn8eop1HM0go3aNCiRo6ZUijU46fHdiMUTUFWQGgCwywAw3U8KajCnW8zR56AJUAX8frTvWLESQ74HlAbIZTDrjaoKq0ORh/bkIotW4m51uwAEDuLKRoAxuLX8X2KfBrt+AV/kkUKtYbAW4bSeeEhB3vN4AIoVEeRHUQJ3QWOj9S7eRyFN53NtXY4l3LRVpZZTR+mk55Yztnk5dY0Ly/ozEA2JpUjYvjQbJTYpiKOIWI5bG7RbYhpHlw7xCHG/i3iHLx4juVJ2IK8XY2pn0tckFODjAjlX2NeBLo4fn3h3Ib+KLhnrbziCDOTEmAb45SMyR0DpFKuPeY0edq1AMrrDuAHtAINcDudjvTBPfJ3fXuPR9XYfoGaAzSEgDWoLbNoljg0QqwFZgrbPtCYDWYHkKIDqdS/0+p7w1eTlQyXNAQNIqE2OUPYtYH8JWDNgxy12MHYADWjUeaJ5xeceQSl3ec5nXAFk9zIZ5wHiqbLyItkGrJRDhDWQ+NC6NcqJ60ZC3/ExIphX/FOFDRHnYjyYpztIgF649gOTSMTCnfTxoB1PQGnCJABFv3vQnouxM6sAkvcV5s2Yo9AiSWuO8F1dqAMzzD19sAqjcCfXYvx2d3fMlxDYN8HNwUS3wo4MgDJQM4GUtFI0/1GwUgq4OMT8k8y0KSyovWA4t0Ahy2opLzSpOwpxdS6x9dmdIAh/dI1aNSEpEiIWxPg7sSxOlCe0PtE5DixOJPCTw4DKxADVvNACp9+A8hGGSWiepN/R5EppJlD2QjrFaTW8DIQVCEQ3bBqQw/FoGJIArCZKMc2Qz0DlCFLNpNVDH6dUK8BilRm0ORenUQH2gaxSRPGTtYX8NuCbEuuwuhWzLqCI8KgRZGbiv/XcHzQW4RIikSbk60RAjPkhy33gFIR4OWsvyOSD7NqdQoKYdB3c0O4xLvJmPoBloYIBGwLk/lz4J43KDhugSU6tHmArsDl27CUgc/jQT9QbJXIBdorlJWMaYXlN+j2U7qJvIVGGZ1l5rozkEzJYAWQAOBK0V6DYCiMXZ1kiNk01l5tmvAWyXR72eBkgAAAKQ2BoKI8Jcs5rIGkpj07ZlBvdpvJJJM8UkvziER3kjIOrQ54HJFxgMrNKEKcqQ0v3/jvYt9mGJ2SOCH51tqSOF2wUKbBPRQJcU6AKNCiMczKCxrThIuDdo4xK5BEIAjC6Vlw/eH3Bq0EHFlJ0USAhPRVwZ9H8B0UWu1V5ueB9yy9roP9G84mE1iwuhWkwVQOQbSMlySA2ARShIoyvMOMQlQVMRKn5rwz5J9ZLpLhFJJtIBb1SRUlXWEABkAitQLIGpUe1JESP2Ltp3OgNj9m1A+PFiwVTjkHjyUNcgHM4PEDxA0gI6CIAjEif/hCTIiKwT8Jr1eDxg9nQ39z+dRwiCIhSSPE6E49pPKjxJiFPcoVwJWPNYCfTJPLjy6EePZ0OE8PAUT1+dN1CTzI9pPAxPk8SVBVCujt01eVwJt3fdKlDbk6xJY1EiKW3YY1Ca9X/dCnBoBGYAwJImvUoPBD3wzWJJIkfSIMl9Io830mjw/SWiEbFf5+PM1R+A1CXxMGwgQaJPU9qMqTwo9ok5oQU8h+COhgAA0eXEOUQaeTFwJuMhOnqIoALDLmY1Cbhh+i3bD6HL4SYN9AEY5MxYEIylMlTK9tDeJ8TYBm4D6P5gtM46CFtR5MTOc9JM1hGkzHTZoW0yFMoID0yEbPAEaxmtSRFhsGedkgsh1VSAHMyEU3TKSJlMtzMMyEYmeG8zuoZJP1cAs2DJmDH/BIGZQENZ/gNDsybtLLEIIg9MGQSk4zE+D//bzmL83gpFJwhmk3AMOStgyQXXDxrCkMAjUM5FKIBrbGZIA85k7Gz44a4HELKI6smwnhDZQjkIqyAPf1hOSOLJQi5hzzYrPqzSsvZPuSOQx5K5DjkvnQRI1Q2gK7TcyCbJ6zWQoFMqyObYoNWzlodbKgjBkLbIA9ncXbOPc1stoPJQQ0iyChAK0gWFAj+0+CG6zDssrNAjPgjFNrSsUl4JfZcoCFOHTYU2omHBb6TdOZxHZOf1zSZSVhDQxns+EOOzlWBdExTngp5gzMUuPgJsZTzYHISzyUKkMqilAaGEezwCStKxjticjIpjNoGgA8xnAH5ByhA03agRRhAtgHL8uqe4AEQGU4tDR110UriJddwLmGYQWvMQB5N76WWIxRL4pUy3tyUR5XnsaQDWIPtH4jR2fjgGeLzfijAD+PwAn0PoE/jvzQMxhB7Ys3Dr8XOJ+wgTFgbIJBoAAMicsAQdSGldCE6HhegdBZhN34L2FQDfQMzM2yhSKLYIF4T5gClOVCyMI0OIdQUtM20xpQ6vBoBGsjh1y0q3R8xasAOTxwdhvHWZI0AteapPR98lLH2YsQ8wqjoSOEmJT9xrbEnxmyHbSiGohrjJgOPgb+R+Bk5ZYHC1GJEUgFJWDmTWNDoTbxc1l8RJsn+OZM0A7PMJ8884n2BBC812CmUKeJSJ4I3gAQEEwAWbtl5Md4wR2XT94+PzP1q7KWOJwkUV/Qvj39RWOVMVYiXL3p747fJ3pd8s2M1yqjc2MxjogLiKASHYvL1AT+Io3KpD9RCHCjZAKQi2OxGY9InK9ssvWEhcm8mn0dsnXHZPhCVwoNIugMzPpMJSyQ5OEDUaAHl12hoUiAsfh4nN/K7CrogXglA4CrhJ4TrbH3MIC+QtOD6ic8i6AwLIAL3JCBBE3Av2zdWdtgvxGDRZGNdVMsfInzzwPNTxjC9UCFJYyUFqBZiUIZBPCUuYo9hfx+cBfhbTIUzKPwYbIDGzxZl81nLrgXWaQUooMJNE3wZ14ePTh9kvLrBvg80qOyDYt4qPxDJd4ufLncF8+kPBUpCvjjAEZHVd2CSr6MOEHtG2BRGbYDAXAicKT42CScKSVffI/oTEe+Nlys/eXIe5tHI/LVzu0euFAMrGXXN4ib8hTWsdivL3TmoNgXEGMi4oiewYFUQX6AopIAdLj6xjtCUCOlkAfWHvlIAfWEpdW48OCVBUigEHSLMi3g2m9ciwouf9sIOooKKiitqxKL/zO7Hhp9QI8nEgQisAEhBnIBrUxBw8h+F4g8kf0A6zOYcih5Bbyc2lbNoBDtLWdKEf9i+jpQyHTatg2LAHiKC2Ty2LQ4Ut3yHiAAdQQBWSXWAyE+o+uHVUjyTxO8SiHaUj5BqEbYt/5Yi+1g2BDEMMy6YkCrAG7Dno2NHEg0okDBCRUWHgRIRXSFgGTZduTvXTMfXTqJTisnYQVKLgS2dDBKgVF1EzjhowCmhLc42EpCgD1XcFQQTgeUIq1WCwmKWiDJDDhhiy426EOBobFiCoB6dSYvIBrqG6l+UZ8gUwKtDCmR0PjE/VoJrtTuVfOFyZOBWK7Yt81PweU96UGBoieNJ+M+UBNZXIMBozTg3ft50ZsIH57Ta/O8Vb8/xUHig1MtTkh5SirHMxlS4tBxMI0FnT1SDUlFV2xi80LFd8ISv7QeAFESknaYC+LnPK53cs4Lnh1dVW0/QmjDpnVoeucVjIx5wKYyJ0BAVmCDKyAQnVBhQywrHR9pjaMrnhwyjAD8sGQAnnPAwAJkCK4MeMriZ5+dJUHACjyddCVAw1cQoBE8Ea0gXjWESgFOgK4eAiSKt2O90uANGRfEsC50nQoXSGgvePZKxYxfO5KoAGTi/c9SxUq8BDSjADzCxMO3OPyogSoyIMTS8LV1T9UhIGiUxAMlyVBEyuMrbjAIPMooslQTyDXL0tAQALLa44ss8g8dMgEmMIyonRJ0ydNN17BEiVcuDKoyjcvsgty9Hx3KdIPcsfKU4IstbQ3ypUFPKUvf8sjKryuY0DZbyloiVAKLdcscsXyl81/LIK3Q33LDynSGPKMifskjZ0fYIByB0fMAEMRdDS8tmNydMCqgB7ysgGTLUyrqgzKnyzBBgrvgX8sTKyKu8ADBKKr8pQq/y/HXPKkyjQBTL7bUAyZBgKwirPj9FAUqvjP9EUtC8aQMkBUcfC2iPeVAmXPxlKC/YaHlKDw1fHMdIi+A1qYqzTWDNLFyxrXYhPMypXbZlKgfhnKd9OcstpcQmiE4Y7S/mz5lIANcpDLHLJswmp3mfAB98C0OBP9iuAcANZ1l4bSL3KyQIrkcxW0XyoeBaC/GH/KOK6Y34q03H0uqIQqzytXiRQLQX3hIqwCvwrryx5HnSp3DsoMLRY9CU5KJYkwpFz20x/wLC1gEcpIJjSsypQFuGBIRIqCdEMrfK6q5ogIQaKtADoqpjRCuZgEhNqtYq0q4MpmNMq0CoSEBGKgTGq+SuU3XyFTESuFLXGULwz8H43wvoj6VBSqZUjAQANywRy1Uv1zeVQr1dilYWZXUgtqlSuHQ7sf1gIwPoBMg4cM4RYKVBylBOl/LuAA8tZglQZ6o4B8y16veriyr6oEAOAGvCVBXqydEBqvypSUnjVU8QRuLSWB6reBFnMOEgcdIGGoGJPIZ6qQqlQYGvVsXoOdSRrQqsTHTizK/UkdQdCBhnosdLZTDq1ZnbN3lT9KiMnXgVUFmJxrbC1WEfcx9GUMnyVudKUUx7qKiHw4skRuE9xTU+yD9ZmUBFFqDW4YmsIx8PSjIEAR1TatIBKqyAF3ckajQGerp1CWquqv3d6vADZaqbBOqB+WD0w1Lq0Xi1qKLNWqNqpa3Am+rW0HWuOr5alSoNrlaq2sKUzakms1q/qmvBtqgAu2v1rFapYKNq8Ed6o9rxa82q/dJ0T2r1rDwB2v9rLnT0FgAXayWq/clJcOu9rI632sNqGGPBCTrg6kmqRlLamWpA05at4ntq06x2plrs6yWtzqw6gut1qU60cpLro6sOuMAT4TtmcgKEcol55hsO8AigPCilDLJvCqLxkrV7OStWrX4xSqOIsI4+GbA0gQkHxAyQTxipAGQIdgNwBANIAsU6QV0CTUVKnatgNnYzdhscRoTzhU1v2FSt0tq8D6Cu8WdOvAqT/iBkFBhk4/wWZNOGCEC7xuHEYtPrqq8Un7JF8DIWPD3LL7XuBloWgBAwMQFcAaBDMyk1tVZfQzL0r/nFxM6pQDUIOQcVMMdBOBZAfCiAaXonytYQw1Z4x9cCCwzMay+8vrJtt0cw2D20Oc1cF589o21DH0hiyUGNdEAG1httGG4xRtsueOuCgwLIIkxggQML6A4bqALht34S02+WsxJDT3D21z8f6MlBREeGz4AbYLsToBjGEuNMhOsP4i4ltEbYGHAuAAgAqK6lSAFvrTMsOFxAV/NYDxBliox0gBDEcvkTMGQOKotTB00I1Y4Z0xJDAh6UmQsdScfcUlTQqsKmrzdAIesx9Bq+LC2mV7gBcxUbQgv1H8jsnVgJpqGJExkZQy3J0nXApFX5HuI2YX/1oBlCzzRogFSGJqIADKnYq5cNBaKmf06glkpnc2S/KtbU10sUx5LEUXRX5LRczfPFyd6Ret/1ZSieuCAp6mernqaQBeqXqGAFerXqqUe4G2q1K9UqiLG/OFCrMlcKryvJ+dCevnKDUz/hvYBhSesJBp6gkF6b+m/EGXrV69etGaT6hei5gZ0BpH3Jqq7SFvqHAssvZACjBwLnA8nL9AwbdYExo8BzGquGsato4VIDQO+N6LFZGSUBugaeCLrzoAwGqnjmcfiatAtKLoZTAcBm8HCGyUjrN4ByKA0dWon5FMAWvw5XdJQHhiCmjACiz6Crsi69q0D7TQJc9ch07qYYGLNgBI85wPgbX4ItT2QchcQn9DMYTMgF8vAKwh0b9VSbxuyDoCBWVY8W2GwkaVeNWUoB2QRxklA3CN5mYhkra4UOiQLMYFkBhWjn2FUzAIkFMrxIILgOhI5QX1WRWDI/nnhfMi+Dw41WyiLCCsi1rmkoo5OcBAsKwlCB9wmSaViXBVWkalqsZIa9zOxjyRHyhhvG7XxSUQzSUHAD8lVtBDbClYgHzz+8wdCUBBQ3PMIb5gAKz7MGGpho74U2qNrvAifeYFjaxAJRs8brmiG0hb27JFut9B0O4gngKa5hKJrza2eP9ckvYH2zp/4Xho8B+Go2G4b7Qma2Ea8YURolxXYcmu2hASskT5kJWpdVYTaABV2u1SuMQAphGWaZkMFmpUWmOxTfXEmR5wgt4lGwskGvFZgGQV4ofrOvBHIwbojDltUjXjTqh5zq1NspyrhYypqaDRHcEOPjJHObiQSK7AYLLs0m6goao14pu03jJq8+LliN8oUqgltFG+O1NgTMkEWrpKyUr8KGIpXLHqjATpu0tGLLevGb6/SZuftq46HipioalK2urPxUcy4CDor+szxYLYMwAQqEX6E6NHLSzReBIWbKX+IWyvVW+gWcyWFWYyyuAHetbvTvAa05uPKhRA4M4fmzSxMTDpZy4aqVRiBAG35tExQWoFvMxAWjzJXwosp1IU1uWpSAlBlOolv3bgY5rEUbz3NcO3BFwi11vQHrSjE6MUNSgFmcCspco9t9MBnjuasrDAHE7NISTtoAwWoDhBbnO8LKFa5bHSIU0cNDSAubwqiovi4ZO49qPaMG8/BihUWGwMfg1TapmU65MSsu5BbinDoYMEAY5gIF7c5AH07E85POU79GmkCsbXO/drxBQYUGFZhQuvEFXq+oxhprwR3eKN39gjESDDgNeJPKyU8YCov0bSuwrrAht2srq076AGkF7b/GiLsWQ8qHUJPboQC5C0xPcFE1eJ0KCDHkULWvTr19YoPADqATvAMtRYpgeQDhbP0RABLT+kYsT3bXGxcH5i2ur6F67VqegFjDOXPnJrx5AcrtCbJQbZTABacfGFC6O+FgAXQUMX/GBaiu6ql89lO4xisBhuzKM0aPbVZHcNoBOkjuwRO6LrTcY3V6Fbr3SErGip32xbMIk7mlnOhbrS5eAhcGSdJwBs9whzoBapOoLvnRZO+SE87xvapjz43wL6HU7hEULr6AQe5ZTKa9C2fJFib2hdzvbiq6WJ/ahKppoA7gO1WOlzdTTxnFKlqwepi8R6ze1lLXaDhHnZUociA8Va/HerAS96mIoSyXAq4Dr0K0D8gVYECPJKjyfKZlEdbW8bl1oBhnNdV+8K9eYCVgD2a3vW7hCkgEd6FzK3qob2hYxOU1NYNHPIcgQQQIgBRrCAHBMYG3EmD7tjPXtfYRIZAAgAw1MAECAnGTDMYLsTUEoylO9V3qAo4MAXn7p8UtNiqotEL/gjRoMINEAgXSzknIpJyEQrqSMAJ9Hv1OgDPozdqaogFTD1sVqPr6qG/7RDUArTp0y7W0UG3KclEGBpb6W4KAEM7A2mBrxbEetNy+xyM4KxR8AufGB/AIUECyb7h+59mWQCBPgIm6kMGJGXjgoQpy2THzHLFIAL2bk2ZMSTCUGD7MAXLF6LQ24qDj7Do2PtbQ0DUS37pWYJ/vDaAWsv31A5vFODGwJsS3I0hL+0HGv7SAVBB81AB9/vAGBAMQBuMUkwbvshU+MCGZ8XvQfgRTD61PWs12tWkJwobA8OBgakEIWEz45wBVSgJ4kaCCIwqlUAY6wedNJrIATYTcj0w+XKyxaNcXHtPXQUBkBCsYyXDcwroPAODFiw3gL61Mbg8ixtpzdsHcyobY0s5OApd9Qpw6B3oa30S7SWTge/tHWBzTXAEw2AGkCRbKjFvJKnBZD5AoVCkuLwsQGwVu6PAYAC0HpAvQETTboZ2AMU09AgfvdTrMjCU93VYsRVUO+j3z77Bkt5qApcUOUAiQ7+0a0vNx3KAAUHigfgA3a6IJXtaN4e3C0ty3gCbvbZ13GRsyiTyJH285unYoNCBZB8LQ4H2tWb3Gx1AeeJeSVsrDi6BGSwhGZL2e1kobYuewqvXSfqAB2wIKM3An+N3etVXaFb1YpFwI0xSziNSYIhi2VKR1eXomNeyOIe4g4I/GQ0w+AywvMVBw3kNYGWsmRxnxsEBUGmKJXA0m5NZ+vAjuAoB1s2AADsOsQYyQctQg/6JDBPoF0E+s4axytacPppgCeBXz5BgAfujuG0BC4a2MnhyPoF04EU4d49syM2FN9xM09JBo5kt3HWCvBtVWkASCf43jt0mgpOqwUtSGJdTYaLoeYgehwp2FxcDM3qBAv0jQQxGGkDukoznAO3vz7yAV3pJG0VSgFIAqR8KQn6V8HPBHRV2wK3iT1gofowAKOWOgDLvQv9T8H0I+gHKqPAekcSJloeKF36/tDBpdC8mtfoOxGCEyBmo7WhkYSabUiEZn6xRikaPcyRzQpz6qknnxhHP6v2KGVYgdK0Bo74PYGFGqRyzrSUG7eV1jrp0GBsEr5TWTmabheiXIsUyyCXog71HFap048/P/RKyf4lpKJDOVYBMdiJmjSs1KtelTXICuEzOPQCNNIMbKzEQirLLS9+BJVBdjvZ8ii42sC0djBWvaWA1QQGkgBRCxARNEbdnnSguOK7xRGHEh4nbHsfgqMz1gWsSOJ5H+VogabyeCVrFp3CUMUj0wtYk8f9EKIkOJ1X6JilXxMYTFjQNr+gtQoyKktfOip3dsl8QeEBh82EIqXG1Mo6Puy0XGdLTJKgLZheg4C1hB5DotRPli05IGhFuyx8rpOu0RSKSHgAfAAmM4BCnJ8b4B2qt8uuNkAOTTgLlMX91eayuqYEk8txn/phsvOxFnehVVfnWjCUAeKBiALegjL1JUAdPkogvNZbgAhjtJUAZBmAIxnN9fzYgbCyeaAzP1FPtMViO7ryVht/5EiN8Z0gB0bQDANqAT8Zrxvxx01PH4AJEmSHAIf8Z+iS0jwGAnDM0Cf0SvOh8Ylsyk4pD10FaGCmz0AATWMZUi8+uwx+AJFqInR8kibJauuiidIm81QtOIHRFYoGVRPXFIk87/ZJDxeh5VbvAp1D0dsbzoyITxMcswsmO0+0FAFMAjd3eFPoSQOMNuGWh+UVEGgBzdGwGyMrAPydsB2QHwGWg1tR63J19SThn3gHJlQqraSannGgFzRogF1K5xwUR5xfOkvvRdpHN9gYlW4NjoxCESeYEDb6CmtLVB5AfNjNhg0GCwwACIPvWhAqAAWuRtah2jg57r24U2aDF3YqrWUNlL9zgQOlesDLHcACsa4sqx8KEcSq4JGmphR+JYPbyUxwUGayWmgxAsVJK8sjl75p1gmKCVe8MbVKUOqMYFUIahlzNg4CmpXUgwnURXiYXhvFp4hhpzOJSA1uua1bH0AL7NRI/+gS0R1x0DTETGER8/A55JyThDSaaYfdsfgkAL6QaBXpuSE8oDewf081I9cawlAvoZ6fT5UKTNum8+As6Y0h49EVtih9k5MJp1c0LGc80DVfUlOnsKGZgDb0Bf6fkLbCqKUSpdsheOcgZMJtnhmbwgos8okZnoAA46WpUEIskK8gasCNGc2iVB42uErng8y/ZJsgqk4tH5DXp533wCUgzGYum7Wlca9YCgaRG/EiZZcyv8JEghMhqPkkqyTD/jf8zohsWa6zw5oqKQU8TZBCu2MSqQsGf6IIZpHLkgbM1ZFQKSM/olf9TvT9VNlQI6QPwKPZya1f8VUkpWH4frAotdnqwk1AlAYGo6j9m8m/AomJn0vjOABSMtgE2F0gg2yAdjIhEm7C8g8gLQCnprmZennZqPErSz8OWe8s9oUQG1DfXNHBZ4FZ7CqQHKY6mKAItZtnran6h8EqMLupjdMBDIauRznzN3ahINnekaQIA8hqCeTwGCQ9H377o1QUaSJBJ2GztoCBSCNhztpmYcdka2xlIkzVkByL3dEAcGchnfBQOacSRib2eoZfZz5P9mDah2cmsnZnsa8BJBEYi4A051CkBHOEbeeLRI58sLUJw5lixjm8muOevmE5g2v/npQ55xJUGmqar/aZqsXPdGomSlVBgyQQMc2mpk0Swqzt6h+3V7FNfetVSqY+ryxASCoqYlo/A91hTyXzBZwacb9PJpjtWbOiDZixfQOHDwSxkgtGm9ST0NrG01eJxqn1sOJMRhKWl4f21j0HKElHY8U3w00RSS8JZjoU3PpyGHs+nxng73Qkj+05G2PKrKcKGsNIsHxt8dAhHLWgFkBDzfjipML2T1OZNTx1aFp0nmBV2dhouxLCbZNxifhcaSeSqb8CwfIQZWBhsBKclqecQi3vh14WgEMIQQdATYgkPNmJgpOUVtp4DYyZxqZGlEeBBqJYXGGJKJtAaWlwATYGXQwawtLwGeJ7xRxbF5QQ3swPRyK+gGIW+AxSlJY7OinyqSxF4qZn5CSpI3JnsgHIFARLICtELglFp/xBxAl5njLiZfYBG+g6tfY3MWotSxfPGZIf1oTzp8YyFYFh+YhfTZVId7TNHsljrHbGATfrAN87sAxaMWKnPftE1OGPPT+0ZAW8eLQpF/Be6wscJFrgJdwJfnXQqy7HBSTnwvEnigi+ESDnTW8VACvQKnBpNygSC4dEKAeC7dEYXWvHjQF5iFhyYlAUuW/UpLCxigACtTIJHoHsdozOFeJlCivgwn+IbQBy5GEGAkQh7ls30KcobF3NrLGoxBL8C48pebCaVFsjDKx7iV3R5zIJUfowB9oIZgooRCx6xa43GvAFcjCVOLA15JU9xsPBUQaEE2GVvSLCC9w8fuAcXsIXCF5zNG0pettpC7leMHmHAmI4QOlxdAnqw9NVdQSFVvhIcmUuP8HmRXGmFcJLEmlOHNUbDC1nn6mSGShWTggFSqY1h80vJaBZAOSDCyxWHgJBYsADupBK+uU1dbK55MOl1nj03eaiIlUYsfrA2F88yfT4nSQRTJaF+swvFKAV2EpsMu+7VYXrbdhcoBAFl4a4Bo1xt39nX5/okKdHZAta4skwsFxZiBecumYKMkf0kwBqSiOFhWnlsQQZdjQ1tzAg6CgzJO0qaZmJVm+IfgaHolABHVYh/AKAzT7E9LNiXRmculIFXlV/VlPNjsA3rjV3Ujqm2XYo4xcgbTFv+KALdqM2DDoY+aiE9sekVReiGqyo5b31L2/Qs57Op29qPiepvZQ2Uf5/edTYv5rAD9go1rNZjXY54gu/XC1hOeLXJrA2rfXTBI0szW+0bNYoBY1/og/nu5FjirWTZEgnLXz4ceae78Ya2b4A5BAXm6NR+W+mgXf2kqrgW3RnuspQCQLwtWnUFjbMmT0MrBb4jUOo3PQ6w4WRfqcw+CEuQclMIFkwoel+kwhK5/YGdJ514crw2jqNfeBkyPbO5ZI7kAATN5tXB962UnKe+Ttktw4vGFIncSK1K8BTPdYsxNHzKlhpY6WDYBgo9mcChm1ApiZmWhA8ZaDThoAaScz6IU1DE6BTIZJvnMkIL6Q4mJlkgH2LKgK8PXRXgdzdeICi9FJEWgBcZd7HOoBDFYTYSC2zFWj4dCmQAdtUaAaBUQaSZgo9N2lnpYYKflmWh2WSAHKJaJ7cuZMFXTJf70nfKuZzp/8tLYM2YKBIAaBhUWdvxgnwXmdPMQakWetsWt4hqVB3wMXndZkAaDKw8HMftaegWNxZw0xOGPp0owEdVLpQdz/XbJYDHfEl3CVmXTCiqTw0jgnGAxeH4MpIsx2RIbx0nf41TIBeQ1yH1lAJSH3g35kewJdyXfROGtRnBdD63AXRQDImpV91xLmex53y79PA5k3IDKbPFJsWil6UPXg5NW8i9DpN1iYTolki5wCV66NpfVXrXegFUHq0QdYRWG8HVYJQ355+bYBXYCabfm02RAAuUOEWgHR3fKLHaqI6MzAD2N0h+PLUhMlhiYvGy56ome8noK1HjslqNt1ULsHcYPh9xBwPNW8qkmxdPQEkPf12g8x1Kb2A4C/nYcKO5ztK7mgVHuZ56+5k9OsLf5+OGpZ0twzZq26tqfs8mLEtBfQzzuAgUa3PqnSFFn2tyWc/APyRPXDhGtvmdeqTd16o63zdqywSQ5u5nAS2ktlLcq2MtrLZy2p1gtB13qNtDP6I2kj8chdE9YpU+GVd/TYy3jN4VFM2wkNln2ZLN6zeknrcvJ1TnPZ8+bnBT4FQoAyhharGTHj4dDJd3vcQ+f6J/NrwC83KIFCglB6kIDbPm2AQxvE8uAMnff4ACqxKD3ReF+2Zw/N0La8B75PcKldwMuvarhX/CIXz3ddjvdcmro8TZFAw18fYD3kUvXbk3NMaV1IsD1EjvJQZNgKQtl/d3ZLKi0U2xJa4AbQicU3Is19mInKJjVTJ7iWw8DUmhYdVXi5jPTTZST1VbrfLk+t4hRNQC9/fc72+OkTO22d03ffhDaNwp1dV9tiezO2M9/mERnOc4egLQkg4pGhTggPgPRTTzdBf7R9kkObbWz1B7eCtv0roF/TIMij1z29AQHbu2vnOTzb6/3AEV4yuPaDNsHCnZsc2ozzMnL3WJBsc0rmGQplO78uMQpw4yE6fNbB2V4EUMtWZAdbBn2thulrOX7hlHZh3UEonZfmh9yaZwhnEoA/b3JrTwmL2kIfHcrQFD4oi6EohFvfn299oveWmKUJkHntDEfuteUpeqUug7QGDaYX2ps4YZugdpq/N2qnTfaqNyx+9oNETe7B8M4Klvcflv4/HIPZbDJD1pTd3kt1LdV2qt73e5YIEOQ7R2oDm2yQAdDwnZSPWYT3cM2Y9yI1RAzNxPas3loGzfMFS9ya3L3PN7zeHGU4Hvfm2AtliyO9v8AhzO3YjjLY126WBAp9dNt7brn3zFAXk/XMQL6Qx3Ric7ab7h9nCH9n8BksaGPcMmg8fgcgWfhR773FdYOhTLHTbDgVjxAlYQojj3daPDN+I8o6fYPUOl1yYTQrVpF08AqtQy3MPXSdEj0JiLgZ4NY9/9od+4+SOg59JxzocuRCHTSpIISAo5w4G1bAgrUUJ06OvIgY8XQF4hyLumrUcE7yw9GWE+GmoN550B3FVgbDxn64GrAL4ME3haG9rppkex6brWRc+mNvRkZAQCT09X36oASteoTSSoDTc3aFyeaLpKnAnCDaKLOef8H7jIlbAmRD38W4wqIB0F6X63TY+V3MgDAH+9BRK1HxXgd0OxexQzO4/aW6AV/2DZDWzz2UIro7A8URDW+TFhPoUqDaE27sPEeZN5T9VZIBRjnY5iOo9/Y7Th2WYBqGnTzPU7nBW8iSlRP4bPGaCD14NlYRIzenChsYKgk49l1z25WMr7lKMPJXxvsSvq9Oj+TRZNQqCNMilY2vY4+rRt9OXWyqhYm9Y6nV0nsuPjR+59o/859s50Orv9hDrotL+IRBCOQYRgXjQWwmyAnClAMl3NPsjzLetONgUA9R3TTlI8Kc0j57zfnCnRs9yO49hPYs2ijmzc7OyjimAqPK92ABQo+DhdAqP75Y6FroS2AYJfX4M93DQXizhyQ9Fpjn1x/msolgHPSnZd9cGnBj/omGPxjxAC9mxj5Q8QAi1684SECAcEVA2Um8DfrAZjxQ4MPzzhc9zP4yI/QpPmcQs/XPYIo6E1HZE686TCYDoZVbxQlPnMH82TvweEXZo3AC5OhJnk6JZjoVoaZJVToAQns0szhDPRWvRUD1mGXM3pqYSx3U/PM9hoZSP54uvgGNP5DzI8gAGzvY6bPst6ZgF4qzhcwRP7Tii/QGAEEi92hPTnKR4EBh+AUEvlSyxAyLlnG5BPhCS3C40ww6U31dgcncfMQckOEdFcd7WI/XrPFj+QFdVhTlLiYvLTli5y3m3RM+LQ2VkM4ybCnZ+CSPNIn11dUrGBC470pT+901pnR6atdGhe0jcMQxe3EBQXJeyDr9GTY2Xtg6DAb/awDMF5DoNyvD/xUKnP+cK8JDG3ByyYgzVXk8G8l8NRj0FIIOtobAsAdAvjTExxrS7FtI72AAPYxELTn1FkHU4osoNuKsTHTIAhRcQoAOOH8AIgTBExmNB4gvZBoAQoofHm0P+otW69d9vtgUucaB6uT4K2iY0s4YILr15Gx04C1JWlLisByDca76vd0bkgsCIS11Qxg3VjQVZceVatCWuVr3q8mugd2FrHXYoxZEBPrDUUHAQYQA9j7IOEeM6xAdKvaBiBhMKnivhHAWalJYHJlIbkhEkdSGmdR83vnJ6SWy/fVsNM9bGFPJabYGlpFgV8GYQrodmECbQDRqYlwcKDpOrwfQchPsgcVmCG+Oob0LCrgs4SysEmI3EbCuXhT0bqXxiwEyJHQufDTHoKVxw1HDgGB+TaKB1sQqhSm0pwyIynGULKYtWkkH4BOaIJiHArR+dfWAeRx14LikverQLg9gypTxKMwCazDgbQUjAFoha/lG9GNbrlxVksrnurPS/BlcG3qNC4lCpX518VgDlH1DBrhFoA4Ugsb1aLXf/gJR54dTkqVWELMyURgMzsTSVJWP1vRlENS9wjAmuj1Bgp5GpPKlQAyJNYRy7DJgHSNfTxSADrp4ZNbsNnIAlACs5Ak5rkBUYXPvTv0eChKnLijTBD4grvbvlZb7Hc+EQBA8LFA4Qo0Ad3zvg8VGGWVCz9ZU8N9SBz0JYemMlGipZaX7vtZaTujryuUgrhNz74nAUI27WsOiHIBnK+rxXlWvMwSMzobZ9ABmGAX5oxA8RLW4Z9rKuTzdu4mEvRcTjxTmDEUjBJBGCONEKACl2D9GXbj8OSmpqXzdOSiA2Vc66q/R8kT39fIuANl4aiFkM+JfbY151kIivQxljUrdQL3Os/uK1vJoxVKgdYNvSb1CUM5Oib2GxQ1xaKBaFyYFojc8vr40jd8vF6qjb33iGmZLo31Kw3OjGyCsjETGIcvkClY8E6M5Bhht6hdeau4kq3WXGrbjarC8r33JC28Tx4/IzG3YHYW7iGxy1qX9luvWJPnxD8iVBgAER70BggQXWGQ9AJCpn1gR+C/kwRHlABXiGdYxOIaRy+Xz9VoqbBZvZt8FLnHysUWgHIer8PJuCBTHgFgsfD1CQEmc+LK660g17iaxSM7wWiJeHjEix8X5UEKm5JW+QB6c+6mTvZcp80mqpZJhLnPweUKrlui41Xww66Fofm2UQRkWT/W8fkXPkvoGpnP5/8SPcr/LC7vdwEbkiZnBIJWdtscCsjFlmkc97ccw/67Wb8PmAsq07KyXOsCG2uHkhasLQk8xR1OuHpE5/u8GqQWcGU7rA5ZiMBCx6g3qT0C7R8Xzdk9iVEL5C5VaiLs9QwE+t/4wF54nWtcvDsrAgcUX8ExIh0eT61AGwXFA/9Ff8XshoCtpdF6gBez2ToZDNQjHvLMKd7H7da6510Zm+FPWUjlKwSVk+4jdZdejMGj1bRkJ9UWznv5mfHH4AgJXxO6uN0JWibw5gqLrTfx5uXJWGGFl0sLZTAaBEb3AGRuLGLwA5M/0+YGFI0eXEigRHGXPqVnJVmsxHcE8HzytvvHq5cVIQsVyIXgFTzJs0hrMPAHlxcAc8GdJ8JqAjng4nuE+QNuVofVhQ7BwG4hPV7rhBZWPWBFamKecbfqwBNCfoq8A0Vi5AxW5Czi8HagqGwsAhkzuQcSJhceo3C1ijfcEFrMEWt1/cYsNmMB386LmqZoHjxdERYrq+TBEwwthFziRntoeDrWXSRtd0F43FmP7g8IRACYhHIOdyJPGbo8Opp1bzQuNcHJ5Y4Cef/JEe6WOH+eAVVHGPgivW0z9qYaG717nofW+53qYOUwRveauiXQsi96eY1+UCRpP+AB8mTCHgbLTqenip5d6q388+nUEMxJ33lcCcZ/PM0N/lZEpr9BAcwQWM9YPAD2Tu9IQfGTJC6Qfs1bKTg3YSv87UJoM3oZNQsePDW/30M9wrEqQO7dusVgTfB96z9k74c6A3DvXLV6NSpTUPrkDbxauqZpsrwn40Fwh49Q0Unmt2WjlhyEw65BJHYrBW4AgDYmOJ9k/Ri/Bpvc3VIADVn8hHgADgo4LtmnNpKlWPQQwR1uq2+u0eCxFRg/CBlHnH1PWxBAcHlMbLUfh/3rh+GcJbKg9A/DXCD/sY3WlYAw+UP173dt0P9zIT4T2MJWV5EVc+DT1EP3dCa6lQYICMYeSbYFeJ4+r5jcJJQJUBgoYKfj/3gYkcyx0jG4XdF1wdSPYERZ7uk8fafdnvFgMBA8c5Gc2iMZ6Jo/1sBHZVW67Acc2wNMOJ8BxfYB8chzTYYx67x4a9JSUQLF7At5CyMDT7W5rSZbgikkmheLSbSm1qel2Km3N8zPjCvue8hnz0OLKqBpoj7IAGgdifPGgPuB4MPdAKohnC/7uSDrfbk59+GRpg8L4aX2h6L/wALHkj5IBZAMj/AyUvujR9X/78K+PeX34jX56XRwUuwed31WNBh2m0K/blwTSPo5V4QVXuwXL3/esP6bxA0nvenIZ+W6/vB19+ogsHFPuC6IS34eww4WRdEQBFrCRkgBRJpp3u9RX6QF47pBU+CJGa5fulM8ohC3qMtGdhrl+GLK/0vkjXrt/ttTQUYLh0/jLC1nRvmpokok3h4FZMz6Pv3G8wR/KC6ClPhTqpWlZIu5/jgCUBpZoSAuXx5EuAmxskZIB7erRGt7KRA9iiFbjLVvawhIUDl+HChAh12hvYGPk9Y1VcomlUPUJ8GZgyf4ZEvkHvvnKquvTKREDU/tLa5GIbrVQZvEpBtY2VV8hm6zsZ7xcSDVpDjlZeJ+PyBeDuYoAW4yR/KR7wdR+SUKIXUavGlxVcgtRkX7b1v+PT9NGdIrH6JHPe1uCQAUfj1EvOevl2A1RCZpFb2UmPP3F6WWf/mCqhC+i1kj7H4Jb48ApAYZzfHq9w38z2Xm1X+kAohZ35yhw2TAGStcDJ/Q76z/M1DAOzRkHHEeFCTR4dLO7F+F+HQnbqLNI4bzBEtVImJAK4WFglaKGV4oKQWu++QElhov9SaQ/9+Q+Nq3d//0Kg7FZvf4379/pABtAD+rt/4gUDsDCoF43vfh/y5hvB6BNIowCIweOsMAcv73Aefx+Gd7Xe1MTTFzjqISUB3oUHFpGunAO9V/M+v79Ww9Sc4/PXftEyJrMOEBElFrplgkmlt5m8rF1vgf1hHTZnvP47wAFzQv5utL/zNg9JnoyJthvi7o08T/Of1n8dt70eg0PQDec35bM2+Dv+vSmuiOEFXWBgBXcwRyf8JsHDOB31XU3gz+ileil+LvSoaiAPJGDvQQBSEGt6bzFeWrv2GQVf2MwOAKb+FfzY8BAM5SFq0X+rvSze5TSXSt6xC+vcx+oeX2kiZVQt6h3xtEx3xSSoHx1+UkGmmQEjmm5CjuenQEkMU3xmGTAMdS7Q0l+WoxR+KwAPYXAPgB3Qx4B1WDG+/ANZkk30NGuXzA2kXzwIkgIwBho1l+SMCLCbQnkBmI0UBSiGUBkEXgEagOwoU6kgsmgItq+vyoaVB1f8fzjO0ho3ZQxgMQA7QkMOFPBo8vANVgGXy6+EfREBIDwxQdgK/c5fzd+FkA9+wyGcBm6kb2cQJ9+AQg8BXgL+cqUh/+GUj8Bs0wsB33CsBDSA0BEXwtqEQMr+UQOr+0ZiLC8QPmkxv3cBNMGt6KQM3UuYSUBfAOyB1BFyBvX2nUYgKhU7Qwn+MvzrE5x2qB7fQUB3AHOE3AO4AmQICBE3yCB6gIa+pGypAe9GHYjh1ZkWASvGRKjDG7hwveDG38UWlWZQ+V3RCywILQygOog7ciWBe/3cUXRjfecFlbg0KRn2ssiEW8mG4mh0XoK6mWMyYE3JaKmzFuUE2iiUAC32Jtz8oCQwLu9kAcmaJxU29BTv2Wrxk6mkzQIj8B/GFFh1UCdHl+q3zGAun3DCdbW0g0t0uu/qgOuHljXA0KQR4J1wmMcmg0Qok1N8e3zcmsYCxu51w3uIFASA4MB0qAVhQgmL1BQOLxyUXVCqSgkwTQX12uAbOzRByTgcm4KR1GiyGpBr1wPYYrGFOZ4lKo30FA44+TUQA/1xICO3pKN4hKcZEENS7GC2cYvnoQFLW+gpLQ/WYPWLE9BQiWjjBgo8d1iADPANBRoPNCQtyiGjkBBg+bAwEHJCFggdw8GnRxuWYcHjGKHzNuMNWZ4ceBwguWAXMsN14MNEEEma3hQaUKF1uir1L+C4AsmS93oQeAGnwJMUui+pEEmmH2IG0FyNa1ZQqcfNG4cV9wEcN9xXScuwLeP1Aj2FsiuBQh3qURwIEsewKNwW0kLB1CW+BxkDkSZYOwqFYPEkMhyRBxaGhB6PlhBh1AoW3wBn2tB2k8tYPtBVRF328AmOB140YkjXw8uzX27YnyA3Mk8CyQDOjMOlKAsUYhnLICCwWIy4ONMCwJHBxYHomMWgNwJwMrBxD0jGpDyvewVhveqLXNqBwMfeAgLomtwD3BTYI+WKIPAI5TwwAZ4zqOckHjGFYOZM2WjVwPNQZ6vyGUw9LGFY3INRBit1BQkeXWOC5ix4AH3PGEh0GMVYT0COPDGIF0BZAz6xv81LjB2sX3i+jvk7BWfERmCIMW4mgOMY6RzZ2BnzeAKXBghjvhn2ug2ym/33OMw2BhumbgfCOTXNuAcEtuut3kwl/wJ2S92bgsNh4gpIIZBSNzJEuLwRIm1xUa5k1tQgkwR0YEKi4mA2+gYdBU+nVylsdK1U2ZAB4gwPTMgXYnEgy1zGY4cF/cP4JlAVRnImUaGUwFDS1++Yw3GMq1O0JRBluiyDtBeQMBCp8FDM9kIcSQEI2wsxAvwq43NeOkEownkHME4RD5afICfA4MBgkNP0kalemt8dzUXwO1wt6kLmvw2L37uFeCqAYp10GPEC5AErzb0EQDvwdkT0hjBX1IvqyUmnNycWA6WX4fLz3glE17W03j1BWoLBBYN0PAMFBqhvbR2iw11q4Rr3roH/DSKtvXwoOEG7wQtw8AjVzeuYp2QgbXnHyfICfyAZCpszoOQA8Y0NubQGNudYMaQ6YKzgttzXAb+XYhaYKtKvI2V4ayXZ0qYNYQr4AMWPEDG4U0J4hN/0OORqwYCp0OJu3oOzgSYMUmtK1JiPzBegiYP1AcjVngsQ2sBaUKgBr4CFqz0IWUdMXRkdgPkw/CzT0wbkdsOXBHQfwPoAgly+2JAFGhhUIo41ALqGQX27md9yzOvPWZQ/xnAEahEohaLhn2Yw2fkt4Np2+4LHBMwySyD2DsB2MKSIP4yi02ELRcuEK4AuMOoAvYI48KcwHB8wDo8KGRvBO4LvB54xJhKwJY0E4NgWWD1Eq81W1MuIAkqm4M6+TiiJuZ7wiKx4JiuAqkKmqiDgm/+TKURtU9BmzFd0rAHh8w4LZUssP34gSASU+pSqwwoJGsMp09A2kCQOFj09yiq1QOhsHQOdyWjaIQG+2lymHAM3FbBTg0ZQrCAXiVUG+QdACyaGjGdYbMSVs30BNhz/HaUfQWzmaTTE49hTiq4TiehTqDhe7DR+u1aAXi4LhLUGfyZwqZxoBjagzOeYK5K97RXyBGwF6/7Ra+YsNViZZAyAAV19Ga9hl6jKkOIRgFQilABcOCAT6+u0w8Ou9VwWmvQ0hDOT5SQgLmu5STjil82xCj5jLgyrhUgdeH8GKyz7htpV3uQ8MwQymHEh0lA6SDnziiJYx82W5Cp+ZqBU+qIIMsrrARcZjwDi/6D7cWZkF+pUL3GfWyc2PxRX2L7y2eyyVWSPqWI6bOVXwpcRwWnCzLOPcTNBprRBgXKyQsl7BuqdfzKshi03WV0JWQ17mIB6AhIM3vzVInV2Xh2Q1mucnkNU862SERakqgJ7FYagLHsgKEGx6plSe+AILguaiQ50HA18GRCJqigQzyw+BmWyZWFwSYZ2/wI4H84tq3uQvsVJYTqW909m1nGFCPh2VCPKGNCNeiomFJwuWFoAwQyAMLQCLAgiKCGraFdg0s21BQixi2/MB18ekQ4chqiIGik2oRLsxYRMgEEKbs02i5EPwMoQTYR7lGGYSE1bw8wCIAp/QE8sNV3AtEJogvqw0Y+TQPQ8x2DOhOT2hNZWReqx070r8HnhWNwoo3M1aUNJF5WuAACW07wLGPoHHa+8D4q5UghcET0ZyZoX26+ry8Syi3Ws9bl8RvIzaUzVCLUfiFhQdNWHyLDVtYVqEhOpSnSs1zHSMMlAySh6HYi4RByoVrDyRTkD+a/kCmwq63KguSKYahzDUgsGE28Kzl/gza1YwJtjAAMJzN+4cAxORVHjIxumm0s2mcwy0ASAo0AtOau2q2tWzpYfZAQhsJSImr4kWyIoHaRcGAkWSBGHyUnjC01eBt6J6wzBDXHBYmv2TarDUc6BYC9Bsq0DOdXCqoxTXThnNT34EDnuRPLnuK+5A5mJSI9IdwJ0+ZkLNgUoFeR/4B2i5ADiwoQTt+KsM3QoWDr02BghRdsEik/6Hm8uKEp2KYJh0vCLK8ebTx8T2CzU9TxgIYAgE4i8XsWWICTw7elYwa+HWOVZA3h5SPqKJAGcS7KlL0Z6j62N2UhSbDx+yY3yp4MkTAgoQT/h1aBihxTWX2saCuKzP1CClGGi6zENTIpkJCY88Sle6SGiA5DllkqyGnSfEFnSmaVFCQsHDwc3CBmPICTYkeFXAGKO2Mc13oIFyGakiYJThUGAPuXKJQRB91vEAUkZeidgBOMkLeA8CMiwpvhzhyMNoB+cLRhoXx+oN5EE8xmB6CjQP8Blo0/yx8A3OIQJ9R7QxXeAaKyBwaNbh+QPy+ZVVhO1e0vSpz0z23Ji4AoWUIRYNmjU5nlvc8VUKU7JxzR8EGCR8z1neG6hzUCJAEYUQhQoleHYAYwKDR9eTfCoaIA8P8zNE9VEQhlUIBCK7nxRu5wLiCIzw0kaMhqAvENOKEQbRGEFjRXIX3gKQEP4sVDvUMaKbRL0m7RvRwLig9zw0sJ1/uR/BRcb1i5h8DDHRTaLz6Om0XQq6MpRmHgguhfBPEXa32Cq8znRQFwXelhQRGHBXua3KLX41CVaysrzmUAqJz41xWFRmeH3guBD/hiP0FIAHl5RPLivEEQUiYZEVa+EuRpADIDWmdIH8uPozoidcJ04cXgcO0sKKSu6OQYf8P9sqwPPeA3w2Bh0x5YG+2JYlqO/mU3g5W/iO3w8dm9wRak8odQGTYm5lzs/REEB0wEqi40R+aQdmehRYAhM0bDYQo3j4SzB2XCjsDyctzGJSgqx9W6gw2I8lDXwu/hgKduBAaZrhCim1ytMdXFyAI423AsJ2PhhWQ8m9sAE620SQwGmJog9SC/YbLWch2+HzYHNgvqGIMLahVmpRtCMeOiIx+WKFEA0AHFAuZSO84pJ0XQ0zxBs8F2Cq+aL8GdILuwC8W2YukVKo9rCxcxj3hOx6MiwYBV1gSYSy6OKM4QwazjcSq1QRwqhXOZK1ycSLFixQC2pRzmLK00BVig8UHHefgyeBy9yiy8Ew0EiE0oAHpyioZoRwA5iPYA3kNORR60DW15y3uqJlNIDkRVcxaFrODGK0x+pBjuVd26iHrHjQBIOkWAUhqgDWOS80Cmpkt5Fggv2n18TRxU2ImwBYNWIKGJow4+w2F34aaXJW+60oxb1mYKiRwfcbQz5cArif8hp21OUWM9cc8CvSB8Kik4BQxOu0GKxRCOqwMJ3kx82AC+19xRhsu09RDAMJwnbwskvqP1AzmIJh6GJbhw1CCOJKWwxIQI6B7uDn2r6xQRAGPcghwhmxgpHIss8xA+CQMpWKDxHcFWNPgVWIoAG6hb21bzTq/6JCEKOJnUhjWkCq+2MwzmNKxvELneqGkqoCE0IyROJ8BmABJxI6LBxomghxWGMVCC6IhCnTxc8y6K4WNo16xU4T3S/aj8EnBla6uBC7UjmTZG8yWX2Sw0H2M4TVu9VG5yJkXZUwwRUB9wAwx7kEhxMhWhxC70NOSqVpoc6nLe9YAPc+YX+Mt2MYI1F1XmAw1/CxZxbCC83uxHQwBob8xIICIy5xO6PBxmGJQRxuPcuwsKnBc1V7YqsVxAK4LpA+Dz1xLcLfYIwEYK4lhwx8sP2mJ4LwWV8xYezqTfEBlGaiJqFkWIfRG2LKIp8rGwhiPTgT+yFmgC2vVfYs6wQRbHlxIn7DPuxeFDMUSiExrcwKcZNBrxkWE4YwpxNmaqi/Ay33SINjzPBP312gWZmvh/6GkhjCOm29z17+KXAcBaqhxsuAJIBnQDIBJMDpq0CGEw1eG2U8yCDifpS8SzJkW+jfzeWkhWpRYT1WQRn1ngKvH7+rFC4A7PxI47i3m6P2WWhUBUgA4p10o9iRus9cUrxPcTDBXy1qWbLzQIxA2P6lCIKw6CPvIefyb6lwEYCh6hlexLDP+ATw1Q8hiCAWG2NaAANAQw/mYx4CNe22KXesfADDBNFEpIaDWo0Bf1I0SqKSRe/Tb0ikAbAnB3CU8jTaWrWPic1NwJIEvDOxP1m9cIeRxO3YNfMMfx2haqNaWrxz1gd+MzioTiz+S+PO+BOzZ2aARoJ4v0ugoW3e2BBOUobxVZuiekeQ6RGBhmPWqOBBPYJFjS6gVi3lmmr3sAmyOCWMESsWOKRYs4eG1evUJ+674PesSMH0o8ySiUKhMDY6RCiUD9V6xmmAAmvBOGw0I2YgnzUMykjSii8QR9cehKrmqAHoG06QfQneLXxW0PT6UgzDByJnmQs3VkI9gSO0BDg4CyoO+AJ4RVRhS0csJeNZeTllRAccHZAq2k603Wl60KiJMWH7W2GkHA9ozcz3AhHVzwmPhyA4amieTfRiJ/IxexvpmoGwiJCqYYLSGnLVFR1TAvERYmle0YGeR78KYY70Drot1XgA5zDHi3rQngVNXLRSS2H8d7iiJ/MDNBbY2IMjARXM/h1XkZuLOx8eKHxCJE4We/3oQ6UXSSxmDKiGcHEAO31v+kwP16jmzhAd7i1SQ+KIiQuPBG0oI/g+giIxWLCcEaegkWKlxCsc+wzhUiDeJMGiTU9aSOxndzu8XHS3YFagp8PGx36KROcIP/CO8B/iha8UHywLRKIRwOm6JIiLbQg1xqBUg0BOSgNqi/gnXgDVilOVkMOgKcAsu4VR06iDmqyD2UcwF30ZSFOTFq0+TdRecOC+BcKKqhby8kaWPhxV0VcSVGkycKuJJgd6W+0GoKSIPhI1UUpPS+8UldgB1G0gXanjUGAFUCP82y4INCI4YgG2Qfi1kAZLh9SbhO5I82PFAEpJg8QtwT0VOXkAVoyoauBGkh1THFxWYSPgOOLQ0s4TKBw4VQekoGFocxIWJVeJES2ZHjxdRLjwAIAVIML0SI37AIGzpNwIHRKzRHgAXmaKnxJ1tUlAfRKRRnLR1x3sDkE7xItSxiW/YEDWPUDVAecdWJDJ+8BqJoYTb8bzygwRP35WxDkQIeAzsY2xNHWsP2voFkFOgiN19s8gHcg6gDpC97GKUi52EQGAl92ghEnUDmO2SnEP+Jw2CoeZLg2AhROKJDQFKJWugNSlUCjOSrj4AGJ3aUISnvYDPC+JQoDP4RsNoKduXjIIYS9Ch7lLi20TT+BRKKJJRM0M2ugFI8wH6hlsyQ4pZzeo2qwNI2G00BA9hkQBEgbKDT0GCXb1EOh8IBYREVZgQJOxYMn22SOZL+BHGJMwgpJBgoGK0w19G3ow6F3JILA46TnjDWwXkgxO9FxAoMDF6TIG9GA9UCuSGJxAKGJjxKwS2yR4NTxisP3qWwO3AygJjRW2WvYcSBZeJp2162BO2+DITKevaRKsF90IxZZzJcSABQoD8xwJZ52pRl51/WKFFHmlSFvOBL1oy7ONo84H2rm50w4p7r3kwa4A7+SGGBGiKhCxJfASUq2zLgbjm3wX4NKhprkWQEKWMSP1lpsuaz9UNOP1A0lJcAslKIOwAFuxmwiUpbRmhQd3WUpm+LgKTRNcw3Yy/IzvjeY7YxOaSDWF2x81WJBhMtMxRmuRPoN1YSGHCxhWXroZEGPmxiSkpxQUmeO6WUw11gPOz2PjJfznBEcZMA0BVPKE2OK9JSsVmGsJVbWu+AyptC1nMuUB+hmCA/JEXwrc4lL22ANBXJM6OEuL2XEu4MNmss+hTusdxxsay3ZUhZGlR4VHhAfZRPGFFkjWbOwi0NSW3wf4x8x3pCJuemI/WzEzcSRAD8SU1KL07Wlmpl32t0rmGqmXExKxV0OXa1lEUhNa36WDVAkmuZCkm7IGkma1OxuSkCoyj8CspQeQUkm5jWa3uBhix8zOqwVnzYyDjVelAA1eqSNWhcMJipNJP+BMtG1QTS1yAiVBCRP3jkSQlP/QIlKuU2f1CRhLyzBFx0aCebyaGtTSlipXlGImEQopG80qycgnOy+2S44pvWO8BHhqp8cxeG2mUxQHgzUIeVOKpN6k7oRVOjUd6U7oZVOWJ06nJhnsM3caQlRpx8zEpt2IvmdlJJgDlNkATlJoylHgUpCnkJpFMIi+f82gC1lMkp9NJAW391ZhXHlcpQwm3eFcIlyZIA4060zQxL2RDRQFyop0V3ASmwOvee1E+orZjDoV4J2SzuKAuzFLnAQR0/hbXCV4N1wBAw4Fn8u2RFerTi/Y1KxG+3R09hUx3rA6SN0i3pTxIxvWQA1aNoWymDZp6iTzROJPjJ5QRLRzwKEmuWjrapKCuxbAGGOF8z6iUBW78c1BIAB4wE8w9zOCrCE9K3vyoe1WE9KCkNK+BAgLJQRiEGpkz2A9dKpRyJjQa5lLDp9AGUxzS19BssPjpdLRug/J2WA9JiFOAT2ZM71wB8hpBBOgIS9pddClpDezapG9OgyrMAuej42fGygWhYJm3aO3LEkmPgBGwNgFW0U0ACW6tPX8KNOMwaNKSJKpm3i3JNxp9APl23qIBoVMJ9CbADQ2ZgKaB16JGG82R5gAIVhxIjjUIiaOr+yaL9Rme01pxmFvOB7j/pgaN1xKwT3RVWWhAAIRvIL5KwEu6WIIndDtxndBXendF3pVz1wAq7xBg/Qx6pruM6uJNMbRN6Ke6MIABC+OyXCWDK7BNtEPpse2Pp1I1Pp59MvpGwDIZSRCIEIpCoZKXBoZwEVQZwDJRsu2RYZ+I3epL7GpGd9P1AD9K8A/DIoZtwWEZejFEZ0EXEZDDMXB09SkqRFNrhw9X9Ga1UbhYVwbRwEVyyH4XbhawLwxB01op9tM1gcBTNgLtJjRljMieovHjpkEKAg0KSTpQiwCcBvmPOgSQos1exga/slhWlUzfefPzrGNEDucT4L5AEKUMM2iTasHznIOtLjk8tLUzCa4AXhk52QuvTCHWUDmog4RJDuxCREU7izARnV0EhCUPXwqNw4xp0H9B4NI9BAaThe+Kx4g9m3Ycn4gmuExhe+5JGsmNEBb2HpySZq/naZYcE6ZU1y8ST3gkJJyLK4dYNxIUTMGos8D9SfSE4Yyf2BWepPbRIqOjMEQkju12zSZ5kFZ0k/nKMa11M0TlXpiqxg+ObzwR+JkEGpSEzk89BMqUxSErpzGWGQ4d3SZznGju1zMoAhoLB6/oWewXEFdgid2awyd0runzPzuT1MREs+wJQTd3186Ag+ZF8BruprijQLeX5+NED62l2kz2jd1kAqMGMxwLNd0LkwyZk4VcRetyVY8mGe6xinmh9oNHpOdKPC67lCWYrApBNeTgJaYKhpnJMnc2bxzB8+V+x79P+x1CS/cPjP/Qv9JGC5jOgibjLYAcaOYBeBFfuL5hCZOWL5ZcDMA21KNBxFtL/CTc0gCaD0k4GD2Eq8C1I2wJnA6BjMQxRjNIpjEXNpv4U2C1tL2qttNPB2pUNIKgEe0hJWUBE5LjyEu3hA6+0/h/Z2PpkLnDYxkDIgizMgAhu23Kr1WLK5uyaeyyNuxWJRdZ0xO4ZF9ImYFBncmYaR9ZfrNfK9ux5htO062wi2WRxDOfGYbJzOn8I/21CTRZ0BwMOHfFQSULOLEyxJxmFehGIVd3hZddykQkgmyk/ZKgBMiR3SeP1WOhTlVQKhSgZ3QRGIbbMroKhSS+AIh7Z2e2yaOi2fGgYEuez40YOmiV1pr6UVphTnwO7HmTm/6QBEDwkSIPt0oOYniUOclJk8FB3MgEUDoYLehG+ukUegGhSws5jBBWDrKSUVOwcGSCXTJA9C+gJXDN+rzXuynyUh0DRKxcaHGfqXenkAaGCRhnc2+xt927KXqIkcb9i9wU/Tfw7DMiM7rLy2CbNgqAbJ/Kjuyn668FU6ANFDZeW2Q5IIDhcEHPmRdW3lAT4GWJkQmppfOHH4NwPRQkbN4ZuW19ZH4yTZ67l5hjvlTZFuy9ZSHP+MGbPoJFHPQ56FnigZHOjZuHPw5AIUFpB1DJRO6T62ymVmOuaIxZEenKpFADvcsLOrutd3IQbpPXgY1WVpEUkE5q8n4oLVRaI7bOyanbN9CbAEoEiRC05GjH7Zt7kHZ1mGHZ47PoJY7L3p9BP05LRCoy07Pkp1HkwApBznZgzJ/SfYOIOy7KGEtnKeEqTJE867LAyH50XZUGR3Z8nls5E1T7Kq1BToQrMGQmwWDxmD1DxujIz8CwN/CcfVNZUV3NZGvQLBDjOZQJJnBYdbS4Gan1i+YyxsJEBRzI6cARqMaLS5kAW02zx110raF8Z+j3n4eJ2SUuJKV8M7xzpCnVdOKmxEmpX2VO9DgnkHSRyZcL2k+woi7EV0KW8t7JiIq8LX+a0KThVLLpeUOz3uy9nMGlbLhApImYAr/icBIxD6itxht+TXUyUr1QEslFVeqUnkSQftD4qLW3oq6ZVxAB5QCsczOW53GkH0NbLncg2KtgUJg70TIAbZ4BgLp9YAJJ0rO/uHtKHx4kH4owaDJcrqm/KhShBq3E3/MFnL0WEsxo5KbLzJmiXTGGaW1srVwfZNc06udSAx5i8LUsNeHCR+MB/BUvj9utBSJuk3MtI03OvqQIIY6iUifueJhAQWsOMS87KrGm0IXhIzIkAVKCzMSLOiZlmimKo+Lr0y0HBg9SgsWtOw82H32MSa7MMSsCM2hy4GXsVzJxZ5Z2imZzNcC6+irCAcUvJ4nP+0uT0e5mIEfgkHCPhdPLbujr0R2fTHipqkngAok1QA/+PiwSHF5mo4FkAFEk5mi1hiJyNxpMjqC/U03WNWV9hUq1qnZuJTIkh3FCJuF016Zc3KuhriMFyz9L/Z7qN5JnLPzBwHPWQtNKSI/3P5ZUD23RqXOf6R6WsE8Khgu+I2M58EGpGiD065jONQendF65sgELRw6kI5QtKSIsJxT5xmBspPs3r5+oHgZe6V9xGfPDaAEWU576zUIcvPpQq3NTuiAA25W3M9++hxoObpJII2Gz6GVXMz5qrMXBWzSlh61TMZ9oRv8txAmCj7HdC1jNwx9GzsZmvUg4c6AK0c5JvJZRLvJDAmMC+IDaQ+MHPCGgD8sNIHBqMY01gAYU/hbmMiwGUTJcusFf8QIE9ZCSAcgHsDkgMHNoqcHKh5XWyriKaLYAugy/UkAELgGyht8IMBkRmmE/5aVLAFoxDXAt7zEwHVPwUGi3bRt2NShBUyVRj4SIwrWQGxV/gJ+L0CvEUBE0CT/Ghpb6AMkILAE83yGHSyg0YFn8Oa6yeVSEjqBwGEAnEcUSItURwHAxv7MC+MfNRhgHL+xx0CugIWOV2s5OvJC5NvJy5LXOK/KGGroUmCLlgcsA7mv5t/OUYKVx7CuhneMRjFbg4gv9pZ5kf8H/K/+0HKo5yFXg5oey9ZGSgrsfHNrIJQgyJGPgoyOApv8FHMLgnBhKEA+105vvxsFIlDsFTrAWUzguQFbgo0AraOAA7KjhcyAt0GVRAHeb1Hw26D0I2mrJI22FIMQcwIlKhjJz89cJ+U2rMpUZiAWBYwRgaG/JUFyeJASCsItZ6eIwuYECkF85MXJvWgIERAiUFRQpVB4RzngIwN0G9QuYxwgLVUTQvssLYVq5BSQkRdAAJJEAodp2ZBDCVA0CG2kBJM6iOhpGTklUbEim50jQUp5DTr0r0QHSKIkgAA3TJ6faBk4awvnaSiBpAczxaQe2i/63AAWeuoNxY/OmXgRwocEPl2uiglF+aRYAJxoeCWFTnK+09xn8gS4HIa1A3/6k2FgI6MQUpNwsQQ8CC6AqM1Y4MAzVApnilaAImB0BwqBFbwDzK42FgGuE3uG6rKERBJKNmANDkCdD0bsjgv15sdR0GN/go0YIWzIOVMKc7YQGuewuuEHwuqFx/KXJCQGuC7jipyPQCbkegHhFvrII5iRC5p30CpFfIGaW7IsS0ZMTKAKWjS0PxmuCcpKa6bQpv87Iu4YlaMKcwBJ6JhSklAgwsVFzABohXhI8AFoWH4D/3HIHpAExgaUvZn1k9ubVnyiQFj32Jwy72owonQnPD86cB0++i71+GaLGTJhSmuoi4OQWKjk7UT6xqc5KBVFwwtcFqbF32BQryaPQrvwA0nDRj/l9FraCTCAYvkFgw3YwThC8en/mbB7Qoci1gzya7QpjFOySDFiYs355GMkwFIs7C/9XX83ItearvWr0XCIJJwlF9wDkTnUtIpkFJ/INSrQuSBUkHaFw6NjF2Yr9UIYvHBpGwZASC3SF+rMyFyGKNZS/NGCq/PHRW/JTxNtKy527EPqj/I6CpYO1gYwVDRBAkaFSYpbCCJO8FYrBcFLli38f0Nxgt2Li2Vovg2Hy3bFY4uXF/R2DFa4pmEFYtbQ7QrngzrABokYsKU0gUPFc4tLk0xMDFZ4vdp7kR+GVDS7F64uRQHgMPUrEFkA6oofFuMCJGwEt+sgEuJJgwPVF94r3FJmGbF3AAwIc8lTYZzhMFDRQ4k4wTdCKgurOfCiMFV2SiFrguwlq4qmC+ErQlUknJQtuOCFpEussyguaFAxAIlUtSfFaopIl3VMKFV4t7AlErKkZzk6GzouYASYTolOYrwlTEp4lbQwjFQEuVgoEvYlJqEYEuQP/FYksqp6EooynQyklIErkknQsd+XEuYlZzilF+EWwlCkp0l4kqK0qksfFyEs0lRkvIlTErXB7jEpUkXhsOxFINZL8RCuI4sXFY4qslxQonFpQuop5QuK8dFNEyIIDRajgqoFSY3clQw08lKoLOB1EBWi2JkyGs8ING6xjW+8jE8ZzxxRAgqnUlLgBGFa4GgFh6BF8hfyXpX/15FfUWj+kb2sqcfz5kxYgMO+LlglJgO4A2UqgFz91EAqzDs2cUSD+imFwMSfyKlyX3CQmUpklKgoyltUsQAUEsNJNEDQFi71bRUBAF4kEukluAtWUyEsgF40v+Mk0pxF+kpVBg0oGBzEGfoDUpe+lMSamTm1wR/nWSov9ULF0IoHS5VnDgdYtqF2ujpBvfwlAa0pbiNUs2lQ/Ki5Y0ovBJNWWlmArbRBAiJG20qmCRgDy0BLKjhahWI6z/ND+J9FX5Qdl9pjlh1F063/MFJVgc9Fm95VV3ilzjPyGNaEyGPcVYFrXWDa6dOMYcV0b4DuKulsgsXKF4tYAuEsYlfVJsmkLn+QiF2ZMBYv3ISiF+lq1FwFBgCfAAIEvm74GxpuVToBfJOaGhOAHJDKG0xnQRmlIEt0GirLGCkUvssMw0FlnjxCxy72Ql4su3RksoeJeCCTFMspkc7KgVlQ0pGlEso8lqsq7F82RWl7aLlxfUvFlAIVllsJW1lz0p6Gysv1lv4u6F6ssqyxstXmD0rQAoHmzZ6EmHJ1spFGVDT+lLlj1lEUoNlTsunUlsq1lSRGZlyjLtlQcodlzEENlzsq+lU0r6Gkco94N/lA8QsIS5s1UXBDIHnsDkuXsthyg6WQvweYwW/YTsrNZnhz8l2XIwo3wUQ0BPxQ5xEvwi4SDgpc0tRFckNiJfeP7UTctqkLcsOqREVShofSf83ItSBkKwu+/VOaWAWIAQCooJJ9QhvFhSlShckO2p8dKKcb6n7leTX+KkTH4AmaPKcF+IIEhrkC4AIiMSCfUXlvcohJGAFShMqH+pj+OzCknNdR0fJ5JwgoKq9917KM6hGFUiWXUmngbl7GDhGDajkEqEM2g/0tWUzcqJFrcplJy6jlJlfK3UhDl/laEIGl0Gg1J97FXlea1RFv6lIR+VOA0+bGgV/8tgVy8oQVUwV/WVIRnmMzwFG4cEIV3mKIRXAHcFXQkPl0akgWZ5MwVeIvvhK8rwVOWLfliGiTJs8u7UrEvnlGoNoVGCpkcf8oYVcCqYVKgplQWNlwG1GgtJu30k538v1I9CqTFi4MWIJiEIpjkoyFxsVfmw4tMZo4qGGWEXjl5cq7h0RRaGq5M3pqcoMlxSAaF9EsUlLiXqY6akQ0H8ugZ4AtcFXcumkzQnVFUzhG6ZEEIyGjxmY2iP7hE0LOQUbhIleAx9hUr01QqErxIhrTOc24rCsAvHMV5MoYlvQoXFCgvjFi+J1A8csgsn7goydiq7ZDivwiTMrgpLitcFn4u0Vhnidl8XKSFXlxSFLOH0ZKioHFaio3sDcPSYlUSUkf7BaAcsJ8lU4u7hVcqvlkpLA+0F0W2+MHlxaqVaMWgnLQjXVKK+ZWqwQ+JCE6qI3lV1h4EEyvaQfM1Z2Xa1tQjCEFAdCBzAFSSxAKn3ro24AxOTW0NgsyEF2smPy2r5UDhsgCVgDQAlsC5nj0SsEDw1yp2xjJMziBysFARysxO2sPAM9AB2VCaDogIOx/IiZhX4iyB2VLiUWZCCSegreI0Kd8FcWTyuFq+HVKiVqHixF7TZZ/7NzBcfMLhxVTcopkHCU4QP/QUpO2YsiUQiuMDlx+SoGE6GiPJn1BDCsQpLYyyhLhTXyzltkrViJiAZA/Ytkqg4uCuDSte4lUXqQYvLC2LSsPBGXIrl04sQMOXKdYtqE/4XKv6IPKud8fKuSugEGFoYmETMcoL5AfZyw5+R3j25myT2xR1s29jQQlXzw2JchKrmP7zN8b9W38hyD2+w10jAu0B7yos3JaheWS69ShVVzTDyOBRyHOye0uBiswNVDIXUpdEGhyUABJMIRK9V4Mt2ivCCgAd83HOve0qOVe1YYct1YQ8mF8pebVNIvqtc2ZewjVk534o2yOwa+Bn9JnrG+gSarDVVcAnOVR2+C/MXRkrCAXpgolrCvnIShNhIKKczLmsuaots8mBD24s2LKrcFqOaLg82taoxp3BQY+X4ioAqn3fG5at0ooUAfaW7DTIaKo0wr7USGGTQEFX2KEFP2JEFXLKrYUjjfpu5E7KIKU5R7FHXiaiBf0jTTLhosPDxEuSZAptPmBoV0qiQDySu3qDaVEY18lQqukWoIS0CW6NgKNV3fMymFlZZ+E2Ww+M1giJyJCykqgBe5xBgkrO+AUGyjpmIHfV12M5yJYx/VSVwKmiZk8o9KQjA5HhiZOwWoSKjGak87LpBpsljgE9ygKQu3igpcDFSyAF8pRIVkI6Grc5XQBSZwrlGi95lhWj1kRwMLUAg4GtV5WGsFADp0FBC5Rsh6IOioCGs5g6Slf+8N29g0Gq4s1GsOO0MFgI0hybZq8m38c6mGOFMxexSs0zuNWXfM2/gf8HrHnBqDUJS5fhtSEi3kR2oxwg/Gppa4UgyyDmH9hzOBXR8UAgeQljHJhJWfV6Pk3hLGvLG75jF+uNRus8Iy3R3YRZc3MqvasfMXV8fNsckNQpp3U1GlQGrQAIGuooxSASu2FVaSLYQBCUiUC1PPWC1ZF2CZ2+HC1X+xi5esBFZRdRdglovi1D60S1dp0NgYWsO2aCxDGSVxi1loowE4Hgth9sCoxx2KZI/xmUy/FCEYHEiIEMaKEZNktpVk4PpV0ElPiDKrXq7ODsUspXPVdXxy+V6pKFN6o6VBirhQw3wWC3x0TMcavaenDGDpBOD2+tRRi+r4Lph1AAnehTnU1n4gxuZ7T5A2WnN5oALC0O2uPQL2zR6kIBTYTAsWQR2tvE7PFoK8H1RB8n1AYXIvO1n4j9B2kCVAPj2HpuQF9a6KDZSz3TQ+NkHo+H0EY+uAFg1BzKK+xH2GQEtjJcu2rDgl2pReEfy/+nBK4+/3w0u23jO1A8E/E8SCyQ0NRe18oT9cWICzM+8p6YwKuJRbisO1jlgk+2OouMRLO0gQvLX+mKKcgL2oO5LXTHsRAHlw1QGYxvtTzgEnxSoEnzVIdOpe2n2sWQ32sW1dejCAAOr6UHtGB1qH17VZEK816Zx81j8vRhnHD56nWpDx9Kp7FHjFPVS/MqimgRlV42r2mk2qmal2VfIn8u+A3nyD8QFnXgxMobFi5XHyc6BxF5/NMCN/J0FrcDTFLwxGFBWQ36/aluMEglz2JM3Kspotbwec1XCsNV7VVNQtVciXB0TSJflwCr91nrn7Ua/GIoP8PX6nrkD15hU+VyCLrJmcX7UoJLEO1pXC2VKTtG/7HVJwivYwNwP0ezpO5FP8L8RZ1gnxOCxmKWajpqiZgLc1zEhVqUxkJgyoN4IwpNJifJa4nVm383YVqWh939A8KMeecCoKVLlmoxEVncJI+o71RSPfeFDwN8pWW5ka+yfpuhTvlr9L5lBNL/VvEvaGUSu+AgcuSVLuJCBjsmHJyu1wIDuvpFC4Xs++uzP5Ogov5pRTMCd/OqwcgilMBEtBGSu2yoahG91fqiVl8esWQzpLFJQo3lGZ0vggrQmqwgeq/AOoB/16WMxAy7yAVAcq6hoBu1IzeATow1ORZkiqlJaeumEKkgo4s3iuWCFKUGQVg9Yz0UkVt6PH4v+tCS/+pwZVetP16BqL+9g3H6ydMAgsZNQVgGmbRNBwb1aSLwNN6kdJvigHCB2An5iBuFJEawjlJKv71acpYNiuOCsD9WUwghrwyJkqqMSBpoAdNIwAs+q/l8htayNkwisyhunCFnnn589ngxerNZVdSoDGQ2oKinfBF403BN1ncJwWU2uOgR0mZGVKRPUh1WmURqsCZMSQN4l8vLmKesQ0H3IcEH4wCsOTg+FcyrklCyqv5Syrg45BocGfeocEy+xwRMpLNgfSuqcxP3CILEFtQi+ANFL2B8hzW0ziZgOX+SNIjcbhrWVYgCRwDkQRKfyrewiZk2h6ax9MPUOScVqGbVpbwyxLyrEANkDuBYwm+ixqHpEHJlu21mM4FgvH1kelFGwVyxaxrCI31iqUp06TjKe8GsEQu2C6NrSHyxeGtOVsFWqwkGGfqBaAkKEFipOP2mAC+F2XK1pHfWUqPkKqZGbg1xWmUzZUk2qmGB84eD4aqcKjQywDoga0S6g9SGYxwMTFaAni0R7DFAp62Dz4ZkyBCdly8iikN1V+QRrl1Ghah12mmUq40iILLKj5ggvvlC6rV1QHOXcQWo+JHRpEySRsQQRSvP1HwRbClFw1F6YIRUG4rYAECsA6vWtI2ZhpZVQ9TZVLko5Vw0Eqi1XLyyY2u8lE2sy5nSumaIqpmJCqvRQ4qoKibJo/CDhsy6bJJTYUXgH5sdyH5wMGcSOmrzaaLg4+QIAzKrMCZA+IGjK9xVCYGSg51mwq4qrMD8sX3NhFCLJVIh3NeMGgEMQDIFZgOWkMQe2iHVSr0JilAGd00720iTIFmZrV325sygBWdY1FIiZhIuffMxA0pqruw/IJ6EWvS1x8BFNkTxaFkm0oAvGo4YpRusBnVwVs0ykqNwPlvlKJr31E6v5lyZF5KWuszlWrMqVu9DF6ecrUctSoVy1htCuO6nUU4xurgzSscN6wN35VcqtZBwMcUAgMAUDEyCADliwcKVkW8LORX4JlWW1n4iQIKOC6kX0J+55kNF256jsBSkmT4HtKUkLECE6C3Q14tnS429nSyWLCNJ61zXu53atkJQglMkZtyoJo/wqS+FGIowiyyhB8nym8mWT6VlV+OoLFPNJz1fBr+NK+RKNZ4/6H7wHqH7w9SH7w3qH7wbGJBAprQagXnEDwbNyggYZj3GXUHx6/MBU+PEBomAynW6LklDMl1OyiUkBLic2wo4naE6AAICeWnfGaAJlCyh8M2lBsp3z29SMbMzZgcCqFtPQgpEDw5IvEIeFoBAP1OeY9kG8S3rn50TLWSk4hDJ6iXGGxVhCZ6uXRpgWFu+0MQzZMcUjota4ChWCYlik3gkxAhTk/ZoloItceXiWvxuHaAZFE+YYMapUNUKcEWUkQcloFghFt3g1WG6xD7C0tgcFhsx2vUtJLCBIHIJ+uI3zgt0MKmKrBkFIG4gcCgeHU2CYnX0WUJustqIFy1zXP4GjFhNSiGAtH5FuVyimCR6vN8tFysfNigVVRkrBQt9qsP+6FrHgIDG4xgFB7uwxN+SnZ2YJRLBxsB1nSUmxNUSWOHdw9SPZiWhF+QiM19qAgGuC2rSIAols6uRxql476Lmornm9IdPU1BiZn4taAEKcAxqt4ylpqtKXGuQygDwgXVrsqon1hRgWGkWvTMhhLZO4e5rGw6WSKa6yyABAB/L20eVtU6LVvzUgylvkFRRGwnmkuVm1q+g21vvgdypOF9SLlQvLVYoolrK6SlscYF1rvYzCQXoJOtIJuV3ctAIEUQxFB4gYSAlg1ZWQAGM13EchU4QCtynxjXB9g55r6KocJN5xaE4J+uG7NiyAGU+Fi4iyupzeD8uqa6uqb8XootqT50JKM5vkUe4QaA6aP6QgDT+co6yc6YDUJt1zVRxw8jH2Bhn6QgeDxtADWZwXQiJtJbBJtm6gb15NpYUlNp3Ee5tJV1WFreVZufk7ZrrNgsLzN5SvLhh6qiYrOEX5pjL5tbZo0UZAiXYnJtN13JpcNBgBm1KmnGlLZoY0ushfkZPHEI030dRYdJYGF+Gq8noJVsM8huJD3jFeG31bpQHO8VW3gDAfCGZQfkj8NDgn8ZLiCXEbsidtzChVk0Qikt/kgcE4LLO6xCKgRCDSLUy6EAtlkiSkK4BSkcXWCp94ldscUj+ipWQwaynSz+vTNe6aBKkEbhFapMUkFIntoSknSGZaC/HyE6QKKEbpMrCzPGQAuzWiMYdrmo8kWF+bhFZci0XR5+TKeWH0k6AbCikohALGkweC+kHdr2Ey4D7twzi+k+0gDwM6lMkD9Ub6m/xU+L5p+i3vyMxgqWwMqRIHu2VhyiVqGgtBU0hE0CV+NlyLM+Ty1JkqIhzk+xNgObsn3t+IkHkZ8hkNs0mRkB9vJk3Ig3AAdpREeJM5AwOk5Q5Ozjwb9osU+IHsgpkFY27bBUYn9vLZZoIIEhltP20GFTtyLJ5E30GGUUgjiA2kBFRr41+N0IldtB8hIA8sn5k59spkl9v+kqskHaCslvtDMhQdS1ihEHFvuFkYiftZDucmBaGz6V1q2x4hF5+GNMgdsE3QJWdv15y8kMtZLn5ERCh5Zx9vQtKYn8EbCj9kSoiaoKojH2AdpUaa0Rrt9rBC4/vEfVcUQTETtp6ZyLMWaRfBY4fIN9tdAXrWB2sryNrWv698FbqZLl1aIkE1Eh9vYGtETdkhjud4isn8EUQgsdxjtvtCv3axkiFsd0LMhirFGcdi0ONmzVoqKEblwUXrh4gdBOSc0jrs4ZLjoUtzLnE9vEFEyDrFEHYjCdDCgidp8mIoAjsVEGRRidjVxEdn4DEdXVA+NkfBgiA0Mkd63U2J5QXPNHjgUae4BWAzCRkaCoBC0mWBPNhhsAgtSOeIkkOD8IkCIAohLOwKjrAgkyEwtDTPqcgBB+VYcKgBaTU1gZdhw2WNTuw/dBUkdLXP+WG17VlGDK61+JQCt1Vz+DO0a6XnTdeckAfw/mluyirHkA3yoRt7LK7K6JtEF1fLRkahCdtCuPo0D6kY0AtrmY0wUFpPfNr58jrikXtsdERkjikjmWr5DzplGbskktaQg8k+dsjtdABSkxdtz+xQnnenzs0B7GQOkyrWqkF9uukrzouETcnisp0mxEStKfg4qkhd1MOhd1ezhdzioRd7QiRdY9tRdAtIxdqtKxdlQj6Nk1hed9UjmkMIqJdoIjRd9zsxd+BGhdR0mpdV9oJd80jxNS0hJdKtL905Lt2EQ9tPOuLpRdNLsRdXLqwdPLpOdSfNwIp9pt426lbNAClltutrJhpLv5d3zvQtcrqsdmDvhdYrq1d+Ds1kPoF5d/W2JpaDvldIGmltSrprNctrudarukUjzvMdiDu1dUCnpdV9rNdXIgZkxrtOdnNGVEPYgVdmtpxU2ttrNtztVdfLvtdGrrS4HshFdMCllEY0gVEXAHZd/0ly2VRE5ddLu5dmwiiEnDsYUuYWldO2ySIzjvNdlzrA0WtpudnZtDdNfIjdNAALdzrqOErruwdGKCjk8rtzdA5gANqTtKdKon9dVzpLdyrpDdIQKZdZLsrdUYjbdY4loAfDp1deLtjd8olfhibppkybvFdabsldGbq4AoTrSdPYhzd8KAj0QJFiGGqP/gR4pt1ozqHsuA1Ve6BNpOSTQg87JXz1lNJrUGcpFtB6rJUqsUMQEtrNpS/Mtd6Cm4ksdinI9ZtsZaeOK8qtuQMwdllYPz1WQZtpdpr7p4U77t4kn7rLKblAoJ5truJK4Vlas8B18eNWw4v0x4dwfFcdXMDzaBBAet4Zn8EPEFEmWPCSMMaovg6UtDVX0qrkAC2sda+Ftg2hOtEHtLoGyxrWZQyOO0zikWhGSEwABNQfqOyIbQMFD2RqLCjkSTQad0yjgt9DomtTli0EwcHsurP0fgfcgbQoYgwd0wiiEAduU6dSlZMH1rAB1wnvF3vHOgu3R8EB+IkgTL3bs+GuHyqZtet0wlk9JMkzEQQDHd0wiSdrJnvk6qiiEcmhKZa0SPkNnuXkzHRvgZZVh8BBAMNbrRS4U7vmd3yH5Mw+StQ/DsodNiV49/HupFwWxNs+ona62nobQapnhafzpoArlrFoDOEu0L8HORtrHydB9DctnVzckcUj6iRPzqZEbjFBP/AjETDQ+E6P2a8en1PNjfWcUGwFaRqnUTMEYOGw+8DGRMFA2A6LGz042mZYPXpyAmQFGg25vya/cGualnrdk4Cm/kkChGo9nsQULFic9Mii4tS9o4Ys3vgaY0nRJpGHjt6juv2X3UPAPglZMKXr09q6FIIgxohmgInhlWxBzKqcqhisIBAY8TEy9tfBV0eFIAApN1EjvZY18QB97jIdoazvT5cPvc17dPVXAfBMYwzWMiy/PfYB0JF07NHTv9UKVIBIxBog1TFPiS4ErxVtf3IbeHjbVPYk7F+Bp6wtMd6Qfeo6AsgVNrPe7JGFHjaVEs4p8fcaiKeAl7zuovwTvaD6zvW4QnbWdaSAKkJj2m4R6fd9AlObua59E2JZvZT7M9n6gvvX6hj2sp19vZIgvvUd1alLj6cfXZ7GfUT60vQDE6fS1bLrbg6KAJd6NfYMaBwCmAdyTTRmeClIJqkyDLGOoNUsCSCvjhR675BbYunXTKgtufAURGnErWHm5gUUhx/8VN7NXWT7oxGhbI8DN6w+JfAj6DRA2+IgQ7AdJ9f/PS01oro7FrBa4eYrl7XsKea0mvVS1Hn5EGoNjcW2r8gMdEiwwwd7A1oq6pRPfqRakfYAWnY0cUhqyQkaTmqfLWk14omsw1ySn8GoJXlt7f1aqALSSgZsFt20UNbxWpK0s7cdqWoRoh2QPAT3ESPDq+LDMsOvT8PbXFJDmEp8/cErZvPYLxRVG8BXuhCY4dJggofWuI2dh8L94O4ZWEIw6DKZmwaAEFpZ1dmCUVRyzfNeiq+5tWDQLmPIkHapIA3YXJ2zQB6oPV3tTgHYDW0ZR6IFtG6vZDiIG5KyLKJHf7qzSHJq4I/7mwRHsjznJ7vRNnJFPbW703TiJr/QLJ0AIq633QIJgAwNJL/Tul3PeT74na3swPRQp8eCgGqwRRkwA1Z7kvUvJGFBKAqBJ/6L5D1UCEFO6E3ZQGKbZEI53am6B0jAG2RVQJnFPfIuAD/6uhFUQ8tm/6bfR/7iKCXQMxCQHj5FgGx9gJJ//fzbZbfgHn/ZHTKvZIhqvaw0Z3ecJlMs16mGmzafhFn9xvc4BNA9iIAsn/6u3YG6H/R+6QAxRkLZP76RiZIGjA/f6ZA6YHUA4QHpzRWJUSYL6A/eQGCEPQH2bZfIqBLQHrYOO7RXUGImA41IJXbq62RGwGCEBwGWLFwGXRDwGKOfwHLRFR6hAwYBObQL6v5AH6JA7f6bAwAGU5CwIECOODhbYL1Rbfe6JclSA9dQl5i/OIZoBr5o1IPKF3MOEV2lUrbzdQfUv1euEHUsWhP+ChYElCiML+r8LABjMonNCJp+fX2g2wrut2cmQYKDGYY76hKBCTNjNUMNyR50IMAIQB6AjgCa61/leA36sDL8OHgAzYbsgTcqshIVvgZqqiO4XjLEZq8DUo0jGFV/nCBhAgHCjOkTcg5VJXQSUG/Qa5mKwYoLsUg0JXS0loAhdKLFCrGOQ1UYuFs7bfXjwOJm4WEVy9StAyRABhz4S0ICzICUyM41eNg/hfqgAQ4DRi4NcJ/VZPp26VA0GdpmxQjKzA2gBEgzg89DhaNcJfdFd5/qBrlJAI7AE9MS58oMX1+QI553Xrv5igJ95vvNYCC8lgB3Fovd/zACRofOgBkPYfoQDC/1RiltVx6ZmFD6HYwQtqwMS/qkT6ftUyZWrfB63ErNcSJOhp0E+ivtNWkdInaioVDzcOsCzkFRdQFNfDQiU6TKTeg1NghIDUQXfnvweICQgi+O61ULMrc9cZKwUQzX76gnGgQQ7a1C0ut7oYOKAILTWY4HYKI+7lasR3B+RYQEeJSTTMKnGkqiXGo6laYtwiXMOma51aiaAOUc6l1a3AylYUG73Uo5KUEyAVwSWbDYoXKtHKkxzafCFRZqggeYderFbYKqeTW0ErWera+AcQtReeo9mlvwT2luwFbia04cxmK42zmxNQbKZ4VGCklROeMQ/nNqskjiAgFuDOT7GFEN5DPTdvSE9qrrmzqleWW5fKMWiWkNugiyh/rhlFhFuNQx86kvhrBaG2cYWXjdA2u3Ffwdc8/vQMQD6AoZA1FeQ9ycdb/YDVRDgdgA1EIagU8Pn9zkCHZAKTqRLxFOGEmY6dkWRuHJ4ik9embLQSYse0kBp6DlMfe541vXpxIguGMEMUolYEMstGgQl2xkSjyZve47fhBH+dEUgs4PuBE0r2rzVoK9Sipzz7+duklcYv1fIA1RmaiiZD0fFBePoZD/wcZA3lW8HAcvaL94GLcOnozM/sImHj/fOqUw8jaMTYKo0bV+4MbYwxbLr2HsKP2Hlw++dx+VV9T6pl8Gsk1lbwfuob3ZmGw8cUGd6IYhf9DXCyzdKVR6m5KnDj/Eyw2FlKw04bBvv5K+TfWGkGYcC0FiZGkWnrbWw2xS/1nwk0clctG+iLtLxnKEUgGBhaCmzFZlLtdT4GOa+0NJtrbDZcBCUW8xPq1Bx8CpVx8P3QGoWzFBiBTxDQQDU9tCQVwo6y9KbkVCxGAjC8AKTbcDvmswo22dIo1TaBXm2cSCllGKOOv7oQKB90o4eHKozGC36mN8yPW3AnkeJABFZSqSCjYJAo7QBdBrtyEfinB2fi5HjtK9dgMcFYjpYXweQJ5NmWcuYDbXB7WnHjAyXP5Q4MHV4GvJlMbRehhNLc1KaVvRK3bk05fEBGDAsNQGWiKsyPFl4AEo3FgwVnbDnVqaQ9UB7AMJEYpWPf5HIlrGrnxptHOBBK9QVsUgK2n0iXVqu1ixOQFnFClH6rT1HqGrdAIlhQNsGm7D9+MMbj0DQtroAWg3vgitEI/nTbeiQASCjqkB+N1HYoaGRxQCzqofsX6mDFvjoIEqhkIIqDhoxz6imqfAW5RlHYdmoM+sJIkAVu7Zypr49S8qdHDKjglVrbx7S8rgdjteZAChCHNxRjRBIfsQtRo1TGhlArz5KETxCpDeIwARILmWWzBlllj8uhHuHArEwti0EQTTVDxoUuMa5S8rGrVqBdHDMnWrcnG3j5AKZC0bUDG9YzlIDY4INvHuiskNcbHdkJ9SdQkj1PJoINHLLzHTqhhIQRUpBCeSuh1kO+HKIFMKr/qgB+Y7uBWXLP7AloCyuAGLGwwjKRBPYAg7WKn9oQOvAfYwq51w9FHjtXv6S+AfCMYsTlfcOzH2g0h4bo3RB4HZ9i+I8mHUVWf7+ST9Qw5YEKyqv8Y6o7ZdIo3ltHyCskYowPw4ozbHEo70RLYwDVFWaWHlIw5GNZbFQAnO0MLZE3GBCeY8rlqFkkWvlGvRYVG+0LTHUEkW9FOQPHWQvZGiodMFLZUedRI7QIjzoK8Ko0i1qo7VGio7Zdp40VD145MlN44jCGvgUH91RpHsw5Hj7JYe9AHse9ChV+6d+T+7ASAFKXGU+9348GLopfrbT1gXojVduhGRvTsWchY8Wo6raDebY8uHtIEgknPALHtIE4E7QBTJE/y66M+QcuOX8LHl6IGo7gAbAJUYn0nvKE1m7IdIrIUfHnG8rlqdAkOAjU1tODBRoO4b1lKKzw2Tlwh8Sgm8mrhCohJwmXhmgnTJCLpSsmLQyvEHB9kiOUm+tt6JWAPSQEwiQgvJt7/kSHtWEJDycJisKzUMADKRDU6gVa3TI+lMK9GOtr7bCV84YudT04IpDpnVG1dweeMxJiahbqctB7qbZsTxlYAJoJ4hMtndSZJjYj7eawBHeaEja8FNhvuSFGgKeY8uHvY9uE6ntVmIS7Yg81yopliHT+lkh89P9oY0DEACahY8GeKUJ8HHKH9HmW55fCVRCBkOkWdABAyMBR1doDAkhfJHBprjgFugE8w2LZ06SPZ/j7aaVLgwcYscQ/Vo5IGGDMJa9ge8MWUEafQYiNY4mEgPkdHEJnoTdCNhMgEnARkz17MgIHgE9nHAqZXjAmYbgB2TjHZivrDrW6TEqnYVJYX3uEd5MC2GLPqSlPEYpDC/vrzrzTzywSTp9vYK9dDXI3yiAJjHDwgNgBQBdBLkyKEWoeCVvYAc8TKh5iT8SRCGuGRDOrh1HV+XKJI41oi7bflbYoIAD7FZAnUaXDzqAPXj4CGHAUPuxcniXwBmlrzq7/taosPsgAW6fIBY9cyYiYTFoKAiwEGVgx0hZtsMPUKJMwwaNaqHTryy4L4o74Uih9nSf7DnYJHjncpzvXWgneE36ogkmod63gAmvHgNJBad662U+xB+E7zZOU1l9uU52LeU3a70iLgmuHvgmkWkQm3wCQnZVCKnkUoQ8P41tJ+3fy6OEwgmuE5xll3YwUBU0QAeMozDtU3wnGCuPbYxUe9C8s8NxU+qnJUyrotUy29gk7qmcozA1TPKTaYGtcnX4QzaEBYocQ9tkRiyopyq0c1Kb4OEmAREOCLU2/GrU2qmMww/GFFUyAdIwhjLDQrkyKQsDLU87C/HlvHP4yQ8aKZZGWg9uBrI7NNbI0ZGMtce9TI0AmnI6gkiNe08+AjpUWlg5MPI7qGiGMfQAoxb0CPa3Stvr2NYUHt9diY/gnZKOSLHsvGCUJFHkE1w9B03QACE1lx943YDBXhY8CEyfHwMl0mT/lD8WliAbL5jEhdumHAzYR+Ra0x3wjCUU8PaLDaU2PSZf9jABnowGt38lZaQLMhA5Y4YKm023Tj02EFrxLqDRMH+xboIgDNAO1bX04Zli44/kIQIBRBBsUoNbGzHz0yroPslF7TbKaQLUlBCA1koMSUt3dCVAWhAFji0CBEjAu1iXHGOi24Spo8bafq3gfo1+J8mhewZsimcSNHzd38ZsdY1FEN1o/GwB7PtKG7G4V4MOwwWDaqCF7sWgwEzJIJXm7zYgBtzibOMy1Y614NuV6JUij6ARsHcnwGgGsBMxTwhM/4NiOhK8JMw2gpM217boFV0xUYygcoQLxUM9UiIM3RByTswjWKBG5Tfest0oKEtOlJWnF+MDGBnRK8kzs1CCWLEA3w02nQ4da8C0MX9/loKRwdkFsqwgGDko6XkyZfRiKIDa9p4uq8HYzuaT6rzGfumMBMQBERlUP5mfY8ctYCM6hvvt8noHaO0A4Xth7NH6DEABqxneW2NkWQOn6o1ctNrrzGIwgI1kbHPJX2qxJCnLlnm4xbGAaBKA249CAO44eAko9zHUoxVnR03lnsoxbJZ40VD540/dmcJVmIo2jaxqokQZ01w85061BxPJ7C6U/xGq46mG/NRVrFeCCAcYW1mqs71mr46KmrU2WmtgkvDEfOLysukPh2470RYo73GvMwDV5s59RvXT29ls1PGCE2tmVU6Wnh41tm1LNPMwslKT8wgVGXwfbYx00W9p1FIkf1My6Rsy28xsyslxPLdnnDoQ9Ns2zQuFtpBLsy28x0xfHuRjGniNhUqjaThSLFB19DIwQ9j3uumq4GZGGzd/HeTXmnQpUWnMc1ansc7pgoLtSsS4Jh0MBIOb4k3wAfHmTnxSNQM3Uq3B2bm0Ba7m5RduqKlVIBokMGhRQZWq2Fl3cuB84/VrbXJ4s6I8H7rfozm02K3hoUKshpc2Os12m1Ca0PSGSpsFZIKKNAmWBfTCHIzmg0NoAPbHCGemDTAegP8UXgxtgZ6eW09GLmRwYE9THTczHw4O0i6IARrVIPW5Fc6Tz4mY7mg7a/ja7riQ7EZBAeoWHANc20ArNi0sks3QBgoJNDFWF05Qfoshrc9Fw0eLxNMjSj4NrLCnUCbvLqgB5SC0J7nsQK5mT04iJJsF4ACE+cLVOrO8Ug1xbVoSAipWBpgRMDksHJomD4BQ60uRutg6rZqDVqaJqboiDBdoH018QM9ogKNyAwgJ3n4oD5ce8+C0pWPbc2I+Xaz1OxcvoEVj9w4ex/jmyCbEF6zp1itEWEutdTVHt8xmPyxIjMMnRk35MhWLvmhtNMw8tt3mYKG4ZBVLbot8ztoYKLvm3NPvnwKIfmwkMfnvvfiAz85lpILOfTUQJEZg885gYKIswGgClsn8xRyCQO/nvGMEdTgBET2cz6BOc9CEeHZHgC8yK4kWucK4qsoCZ9G40smQl0GUkCra7rOgNhsrNPxDqG843xoEAzEg7mptDRdJWgaqHUzvVp6xVULIA+yDy5rc0iad9Rmb11Y0Mn5dmd+KehJd4+0M2cxznToFzn107znDDJOQBc4xQa3jV9/46TmBCzjmuQg3cw1moQ+C9AWZC5NJ109bkDeHJTec2XaQXU8i+c5OR0oJ6YNAEa9OIGIWvU3JGt2Wvo6PF2GcKGED2hvnmEXkXnZ3iXni+ZzjqvuMDi09Nl004zm7gvIWS3sTT7C+jpHC8XznC2ViS+SmsJ+buqNWepHFwWSA1pvmG5ckFcmTfn4Mcx3yJDDMLcc9+6c04CQ/3aN8+ATPzw2ukXy07Us86C7rqcnsBIw2AnH6qANQqYstBlvgYzFhKATQypszQ+pBjGLXR0lO+tnWVAAAWqxLSDFwiw2hnTANFEIAWpl18DIasQDEBwiGhqD9BKojmNoiG+g6gAnQ6SH/YodS7dAKxpqDjdCipzzMCbdVbiQmDqOlCj7ngLUyRh+ZkpqcKroY/AxEdwBeiwqLhi97pRiwVhxi85ojtGXNzBHbg8mlATHhVEMWi2pBH4IASggD8XQ8GZUdVEiLIRfAMFhWin54FXTLXM5pFiyyQqIE8wTxvMXzQ6gASemy9hlAMGvTgsEAqfTZHOlFwfiynAmIGbNWEJiWBPNISNEAhk09GxnjoP8XSxiAYgS1OzQwvTrSSz9BxeLPBUvQtt5AE8XBg/I06ag/xLWsph8miz57YNA7nyfCXVrAYAfAOoMgvC1HDikhgFRTNAfhciXYCMhNOxlVosPoCXEk91CLQ5gjgaRQAMVuqXLgKSWGSyN0AODURa5hqRmsAWN0UBiWJi0gAMAMBIUqaXM4es15FkDZp/dCgZqgnwl7o5tceCS8XT6q1YzUClxokzdSxtP0YcgFk0bKKl7JnPWAdnWSCtlQ8WwkLc9ti1mZD4JqCJ9C1zw/oBQ4S7FQPyLCau6XiX3MOHy9JnkDpFnBGlQ4Mj0iqiigLHrnEYEw6syUx6sILNdEAA6W3gLIAtBC1DXLWFUlwj+AzKbnxAIBJoUtstdf80AXSXvzE4ekWAIUpHoJi/6WjIugjzSylnhlASXUAAqKBEsqXpsNNZJy09aI+SACsLiCnQEB7RXukQ4hvGJANEIbIc9ehIys9JIaS/hICIZHTaS5qWMAMCWLIBCK+JpwDN2c5TLC63B0JXeWjzj0WBJX0WhETPL0RVGK15enSJ3h+X5aV+WaBLxLfy3YCrizcXuicBXJEc+L5WRYWxdBFBCpqgXsVgKsMC3wA+AlAgWM5VpPyBGd1yR2HHvDBS0RShXBJbQs1npSnJykbqps5XHT/bNnz/ThIOgjYWCgT/MznA+X1yyaWtqS+XYBm6mKvpURguRR5LC8YdUi5Gw0UfLaCJZxXCStxWKMv+WOFYBXt7KxLpAgMWIK8l9RK+hXK0OGnXaSsE4+oUXMFMeL5Kyt98zkpXvdIhWuEchWhhaBXAeTpXPyxhXJK4ZXn+sZWFFdQZJbWFAIoFFA7bnR1O4tgtmDi1Bvvn8RdCai8CoJoAioANBfK6lB1AOHdJVDBRs/HQAYKJrcBoENBooLdz8QGkASAEyAdSGgAyQOqaNTWgB8QCcBP7QwBcQLQALFCcAbFARTWEqIANTWSAcq0OxioIYBfK9pG8KVSBDEGSALFLQBcQGgAcqzlXDEP/BP7X1XYIDSASAPCY0AI+7MtGkABAPiBaABloWq+lX9gPs0GQCQB8QEyAqQMuDcQKIAmQAwA4EKDBcw0yA4TGkBaAMgtVAAwANq3hSGAH00lq75XeqycBQYH5cTaUoAdq2kAyQE9WGAL2KLFFGU4MWkA0gIM1aABJVpq4MANq2SA7q2VBIAGSBSq9joh2LQAGQGkApq/Gm8KQjX+q0yA0gNu0SAADWYBoYg68AIA4TCV1cKfFBoq5DXP6IYg4TLYpQYLsAYBtu1aACcAGAPTXaABjXKIvAgGQLQANTejX+cENX8a7iANMGlWYq4OA4q5QXEq4kxkq6koSaxAAl8Hx7F/oaCzfilWWEUtWDABpylQEgBbAO2JA9LQB1huwArAN4Y6AG+UQRVm0qBPdV1lOEBR3TaLbAPrWS1cdGVa4gARsLEnK0O95La6CLrayTHQ8E5pZYHLoc0DXM3yijMXa5WhQ8KqAvAF7X1ID7W1S0bXXazEB92XVYhVoTMna4bW2qi1htQstAA84gBZYL+VAakbX5Pti9CZs0Jkar6yEhBpzmiEqBMZq/5fylHXwLFgBg62pAM661VEan81Q60uBjo0XWcVtf1JEL+Uq64YTYMMEsXXDDBiIA+BQJJagkreNCW9SW1KeSFAm6wkROiEoBfygkia661VERexBPFh4Aq66XXPIB8UwKgQgDDAXXeqjpAS6yMRfyoHXsLt7WJ621UcLXnWDa4Ggd60qAW6y96MAAfXnoZ4A9gHDw/AIAJUvJpg4eNFRO8Pk16dj9p7Eey4GABbMZ9M90w+RlEPadZhpABgA4eJ69d/jSGWPhEyOmBYkyMb6cOEBu1HGqQKbPKcxDBUzQbSAuhx61fXnfgut267SHc5vsi/oAvww+YmQAbm+8skQShQzFSmbcGShxvKyQPyHDxHcL60kwGbBSSWgUUgn5Th3tazMG+rH/yD0BKAB/X7kMbwJvZOiF0HqRUoMLQx9IX6pvHg3a61PXhBJ5BZ6yfWh8M1KWuQ3XL60o2mUUvWV6/vXPIJQ3hBKNUJ64XXJ63vW2AGXWbMLKoBwBu1SAHPWi62fXtG+o3r64Ih72DPBrG7ghZVIchjjcgBuq+8YaQB96y/ZghUS8+H1MGOC36uZNxKGvn1lJk5UABlp3jD97FG/PWakDPXTjnxJXG3o3qcAY2rG2vWbG3pmN6yT6CEN4GE68xBcALYBD67+VDEPTXVpuqbbFHTX5q49WaQGgBP6G03qDAwAmQEDWqqyIZQYCcAFq6IYTgLEXHq6tNBmoSBaAOVWga/1WmawIALFGjnaAEyA567zMCm/BA7GwNbEfpOSPAKbwVG2Ix6qpa7cmF2R7iIc39cC6x3iM1Ur68p1YcXnWrGlfXOi5OcnNF0I862YhmiFvWi6/s3YGLPRZ2LjQIcQvRV6FB7OQOc2lG5c3PyW+VDhbc3Pyfc2Vmz1w3ysOwXmxPW64oq6Dm44QMaC4QxCHMwDcB4RjcIC3568C2WqaC3XG3c3KgA83SyjC3TG3s3EWx83zOAUxZhMUxZuli300Rc2WrVc38W+C2WqZC3vG4U2uADSg4W+S2pA6ZwagvOxEGGlEUGFQwzmwy2gW0y2QW1wAbm0o3CW5RBiW5y3LGmS23mxS2zODOx56HOwqrTZxGFGK3dmxK2Kisy2uWwS2IW0S2oW14lSWzy2VW3y2MaHAwvmwOQ7W6ORF2Lq3zG21VcW/OYWW7K2TW/K2zW3nXYWwkRXm5PWcA0G7PCNi2i6263oMG+VSuqy35zOy3Hm5G3lW5PXv9qVquLCG3xWzi3JW3i2jW9G3oMLG2SW1y2E26fWStWTTQ25PXw2+Qg3ysY1s2+Qhc24q3nm/634W5u9J9iW3XWxm33W1wAo25622W6a2OW3Lp425a3E24BdAGXnWXW/kRW2xG2s2522Y292242/m3+24W2PC+gcZks23R2wa2pW5sLjW123vWz23oW7O362/VVavlan6vsO3GW6u3M22Y0q28ZAa2722mwAW3EaoTDywQeDU23q3026e222+u2L20LAr2zu3Nhbe37qhMDY5XkCV4Mu2J8GO3y21wA3TR+3EAF+3zW+B3f20cDk2feDH20B2022G3QO8xGJ2/PW5W7AAFW9e2f23O2729zjxxcB2y2+h3325O2c29O2823h292043R0f7iDcXzin2yO2QO6+3x2+e3yO9W3KO7W24O1IX00xVliO2h2hYB63MO163sOz63QWzx2iksBEtsgJ3WO2B32OyJ3N22J3t2zB28QJJ2lWaGjZO19BDW2R3FO1O2t2zO3qO5vWG2+GblWZQtNglp2PADp3K2xx3L21x3cO3W3jO/u26O6JojiYniZLJZ2dO2C3bO5+37O9+3uWzR2B21J3oIpGbRWch3n26h25O6R2O23p2KOwZ2qO+KV8OxPgConWaxTZ5212953Yu5x34u4q2/W052w27YaCRMbrj2/q3tOxl2N2/p3lO4Z2Au/l3A24gHwPQIJBbel2z25l2i61h2cO/53f20G3S3fLbmu2+2+mhV24u1V2qO300uu/V3cAxB68g+F3mOyR2hO1wArTZB3oO3nXmVUl3v9iZGKw9N2T22V2Wu4N3su8N3FWzV2AsiZ2F2zfGYwZt3Su1Z212xB2fO1B2/O6p2MgKt3eO1JY1U3122OzK2su3Z2cu7h2OcI92F24Q9vC+d2X29t232zZ2Pu752vu9+3HO0d3nO3937s5mmSu0D3Lu2e2Fuzd2luxW31O1JXjK6935OzF22u6J2Ou6p3Eu/63xqgYAJqr5WL8NLW/YrLWXgxEt10BLWoAHsgYKBjB64PLXMQKz2mSGlXuGBBVymzYJZzGA1SwAxA6AOsN1AHr7YgDuUGQGT3Ia4z3me/MBWezQBae/QB9AEAA= -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 09 Feb 2026 16:16:16 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"4026:21AE59:E6E5D3:3E314B9:698A084F","x-ratelimit-limit":"5000","x-ratelimit-remaining":"4891","x-ratelimit-reset":"1770655158","x-ratelimit-resource":"core","x-ratelimit-used":"109","x-xss-protection":"0"},"data":""}}

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 19

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (11)
test/compare.test.ts (1)

30-40: ⚠️ Potential issue | 🟠 Major

Include runtime in compare keys to prevent collisions across different runtime environments.

The key composition in buildCompareKey (src/results/compare.ts:17-24) and test expectations (test/compare.test.ts:67-79) omit runtime from the composite key. This causes items with identical model|harness|test|passType from different runtimes to incorrectly match. For example, comparing runs from Ollama against runs from GPT-4 would collide on the same test configuration even though they are from different runtime environments.

Update buildCompareKey to include runtime in the key composition and align test expectations accordingly.

src/schemas/result.schema.ts (1)

141-150: ⚠️ Potential issue | 🔴 Critical

Address breaking change: runtime is now required in MatrixItemResultSchema.

Making runtime mandatory (line 146) will fail validation on older run.json files that lack this field. While schemaVersion exists in the schema, the reader and writer do not implement version gating or migrations. Confirm either:

  1. All legacy run.json files will be regenerated/migrated, or
  2. Add version-aware parsing in src/results/reader.ts to handle pre-runtime results
apps/dashboard/src/components/charts/composite-score-chart.tsx (2)

1-4: ⚠️ Potential issue | 🟡 Minor

Add Exports/Invariants to the file header.
The header documents purpose but omits the required exports/invariants.

✍️ Suggested update
 /**
  * Purpose: Composite score bar chart showing pass rate, tool success, and frontier score.
  * Replaces simple pass rate chart with multi-metric grouped bars.
+ * Exports: CompositeScoreChart
+ * Invariants: Expects MatrixItemResult data; metrics are normalized to a 0–100 scale.
  */

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".


295-358: ⚠️ Potential issue | 🟡 Minor

Add TSDoc for the exported component.
Provide purpose/params/returns/throws for CompositeScoreChart.

✍️ Suggested update
-export function CompositeScoreChart({ items, onDimensionClick }: CompositeScoreChartProps) {
+/**
+ * Purpose: Render composite score charts by model/runtime/harness/test.
+ * `@param` props - Component props.
+ * `@param` props.items - Matrix item results for the run.
+ * `@param` props.onDimensionClick - Optional handler for row clicks by dimension.
+ * `@returns` Composite score chart card element.
+ * `@throws` None.
+ */
+export function CompositeScoreChart({ items, onDimensionClick }: CompositeScoreChartProps) {

As per coding guidelines, "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

apps/dashboard/src/lib/types.ts (2)

1-5: ⚠️ Potential issue | 🟡 Minor

Add Exports/Invariants to the file header.
The header has purpose but is missing exports and invariants.

✍️ Suggested update
 /**
  * Purpose: Dashboard data types mirroring CLI schemas.
  * These should stay in sync with src/schemas/ in the CLI.
  * Source of truth: src/schemas/result.schema.ts, plan.schema.ts, common.schema.ts
+ * Exports: Dashboard schema types and helpers used by the UI.
+ * Invariants: Mirrors CLI schemas; update alongside src/schemas changes.
  */

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".


262-265: ⚠️ Potential issue | 🟡 Minor

Expand isToolSmokeItem TSDoc to include params/returns/throws.
This is an exported function and should include the full doc fields.

✍️ Suggested update
-/** Checks if an item is a tool-smoke test */
-export function isToolSmokeItem(item: { test: string }): boolean {
+/**
+ * Purpose: Checks if an item is a tool-smoke test.
+ * `@param` item - Matrix item containing a test slug.
+ * `@returns` True when the test slug is TOOL_SMOKE_TEST_SLUG.
+ * `@throws` None.
+ */
+export function isToolSmokeItem(item: { test: string }): boolean {

As per coding guidelines, "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

test/stats.test.ts (1)

1-3: ⚠️ Potential issue | 🟡 Minor

Add Exports/Invariants to the file header.
The header currently only states purpose.

✍️ Suggested update
 /**
  * Purpose: Test run statistics calculation and formatting.
+ * Exports: none (test file)
+ * Invariants: Unit tests only; no external I/O or time-based flakiness.
  */

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

src/schemas/plan.schema.ts (1)

1-6: ⚠️ Potential issue | 🟡 Minor

Add Invariants to the file header.
Purpose and exports are present, but invariants are missing.

✍️ Suggested update
 /**
  * Purpose: RunPlan schema capturing the expanded matrix before execution.
  * Exports: MatrixItemSchema, MatrixItem, RunPlanSchema, RunPlan
+ * Invariants: schemaVersion is defined first and mirrors plan.json structure.
  *
  * The plan is written to results/<runId>/plan.json for reproducibility.
  */

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

test/schemas.test.ts (1)

1-3: ⚠️ Potential issue | 🟡 Minor

Add exports/invariants to the file header.

The header lists purpose only; please include exports/invariants (even “Exports: none”).
As per coding guidelines: “Begin every file with a short header documenting purpose, exports, and invariants.”

✏️ Suggested header tweak
 /**
  * Purpose: Test Zod schema validation for config, plan, and result schemas.
+ * Exports: none
+ * Invariants: Tests are deterministic; no network calls.
  */
llm/implementation/harnesses-implementation.md (2)

110-123: ⚠️ Potential issue | 🟡 Minor

Doc example still shows Goose -q, but adapter no longer passes it.

Either update the doc snippet or reintroduce the flag so behavior stays consistent.


196-203: ⚠️ Potential issue | 🟡 Minor

OpenCode CLI example includes --agent build, but adapter doesn’t.

Align the documentation with actual invocation (or add the flag if still required).

🤖 Fix all issues with AI agents
In `@apps/dashboard/src/lib/aggregations-tooling.ts`:
- Around line 85-106: The current logic sets toolSuccessRate to 0 when toolTotal
is 0, penalizing groups that never expect tools; change the fallback to neutral
1.0 by replacing the ternary that computes toolSuccessRate with one that returns
1.0 when toolTotal === 0 (i.e. toolSuccessRate = toolTotal > 0 ? (toolTotal -
toolMissing) / toolTotal : 1.0). Apply the same change to the second occurrence
of this computation (the block around the other mention at lines ~184-201) so
groups with no TOOL_SMOKE_TEST_SLUG/test items are treated as neutral rather
than failing.

In `@llm/implementation/setup-phase-implementation.md`:
- Around line 24-25: Update the stale schema version references in the docs so
they match the code: replace occurrences of "0.2.0" with "0.2.1" wherever the
SCHEMA_VERSION constant is referenced (e.g., in the lines that mention
common.schema.ts and config.schema.ts and the other two occurrences referenced
in the comment); ensure any textual mentions of SCHEMA_VERSION reflect 0.2.1 to
match the actual constant in code.

In `@llm/implementation/vllm-orbstack-setup.md`:
- Around line 100-103: The snippet uses a user-specific absolute path in the cd
command which is not portable; update the markdown example in
vllm-orbstack-setup.md to use a placeholder (e.g., ~/path/to/project,
<project-dir>, or $PROJECT_DIR) or a relative path, and add a brief note telling
readers to replace the placeholder with their own project directory so the
subsequent command (the bun pb invocation) works as copy/paste.

In `@README.md`:
- Around line 115-125: The README example uses a user-specific absolute path (cd
/Users/plebdev/Desktop/code/plebdev-bench); update that line to use a portable
placeholder (e.g., /path/to/plebdev-bench or ${PROJECT_DIR} or ~/<repo>) so the
command block is reusable across machines, keeping the rest of the bun pb
invocation (flags like --runtimes, --harnesses, --vllm-model, etc.) unchanged.

In `@src/harnesses/direct-adapter.ts`:
- Around line 74-81: The code passes process.env.VLLM_API_KEY directly into
generateOpenAiCompat; instead, parse and validate VLLM_API_KEY at module
initialization using Zod (treat env as unknown), export or define a constant
like vllmApiKey and validate it (e.g.,
z.string().nonempty().parse(process.env.VLLM_API_KEY as unknown)); then update
the call inside the "openai-compat" case to use apiKey: vllmApiKey instead of
process.env.VLLM_API_KEY and remove direct env usage elsewhere (refer to
generateOpenAiCompat and the "openai-compat" case to locate the change).

In `@src/harnesses/goose-adapter.ts`:
- Around line 57-65: The tool is using process.cwd() as executionCwd while
solutionPath is in workDir, so files written by Goose may land in the repo root
and be missed; update the code to run Goose with the working directory set to
workDir (i.e., set executionCwd to workDir or pass workDir as the cwd when
spawning/running the tool) wherever executionCwd is used (referencing runId,
workDir, solutionPath, executionCwd, SOLUTION_FILENAME), and apply the same
change to the second invocation block around the later lines (the other
executionCwd usage) so the tool's relative outputs are written into workDir.

In `@src/harnesses/opencode-output.ts`:
- Around line 163-187: The fallback in extractFromToolCall currently manually
unescapes sequences (\\n, \\t, \\\") which can corrupt legitimate code literals;
change the fallback to avoid manual replacements by either returning the raw
matched group or properly decoding it with JSON.parse on a quoted string: after
finding contentMatch[1] in extractFromToolCall, construct a quoted string (e.g.,
`"` + contentMatch[1] + `"`) and pass it to JSON.parse to get correct
unescaping, falling back to returning contentMatch[1] unchanged if JSON.parse
fails; keep the rest of extractFromToolCall (including the call to
extractFromToolCallObject) unchanged.

In `@src/harnesses/opencode-process.ts`:
- Around line 26-33: The JSDoc for the exported function that "forcefully kills
a process and its entire process tree" is missing `@returns` and `@throws` tags;
update the documentation for that function (the one with parameters proc, pid,
log, reason) to include a `@returns` describing the resolved value or void and a
`@throws` describing which errors are thrown (e.g., when killing fails or
process-tree traversal errors occur), and make the same addition for the other
exported function around lines 75–80 so all exported functions include purpose,
`@param`, `@returns`, and `@throws` entries.
- Around line 81-86: The function computeStaleOutputTimeoutMs currently silently
accepts invalid timeoutMs; add a guard at the start of
computeStaleOutputTimeoutMs to validate timeoutMs (check
Number.isFinite(timeoutMs) and timeoutMs > 0) and throw a descriptive RangeError
(or TypeError) for non‑finite or non‑positive inputs so programmer/config errors
surface immediately; keep the rest of the logic using
MAX_STALE_OUTPUT_TIMEOUT_MS and STALE_OUTPUT_TIMEOUT_MS unchanged after the
validation.

In `@src/lib/model-aliases.ts`:
- Around line 68-122: The returned alias map from parseInlineAlias should be
validated with Zod before returning: after constructing the object (the entry
and the final {[aliasName]: entry} map), call ModelAliasMapSchema.safeParse(...)
on that map and, if validation fails, throw a clear Error containing the
validation issues; update parseInlineAlias to use ModelAliasMapSchema.safeParse
on the final ModelAliasMap and return only when validation passes (referencing
parseInlineAlias, ModelAliasMapSchema, and ModelAliasMap to locate the code).

In `@src/runner/index.ts`:
- Around line 151-216: The tool-smoke key (toolSmokeKey) currently uses only
item.harness and item.model, causing tool-smoke failures to incorrectly affect
items on different runtimes; update the key to include item.runtime (e.g.,
`${item.harness}::${item.model}::${item.runtime}`) wherever toolSmokeKey is
created and referenced so toolSmokeStatus entries are scoped per-runtime
(affecting the creation/lookup in the block that computes toolSmokeKey, the
toolSmokeStatus.get/set usage, and any logic relying on that key such as the
skip check with isToolHarness/isToolSmoke and the block that sets the status
after executeItem).

In `@src/runner/item-executor.ts`:
- Around line 101-106: The code is using an unnecessary type assertion on
item.runtime when calling createRuntime; remove the "as RuntimeName" assertion
and fix the typing chain so MatrixItem.runtime is inferred from
MatrixItemSchema/RuntimeNameSchema. Inspect and adjust the types where
MatrixItem is produced (e.g., buildRunPlan → plan.items) and where items are
consumed (executeItem and the createRuntime call) to ensure MatrixItem is
declared as z.infer<typeof MatrixItemSchema> (and that RuntimeName comes from
RuntimeNameSchema) so item.runtime already has type RuntimeName and the
assertion can be dropped.

In `@src/runner/plan-builder.ts`:
- Around line 137-138: The modelCanonicalMap is currently a Map<string,string>
keyed only by model name, causing cross-runtime collisions; change its structure
to be runtime-scoped (either use a Map<string, Map<string,string>> keyed by
runtime -> (modelName -> canonicalName) or use a composite key like
`${runtime}:${modelName}`) and update all usages that set/get entries and
iterate it (references: modelCanonicalMap declarations and all code blocks
interacting with it at the noted spots). Ensure functions that resolve aliases
(alias resolution logic around the modelCanonicalMap uses) pass and use the
runtime identifier when reading/writing the map so alias metadata is attributed
per-runtime.

In `@src/runtimes/index.ts`:
- Around line 1-7: Add an "Invariants" section to the top-of-file header
documenting the file-level guarantees: state that createRuntime(name:
RuntimeName) returns a Runtime whose apiFormat (or equivalent property) matches
the provided name and that createRuntime throws for unknown names; document that
discoverRuntimes() returns the list of available RuntimeName values present on
the system and isRuntimeAvailable(name) returns a boolean indicating presence;
include any type invariants for Runtime and RuntimeName (e.g., RuntimeName is
the canonical set of supported names, Runtime instances conform to the Runtime
interface). Reference createRuntime, discoverRuntimes, isRuntimeAvailable,
Runtime, and RuntimeName in the invariants text.
- Around line 17-52: The createRuntime function uses process.env.VLLM_API_KEY
directly when creating the vLLM runtime; validate and parse this environment
variable with Zod first (similar to src/harnesses/opencode-config.ts) before
passing it to createVllmRuntime: import z from "zod", define a simple schema for
the optional/required VLLM_API_KEY, parse/process.env to get a typed apiKey, and
then pass that validated apiKey into createVllmRuntime (referencing
createRuntime and createVllmRuntime so the change is localized).

In `@src/runtimes/vllm-lifecycle.ts`:
- Around line 111-130: The vLLM readiness loop currently casts the /v1/models
response with "as" which is unsafe; create a Zod schema (e.g., ModelsResponse =
z.object({ data: z.array(z.object({ id: z.string().optional() })).optional() }))
and use ModelsResponse.safeParse on the fetched JSON before mapping ids in the
function that polls using vllmBaseUrl, managed.startupTimeoutMs and
READY_POLL_MS; if validation fails, log the validation error with log.debug or
log.warn and continue the poll (do not throw), otherwise extract ids from the
parsed data and keep the existing readiness checks and logging.

In `@src/schemas/common.schema.ts`:
- Around line 11-20: The runtime names and type are duplicated; remove the local
definitions in src/runtimes/runtime.ts and import the canonical runtimeNames
array and RuntimeName type from src/schemas/common.schema.ts (use
RuntimeNameSchema if needed for runtime validation). Replace any local
RUNTIME_NAMES or typeof-based RuntimeName declarations with the imported
runtimeNames (or create a small alias const RUNTIME_NAMES = runtimeNames as
const if external code expects that identifier) and update all references to use
the imported RuntimeName type and runtimeNames array to ensure a single source
of truth.

In `@src/schemas/config.schema.ts`:
- Around line 11-52: The BenchConfigSchema's runtimes array currently uses
z.array(z.string()) allowing any string; update it to import RuntimeNameSchema
from common.schema.js and use z.array(RuntimeNameSchema).default([]) so each
item is validated against the existing runtime name rules; modify the import
line to include RuntimeNameSchema and change the runtimes field in
BenchConfigSchema accordingly (look for BenchConfigSchema and the runtimes
property to apply the fix).

In `@test/ollama-adapter.test.ts`:
- Around line 1-3: Update the file header that currently reads "Purpose: Unit
tests for Ollama runtime and Direct adapter with mocked fetch." to include
Export and Invariant entries (e.g., add "Exports: none" and an "Invariants:"
line such as "Invariants: tests are hermetic and use mocked fetch"); locate the
existing header comment and append these two lines so the top-of-file comment
documents Purpose, Exports, and Invariants per the coding guideline.
🧹 Nitpick comments (14)
apps/dashboard/src/components/compare/compare-table.tsx (1)

22-22: Consider adding TSDoc for exported functions.

The three exported functions (CompareTable, RegressionsTable, ImprovementsTable) lack proper TSDoc documentation. As per coding guidelines: "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws."

📝 Example TSDoc for CompareTable
+/**
+ * Displays a comparison table of matched benchmark items with deltas.
+ * `@param` props.items - Array of matched items to compare
+ * `@param` props.showOnlyChanges - When true, filters to show only items with changes
+ */
 export function CompareTable({ items, showOnlyChanges = false }: CompareTableProps) {

Also applies to: 134-134, 175-175

results/20260208-122510-cb6911/plan.json (1)

506-512: Verify if this results file should be committed.

According to the project rules, results/ is runtime output and should not be committed by default. If this is intentionally included as a fixture or example, consider moving it to a fixtures directory or documenting why it's committed.

Additionally, the "models": 2 count may be misleading since both runtimes use the same logical model (via modelAlias: "qwen2.5-14b"). The count reflects unique model field values, not unique aliases. Consider clarifying this distinction in documentation or renaming to uniqueModelStrings.

src/harnesses/opencode-process.ts (1)

56-64: Consider centralizing process execution in src/lib/exec.ts.

This keeps process orchestration consistent with the repo’s execution conventions and reduces duplication.

Based on learnings: “Put process execution logic in src/lib/exec.ts.”

apps/dashboard/src/components/run-detail/item-detail-dialog.tsx (1)

50-52: Consider a fallback label for missing runtime.

Line 51 now renders item.runtime. If older results without a runtime are still viewable, this will show “undefined · …”. A small fallback avoids a rough UX.

Suggested tweak
-            {item.runtime} · {item.model} via {item.harness}
+            {(item.runtime ?? "unknown runtime")} · {item.model} via {item.harness}
apps/dashboard/src/components/run-detail/run-detail-page.tsx (1)

144-146: Optional fallback for legacy plan summaries.

If older plan.json files don’t include these new counts, this will render undefined. A small guard keeps the UI clean.

Suggested tweak
-              {plan.summary.runtimes} runtimes · {plan.summary.harnesses} harnesses · {plan.summary.tests} tests
+              {(plan.summary.runtimes ?? 0)} runtimes · {(plan.summary.harnesses ?? 0)} harnesses · {(plan.summary.tests ?? 0)} tests
AGENTS.md (1)

53-54: Documentation should list all supported runtimes.

Line 53 mentions only "Ollama" as a runtime backend, but the PR introduces vLLM as well (per runtimeNames = ["ollama", "vllm"] in common.schema.ts).

📝 Suggested documentation update
-- `src/runtimes/` — runtime adapters (inference backends: Ollama)
+- `src/runtimes/` — runtime adapters (inference backends: Ollama, vLLM)
src/runtimes/ollama-runtime.ts (2)

99-109: Consider adding Zod validation for HTTP response.

The HTTP response is cast with a type assertion rather than validated with Zod. Per coding guidelines, boundary inputs (including HTTP responses) should be parsed with Zod. This would provide runtime safety if the Ollama API changes.

♻️ Proposed Zod validation
+const OllamaTagsResponseSchema = z.object({
+	models: z.array(z.object({
+		name: z.string(),
+		size: z.number().optional(),
+		modified_at: z.string().optional(),
+		digest: z.string().optional(),
+	})),
+});
+
 async listModels(): Promise<string[]> {
 	const response = await fetchWithTimeout(
 		`${baseUrl}/api/tags`,
 		defaultTimeoutMs,
 	);
 
 	if (!response.ok) {
 		throw new Error(
 			`Failed to list models: ${response.status} ${response.statusText}`,
 		);
 	}
 
-	const data = (await response.json()) as {
-		models: Array<{
-			name: string;
-			size: number;
-			modified_at: string;
-			digest: string;
-		}>;
-	};
+	const raw: unknown = await response.json();
+	const data = OllamaTagsResponseSchema.parse(raw);
 
 	return data.models.map((m) => m.name);
 },

As per coding guidelines: "Treat all boundary inputs (CLI args, env, JSON files, HTTP responses) as 'unknown' and parse immediately with Zod".


128-154: Consider adding Zod validation for model info response.

Similar to listModels(), the /api/show response should be validated with Zod for runtime safety.

♻️ Proposed Zod validation
+const OllamaShowResponseSchema = z.object({
+	details: z.object({
+		parameter_size: z.string().optional(),
+	}).optional(),
+	model_info: z.object({
+		"general.parameter_count": z.number().optional(),
+	}).optional(),
+}).passthrough();
+
 async getModelInfo(model: string): Promise<ModelInfo> {
 	// ... fetch code ...
 
-	const data = (await response.json()) as {
-		details?: {
-			parameter_size?: string;
-		};
-		model_info?: {
-			"general.parameter_count"?: number;
-		};
-	};
+	const raw: unknown = await response.json();
+	const data = OllamaShowResponseSchema.parse(raw);
 
 	// ... rest of parsing logic ...
 }

As per coding guidelines: "Validate at boundaries with Zod and pass typed data inward".

src/schemas/config.schema.ts (1)

20-41: Make managedVllm.model required only when enabled.

Right now model is always required even if enabled is false. Consider optional + refine to reduce config friction.

♻️ Suggested refactor
 export const ManagedVllmSchema = z.object({
 	/** Enable managed vLLM lifecycle for a single run. */
 	enabled: z.boolean().default(false),
 
 	/** The model to serve in vLLM (sets VLLM_MODEL for docker compose). */
-	model: z.string().min(1),
+	model: z.string().min(1).optional(),
 ...
-});
+}).refine((cfg) => !cfg.enabled || !!cfg.model, {
+	message: "model is required when enabled",
+	path: ["model"],
+});
src/runtimes/vllm-runtime.ts (1)

180-191: Consider validating the OpenAI-compatible response with Zod.

The response from /v1/models is cast directly to a typed object without validation. Per coding guidelines, boundary inputs (HTTP responses) should be parsed with Zod.

♻️ Suggested validation schema
+const OpenAIModelsResponseSchema = z.object({
+	data: z.array(
+		z.object({
+			id: z.string(),
+			object: z.string().optional(),
+			created: z.number().optional(),
+			owned_by: z.string().optional(),
+		}).passthrough()
+	),
+});

// In listModels():
-			const data = (await response.json()) as {
-				data: Array<{
-					id: string;
-					object: string;
-					created?: number;
-					owned_by?: string;
-				}>;
-			};
+			const json = await response.json() as unknown;
+			const data = OpenAIModelsResponseSchema.parse(json);

As per coding guidelines: "Treat all boundary inputs (CLI args, env, JSON files, HTTP responses) as 'unknown' and parse immediately with Zod".

src/runtimes/discovery.ts (1)

1-8: File header could include invariants section.

The header documents purpose and exports but omits invariants. Consider adding a brief invariants note (e.g., "Discovery checks are sequential and short-circuit on first reachable endpoint").

src/harnesses/goose-output.ts (1)

126-155: Inconsistent indentation in extractFromToolCall.

The code has mixed indentation levels that reduce readability. Lines 128, 151, and the closing braces don't align with their logical blocks.

♻️ Suggested formatting fix
 	if (typeof parsed !== "object" || parsed === null) {
 		return null;
-		}
+	}

-		const obj = parsed as Record<string, unknown>;
+	const obj = parsed as Record<string, unknown>;
 	// ... rest of function with consistent indentation
apps/dashboard/src/lib/aggregations-core.ts (2)

127-143: Function name may cause confusion.

The function groupByModelHarness actually groups by runtime / model / harness (three dimensions), but the name suggests only model and harness. Consider renaming to groupByRuntimeModelHarness for clarity.

✏️ Suggested rename
-/**
- * Groups items by combined runtime + model + harness name.
- *
- * `@param` items - Matrix items
- * `@returns` Map keyed by `"runtime / model / harness"`
- */
-export function groupByModelHarness(
+/**
+ * Groups items by combined runtime + model + harness name.
+ *
+ * `@param` items - Matrix items
+ * `@returns` Map keyed by `"runtime / model / harness"`
+ */
+export function groupByRuntimeModelHarness(
   items: MatrixItemResult[]
 ): Map<string, MatrixItemResult[]> {

200-215: Spread operator with Math.min/max has size limits.

Using Math.min(...scores) can cause stack overflow for very large arrays (>100k items). For typical benchmark sizes this is fine, but if runs scale significantly, consider using a reduce-based approach.

♻️ More robust min/max calculation
   if (scores.length === 0) return null;

   const sum = scores.reduce((a, b) => a + b, 0);
+  const minScore = scores.reduce((a, b) => Math.min(a, b), Infinity);
+  const maxScore = scores.reduce((a, b) => Math.max(a, b), -Infinity);

   return {
     avgScore: sum / scores.length,
-    minScore: Math.min(...scores),
-    maxScore: Math.max(...scores),
+    minScore,
+    maxScore,
     count: scores.length,
   };

Comment thread apps/dashboard/src/lib/aggregations-tooling.ts Outdated
Comment thread llm/implementation/setup-phase-implementation.md Outdated
Comment thread llm/implementation/vllm-orbstack-setup.md
Comment thread README.md Outdated
Comment thread src/harnesses/direct-adapter.ts
Comment thread src/runtimes/index.ts Outdated
Comment thread src/runtimes/vllm-lifecycle.ts
Comment thread src/schemas/common.schema.ts
Comment thread src/schemas/config.schema.ts Outdated
Comment thread test/ollama-adapter.test.ts
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 9, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: failure by coderabbit.ai -->\n\n> [!CAUTION]\n> ## Review failed\n> \n> Failed to post review comments\n\n<!-- end of auto-generated comment: failure by coderabbit.ai -->\n\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds first-class runtimes (ollama, vllm), expands the benchmark matrix to runtime × harness × model × test × passType, introduces runtime discovery/clients/adapters, model-aliasing, schema bump to 0.2.x, major runner/CLI/harness refactors, dashboard runtime views/aggregations, tests, and vLLM Docker artifacts.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Docs & Project Layout** <br> `AGENTS.md`, `CLAUDE.md`, `README.md`, `llm/...`, `llm/implementation/...`, `llm/project/...`|Introduce runtimes concept, update matrix and MVP docs, add multi-runtime implementation notes and vLLM setup docs; adjust examples and project layout.|\n|**Runtime Core** <br> `src/runtimes/runtime.ts`, `src/runtimes/ollama-runtime.ts`, `src/runtimes/vllm-runtime.ts`, `src/runtimes/discovery.ts`, `src/runtimes/index.ts`|New Runtime abstraction, Ollama/vLLM runtime implementations, discovery APIs, createRuntime factory, and runtime config/types.|\n|**Harnesses & Adapters** <br> `src/harnesses/harness.ts`, `src/harnesses/index.ts`, `src/harnesses/direct-adapter.ts`, `src/harnesses/goose-adapter.ts`, `src/harnesses/opencode-adapter.ts`, `src/harnesses/discovery.ts`, (removed) `src/harnesses/ollama-adapter.ts`|Refactor harness contract to be runtime-aware; add direct/goose/opencode adapters; remove ollama adapter; change discovery signatures and add compatibility helpers.|\n|**OpenCode / Goose Helpers** <br> `src/harnesses/opencode-*`, `src/harnesses/goose-output.ts`, `src/harnesses/goose-openai.ts`, `src/harnesses/opencode-model.ts`|New OpenCode config/env builders, process helpers, and robust Goose/OpenCode output normalization and OpenAI base-path/model-key utilities.|\n|**Runner & CLI** <br> `src/runner/plan-builder.ts`, `src/runner/item-executor.ts`, `src/runner/index.ts`, `src/cli/run-command.ts`|Plan builder now discovers runtimes and per-runtime models; executeItem and runner wired to runtimeConfig; CLI adds runtimes, vllm URL, model-alias and vLLM lifecycle options.|\n|**Model Alias & Model Data** <br> `src/lib/model-aliases.ts`, `models.json`, `models.example.json`|New model-alias parsing/loading/merging and runtime-aware model resolution; add model mapping files.|\n|**HTTP Clients** <br> `src/lib/ollama-client.ts`, `src/lib/openai-compat-client.ts`|Add reusable Ollama and OpenAI-compatible clients with streaming/SSE parsing, timeouts and token extraction.|\n|**Schemas** <br> `src/schemas/common.schema.ts`, `src/schemas/config.schema.ts`, `src/schemas/plan.schema.ts`, `src/schemas/result.schema.ts`, `src/schemas/model-alias.schema.ts`, `src/schemas/index.ts`|Schema bump (0.2.x), add RuntimeName schema, add runtime and modelAlias fields, vllmBaseUrl and managed vLLM schema, and model-alias schemas/exports.|\n|**Dashboard & Aggregations** <br> `apps/dashboard/src/lib/aggregations-core.ts`, `apps/dashboard/src/lib/aggregations-tooling.ts`, `apps/dashboard/src/lib/aggregations-compare.ts`, `apps/dashboard/src/lib/aggregations.ts`, `apps/dashboard/src/lib/types.ts`, `apps/dashboard/src/lib/tooltip-content.ts`|Split aggregations into core/tooling/compare, add groupByRuntime and runtime-aware metrics; update re-exports and types to include runtime/modelAlias.|\n|**Dashboard UI** <br> `apps/dashboard/src/components/.../composite-score-chart.tsx`, `apps/dashboard/src/components/compare/compare-table.tsx`, `apps/dashboard/src/components/run-detail/*`|Add runtime column and \"By Runtime\" tabs; extend dimension types/labels/callbacks; show runtime in run details and lists.|\n|**Docker & vLLM Local Setup** <br> `docker/vllm/docker-compose.yml`, `docker/vllm/README.md`, `llm/implementation/vllm-orbstack-setup.md`|Add vLLM Docker Compose for CPU/arm64 and documentation for local vLLM/OrbStack setup and managed lifecycle.|\n|**Package, Tests & Results** <br> `package.json`, `test/*`, `results/*`|Add npm scripts for runtime flows, update tests for schemas and runtime/harness changes, and include multi-runtime run/plan JSON results.|\n\n## Sequence Diagram(s)\n\n```mermaid\nsequenceDiagram\n    participant CLI as CLI\n    participant Plan as PlanBuilder\n    participant Discovery as RuntimeDiscovery\n    participant Runtime as Runtime (Ollama / vLLM)\n    participant Matrix as MatrixExpander\n    participant Exec as ItemExecutor\n    participant Harness as HarnessAdapter\n    participant Dashboard as Dashboard\n\n    CLI->>Plan: buildRunPlan(config)\n    activate Plan\n    Plan->>Discovery: discoverRuntimes(config)\n    Discovery->>Runtime: ping(baseUrl)\n    Runtime-->>Discovery: available?\n    Discovery-->>Plan: runtimes[]\n    loop per runtime\n      Plan->>Runtime: listModels()\n      Runtime-->>Plan: models[]\n    end\n    Plan->>Matrix: expand(runtimes,harnesses,models,tests)\n    Matrix-->>Plan: RunPlan(items include runtime)\n    deactivate Plan\n\n    loop per item\n      CLI->>Exec: executeItem(item, runtimeConfig)\n      Exec->>Runtime: createRuntime(item.runtime)\n      Runtime-->>Exec: runtimeClient\n      Exec->>Harness: createHarness(item.harness)\n      Harness-->>Exec: harnessInstance\n      Exec->>Harness: generate({runtime,model,prompt,timeout})\n      Harness->>Runtime: call runtime endpoints\n      Runtime-->>Harness: responses\n      Harness-->>Exec: result\n      Exec-->>CLI: MatrixItemResult (with runtime)\n    end\n\n    CLI->>Dashboard: upload results\n    Dashboard->>Dashboard: groupByRuntime() / compute metrics\n    Dashboard-->>User: render runtime views\n```\n\n## Estimated code review effort\n\n🎯 5 (Critical) | ⏱️ ~120 minutes\n\n## Possibly related PRs\n\n- AustinKelsay/plebdev-bench#4 — overlaps schema/result-shape and failure fields that interact with MatrixItemResult/RunResult changes.  \n- AustinKelsay/plebdev-bench#5 — overlaps multi-runtime support and dashboard aggregation refactors (aggregations split and runtime grouping).\n\n## Poem\n\n> 🐰 I hopped from Ollama to vLLM blue,  \n> I carried runtimes, harnesses, and a plan anew.  \n> I mapped aliases, built runs that expand—  \n> Five dimensions now stretch across the land.  \n> Hop, hop — a rabbit's cheer for the runtime brand!\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 2 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 inconclusive)</summary>\n\n|  Check name | Status         | Explanation                                                                                                                                                                            | Resolution                                                                                                                                                                                                   |\n| :---------: | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Title check | ❓ Inconclusive | The title 'Feature/multi runtime' is vague and overly generic; it uses non-descriptive naming that doesn't clearly convey the main scope or deliverables of the substantial changeset. | Consider using a more descriptive title that summarizes the primary change, such as 'Add multi-runtime support (Ollama and vLLM) with runtime abstraction layer' or similar to better communicate the scope. |\n\n</details>\n<details>\n<summary>✅ Passed checks (2 passed)</summary>\n\n|     Check name     | Status   | Explanation                                                                         |\n| :----------------: | :------- | :---------------------------------------------------------------------------------- |\n|  Description Check | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                         |\n| Docstring Coverage | ✅ Passed | Docstring coverage is 89.01% which is sufficient. The required threshold is 80.00%. |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing touches</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> 📝 Generate docstrings\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"07f1e7d6-8a8e-4e23-9900-8731c2c87f58\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Post copyable unit tests in a comment\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Commit unit tests in branch `feature/multi-runtime`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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 -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 09 Feb 2026 16:17:38 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"A07F:2CF581:E0C299:3C766FF:698A08A0","x-ratelimit-limit":"5000","x-ratelimit-remaining":"4881","x-ratelimit-reset":"1770655158","x-ratelimit-resource":"core","x-ratelimit-used":"119","x-xss-protection":"0"},"data":""}}

3 similar comments
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 9, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: failure by coderabbit.ai -->\n\n> [!CAUTION]\n> ## Review failed\n> \n> Failed to post review comments\n\n<!-- end of auto-generated comment: failure by coderabbit.ai -->\n\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds first-class runtimes (ollama, vllm), expands the benchmark matrix to runtime × harness × model × test × passType, introduces runtime discovery/clients/adapters, model-aliasing, schema bump to 0.2.x, major runner/CLI/harness refactors, dashboard runtime views/aggregations, tests, and vLLM Docker artifacts.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Docs & Project Layout** <br> `AGENTS.md`, `CLAUDE.md`, `README.md`, `llm/...`, `llm/implementation/...`, `llm/project/...`|Introduce runtimes concept, update matrix and MVP docs, add multi-runtime implementation notes and vLLM setup docs; adjust examples and project layout.|\n|**Runtime Core** <br> `src/runtimes/runtime.ts`, `src/runtimes/ollama-runtime.ts`, `src/runtimes/vllm-runtime.ts`, `src/runtimes/discovery.ts`, `src/runtimes/index.ts`|New Runtime abstraction, Ollama/vLLM runtime implementations, discovery APIs, createRuntime factory, and runtime config/types.|\n|**Harnesses & Adapters** <br> `src/harnesses/harness.ts`, `src/harnesses/index.ts`, `src/harnesses/direct-adapter.ts`, `src/harnesses/goose-adapter.ts`, `src/harnesses/opencode-adapter.ts`, `src/harnesses/discovery.ts`, (removed) `src/harnesses/ollama-adapter.ts`|Refactor harness contract to be runtime-aware; add direct/goose/opencode adapters; remove ollama adapter; change discovery signatures and add compatibility helpers.|\n|**OpenCode / Goose Helpers** <br> `src/harnesses/opencode-*`, `src/harnesses/goose-output.ts`, `src/harnesses/goose-openai.ts`, `src/harnesses/opencode-model.ts`|New OpenCode config/env builders, process helpers, and robust Goose/OpenCode output normalization and OpenAI base-path/model-key utilities.|\n|**Runner & CLI** <br> `src/runner/plan-builder.ts`, `src/runner/item-executor.ts`, `src/runner/index.ts`, `src/cli/run-command.ts`|Plan builder now discovers runtimes and per-runtime models; executeItem and runner wired to runtimeConfig; CLI adds runtimes, vllm URL, model-alias and vLLM lifecycle options.|\n|**Model Alias & Model Data** <br> `src/lib/model-aliases.ts`, `models.json`, `models.example.json`|New model-alias parsing/loading/merging and runtime-aware model resolution; add model mapping files.|\n|**HTTP Clients** <br> `src/lib/ollama-client.ts`, `src/lib/openai-compat-client.ts`|Add reusable Ollama and OpenAI-compatible clients with streaming/SSE parsing, timeouts and token extraction.|\n|**Schemas** <br> `src/schemas/common.schema.ts`, `src/schemas/config.schema.ts`, `src/schemas/plan.schema.ts`, `src/schemas/result.schema.ts`, `src/schemas/model-alias.schema.ts`, `src/schemas/index.ts`|Schema bump (0.2.x), add RuntimeName schema, add runtime and modelAlias fields, vllmBaseUrl and managed vLLM schema, and model-alias schemas/exports.|\n|**Dashboard & Aggregations** <br> `apps/dashboard/src/lib/aggregations-core.ts`, `apps/dashboard/src/lib/aggregations-tooling.ts`, `apps/dashboard/src/lib/aggregations-compare.ts`, `apps/dashboard/src/lib/aggregations.ts`, `apps/dashboard/src/lib/types.ts`, `apps/dashboard/src/lib/tooltip-content.ts`|Split aggregations into core/tooling/compare, add groupByRuntime and runtime-aware metrics; update re-exports and types to include runtime/modelAlias.|\n|**Dashboard UI** <br> `apps/dashboard/src/components/.../composite-score-chart.tsx`, `apps/dashboard/src/components/compare/compare-table.tsx`, `apps/dashboard/src/components/run-detail/*`|Add runtime column and \"By Runtime\" tabs; extend dimension types/labels/callbacks; show runtime in run details and lists.|\n|**Docker & vLLM Local Setup** <br> `docker/vllm/docker-compose.yml`, `docker/vllm/README.md`, `llm/implementation/vllm-orbstack-setup.md`|Add vLLM Docker Compose for CPU/arm64 and documentation for local vLLM/OrbStack setup and managed lifecycle.|\n|**Package, Tests & Results** <br> `package.json`, `test/*`, `results/*`|Add npm scripts for runtime flows, update tests for schemas and runtime/harness changes, and include multi-runtime run/plan JSON results.|\n\n## Sequence Diagram(s)\n\n```mermaid\nsequenceDiagram\n    participant CLI as CLI\n    participant Plan as PlanBuilder\n    participant Discovery as RuntimeDiscovery\n    participant Runtime as Runtime (Ollama / vLLM)\n    participant Matrix as MatrixExpander\n    participant Exec as ItemExecutor\n    participant Harness as HarnessAdapter\n    participant Dashboard as Dashboard\n\n    CLI->>Plan: buildRunPlan(config)\n    activate Plan\n    Plan->>Discovery: discoverRuntimes(config)\n    Discovery->>Runtime: ping(baseUrl)\n    Runtime-->>Discovery: available?\n    Discovery-->>Plan: runtimes[]\n    loop per runtime\n      Plan->>Runtime: listModels()\n      Runtime-->>Plan: models[]\n    end\n    Plan->>Matrix: expand(runtimes,harnesses,models,tests)\n    Matrix-->>Plan: RunPlan(items include runtime)\n    deactivate Plan\n\n    loop per item\n      CLI->>Exec: executeItem(item, runtimeConfig)\n      Exec->>Runtime: createRuntime(item.runtime)\n      Runtime-->>Exec: runtimeClient\n      Exec->>Harness: createHarness(item.harness)\n      Harness-->>Exec: harnessInstance\n      Exec->>Harness: generate({runtime,model,prompt,timeout})\n      Harness->>Runtime: call runtime endpoints\n      Runtime-->>Harness: responses\n      Harness-->>Exec: result\n      Exec-->>CLI: MatrixItemResult (with runtime)\n    end\n\n    CLI->>Dashboard: upload results\n    Dashboard->>Dashboard: groupByRuntime() / compute metrics\n    Dashboard-->>User: render runtime views\n```\n\n## Estimated code review effort\n\n🎯 5 (Critical) | ⏱️ ~120 minutes\n\n## Possibly related PRs\n\n- AustinKelsay/plebdev-bench#4 — overlaps schema/result-shape and failure fields that interact with MatrixItemResult/RunResult changes.  \n- AustinKelsay/plebdev-bench#5 — overlaps multi-runtime support and dashboard aggregation refactors (aggregations split and runtime grouping).\n\n## Poem\n\n> 🐰 I hopped from Ollama to vLLM blue,  \n> I carried runtimes, harnesses, and a plan anew.  \n> I mapped aliases, built runs that expand—  \n> Five dimensions now stretch across the land.  \n> Hop, hop — a rabbit's cheer for the runtime brand!\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 2 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 inconclusive)</summary>\n\n|  Check name | Status         | Explanation                                                                                                                                                                            | Resolution                                                                                                                                                                                                   |\n| :---------: | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Title check | ❓ Inconclusive | The title 'Feature/multi runtime' is vague and overly generic; it uses non-descriptive naming that doesn't clearly convey the main scope or deliverables of the substantial changeset. | Consider using a more descriptive title that summarizes the primary change, such as 'Add multi-runtime support (Ollama and vLLM) with runtime abstraction layer' or similar to better communicate the scope. |\n\n</details>\n<details>\n<summary>✅ Passed checks (2 passed)</summary>\n\n|     Check name     | Status   | Explanation                                                                         |\n| :----------------: | :------- | :---------------------------------------------------------------------------------- |\n|  Description Check | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                         |\n| Docstring Coverage | ✅ Passed | Docstring coverage is 89.01% which is sufficient. The required threshold is 80.00%. |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing touches</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> 📝 Generate docstrings\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"07f1e7d6-8a8e-4e23-9900-8731c2c87f58\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Post copyable unit tests in a comment\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Commit unit tests in branch `feature/multi-runtime`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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 -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 09 Feb 2026 16:17:38 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"A07F:2CF581:E0C299:3C766FF:698A08A0","x-ratelimit-limit":"5000","x-ratelimit-remaining":"4881","x-ratelimit-reset":"1770655158","x-ratelimit-resource":"core","x-ratelimit-used":"119","x-xss-protection":"0"},"data":""}}

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 9, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: failure by coderabbit.ai -->\n\n> [!CAUTION]\n> ## Review failed\n> \n> Failed to post review comments\n\n<!-- end of auto-generated comment: failure by coderabbit.ai -->\n\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds first-class runtimes (ollama, vllm), expands the benchmark matrix to runtime × harness × model × test × passType, introduces runtime discovery/clients/adapters, model-aliasing, schema bump to 0.2.x, major runner/CLI/harness refactors, dashboard runtime views/aggregations, tests, and vLLM Docker artifacts.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Docs & Project Layout** <br> `AGENTS.md`, `CLAUDE.md`, `README.md`, `llm/...`, `llm/implementation/...`, `llm/project/...`|Introduce runtimes concept, update matrix and MVP docs, add multi-runtime implementation notes and vLLM setup docs; adjust examples and project layout.|\n|**Runtime Core** <br> `src/runtimes/runtime.ts`, `src/runtimes/ollama-runtime.ts`, `src/runtimes/vllm-runtime.ts`, `src/runtimes/discovery.ts`, `src/runtimes/index.ts`|New Runtime abstraction, Ollama/vLLM runtime implementations, discovery APIs, createRuntime factory, and runtime config/types.|\n|**Harnesses & Adapters** <br> `src/harnesses/harness.ts`, `src/harnesses/index.ts`, `src/harnesses/direct-adapter.ts`, `src/harnesses/goose-adapter.ts`, `src/harnesses/opencode-adapter.ts`, `src/harnesses/discovery.ts`, (removed) `src/harnesses/ollama-adapter.ts`|Refactor harness contract to be runtime-aware; add direct/goose/opencode adapters; remove ollama adapter; change discovery signatures and add compatibility helpers.|\n|**OpenCode / Goose Helpers** <br> `src/harnesses/opencode-*`, `src/harnesses/goose-output.ts`, `src/harnesses/goose-openai.ts`, `src/harnesses/opencode-model.ts`|New OpenCode config/env builders, process helpers, and robust Goose/OpenCode output normalization and OpenAI base-path/model-key utilities.|\n|**Runner & CLI** <br> `src/runner/plan-builder.ts`, `src/runner/item-executor.ts`, `src/runner/index.ts`, `src/cli/run-command.ts`|Plan builder now discovers runtimes and per-runtime models; executeItem and runner wired to runtimeConfig; CLI adds runtimes, vllm URL, model-alias and vLLM lifecycle options.|\n|**Model Alias & Model Data** <br> `src/lib/model-aliases.ts`, `models.json`, `models.example.json`|New model-alias parsing/loading/merging and runtime-aware model resolution; add model mapping files.|\n|**HTTP Clients** <br> `src/lib/ollama-client.ts`, `src/lib/openai-compat-client.ts`|Add reusable Ollama and OpenAI-compatible clients with streaming/SSE parsing, timeouts and token extraction.|\n|**Schemas** <br> `src/schemas/common.schema.ts`, `src/schemas/config.schema.ts`, `src/schemas/plan.schema.ts`, `src/schemas/result.schema.ts`, `src/schemas/model-alias.schema.ts`, `src/schemas/index.ts`|Schema bump (0.2.x), add RuntimeName schema, add runtime and modelAlias fields, vllmBaseUrl and managed vLLM schema, and model-alias schemas/exports.|\n|**Dashboard & Aggregations** <br> `apps/dashboard/src/lib/aggregations-core.ts`, `apps/dashboard/src/lib/aggregations-tooling.ts`, `apps/dashboard/src/lib/aggregations-compare.ts`, `apps/dashboard/src/lib/aggregations.ts`, `apps/dashboard/src/lib/types.ts`, `apps/dashboard/src/lib/tooltip-content.ts`|Split aggregations into core/tooling/compare, add groupByRuntime and runtime-aware metrics; update re-exports and types to include runtime/modelAlias.|\n|**Dashboard UI** <br> `apps/dashboard/src/components/.../composite-score-chart.tsx`, `apps/dashboard/src/components/compare/compare-table.tsx`, `apps/dashboard/src/components/run-detail/*`|Add runtime column and \"By Runtime\" tabs; extend dimension types/labels/callbacks; show runtime in run details and lists.|\n|**Docker & vLLM Local Setup** <br> `docker/vllm/docker-compose.yml`, `docker/vllm/README.md`, `llm/implementation/vllm-orbstack-setup.md`|Add vLLM Docker Compose for CPU/arm64 and documentation for local vLLM/OrbStack setup and managed lifecycle.|\n|**Package, Tests & Results** <br> `package.json`, `test/*`, `results/*`|Add npm scripts for runtime flows, update tests for schemas and runtime/harness changes, and include multi-runtime run/plan JSON results.|\n\n## Sequence Diagram(s)\n\n```mermaid\nsequenceDiagram\n    participant CLI as CLI\n    participant Plan as PlanBuilder\n    participant Discovery as RuntimeDiscovery\n    participant Runtime as Runtime (Ollama / vLLM)\n    participant Matrix as MatrixExpander\n    participant Exec as ItemExecutor\n    participant Harness as HarnessAdapter\n    participant Dashboard as Dashboard\n\n    CLI->>Plan: buildRunPlan(config)\n    activate Plan\n    Plan->>Discovery: discoverRuntimes(config)\n    Discovery->>Runtime: ping(baseUrl)\n    Runtime-->>Discovery: available?\n    Discovery-->>Plan: runtimes[]\n    loop per runtime\n      Plan->>Runtime: listModels()\n      Runtime-->>Plan: models[]\n    end\n    Plan->>Matrix: expand(runtimes,harnesses,models,tests)\n    Matrix-->>Plan: RunPlan(items include runtime)\n    deactivate Plan\n\n    loop per item\n      CLI->>Exec: executeItem(item, runtimeConfig)\n      Exec->>Runtime: createRuntime(item.runtime)\n      Runtime-->>Exec: runtimeClient\n      Exec->>Harness: createHarness(item.harness)\n      Harness-->>Exec: harnessInstance\n      Exec->>Harness: generate({runtime,model,prompt,timeout})\n      Harness->>Runtime: call runtime endpoints\n      Runtime-->>Harness: responses\n      Harness-->>Exec: result\n      Exec-->>CLI: MatrixItemResult (with runtime)\n    end\n\n    CLI->>Dashboard: upload results\n    Dashboard->>Dashboard: groupByRuntime() / compute metrics\n    Dashboard-->>User: render runtime views\n```\n\n## Estimated code review effort\n\n🎯 5 (Critical) | ⏱️ ~120 minutes\n\n## Possibly related PRs\n\n- AustinKelsay/plebdev-bench#4 — overlaps schema/result-shape and failure fields that interact with MatrixItemResult/RunResult changes.  \n- AustinKelsay/plebdev-bench#5 — overlaps multi-runtime support and dashboard aggregation refactors (aggregations split and runtime grouping).\n\n## Poem\n\n> 🐰 I hopped from Ollama to vLLM blue,  \n> I carried runtimes, harnesses, and a plan anew.  \n> I mapped aliases, built runs that expand—  \n> Five dimensions now stretch across the land.  \n> Hop, hop — a rabbit's cheer for the runtime brand!\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 2 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 inconclusive)</summary>\n\n|  Check name | Status         | Explanation                                                                                                                                                                            | Resolution                                                                                                                                                                                                   |\n| :---------: | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Title check | ❓ Inconclusive | The title 'Feature/multi runtime' is vague and overly generic; it uses non-descriptive naming that doesn't clearly convey the main scope or deliverables of the substantial changeset. | Consider using a more descriptive title that summarizes the primary change, such as 'Add multi-runtime support (Ollama and vLLM) with runtime abstraction layer' or similar to better communicate the scope. |\n\n</details>\n<details>\n<summary>✅ Passed checks (2 passed)</summary>\n\n|     Check name     | Status   | Explanation                                                                         |\n| :----------------: | :------- | :---------------------------------------------------------------------------------- |\n|  Description Check | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                         |\n| Docstring Coverage | ✅ Passed | Docstring coverage is 89.01% which is sufficient. The required threshold is 80.00%. |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing touches</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> 📝 Generate docstrings\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"07f1e7d6-8a8e-4e23-9900-8731c2c87f58\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Post copyable unit tests in a comment\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Commit unit tests in branch `feature/multi-runtime`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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 -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 09 Feb 2026 16:17:38 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"A07F:2CF581:E0C299:3C766FF:698A08A0","x-ratelimit-limit":"5000","x-ratelimit-remaining":"4881","x-ratelimit-reset":"1770655158","x-ratelimit-resource":"core","x-ratelimit-used":"119","x-xss-protection":"0"},"data":""}}

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 9, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: failure by coderabbit.ai -->\n\n> [!CAUTION]\n> ## Review failed\n> \n> Failed to post review comments\n\n<!-- end of auto-generated comment: failure by coderabbit.ai -->\n\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds first-class runtimes (ollama, vllm), expands the benchmark matrix to runtime × harness × model × test × passType, introduces runtime discovery/clients/adapters, model-aliasing, schema bump to 0.2.x, major runner/CLI/harness refactors, dashboard runtime views/aggregations, tests, and vLLM Docker artifacts.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Docs & Project Layout** <br> `AGENTS.md`, `CLAUDE.md`, `README.md`, `llm/...`, `llm/implementation/...`, `llm/project/...`|Introduce runtimes concept, update matrix and MVP docs, add multi-runtime implementation notes and vLLM setup docs; adjust examples and project layout.|\n|**Runtime Core** <br> `src/runtimes/runtime.ts`, `src/runtimes/ollama-runtime.ts`, `src/runtimes/vllm-runtime.ts`, `src/runtimes/discovery.ts`, `src/runtimes/index.ts`|New Runtime abstraction, Ollama/vLLM runtime implementations, discovery APIs, createRuntime factory, and runtime config/types.|\n|**Harnesses & Adapters** <br> `src/harnesses/harness.ts`, `src/harnesses/index.ts`, `src/harnesses/direct-adapter.ts`, `src/harnesses/goose-adapter.ts`, `src/harnesses/opencode-adapter.ts`, `src/harnesses/discovery.ts`, (removed) `src/harnesses/ollama-adapter.ts`|Refactor harness contract to be runtime-aware; add direct/goose/opencode adapters; remove ollama adapter; change discovery signatures and add compatibility helpers.|\n|**OpenCode / Goose Helpers** <br> `src/harnesses/opencode-*`, `src/harnesses/goose-output.ts`, `src/harnesses/goose-openai.ts`, `src/harnesses/opencode-model.ts`|New OpenCode config/env builders, process helpers, and robust Goose/OpenCode output normalization and OpenAI base-path/model-key utilities.|\n|**Runner & CLI** <br> `src/runner/plan-builder.ts`, `src/runner/item-executor.ts`, `src/runner/index.ts`, `src/cli/run-command.ts`|Plan builder now discovers runtimes and per-runtime models; executeItem and runner wired to runtimeConfig; CLI adds runtimes, vllm URL, model-alias and vLLM lifecycle options.|\n|**Model Alias & Model Data** <br> `src/lib/model-aliases.ts`, `models.json`, `models.example.json`|New model-alias parsing/loading/merging and runtime-aware model resolution; add model mapping files.|\n|**HTTP Clients** <br> `src/lib/ollama-client.ts`, `src/lib/openai-compat-client.ts`|Add reusable Ollama and OpenAI-compatible clients with streaming/SSE parsing, timeouts and token extraction.|\n|**Schemas** <br> `src/schemas/common.schema.ts`, `src/schemas/config.schema.ts`, `src/schemas/plan.schema.ts`, `src/schemas/result.schema.ts`, `src/schemas/model-alias.schema.ts`, `src/schemas/index.ts`|Schema bump (0.2.x), add RuntimeName schema, add runtime and modelAlias fields, vllmBaseUrl and managed vLLM schema, and model-alias schemas/exports.|\n|**Dashboard & Aggregations** <br> `apps/dashboard/src/lib/aggregations-core.ts`, `apps/dashboard/src/lib/aggregations-tooling.ts`, `apps/dashboard/src/lib/aggregations-compare.ts`, `apps/dashboard/src/lib/aggregations.ts`, `apps/dashboard/src/lib/types.ts`, `apps/dashboard/src/lib/tooltip-content.ts`|Split aggregations into core/tooling/compare, add groupByRuntime and runtime-aware metrics; update re-exports and types to include runtime/modelAlias.|\n|**Dashboard UI** <br> `apps/dashboard/src/components/.../composite-score-chart.tsx`, `apps/dashboard/src/components/compare/compare-table.tsx`, `apps/dashboard/src/components/run-detail/*`|Add runtime column and \"By Runtime\" tabs; extend dimension types/labels/callbacks; show runtime in run details and lists.|\n|**Docker & vLLM Local Setup** <br> `docker/vllm/docker-compose.yml`, `docker/vllm/README.md`, `llm/implementation/vllm-orbstack-setup.md`|Add vLLM Docker Compose for CPU/arm64 and documentation for local vLLM/OrbStack setup and managed lifecycle.|\n|**Package, Tests & Results** <br> `package.json`, `test/*`, `results/*`|Add npm scripts for runtime flows, update tests for schemas and runtime/harness changes, and include multi-runtime run/plan JSON results.|\n\n## Sequence Diagram(s)\n\n```mermaid\nsequenceDiagram\n    participant CLI as CLI\n    participant Plan as PlanBuilder\n    participant Discovery as RuntimeDiscovery\n    participant Runtime as Runtime (Ollama / vLLM)\n    participant Matrix as MatrixExpander\n    participant Exec as ItemExecutor\n    participant Harness as HarnessAdapter\n    participant Dashboard as Dashboard\n\n    CLI->>Plan: buildRunPlan(config)\n    activate Plan\n    Plan->>Discovery: discoverRuntimes(config)\n    Discovery->>Runtime: ping(baseUrl)\n    Runtime-->>Discovery: available?\n    Discovery-->>Plan: runtimes[]\n    loop per runtime\n      Plan->>Runtime: listModels()\n      Runtime-->>Plan: models[]\n    end\n    Plan->>Matrix: expand(runtimes,harnesses,models,tests)\n    Matrix-->>Plan: RunPlan(items include runtime)\n    deactivate Plan\n\n    loop per item\n      CLI->>Exec: executeItem(item, runtimeConfig)\n      Exec->>Runtime: createRuntime(item.runtime)\n      Runtime-->>Exec: runtimeClient\n      Exec->>Harness: createHarness(item.harness)\n      Harness-->>Exec: harnessInstance\n      Exec->>Harness: generate({runtime,model,prompt,timeout})\n      Harness->>Runtime: call runtime endpoints\n      Runtime-->>Harness: responses\n      Harness-->>Exec: result\n      Exec-->>CLI: MatrixItemResult (with runtime)\n    end\n\n    CLI->>Dashboard: upload results\n    Dashboard->>Dashboard: groupByRuntime() / compute metrics\n    Dashboard-->>User: render runtime views\n```\n\n## Estimated code review effort\n\n🎯 5 (Critical) | ⏱️ ~120 minutes\n\n## Possibly related PRs\n\n- AustinKelsay/plebdev-bench#4 — overlaps schema/result-shape and failure fields that interact with MatrixItemResult/RunResult changes.  \n- AustinKelsay/plebdev-bench#5 — overlaps multi-runtime support and dashboard aggregation refactors (aggregations split and runtime grouping).\n\n## Poem\n\n> 🐰 I hopped from Ollama to vLLM blue,  \n> I carried runtimes, harnesses, and a plan anew.  \n> I mapped aliases, built runs that expand—  \n> Five dimensions now stretch across the land.  \n> Hop, hop — a rabbit's cheer for the runtime brand!\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 2 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 inconclusive)</summary>\n\n|  Check name | Status         | Explanation                                                                                                                                                                            | Resolution                                                                                                                                                                                                   |\n| :---------: | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Title check | ❓ Inconclusive | The title 'Feature/multi runtime' is vague and overly generic; it uses non-descriptive naming that doesn't clearly convey the main scope or deliverables of the substantial changeset. | Consider using a more descriptive title that summarizes the primary change, such as 'Add multi-runtime support (Ollama and vLLM) with runtime abstraction layer' or similar to better communicate the scope. |\n\n</details>\n<details>\n<summary>✅ Passed checks (2 passed)</summary>\n\n|     Check name     | Status   | Explanation                                                                         |\n| :----------------: | :------- | :---------------------------------------------------------------------------------- |\n|  Description Check | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                         |\n| Docstring Coverage | ✅ Passed | Docstring coverage is 89.01% which is sufficient. The required threshold is 80.00%. |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing touches</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> 📝 Generate docstrings\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"07f1e7d6-8a8e-4e23-9900-8731c2c87f58\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Post copyable unit tests in a comment\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-3872603681\"} -->   Commit unit tests in branch `feature/multi-runtime`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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 -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/AustinKelsay/plebdev-bench/issues/comments/3868405028","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 09 Feb 2026 16:17:38 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"A07F:2CF581:E0C299:3C766FF:698A08A0","x-ratelimit-limit":"5000","x-ratelimit-remaining":"4881","x-ratelimit-reset":"1770655158","x-ratelimit-resource":"core","x-ratelimit-used":"119","x-xss-protection":"0"},"data":""}}

@AustinKelsay
Copy link
Copy Markdown
Owner Author

@CodeRabbit full review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 10, 2026

✅ Actions performed

Full review triggered.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 17

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (11)
src/lib/openrouter-client.ts (1)

114-187: ⚠️ Potential issue | 🟠 Major

Use Zod to validate the OpenRouter response at the boundary.

The parseOpenRouterResponse function manually checks the shape of the HTTP response using isRecord(), Array.isArray(), and type assertions instead of parsing with Zod. This violates the boundary-validation guideline: "Treat all boundary inputs (CLI args, env, JSON files, HTTP responses) as 'unknown' and parse immediately with Zod." Please introduce a Zod schema for OpenRouterResponse and parse responseText with z.parse() immediately after JSON parsing to ensure type safety and catch schema drift.

apps/dashboard/src/components/run-detail/timing-stats.tsx (1)

1-3: ⚠️ Potential issue | 🟡 Minor

Expand the file header to include exports and invariants.

Right now the header only states the purpose. Please add exports and invariants.

Proposed update
 /**
- * Purpose: Timing statistics component showing generation duration metrics.
+ * Purpose: Timing statistics component showing generation duration metrics.
+ * Exports: TimingStats
+ * Invariants: items are validated MatrixItemResult[]; generation.durationMs is in milliseconds.
  */

As per coding guidelines, begin every file with a short header documenting purpose, exports, and invariants.

apps/dashboard/src/components/ui/dialog.tsx (1)

1-123: ⚠️ Potential issue | 🟡 Minor

Move/expand the module header and document exported components.

The header should be the first lines of the file and include purpose/exports/invariants, and exported component functions (DialogOverlay, DialogContent, etc.) need JSDoc with purpose/params/returns/throws.

Example header placement/update
- import { cn } from "@/lib/utils";
- import * as DialogPrimitive from "@radix-ui/react-dialog";
- import { X } from "lucide-react";
- /**
-  * Purpose: Dialog component for modals/drill-downs.
-  * Based on shadcn/ui Dialog (Radix UI) with terminal-native styling.
-  */
- import * as React from "react";
+/**
+ * Purpose: Dialog component primitives for modals/drill-downs.
+ * Exports: Dialog, DialogPortal, DialogOverlay, DialogTrigger, DialogClose,
+ *   DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription
+ * Invariants: UI-only components; no side effects beyond rendering.
+ */
+import { cn } from "@/lib/utils";
+import * as DialogPrimitive from "@radix-ui/react-dialog";
+import { X } from "lucide-react";
+import * as React from "react";

As per coding guidelines: “Every file must start with a descriptive header describing purpose, exports, and invariants” and “All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws).”

apps/dashboard/src/hooks/use-compare.ts (1)

1-26: ⚠️ Potential issue | 🟡 Minor

Align module + hook JSDoc with required fields.

The module header should be first and include exports/invariants, and useCompare needs @returns and @throws.

Proposed doc updates
- import { compareRuns } from "@/lib/aggregations";
- import { fetchRun } from "@/lib/api";
- import type { CompareResult, RunResult } from "@/lib/types";
- /**
-  * Purpose: React hook for comparing two runs.
-  * Exports: useCompare
-  */
- import { useEffect, useState } from "react";
+/**
+ * Purpose: React hook for comparing two runs.
+ * Exports: useCompare, UseCompareResult
+ * Invariants: When runIdA/runIdB are missing, comparison/runA/runB are null and loading is false.
+ */
+import { compareRuns } from "@/lib/aggregations";
+import { fetchRun } from "@/lib/api";
+import type { CompareResult, RunResult } from "@/lib/types";
+import { useEffect, useState } from "react";
...
 /**
  * Fetches two runs and computes their comparison.
  * `@param` runIdA - First run ID (baseline)
  * `@param` runIdB - Second run ID (comparison)
+ * `@returns` Hook state including comparison, runs, loading, and error.
+ * `@throws` Never. Errors are surfaced via the returned error field.
  */

As per coding guidelines: “Every file must start with a descriptive header describing purpose, exports, and invariants” and “All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws).”

apps/dashboard/src/lib/api.ts (2)

12-66: ⚠️ Potential issue | 🟡 Minor

Add @returns to exported function docs.

The exported functions have JSDoc but are missing @returns, which is required for exports.

Example JSDoc fix (apply similarly to all exported functions)
 /**
  * Fetches the list of all available runs from index.json.
  * The index is generated by the build-index script.
  * `@throws` Error if fetch fails or index doesn't exist
+ * `@returns` List of available runs.
  */

As per coding guidelines: “All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws).”


17-56: ⚠️ Potential issue | 🟠 Major

Add Zod validation and Pino logging; complete JSDoc @returns entries.

These fetch functions treat boundary inputs (response.json()) as trusted, but HTTP responses must be validated at parse time. Add Zod schemas to parse and validate the JSON before returning, matching the coding guideline "Validate at boundaries with Zod and pass typed data inward."

Additionally:

  • Replace console.warn (line 22–24) with Pino logger per the "Use Pino for logging" guideline.
  • Add @returns JSDoc entries to fetchRuns(), fetchRun(), and fetchPlan(); fetchRunWithPlan() already has it.
apps/dashboard/src/components/compare/compare-summary.tsx (1)

1-16: ⚠️ Potential issue | 🟡 Minor

Add required module header fields and JSDoc for CompareSummaryCard.

The header should list exports/invariants, and CompareSummaryCard needs JSDoc with purpose/params/returns/throws.

Proposed doc updates
 /**
- * Purpose: Compare summary component showing high-level deltas.
- * Mirrors the CLI `bench compare` summary output.
+ * Purpose: Compare summary component showing high-level deltas.
+ * Exports: CompareSummaryCard
+ * Invariants: Pure presentational component; renders based on CompareSummary only.
+ * Mirrors the CLI `bench compare` summary output.
  */
...
+/**
+ * Renders high-level comparison deltas.
+ * `@param` summary - Aggregated comparison summary.
+ * `@returns` Summary cards for match/status/scoring/frontier deltas.
+ * `@throws` Never. Rendering errors should surface via React error boundaries.
+ */
 export function CompareSummaryCard({ summary }: CompareSummaryCardProps) {

As per coding guidelines: “Every file must start with a descriptive header describing purpose, exports, and invariants” and “All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws).”

apps/dashboard/src/components/ui/tabs.tsx (1)

9-56: ⚠️ Potential issue | 🟡 Minor

Add TSDoc for exported components.

Tabs, TabsList, TabsTrigger, and TabsContent are exported but lack TSDoc with purpose/params/returns/throws.

📘 Example TSDoc (apply to each exported component)
+/**
+ * Purpose: Render the tab list container.
+ * `@param` props - Tabs list props.
+ * `@returns` Tabs list element.
+ * `@throws` Does not throw.
+ */
 const TabsList = React.forwardRef<
 	React.ElementRef<typeof TabsPrimitive.List>,
 	React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>
 >(({ className, ...props }, ref) => (

As per coding guidelines: "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

src/harnesses/discovery.ts (2)

1-11: ⚠️ Potential issue | 🟡 Minor

Add an explicit invariants section to the header.
The header lists purpose/exports but doesn’t document invariants.

✏️ Suggested change
 /**
  * Purpose: Discover available harnesses on the system.
  * Exports: discoverHarnesses, isHarnessAvailable
  *
  * Checks for:
  * - direct: Always available (runtime availability checked separately)
  * - goose: CLI available via `which goose`
  * - opencode: CLI available via `which opencode`
  *
  * Note: Runtime availability (e.g., Ollama) is checked separately.
+ *
+ * Invariants:
+ * - "direct" is always reported available.
+ * - CLI availability is determined solely by `which`.
+ * - Unknown harness names return false.
  */

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".


31-56: ⚠️ Potential issue | 🟡 Minor

Complete @throws in exported JSDoc blocks.
Both exported functions are missing the required @throws entry.

✏️ Suggested change
 /**
  * Check if a specific harness is available.
  *
  * `@param` name - Harness name to check
  * `@returns` true if the harness is available
+ * `@throws` {Error} Never. (CLI lookup errors are handled internally.)
  */
 export async function isHarnessAvailable(name: HarnessName): Promise<boolean> {
 
 /**
  * Discover all available harnesses on the system.
  *
  * `@returns` Array of available harness names
+ * `@throws` {Error} Never. (CLI lookup errors are handled internally.)
  */
 export async function discoverHarnesses(): Promise<HarnessName[]> {

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

src/runner/item-executor.ts (1)

102-126: ⚠️ Potential issue | 🟠 Major

Don’t swallow runtime/harness creation failures.

createRuntime/createHarness throw on unknown names (config/programmer errors). They currently get wrapped as generation failures, which hides misconfiguration. Move these outside the generation try/catch (and let them throw), or explicitly rethrow those errors.

Suggested update
-	try {
-		// Load prompt
-		log.debug("Loading prompt...");
-		const prompt = loadPrompt(item.test, item.passType);
-
-		// Create runtime instance
-		const runtime = createRuntime(item.runtime, {
-			ollamaBaseUrl: runtimeConfig.ollamaBaseUrl,
-			vllmBaseUrl: runtimeConfig.vllmBaseUrl,
-			defaultTimeoutMs: timeoutMs,
-		});
-
-		// Create harness adapter
-		log.debug({ harness: item.harness }, "Creating harness...");
-		const harness = createHarness(item.harness);
+	// Load prompt (throws on missing file)
+	log.debug("Loading prompt...");
+	const prompt = loadPrompt(item.test, item.passType);
+
+	// Create runtime + harness (config errors should throw)
+	const runtime = createRuntime(item.runtime, {
+		ollamaBaseUrl: runtimeConfig.ollamaBaseUrl,
+		vllmBaseUrl: runtimeConfig.vllmBaseUrl,
+		defaultTimeoutMs: timeoutMs,
+	});
+	log.debug({ harness: item.harness }, "Creating harness...");
+	const harness = createHarness(item.harness);
+
+	try {

Based on learnings: "Throw on programmer/config errors; record runtime per-item failures in results instead of silent fallbacks".

🤖 Fix all issues with AI agents
In `@apps/dashboard/scripts/build-index.ts`:
- Around line 11-22: Remove the duplicated RunListItem interface declaration in
build-index.ts and replace it with an import of the shared RunListItem type from
the module that exports it; specifically, delete the local interface block named
RunListItem and add an import like `import { RunListItem } from '...';` pointing
to the shared types module that defines RunListItem so the file uses the single
canonical type export.

In `@apps/dashboard/src/App.tsx`:
- Around line 11-27: The exported React component App is missing the required
TSDoc; add a TSDoc block above the App declaration that documents its purpose
(what the component renders/route layout), any props (none — mark as none or
omit params if none), the return type (JSX.Element), and any possible throws
(none) to satisfy the "All exported functions must have TSDoc/JSDoc" rule;
ensure the TSDoc sits immediately above the function App() definition and covers
purpose, `@returns`, and `@throws` (if applicable).

In `@apps/dashboard/src/components/charts/frontier-eval-scatter.tsx`:
- Around line 26-30: Update the HARNESS_COLORS map so the key matches the
current harness name: replace the legacy "ollama" key with "direct" in the
HARNESS_COLORS constant (the mapping used in frontier-eval-scatter.tsx) so items
with harness: "direct" receive the intended "hsl(212, 100%, 67%)" color instead
of falling back to gray.

In `@apps/dashboard/src/components/charts/pass-rate-chart.tsx`:
- Around line 111-141: The exported PassRateChart component is missing JSDoc and
Zod boundary validation for its items prop; add a TSDoc/JSDoc block describing
purpose, params (PassRateChartProps, items: MatrixItemResult[]), returns and any
thrown errors, then validate the incoming items at the top of PassRateChart
using a Zod schema (e.g., z.array(MatrixItemResultSchema).parse(items)) before
calling computeBreakdown and groupByModel/groupByHarness/groupByTest, or if
validation occurs upstream document that assumption in the JSDoc and skip
re-parse to avoid duplicate work.

In `@apps/dashboard/src/components/charts/timing-distribution.tsx`:
- Around line 92-221: Add a TSDoc block above the exported TimingDistribution
component that documents its purpose, parameters, return value, and any possible
throws; specifically reference the TimingDistribution component and its prop
type TimingDistributionProps, describe that it renders a timing histogram
(including p50/p90 and item count) from items with generation.durationMs,
specify the param {TimingDistributionProps items} and the React.ReactElement
return, and note any error conditions (e.g., none thrown) or warnings if input
is empty.

In `@apps/dashboard/src/components/compare/delta-badge.tsx`:
- Around line 18-49: Add a full TSDoc block to the exported DeltaBadge function
(and any other exported components in this module) describing the component
purpose and including `@param` entries for value, suffix, invert, decimals (and
reference DeltaBadgeProps), an `@returns` describing the rendered JSX.Element, and
an `@throws` if the component can throw (or explicitly state it does not); place
the TSDoc immediately above the DeltaBadge declaration so tools and linters pick
up the documentation.

In `@apps/dashboard/src/components/compare/run-selector.tsx`:
- Around line 22-28: Add a TSDoc/JSDoc block above the exported RunSelector
function describing its purpose and usage, including `@param` entries for runs
(array of run objects), value (selected run id or value), onValueChange
(callback invoked when selection changes), placeholder (optional string), and
label (optional string), an `@returns` stating it returns a ReactElement, and an
`@throws` note if the component can throw (or state that it does not throw);
ensure the doc mentions prop types/shape briefly and matches the
RunSelectorProps signature so tooling and reviewers can verify the contract.

In `@apps/dashboard/src/components/run-detail/timing-stats.tsx`:
- Around line 11-16: The API currently returns unvalidated JSON that flows into
TimingStats (via fetchRun/fetchRunWithPlan → useRunDetail → RunDetailPage →
TimingStats), so add a Zod schema for the RunResult shape (including
MatrixItemResult array) and validate the response at the data boundary
(preferably inside fetchRun or fetchRunWithPlan in api.ts). Define a Zod schema
matching MatrixItemResult and the overall RunResult, import it into the fetch
function, call schema.parse (or safeParse and throw/log a clear error) on
response.json() before returning, and ensure downstream callers
(useRunDetail/RunDetailPage/TimingStats) consume the typed, validated data.

In `@apps/dashboard/src/components/ui/skeleton.tsx`:
- Around line 6-15: Add a full TSDoc block above the exported Skeleton function
(Skeleton(props: React.HTMLAttributes<HTMLDivElement>)) explaining its purpose
(renders a pulsing skeleton div), document each parameter (className and the
rest of props), state the return type (JSX.Element) and note throws behavior
(none) or that it does not throw; include brief usage example or remarks if
helpful and ensure the doc contains `@param`, `@returns`, and `@throws` tags per
guidelines.

In `@apps/dashboard/src/lib/types.ts`:
- Around line 207-214: Change MatchedItem.passType from string to the PassType
union so it matches MatrixItem and prevents invalid values: update the interface
MatchedItem to use passType: PassType (not string). Also add complete JSDoc to
the isToolSmokeItem function (including `@param` for the input parameter type and
`@returns` describing the boolean result) so the function has proper documentation
and type expectations; locate isToolSmokeItem by name and update its JSDoc block
accordingly.

In `@apps/dashboard/src/lib/utils.ts`:
- Around line 12-34: Add full TSDoc blocks to all exported utilities: cn,
formatDuration, formatNumber, formatPercent, formatDate, and formatShortDate;
for each function include a one-line description, `@param` entries describing each
parameter and its type/units (e.g., ms in milliseconds for formatDuration),
`@returns` describing the return value and format, and an `@throws` entry if the
function can throw (or explicitly state it does not throw). Update the existing
comment for formatDuration and add new TSDoc stubs for cn, formatNumber,
formatPercent, formatDate, and formatShortDate following the project pattern
(purpose, `@param`, `@returns`, `@throws`) so all exported functions comply with the
guidelines.

In `@apps/dashboard/src/pages/compare.tsx`:
- Around line 7-8: Add a TSDoc block above the exported ComparePage function
describing its purpose (what the component/page renders), any parameters (none),
the return value (JSX.Element) and any runtime errors it may throw; place the
TSDoc immediately above the ComparePage declaration and reference the rendered
ComparePageContent in the purpose and returns fields so reviewers can see the
mapping between ComparePage and ComparePageContent.

In `@apps/dashboard/src/pages/runs.tsx`:
- Around line 7-8: Add a TSDoc block to the exported RunsPage function that
documents its purpose, return value, and any errors it may throw; locate the
RunsPage export (export function RunsPage()) and add a comment above it
describing that the component renders/returns the RunListPage component
(purpose), specify the JSX.Element/ReactNode it returns (returns), and note any
runtime errors or exceptional conditions it may throw (throws) following the
project's TSDoc format and fields requirement.

In `@apps/dashboard/vite.config.ts`:
- Around line 16-36: The middleware registered in configureServer uses req.url
directly to build a filesystem path (in the block that calls
existsSync/readFileSync), which allows path traversal and mishandles query
strings; fix it by parsing req.url (e.g., new URL(req.url, "http://localhost")
or using url.parse) to strip the query, decodeURIComponent the pathname, then
resolve the target path with path.resolve(resultsDir, sanitizedPathSegment) (or
path.join + path.normalize) and verify the resolved path begins with resultsDir
(e.g., resolvedPath.startsWith(resultsDir)) before calling
existsSync/readFileSync; if the containment check fails, call next() to deny
access.

In `@src/runner/index.ts`:
- Around line 160-164: The startup of managed vLLM (the block checking
managedVllm && runtimeName === "vllm") must be wrapped in a try/catch so a
thrown error doesn't leave the container running; call
startManagedVllm(managedVllm, config.vllmBaseUrl) inside a try, set
managedVllmStarted = true only after it succeeds, and in the catch do a
best‑effort cleanup (e.g., call stopManagedVllm(managedVllm) or the equivalent
Docker-compose teardown), log the error, then rethrow so the outer finally can
run reliably.

In `@src/runtimes/discovery.ts`:
- Around line 32-55: The isRuntimeAvailable function currently returns
runtime.ping() directly which will propagate exceptions and abort discovery;
wrap the ping calls for both createOllamaRuntime and createVllmRuntime in
try/catch blocks inside isRuntimeAvailable so that any errors from
runtime.ping() are caught and the function returns false on error, preserving
existing return behavior on success; reference the isRuntimeAvailable function
and the runtime.ping() calls created via createOllamaRuntime and
createVllmRuntime when making this change.

In `@src/runtimes/ollama-runtime.ts`:
- Around line 87-135: The responses from /api/tags and /api/show in listModels
and getModelInfo must be validated with Zod at the boundary: add inline Zod
schemas for the tags response (an object with a models array of objects
containing name:string, size:number, modified_at:string, digest:string) and for
the show response (object with optional details.parameter_size:string and
optional model_info["general.parameter_count"]:number), then replace the type
assertions on (await response.json()) with schema.parse(await response.json())
calls to validate and coerce the data; on parse failure throw a clear Error
including the endpoint and validation errors so callers of listModels and
getModelInfo (which call fetchWithTimeout/baseUrl) fail fast with actionable
diagnostics.
🟡 Minor comments (37)
apps/dashboard/src/components/ui/card.tsx-35-47 (1)

35-47: ⚠️ Potential issue | 🟡 Minor

Type mismatch: ref type should be HTMLHeadingElement.

The ref type parameter is HTMLParagraphElement (line 36), but the component renders an <h3> element (line 39), which is an HTMLHeadingElement. This inconsistency can cause incorrect type inference when consumers use the ref.

🐛 Proposed fix
 const CardTitle = React.forwardRef<
-	HTMLParagraphElement,
+	HTMLHeadingElement,
 	React.HTMLAttributes<HTMLHeadingElement>
 >(({ className, ...props }, ref) => (
apps/dashboard/src/components/ui/button.tsx-45-55 (1)

45-55: ⚠️ Potential issue | 🟡 Minor

Add TSDoc for exported Button.

Exported functions/components require TSDoc with purpose, params, returns, and throws.
As per coding guidelines, All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws.

💡 Proposed update
-const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
+/**
+ * Purpose: Render a button (or Slot child) with variant/size styling.
+ * `@param` props - Button props including variant, size, and asChild.
+ * `@param` ref - Forwarded ref to the underlying button element.
+ * `@returns` The rendered button or Slot child.
+ * `@throws` {Error} Not expected to throw.
+ */
+const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
apps/dashboard/src/components/ui/button.tsx-1-8 (1)

1-8: ⚠️ Potential issue | 🟡 Minor

Move and expand the file header to the top with exports/invariants.

The header is currently after imports and doesn’t list exports/invariants. Please move it to the top and include those details.
As per coding guidelines, Begin every file with a short header documenting purpose, exports, and invariants.

💡 Proposed update
-import { cn } from "@/lib/utils";
-import { Slot } from "@radix-ui/react-slot";
-import { type VariantProps, cva } from "class-variance-authority";
-/**
- * Purpose: Button component with variants.
- * Based on shadcn/ui Button with terminal-native styling.
- */
-import * as React from "react";
+/**
+ * Purpose: Button component with variants for the dashboard UI.
+ * Exports: buttonVariants, Button, ButtonProps.
+ * Invariants: className is composed via cn(buttonVariants(...)); asChild toggles Slot vs button.
+ */
+import { cn } from "@/lib/utils";
+import { Slot } from "@radix-ui/react-slot";
+import { type VariantProps, cva } from "class-variance-authority";
+import * as React from "react";
src/lib/failure-classifier.ts-26-28 (1)

26-28: ⚠️ Potential issue | 🟡 Minor

Add @throws to exported function docs.

Exported functions are required to document throws behavior. Both functions currently omit @throws.

📝 Suggested doc update
 /**
  * Classifies a generation error message into a failure type.
  *
  * `@param` errorMessage - The error message from harness/execution
  * `@returns` The classified failure type
+ * `@throws` - Does not throw; returns "unknown" for unrecognized patterns.
  *
  * `@example`
  * ```typescript
  * classifyGenerationError("Request timed out after 60s") // => "timeout"
  * classifyGenerationError("Empty output received") // => "harness_error"
  * ```
  */
@@
 /**
  * Classifies a scoring error message into a failure phase.
  *
  * `@param` errorMessage - The error message from scoring
  * `@returns` The classified scoring failure type
+ * `@throws` - Does not throw; returns "unknown" for unrecognized patterns.
  *
  * `@example`
  * ```typescript
  * classifyScoringError("Code extraction failed: no code blocks") // => "extraction"
  * classifyScoringError("Import failed: SyntaxError") // => "import"
  * ```
  */

As per coding guidelines, All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws).

apps/dashboard/src/components/compare/run-selector.tsx-31-33 (1)

31-33: ⚠️ Potential issue | 🟡 Minor

Add aria-labelledby to associate the visual label with the Select component.

The <p> label is purely visual and provides no semantic connection to the Select for screen reader users. Associate the label with the SelectTrigger using aria-labelledby by adding an id to the <p> element and referencing it on the Select or SelectTrigger.

<div className="space-y-1">
  {label && (
    <p id="run-selector-label" className="text-sm font-medium text-foreground-muted">{label}</p>
  )}
  <Select value={value} onValueChange={onValueChange}>
    <SelectTrigger aria-labelledby="run-selector-label" className="w-full md:w-[300px]">
apps/dashboard/src/components/run-detail/timing-stats.tsx-11-16 (1)

11-16: ⚠️ Potential issue | 🟡 Minor

Add TSDoc/JSDoc for the exported TimingStats function.

This exported function needs a doc comment with purpose, params, returns, and throws.

Proposed doc comment
-export function TimingStats({ items }: TimingStatsProps) {
+/**
+ * Renders timing statistics for matrix items.
+ * `@param` items - Validated matrix items used to compute timing stats.
+ * `@returns` A timing stats card or an empty-state card when no data exists.
+ * `@throws` Never.
+ */
+export function TimingStats({ items }: TimingStatsProps) {

As per coding guidelines, all exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws.

src/lib/scorer.ts-88-91 (1)

88-91: ⚠️ Potential issue | 🟡 Minor

Guard test name construction against non‑serializable args.

JSON.stringify(testCase.args) at line 90 is outside the try block (which begins at line 92). If testCase.args contains BigInt values or circular references, JSON.stringify will throw before entering the try-catch, causing the function to abort without returning a result.

🔧 Suggested fix
-const name =
-	testCase.description ||
-	`${testCase.fn}(${JSON.stringify(testCase.args).slice(1, -1)})`;
+let name = testCase.description ?? testCase.fn;
+if (!testCase.description) {
+	try {
+		const args = JSON.stringify(testCase.args).slice(1, -1);
+		name = `${testCase.fn}(${args})`;
+	} catch {
+		name = `${testCase.fn}(...)`;
+	}
+}
llm/project/phases/mvp-phase.md-27-28 (1)

27-28: ⚠️ Potential issue | 🟡 Minor

Include vLLM in the auto-discover runtimes step.

Line 27 mentions only Ollama for runtime discovery, but the PR implements both Ollama and vLLM runtimes. Update for consistency with the implementation:

📝 Suggested fix
-   - auto-discover runtimes (Ollama)
+   - auto-discover runtimes (Ollama, vLLM)
AGENTS.md-52-55 (1)

52-55: ⚠️ Potential issue | 🟡 Minor

Update runtime adapters list to include vLLM.

The runtime bullet still names only Ollama even though vLLM is now supported.

Proposed doc update
- - `src/runtimes/` — runtime adapters (inference backends: Ollama)
+ - `src/runtimes/` — runtime adapters (inference backends: Ollama, vLLM)
llm/project/project-overview.md-38-45 (1)

38-45: ⚠️ Potential issue | 🟡 Minor

Reflect the runtime dimension in later bullets for consistency.

Since runtime is introduced here as a first-class dimension, the “Result Captures” and “Pass rate by dimension” bullets later in the file still omit runtime. Please update those bullets to keep the doc consistent with the 5D matrix.

Proposed doc update
- - Model, harness, test name, pass type (blind/informed)
+ - Runtime, model, harness, test name, pass type (blind/informed)
...
- - Pass rate by dimension (model/harness/test)
+ - Pass rate by dimension (runtime/model/harness/test)
src/harnesses/goose-openai.ts-14-31 (1)

14-31: ⚠️ Potential issue | 🟡 Minor

Add @throws to the exported helper JSDoc.

This export needs an explicit @throws entry (even if it never throws) to satisfy the documentation requirement.

Proposed JSDoc update
 /**
  * Normalizes an OpenAI-compatible base path for Goose.
  *
  * `@param` pathname - URL pathname (e.g., "/v1" or "/v1/chat/completions")
  * `@returns` Normalized base path (e.g., "v1")
+ * `@throws` Never. This helper only normalizes strings.
  */

As per coding guidelines: “All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws).”

src/runtimes/vllm-lifecycle.ts-124-129 (1)

124-129: ⚠️ Potential issue | 🟡 Minor

Add timeout to the readiness fetch call.

The fetch call lacks a timeout. If vLLM becomes unresponsive mid-startup, this could hang indefinitely within each poll iteration.

🛡️ Proposed fix
 		try {
-			const res = await fetch(`${vllmBaseUrl}/v1/models`, { method: "GET" });
+			const res = await fetch(`${vllmBaseUrl}/v1/models`, {
+				method: "GET",
+				signal: AbortSignal.timeout(5000),
+			});
 			if (!res.ok) {
apps/dashboard/src/components/ui/tabs.tsx-1-7 (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Move and expand the file header to include exports/invariants.

The header starts after imports and doesn’t document exports/invariants. Please move it to the top and include those details.

✍️ Suggested header update
-import { cn } from "@/lib/utils";
-import * as TabsPrimitive from "@radix-ui/react-tabs";
-/**
- * Purpose: Tabs component for view switching.
- * Based on shadcn/ui Tabs (Radix UI) with terminal-native styling.
- */
-import * as React from "react";
+/**
+ * Purpose: Tabs component for view switching.
+ * Exports: Tabs, TabsList, TabsTrigger, TabsContent.
+ * Invariants: Uses Radix Tabs primitives with terminal-native styling classes.
+ */
+import { cn } from "@/lib/utils";
+import * as TabsPrimitive from "@radix-ui/react-tabs";
+import * as React from "react";

As per coding guidelines: "Begin every file with a short header documenting purpose, exports, and invariants".

apps/dashboard/src/pages/run.tsx-1-11 (1)

1-11: ⚠️ Potential issue | 🟡 Minor

Add a complete file header (purpose/exports/invariants) at the top.

The header is after imports and omits exports/invariants. Please move it to the top and include those details.

✍️ Suggested header update
-import { PageContainer, PageHeader } from "@/components/layout/page-container";
-import {
-	RunDetailPage,
-	RunDetailPageSkeleton,
-} from "@/components/run-detail/run-detail-page";
-import { useRunDetail } from "@/hooks/use-run-detail";
-/**
- * Purpose: Single run page route component.
- * Displays run details by runId from URL params.
- */
-import { useParams } from "react-router-dom";
+/**
+ * Purpose: Single run page route component.
+ * Exports: RunPage.
+ * Invariants: Renders loading/error states until both run and plan are available.
+ */
+import { PageContainer, PageHeader } from "@/components/layout/page-container";
+import {
+	RunDetailPage,
+	RunDetailPageSkeleton,
+} from "@/components/run-detail/run-detail-page";
+import { useRunDetail } from "@/hooks/use-run-detail";
+import { useParams } from "react-router-dom";

As per coding guidelines: "Begin every file with a short header documenting purpose, exports, and invariants".

apps/dashboard/src/pages/run.tsx-13-34 (1)

13-34: ⚠️ Potential issue | 🟡 Minor

Add TSDoc for RunPage export.

The exported component is missing purpose/returns/throws documentation.

📘 Example TSDoc
+/**
+ * Purpose: Render the run-detail route for the current runId param.
+ * `@returns` Run detail route content.
+ * `@throws` Does not throw.
+ */
 export function RunPage() {

As per coding guidelines: "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

apps/dashboard/src/components/run-list/run-list-page.tsx-1-8 (1)

1-8: ⚠️ Potential issue | 🟡 Minor

Add a complete file header (purpose/exports/invariants) at the top.

The header is after imports and omits exports/invariants. Please move it to the top and include those details.

✍️ Suggested header update
-import { PageContainer, PageHeader } from "@/components/layout/page-container";
-import { Skeleton } from "@/components/ui/skeleton";
-/**
- * Purpose: Run list page component displaying all benchmark runs.
- * Shows a grid of RunCard components sorted by date (newest first).
- */
-import { useRuns } from "@/hooks/use-runs";
-import { RunCard } from "./run-card";
+/**
+ * Purpose: Run list page component displaying all benchmark runs.
+ * Exports: RunListPage.
+ * Invariants: Renders loading skeletons, empty state, or run cards.
+ */
+import { PageContainer, PageHeader } from "@/components/layout/page-container";
+import { Skeleton } from "@/components/ui/skeleton";
+import { useRuns } from "@/hooks/use-runs";
+import { RunCard } from "./run-card";

As per coding guidelines: "Begin every file with a short header documenting purpose, exports, and invariants".

apps/dashboard/src/components/run-list/run-list-page.tsx-12-61 (1)

12-61: ⚠️ Potential issue | 🟡 Minor

Add TSDoc for RunListPage export.

The exported component is missing purpose/returns/throws documentation.

📘 Example TSDoc
+/**
+ * Purpose: Render the run list page with loading and empty states.
+ * `@returns` Run list page content.
+ * `@throws` Does not throw.
+ */
 export function RunListPage() {

As per coding guidelines: "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

apps/dashboard/src/components/ui/table.tsx-1-6 (1)

1-6: ⚠️ Potential issue | 🟡 Minor

Move and expand the file header to include exports/invariants.

The header isn’t at the top and doesn’t document exports/invariants. Please move it above imports and include those details.

✍️ Suggested header update
-import { cn } from "@/lib/utils";
-/**
- * Purpose: Table components for matrix displays.
- * Based on shadcn/ui Table with terminal-native styling.
- */
-import * as React from "react";
+/**
+ * Purpose: Table components for matrix displays.
+ * Exports: Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption.
+ * Invariants: Uses semantic table elements with terminal-native styling classes.
+ */
+import { cn } from "@/lib/utils";
+import * as React from "react";

As per coding guidelines: "Begin every file with a short header documenting purpose, exports, and invariants".

apps/dashboard/src/components/ui/table.tsx-8-120 (1)

8-120: ⚠️ Potential issue | 🟡 Minor

Add TSDoc for exported table components.

All exported components are missing purpose/params/returns/throws documentation.

📘 Example TSDoc (apply to each exported component)
+/**
+ * Purpose: Render a styled table element.
+ * `@param` props - Table element props.
+ * `@returns` Table element.
+ * `@throws` Does not throw.
+ */
 const Table = React.forwardRef<
 	HTMLTableElement,
 	React.HTMLAttributes<HTMLTableElement>
 >(({ className, ...props }, ref) => (

As per coding guidelines: "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

models.example.json-10-13 (1)

10-13: ⚠️ Potential issue | 🟡 Minor

Document HuggingFace access requirement for meta-llama model.

The meta-llama/Llama-3.1-8B-Instruct model is a gated repository on HuggingFace requiring:

  • Accepting the Llama 3.1 Community License Agreement and Acceptable Use Policy
  • A valid HuggingFace account and access token for authentication (via huggingface-cli login or by passing an hf_token)

Consider adding a note in the example file documenting this requirement so users understand the setup steps needed before using this model.

apps/dashboard/src/lib/types.ts-262-265 (1)

262-265: ⚠️ Potential issue | 🟡 Minor

Add full JSDoc tags for exported isToolSmokeItem.

The exported function needs explicit @param/@returns/@throws tags to satisfy the doc rules.

✍️ Suggested update
-/** Checks if an item is a tool-smoke test */
+/**
+ * Checks if an item is a tool-smoke test.
+ *
+ * `@param` item - Item containing the test slug.
+ * `@returns` True when the item is a tool-smoke test.
+ * `@throws` Never throws.
+ */
 export function isToolSmokeItem(item: { test: string }): boolean {
 	return item.test === TOOL_SMOKE_TEST_SLUG;
 }

As per coding guidelines: "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/hooks/use-runs.ts-1-21 (1)

1-21: ⚠️ Potential issue | 🟡 Minor

Move the file header before imports and add full JSDoc tags for useRuns.

The header should be the first thing in the file and include invariants; exported functions also need explicit @returns/@throws tags.

📄 Suggested update
-import { fetchRuns } from "@/lib/api";
-import type { RunListItem } from "@/lib/types";
-/**
- * Purpose: React hook for fetching the list of all runs.
- * Exports: useRuns
- */
-import { useCallback, useEffect, useState } from "react";
+/**
+ * Purpose: React hook for fetching the list of all runs.
+ * Exports: useRuns
+ * Invariants: returns runs sorted by startedAt (desc); refetch triggers a reload.
+ */
+import { fetchRuns } from "@/lib/api";
+import type { RunListItem } from "@/lib/types";
+import { useCallback, useEffect, useState } from "react";
@@
 /**
  * Fetches the list of all available benchmark runs.
  * Returns runs sorted by startedAt descending (newest first).
+ *
+ * `@returns` Runs with loading/error state and a refetch callback.
+ * `@throws` Never throws; errors are surfaced via the `error` state.
  */

As per coding guidelines: "Begin every file with a short header documenting purpose, exports, and invariants" and "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/hooks/use-runs.ts-25-37 (1)

25-37: ⚠️ Potential issue | 🟡 Minor

Add Zod validation for fetchRuns() result at the API boundary.

The fetchRuns() function in api.ts fetches external JSON (/results/index.json) and returns it directly without validation. Create a Zod schema for RunListItem[] and parse the response before returning it. This ensures the hook receives validated data and prevents runtime crashes from malformed or missing fields.

Per coding guidelines: "Validate at boundaries with Zod and pass typed data inward."

apps/dashboard/src/components/compare/compare-page.tsx-24-24 (1)

24-24: ⚠️ Potential issue | 🟡 Minor

Add TSDoc for the exported ComparePageContent.
The exported component is missing the required TSDoc.

✏️ Suggested change
+/**
+ * Renders the compare page content with run selectors and comparison results.
+ *
+ * `@returns` Compare page layout with selectors and result panels.
+ * `@throws` {Error} This component does not throw; errors surface via hook state.
+ */
 export function ComparePageContent() {

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/components/charts/composite-score-chart.tsx-349-352 (1)

349-352: ⚠️ Potential issue | 🟡 Minor

Add full TSDoc for the exported CompositeScoreChart.
The exported component lacks the required TSDoc (purpose/params/returns/throws).

✏️ Suggested change
+/**
+ * Renders the composite score chart tabs for the provided matrix items.
+ *
+ * `@param` items - Matrix item results to aggregate.
+ * `@param` onDimensionClick - Optional handler when a dimension row is clicked.
+ * `@returns` Composite score chart card.
+ * `@throws` {Error} This component does not throw; errors surface via data inputs.
+ */
 export function CompositeScoreChart({
 	items,
 	onDimensionClick,
 }: CompositeScoreChartProps) {

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

src/runtimes/ollama-runtime.ts-61-67 (1)

61-67: ⚠️ Potential issue | 🟡 Minor

Add @throws to the exported factory JSDoc.
The exported createOllamaRuntime docblock is missing a @throws section.

✏️ Suggested change
 /**
  * Creates an Ollama runtime instance.
  *
  * `@param` config - Runtime configuration
  * `@returns` Runtime instance for Ollama
+ * `@throws` {Error} This factory does not throw; runtime methods surface request failures.
  */
 export function createOllamaRuntime(config: OllamaRuntimeConfig): Runtime {

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/components/compare/compare-page.tsx-1-13 (1)

1-13: ⚠️ Potential issue | 🟡 Minor

Move the file header to the top and document exports/invariants.
The header is below imports and doesn’t list exports/invariants. Please move it to the top and include the required sections.

✏️ Suggested change
+/**
+ * Purpose: Compare page component for comparing two benchmark runs.
+ * Exports: ComparePageContent
+ *
+ * Invariants:
+ * - URL params reflect selected runs when both are chosen.
+ * - Comparison UI renders only when both runs are selected.
+ */
 import { PageContainer, PageHeader } from "@/components/layout/page-container";
 // ...
-/**
- * Purpose: Compare page component for comparing two benchmark runs.
- * Provides run selectors and displays comparison results.
- */

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

src/harnesses/direct-adapter.ts-34-42 (1)

34-42: ⚠️ Potential issue | 🟡 Minor

Add a @throws entry to the exported factory JSDoc.
The createDirectAdapter docblock is missing a @throws entry, which the guidelines require even when the factory doesn’t throw.

✏️ Suggested change
 /**
  * Creates a direct harness adapter.
  *
  * The direct adapter always returns true for ping() since availability
  * is determined by the runtime, not the harness.
  *
  * `@returns` Harness instance for direct HTTP communication
+ * `@throws` {Error} This factory does not throw; errors surface from the returned harness methods.
  */
 export function createDirectAdapter(): Harness {

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/components/charts/composite-score-chart.tsx-1-19 (1)

1-19: ⚠️ Potential issue | 🟡 Minor

Move the file header to the top and document exports/invariants.
The header is below imports and doesn’t state exports/invariants. Please place it at the top and include required sections.

✏️ Suggested change
+/**
+ * Purpose: Composite score bar chart showing pass rate, tool success, and frontier score.
+ * Exports: CompositeScoreChart
+ *
+ * Invariants:
+ * - items represent results from a single run matrix.
+ * - Display labels may be truncated; selection uses raw names.
+ */
 import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
 // ...
-/**
- * Purpose: Composite score bar chart showing pass rate, tool success, and frontier score.
- * Replaces simple pass rate chart with multi-metric grouped bars.
- */

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

apps/dashboard/src/components/charts/composite-score-chart.tsx-96-114 (1)

96-114: ⚠️ Potential issue | 🟡 Minor

Separate display label from lookup key to avoid name collision on Y-axis click.

prepareChartData truncates name to fit on the chart, but the Y-axis click handler (lines 270–274) uses this truncated value to find the corresponding data item. When two items share the same first 18 characters, they produce identical truncated names, causing find() to always return the first match and route the second item's clicks incorrectly.

Keep name as the full untruncated value for reliable lookup, and add a separate label field with the truncated display text. Update ClickableYAxisTick and the YAxis configuration to use the label for rendering while passing the full name to the click handler.

🐛 Suggested change
 interface ChartData {
 	name: string;
+	label: string;
 	effectiveScore: number;
 	passRate: number;
 	toolSuccess: number | null;
 	frontier: number | null;
 	// Keep raw data for tooltip
 	raw: CompositeMetrics;
 }
 
 function prepareChartData(metrics: CompositeMetrics[]): ChartData[] {
-	return metrics.map((m) => ({
-		name: m.name.length > 20 ? `${m.name.slice(0, 18)}...` : m.name,
-		effectiveScore: m.effectiveScore * 100,
-		passRate: m.passRate * 100,
-		toolSuccess: m.toolTotal > 0 ? m.toolSuccessRate * 100 : null,
-		frontier: m.frontierAvg !== null ? (m.frontierAvg / 10) * 100 : null,
-		raw: m,
-	}));
+	return metrics.map((m) => {
+		const label = m.name.length > 20 ? `${m.name.slice(0, 18)}...` : m.name;
+		return {
+			name: m.name,
+			label,
+			effectiveScore: m.effectiveScore * 100,
+			passRate: m.passRate * 100,
+			toolSuccess: m.toolTotal > 0 ? m.toolSuccessRate * 100 : null,
+			frontier: m.frontierAvg !== null ? (m.frontierAvg / 10) * 100 : null,
+			raw: m,
+		};
+	});
 }
 
 function ClickableYAxisTick({
 	x,
 	y,
 	payload,
+	label,
 	onClick,
 }: {
 	x: number;
 	y: number;
 	payload: { value: string };
+	label?: string;
 	onClick?: (name: string) => void;
 }) {
 	const isInteractive = Boolean(onClick);
+	const displayLabel = label ?? payload.value;
 
 	const handleActivate = () => {
 		onClick?.(payload.value);
 	};
 
 	// ...
 
 	return (
 		<g
 			transform={`translate(${x},${y})`}
 			onClick={isInteractive ? handleActivate : undefined}
 			onKeyDown={handleKeyDown}
 			role={isInteractive ? "button" : undefined}
 			tabIndex={isInteractive ? 0 : undefined}
-			aria-label={isInteractive ? `Select ${payload.value}` : undefined}
+			aria-label={isInteractive ? `Select ${displayLabel}` : undefined}
 			style={{ cursor: onClick ? "pointer" : "default" }}
 		>
 			<text
 				x={-5}
 				y={0}
 				dy={4}
 				textAnchor="end"
 				fill="hsl(210, 30%, 92%)"
 				fontSize={12}
 				className={onClick ? "hover:fill-amber-400 transition-colors" : ""}
 			>
-				{payload.value}
+				{displayLabel}
 			</text>
 		</g>
 	);
 }
 
 <YAxis
 	// ...
 	tick={(props) => (
 		<ClickableYAxisTick
 			{...props}
-			onClick={
-				onBarClick
-					? (name) => {
-							const item = data.find((d) => d.name === name);
-							if (item) onBarClick(item.raw.name);
-						}
-					: undefined
-			}
+			label={data.find((d) => d.name === props.payload.value)?.label}
+			onClick={onBarClick}
 		/>
 	)}
 />
apps/dashboard/src/components/run-detail/run-detail-page.tsx-1-37 (1)

1-37: ⚠️ Potential issue | 🟡 Minor

Move the header to the top and add JSDoc for exported components.

Both RunDetailPage and RunDetailPageSkeleton should have TSDoc, and the header must be the first content in the file.

Suggested update
-import { BlindVsInformedChart } from "@/components/charts/blind-vs-informed-chart";
+/**
+ * Purpose: Run detail page component displaying a single run's results.
+ * Exports: RunDetailPage, RunDetailPageSkeleton
+ * Invariants: `run` and `plan` are required and already validated.
+ */
+import { BlindVsInformedChart } from "@/components/charts/blind-vs-informed-chart";
@@
-export function RunDetailPage({ run, plan }: RunDetailPageProps) {
+/**
+ * Run detail page.
+ * `@param` props - Run data and plan metadata
+ * `@returns` Rendered run detail page
+ */
+export function RunDetailPage({ run, plan }: RunDetailPageProps) {
@@
-export function RunDetailPageSkeleton() {
+/**
+ * Skeleton for run detail page loading state.
+ * `@returns` Skeleton layout
+ */
+export function RunDetailPageSkeleton() {

As per coding guidelines: "Every file must start with a descriptive header describing purpose, exports, and invariants" and "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

Also applies to: 223-223

apps/dashboard/src/components/run-detail/item-detail-dialog.tsx-1-30 (1)

1-30: ⚠️ Potential issue | 🟡 Minor

Place the file header first and add JSDoc for ItemDetailDialog.

The header should be the first thing in the file and document exports/invariants, and the exported component needs TSDoc.

Suggested update
-import { Badge } from "@/components/ui/badge";
-/**
- * Purpose: Dialog component for displaying detailed information about a matrix item.
- * Shows generation output, scores, and frontier eval reasoning.
- */
+/**
+ * Purpose: Dialog component for displaying detailed information about a matrix item.
+ * Exports: ItemDetailDialog
+ * Invariants: Requires non-null MatrixItemResult when open.
+ */
+import { Badge } from "@/components/ui/badge";
@@
-export function ItemDetailDialog({
+/**
+ * Item detail dialog.
+ * `@param` props - Dialog props and the selected item
+ * `@returns` Dialog UI or null when no item is selected
+ */
+export function ItemDetailDialog({

As per coding guidelines: "Every file must start with a descriptive header describing purpose, exports, and invariants" and "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

apps/dashboard/src/components/run-detail/item-detail-dialog.tsx-31-135 (1)

31-135: ⚠️ Potential issue | 🟡 Minor

Reset showCode when the dialog closes or a new item is selected.

showCode persists across item switches, so a previously expanded code block can appear for a new item unintentionally.

Suggested update
-import { useState } from "react";
+import { useEffect, useState } from "react";
@@
 	const [showCode, setShowCode] = useState(false);
+
+	useEffect(() => {
+		if (!open || !item) setShowCode(false);
+	}, [open, item?.id]);
llm/context/codebase-overview.md-95-101 (1)

95-101: ⚠️ Potential issue | 🟡 Minor

Docs still list only ollama runtime.
The PR adds vLLM as a runtime, but the table + schema description still call out only ollama. Please update these sections to reflect both runtimes.

📘 Suggested doc update
-| `ollama` | HTTP | Local Ollama server at configured URL |
+| `ollama` | HTTP | Local Ollama server at configured URL |
+| `vllm`   | HTTP | vLLM OpenAI-compatible server at configured URL |
 
-Discovery: `discoverRuntimes()` checks if Ollama endpoint is reachable.
+Discovery: `discoverRuntimes()` checks if Ollama and vLLM endpoints are reachable.
-| `RuntimeNameSchema` | common.schema.ts | Valid runtime names ("ollama") |
+| `RuntimeNameSchema` | common.schema.ts | Valid runtime names ("ollama", "vllm") |

Also applies to: 149-150

apps/dashboard/src/components/run-detail/dimension-detail-dialog.tsx-1-9 (1)

1-9: ⚠️ Potential issue | 🟡 Minor

Move the file header above imports.
The header must be the first lines in the file; currently an import precedes it.

✏️ Suggested fix
-import { Badge } from "@/components/ui/badge";
-/**
- * Purpose: Dialog showing detailed breakdown when clicking on a model/harness/test bar.
- * Exports: DimensionDetailDialog, DimensionType
- *
- * Invariants:
- * - `items` is the full run matrix; filtering is done inside the dialog
- * - Tool-smoke is excluded from pass-rate scoring summaries by default
- */
+/**
+ * Purpose: Dialog showing detailed breakdown when clicking on a model/harness/test bar.
+ * Exports: DimensionDetailDialog, DimensionType
+ *
+ * Invariants:
+ * - `items` is the full run matrix; filtering is done inside the dialog
+ * - Tool-smoke is excluded from pass-rate scoring summaries by default
+ */
+import { Badge } from "@/components/ui/badge";

As per coding guidelines: "Begin every file with a short header documenting purpose, exports, and invariants".

src/cli/run-command.ts-93-112 (1)

93-112: ⚠️ Potential issue | 🟡 Minor

Parse alias-related CLI inputs with Zod at the boundary.

modelConfig and modelAlias are CLI boundary inputs used before BenchConfigSchema validation. While the merged result is validated downstream, the input parameters themselves should be parsed with Zod immediately upon entry to ensure type safety and follow the boundary validation principle.

🔧 Suggested approach
+import { z } from "zod";
+
+const AliasOptionsSchema = z.object({
+	modelConfig: z.string().min(1).optional(),
+	modelAlias: z.array(z.string()).optional(),
+});
-			// Build model aliases from file and/or inline definitions
-			let modelAliases: ModelAliasMap = {};
+			const { modelConfig, modelAlias } = AliasOptionsSchema.parse(options);
+			// Build model aliases from file and/or inline definitions
+			let modelAliases: ModelAliasMap = {};
 
-			if (options.modelConfig) {
-				const fileAliases = loadModelAliases(options.modelConfig);
+			if (modelConfig) {
+				const fileAliases = loadModelAliases(modelConfig);
 				modelAliases = mergeAliases(modelAliases, fileAliases);
 				logger.info(
-					{ file: options.modelConfig, count: Object.keys(fileAliases).length },
+					{ file: modelConfig, count: Object.keys(fileAliases).length },
 					"Loaded model aliases from file",
 				);
 			}
 
-			if (options.modelAlias) {
-				const inlineAliases = parseInlineAliases(options.modelAlias);
+			if (modelAlias?.length) {
+				const inlineAliases = parseInlineAliases(modelAlias);
src/harnesses/harness.ts-124-137 (1)

124-137: ⚠️ Potential issue | 🟡 Minor

Document the thrown error in normalizeHarnessName.

This function throws on invalid names, but the JSDoc omits @throws. Add the throws tag to satisfy the exported-function doc requirement.

✍️ Suggested doc fix
 /**
  * Normalizes a harness name, mapping legacy names to current ones.
  * `@param` name - Harness name (may be legacy)
  * `@returns` Normalized harness name
+ * `@throws` {Error} When the name is not a supported harness.
  */
 export function normalizeHarnessName(name: string): HarnessName {

As per coding guidelines: "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

Comment thread apps/dashboard/scripts/build-index.ts Outdated
Comment thread apps/dashboard/src/App.tsx
Comment thread apps/dashboard/src/components/charts/frontier-eval-scatter.tsx
Comment thread apps/dashboard/src/components/charts/pass-rate-chart.tsx
Comment thread apps/dashboard/src/components/charts/timing-distribution.tsx
Comment thread apps/dashboard/src/pages/runs.tsx
Comment thread apps/dashboard/vite.config.ts
Comment thread src/runner/index.ts
Comment thread src/runtimes/discovery.ts
Comment thread src/runtimes/ollama-runtime.ts Outdated
@AustinKelsay
Copy link
Copy Markdown
Owner Author

@CodeRabbit full review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 10, 2026

✅ Actions performed

Full review triggered.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (11)
src/cli/compare-command.ts (3)

1-7: ⚠️ Potential issue | 🟡 Minor

Add invariants to the file header.

The header documents purpose/exports but omits invariants. Please add a short invariants line (e.g., deterministic stdout formatting, no filesystem writes).
As per coding guidelines: "Every file must start with a descriptive header describing purpose, exports, and invariants."

✅ Suggested header tweak
 /**
  * Purpose: `bench compare` command for comparing two benchmark runs.
  * Exports: compareCommand
+ * Invariants: Deterministic stdout formatting; no filesystem writes.
  *
  * Reads two run.json files, computes deltas, and prints a terminal-native
  * diff table with status changes, score changes, and duration changes.
  */

46-54: ⚠️ Potential issue | 🟡 Minor

Make timestamp output deterministic using fixed UTC timezone.

toLocaleString() without an explicit timeZone parameter uses the system's local timezone, causing output to differ across machines. Use Intl.DateTimeFormat with timeZone: "UTC" and include the year for consistency.

♻️ Suggested fix
 function formatTimestamp(iso: string): string {
 	const date = new Date(iso);
-	return date.toLocaleString("en-US", {
-		month: "short",
-		day: "2-digit",
-		hour: "2-digit",
-		minute: "2-digit",
-		hour12: false,
-	});
+	return (
+		new Intl.DateTimeFormat("en-US", {
+			month: "short",
+			day: "2-digit",
+			year: "numeric",
+			hour: "2-digit",
+			minute: "2-digit",
+			hour12: false,
+			timeZone: "UTC",
+		}).format(date) + " UTC"
+	);
 }

275-304: ⚠️ Potential issue | 🟠 Major

Add Zod validation for CLI boundary inputs in compare-command.

The runA, runB, and options parameters are boundary inputs and must be validated with Zod before use, as required by the coding guidelines: "Treat all boundary inputs (CLI args, env, JSON files, HTTP responses) as 'unknown' and parse immediately with Zod."

Suggested implementation
+import { z } from "zod";
+
+const CompareArgsSchema = z.object({
+	runA: z.string().min(1),
+	runB: z.string().min(1),
+	output: z.string().min(1),
+	json: z.boolean().optional(),
+});
+
 export const compareCommand = new Command("compare")
 	.description("Compare two benchmark runs")
 	.argument("<run-a>", "First run ID or path (baseline)")
 	.argument("<run-b>", "Second run ID or path (comparison)")
 	.option(
 		"-o, --output <dir>",
 		"Output directory for results",
 		DEFAULT_OUTPUT_DIR,
 	)
 	.option("--json", "Output raw JSON instead of formatted table")
-.action(
-	async (
-		runA: string,
-		runB: string,
-		options: { output: string; json?: boolean },
-	) => {
+	.action(async (runA: string, runB: string, options: unknown) => {
+		const parsed = CompareArgsSchema.parse({
+			runA,
+			runB,
+			...(options as Record<string, unknown>),
+		});
 		try {
 			// Find and read run A
-			const dirA = findRunDir(options.output, runA);
+			const dirA = findRunDir(parsed.output, parsed.runA);
 			const resultA = await readResult(dirA);
 
 			// Find and read run B
-			const dirB = findRunDir(options.output, runB);
+			const dirB = findRunDir(parsed.output, parsed.runB);
 			const resultB = await readResult(dirB);
 
 			// Compare runs
 			const comparison = compareRuns(resultA, resultB);
 
 			// Output
-			if (options.json) {
+			if (parsed.json) {
 				console.log(JSON.stringify(comparison, null, 2));
 			} else {
src/lib/openrouter-client.ts (2)

114-187: ⚠️ Potential issue | 🟠 Major

Use Zod to parse and validate OpenRouter HTTP responses at the boundary.

The current manual isRecord and Array.isArray checks do not validate nested fields (message.content, finish_reason, model) and violate the requirement to parse all boundary inputs (HTTP responses) with Zod. Replace the type casting with a Zod schema and safeParse.

Proposed fix (Zod schema + safeParse)
-import type { Logger } from "pino";
+import type { Logger } from "pino";
+import { z } from "zod";
 import type { FrontierEvalFailure } from "../schemas/index.js";
 import { logger } from "./logger.js";
@@
-/** OpenRouter API response structure. */
-interface OpenRouterResponse {
-	choices?: Array<{
-		finish_reason?: string;
-		message?: {
-			content?: string;
-			reasoning?: unknown;
-		};
-	}>;
-	model?: string;
-}
+/** OpenRouter API response structure. */
+const OpenRouterResponseSchema = z.object({
+	choices: z
+		.array(
+			z.object({
+				finish_reason: z.string().optional(),
+				message: z
+					.object({
+						content: z.string().optional(),
+						reasoning: z.unknown().optional(),
+					})
+					.optional(),
+			}),
+		)
+		.min(1),
+	model: z.string().optional(),
+});
+type OpenRouterResponse = z.infer<typeof OpenRouterResponseSchema>;
@@
-		const choices = isRecord(json)
-			? (json as { choices?: unknown }).choices
-			: undefined;
-		if (!Array.isArray(choices) || choices.length === 0) {
-			log.warn(
-				{
-					hasChoices: Array.isArray(choices),
-					choicesLength: Array.isArray(choices) ? choices.length : 0,
-					testSlug,
-				},
-				"Invalid OpenRouter response structure",
-			);
-			return {
-				ok: false,
-				type: "invalid_response",
-				message: "Invalid OpenRouter response structure",
-			};
-		}
-
-		return { ok: true, data: json as OpenRouterResponse };
+		const parsed = OpenRouterResponseSchema.safeParse(json);
+		if (!parsed.success) {
+			log.warn(
+				{ issues: parsed.error.issues, testSlug },
+				"Invalid OpenRouter response structure",
+			);
+			return {
+				ok: false,
+				type: "invalid_response",
+				message: "Invalid OpenRouter response structure",
+			};
+		}
+
+		return { ok: true, data: parsed.data };

Per coding guidelines: "/*.{ts,tsx}: Use Zod for schemas and validation" and "src/{cli,lib,harnesses}//*.{ts,tsx}: Treat all boundary inputs (CLI args, env, JSON files, HTTP responses) as 'unknown' and parse immediately with Zod".


227-255: ⚠️ Potential issue | 🟠 Major

Use a Zod schema for eval JSON (score/reasoning) instead of ad‑hoc parsing.

The model response is a boundary input (HTTP response). Validate it immediately with Zod per guidelines ("src/{cli,lib,harnesses}/**/*.{ts,tsx}: Treat all boundary inputs as 'unknown' and parse immediately with Zod"). The proposed FrontierEvalResponseSchema with z.coerce.number() handles type coercion explicitly and is more focused than reusing FrontierEvalSchema (which includes model and latencyMs fields added elsewhere).

Proposed fix (Zod coercion + validation)
+const FrontierEvalResponseSchema = z.object({
+	score: z.coerce.number().int().min(1).max(10),
+	reasoning: z.string().min(1),
+});
+
 function parseEvalResponse(responseText: string): {
 	score: number;
 	reasoning: string;
 } {
@@
-	const parsed = JSON.parse(jsonStr);
-
-	// Validate score
-	const score = Number(parsed.score);
-	if (Number.isNaN(score) || score < 1 || score > 10) {
-		throw new Error(`Invalid score: ${parsed.score}`);
-	}
-
-	// Validate reasoning
-	const reasoning = String(parsed.reasoning || "");
-	if (!reasoning) {
-		throw new Error("Missing reasoning in response");
-	}
-
-	return { score, reasoning };
+	const parsed = FrontierEvalResponseSchema.safeParse(JSON.parse(jsonStr));
+	if (!parsed.success) {
+		throw new Error("Invalid eval response");
+	}
+	return parsed.data;
 }
src/harnesses/discovery.ts (1)

31-56: ⚠️ Potential issue | 🟡 Minor

Add @throws tags to exported harness discovery docs.

These exported functions are documented but missing the required @throws tag.

✏️ Suggested doc update
 /**
  * Check if a specific harness is available.
  *
  * `@param` name - Harness name to check
  * `@returns` true if the harness is available
+ * `@throws` {Error} Never thrown; returns false when unavailable.
  */
 export async function isHarnessAvailable(name: HarnessName): Promise<boolean> {

 /**
  * Discover all available harnesses on the system.
  *
  * `@returns` Array of available harness names
+ * `@throws` {Error} Never thrown; returns best-effort list.
  */
 export async function discoverHarnesses(): Promise<HarnessName[]> {
As per coding guidelines: "All exported functions must have TSDoc/JSDoc with purpose, params, returns, throws".
src/lib/scorer.ts (1)

310-324: ⚠️ Potential issue | 🟡 Minor

Document thrown error behavior for scoreGeneration.

The exported function’s JSDoc is missing the required @throws tag.

✏️ Suggested doc update
  * `@param` timeoutMs - Timeout for scoring (default: 5s)
  * `@param` codeFilePath - Optional path to code file written by tool-calling harness
  * `@returns` Scoring result with pass/fail counts
+ * `@throws` {Error} Never thrown; errors are captured in the returned ScoringResult.
As per coding guidelines: "All exported functions must have TSDoc/JSDoc with purpose, params, returns, throws".
apps/dashboard/src/components/run-detail/tooling-breakdown.tsx (1)

181-185: ⚠️ Potential issue | 🟡 Minor

Add @throws to the exported function docs.

The exported JSDoc needs the required @throws tag.

✏️ Suggested doc update
 /**
  * Renders tool usage vs scoring breakdown for a run.
  * `@param` items - Matrix items for the run
  * `@returns` Tooling breakdown card
+ * `@throws` {Error} Never thrown; rendering is best-effort.
  */
 export function ToolingBreakdown({ items }: ToolingBreakdownProps) {
As per coding guidelines: "All exported functions must have TSDoc/JSDoc with purpose, params, returns, throws".
src/runner/index.ts (1)

43-50: ⚠️ Potential issue | 🟡 Minor

Add @returns to runBenchmark JSDoc.

✍️ Suggested doc tweak
 /**
  * Runs the complete benchmark workflow.
  *
  * `@param` config - Benchmark configuration
+ * `@returns` Promise resolved when the run completes
  *
  * `@throws` {Error} Only on setup/write failures (crashes).
  *                 Item execution failures are recorded, not thrown.
  */

As per coding guidelines: "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

llm/implementation/setup-phase-implementation.md (1)

49-55: ⚠️ Potential issue | 🟡 Minor

Use timeoutMs in the GenerateOpts doc snippet.

The code uses timeoutMs, not timeout.

✍️ Suggested fix
-   - `GenerateOpts`: `{ model, prompt, timeout, runtime }`
+   - `GenerateOpts`: `{ model, prompt, timeoutMs, runtime }`
llm/project/phases/setup-phase.md (1)

116-120: ⚠️ Potential issue | 🟡 Minor

Add a language identifier to the fenced code block.

✍️ Suggested fix
-```
+```text
 Update `@llm/project/phases/setup-phase.md` with project-specific steps.
 Keep scope minimal and shippable. List 3-5 actionable steps per feature.
</details>

</blockquote></details>

</blockquote></details>
🤖 Fix all issues with AI agents
In `@apps/dashboard/src/components/run-detail/status-badge.tsx`:
- Around line 27-35: Add a TSDoc block for the exported function StatusBadge
describing its purpose, the parameters (StatusBadgeProps: status and optional
showIcon), the return value (JSX.Element) and any possible thrown errors or edge
cases; place the doc above the StatusBadge declaration and reference
StatusBadgeProps in the `@param` tags and mention that it uses statusConfig and
Badge internally. Ensure the doc includes `@param` entries for "status" and
"showIcon", an `@returns` describing the rendered Badge element, and an `@throws`
note for invalid/unrecognized status values.

In `@llm/context/codebase-overview.md`:
- Around line 145-146: Update the documented schema version in the markdown from
"0.2.0" to "0.2.1" so it matches the SCHEMA_VERSION constant (SCHEMA_VERSION =
"0.2.1") defined in the codebase; locate the schema version text in the
codebase-overview.md and replace the old version string with "0.2.1" to keep
docs consistent with the implementation.
🟡 Minor comments (21)
apps/dashboard/src/components/ui/button.tsx-45-56 (1)

45-56: ⚠️ Potential issue | 🟡 Minor

Add TSDoc to the exported Button component.
Exported functions must include purpose, params, returns, and throws.

Proposed fix
+/**
+ * Purpose: Render a styled button or Slot with variant/size styling.
+ * `@param` props - ButtonProps controlling variants, size, and native button attributes.
+ * `@param` ref - Forwarded ref to the underlying button element.
+ * `@returns` A React element rendering the button/Slot.
+ * `@throws` None.
+ */
 const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
 	({ className, variant, size, asChild = false, ...props }, ref) => {

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/components/ui/button.tsx-1-8 (1)

1-8: ⚠️ Potential issue | 🟡 Minor

Move and expand the file header to the top (include exports + invariants).
The header is not at the beginning of the file and doesn’t document exports/invariants.

Proposed fix
+/**
+ * Purpose: Button component with variants (terminal-native styling).
+ * Exports: Button, buttonVariants.
+ * Invariants: buttonVariants keys define all supported variant/size combinations.
+ */
 import { cn } from "@/lib/utils";
 import { Slot } from "@radix-ui/react-slot";
 import { type VariantProps, cva } from "class-variance-authority";
-/**
- * Purpose: Button component with variants.
- * Based on shadcn/ui Button with terminal-native styling.
- */
 import * as React from "react";

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

src/harnesses/goose-openai.ts-24-29 (1)

24-29: ⚠️ Potential issue | 🟡 Minor

Edge case: path consisting only of the suffix is not normalized to "v1".

The suffix "/chat/completions" includes a leading /, so after trimming, an input like "/chat/completions" becomes "chat/completions", which does not end with "/chat/completions" and is returned as-is instead of normalizing to "v1".

Input Current Output Expected Output
/v1/chat/completions v1 v1
/chat/completions chat/completions v1
chat/completions chat/completions v1
🐛 Proposed fix to handle the bare suffix case
 export function normalizeOpenAiBasePath(pathname: string): string {
 	const trimmed = pathname.replace(/^\/+/, "").replace(/\/+$/, "");
 	if (!trimmed) return "v1";
 
-	const suffix = "/chat/completions";
-	const lower = trimmed.toLowerCase();
-	if (lower.endsWith(suffix)) {
-		const without = trimmed.slice(0, -suffix.length);
-		return without.length > 0 ? without : "v1";
-	}
+	const suffixWithSlash = "/chat/completions";
+	const suffixBare = "chat/completions";
+	const lower = trimmed.toLowerCase();
+
+	if (lower.endsWith(suffixWithSlash)) {
+		const without = trimmed.slice(0, -suffixWithSlash.length);
+		return without.length > 0 ? without : "v1";
+	}
+	if (lower === suffixBare) {
+		return "v1";
+	}
 
 	return trimmed;
 }
apps/dashboard/src/hooks/use-runs.ts-16-19 (1)

16-19: ⚠️ Potential issue | 🟡 Minor

Add complete TSDoc for useRuns (returns/throws).

The exported function’s docstring is missing required tags.

📝 Suggested TSDoc
 /**
  * Fetches the list of all available benchmark runs.
  * Returns runs sorted by startedAt descending (newest first).
+ * `@returns` The runs list, loading/error state, and a refetch function.
+ * `@throws` {never} Errors are captured in `error` instead of being thrown.
  */
 export function useRuns(): UseRunsResult {

As per coding guidelines, “All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws.”

apps/dashboard/src/hooks/use-runs.ts-1-7 (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Move the file header above imports and include invariants.

The header isn’t at the top and doesn’t document invariants.

🔧 Suggested update
-import { fetchRuns } from "@/lib/api";
-import type { RunListItem } from "@/lib/types";
-/**
- * Purpose: React hook for fetching the list of all runs.
- * Exports: useRuns
- */
-import { useCallback, useEffect, useState } from "react";
+/**
+ * Purpose: React hook for fetching the list of all runs.
+ * Exports: useRuns
+ * Invariants: `runs` is sorted by startedAt desc; `error` is string|null; `refetch` is stable.
+ */
+import { fetchRuns } from "@/lib/api";
+import type { RunListItem } from "@/lib/types";
+import { useCallback, useEffect, useState } from "react";

As per coding guidelines, “Begin every file with a short header documenting purpose, exports, and invariants.”

src/cli/compare-command.ts-314-318 (1)

314-318: ⚠️ Potential issue | 🟡 Minor

Use the centralized Pino logger instead of console.error.

console.error bypasses the project's configured logger. Use the centralized logger from src/lib/logger.js for consistency with other CLI commands like run-command.ts, and to respect the coding guideline: "Use Pino for logging."

Suggested fix
+import { logger } from "../lib/logger.js";
+
 			} catch (error) {
-				console.error(
-					`Error: ${error instanceof Error ? error.message : String(error)}`,
-				);
+				logger.error(
+					{ error },
+					"Compare failed: %s",
+					error instanceof Error ? error.message : String(error),
+				);
 				process.exit(1);
 			}
apps/dashboard/vite.config.ts-1-7 (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Add a top-of-file header that includes exports and invariants.

The header is after imports and doesn’t document exports/invariants. Please move it to the very top and expand it.

✍️ Suggested header update
+/**
+ * Purpose: Vite configuration for plebdev-bench dashboard.
+ * Exports: default Vite config (React plugin, aliases, results middleware).
+ * Invariants: /results/* requests are resolved under ../../results only.
+ */
 import { existsSync, readFileSync } from "node:fs";
 import path from "node:path";
 import react from "@vitejs/plugin-react";
-/**
- * Purpose: Vite configuration for plebdev-bench dashboard.
- * Configures React plugin, path aliases, and dev server for results.
- */

As per coding guidelines: Begin every file with a short header documenting purpose, exports, and invariants.

apps/dashboard/vite.config.ts-57-62 (1)

57-62: ⚠️ Potential issue | 🟡 Minor

Narrow server.fs.allow to the results directory for better security.

Using ["../.."] is overly broad; Vite's default strict mode can still be bypassed if unnecessary paths are allowed. The allowlist should be specific to what the dev server actually needs. Since your custom serveResultsPlugin already computes the results path, extract it as a constant and reuse it:

♻️ Suggested adjustment
+const RESULTS_DIR = path.resolve(__dirname, "../../results");
+
 function serveResultsPlugin() {
-	const resultsDir = path.resolve(__dirname, "../../results");
+	const resultsDir = RESULTS_DIR;

 	return {
 		// ...
 	};
 }

 export default defineConfig({
 	// ...
 	server: {
 		port: 5173,
 		fs: {
 			// Allow serving files from results directory at project root
-			allow: ["../.."],
+			allow: [RESULTS_DIR],
 		},
 	},
 });

Alternatively, use the relative path directly: allow: ["../../results"].

apps/dashboard/vite.config.ts-18-31 (1)

18-31: ⚠️ Potential issue | 🟡 Minor

Guard URL parsing/decoding to avoid unhandled request exceptions.

new URL() throws TypeError and decodeURIComponent() throws URIError on malformed input. An invalid /results/ request would currently bubble an unhandled exception. Wrap parsing/decoding in try-catch and return a 400 status.

🛡️ Proposed fix
-					const parsed = new URL(req.url, "http://localhost");
-					const relativePath = decodeURIComponent(
-						parsed.pathname.replace("/results/", ""),
-					);
+					let parsed: URL;
+					let relativePath: string;
+					try {
+						parsed = new URL(req.url, "http://localhost");
+						relativePath = decodeURIComponent(
+							parsed.pathname.replace("/results/", ""),
+						);
+					} catch {
+						res.statusCode = 400;
+						res.end("Invalid results URL");
+						return;
+					}
apps/dashboard/src/components/ui/card.tsx-35-47 (1)

35-47: ⚠️ Potential issue | 🟡 Minor

Type mismatch in CardTitle ref.

The forwardRef generic specifies HTMLParagraphElement for the ref type, but the component renders an <h3> element and accepts React.HTMLAttributes<HTMLHeadingElement>. This inconsistency could cause type errors when using the ref.

Suggested fix
 const CardTitle = React.forwardRef<
-	HTMLParagraphElement,
+	HTMLHeadingElement,
 	React.HTMLAttributes<HTMLHeadingElement>
 >(({ className, ...props }, ref) => (
llm/implementation/vllm-orbstack-setup.md-129-134 (1)

129-134: ⚠️ Potential issue | 🟡 Minor

Avoid user-specific absolute paths in docs.

The OrbStack configuration example uses hardcoded paths that won't work for other users. Use a portable placeholder or environment variable.

✏️ Suggested wording
-/Users/plebdev/.orbstack/bin/orbctl config set memory_mib 49152
-/Users/plebdev/.orbstack/bin/orbctl stop
-/Users/plebdev/.orbstack/bin/orbctl start
+# Adjust the path if orbctl is not in your PATH
+orbctl config set memory_mib 49152
+orbctl stop
+orbctl start

Or if the full path is needed:

-/Users/plebdev/.orbstack/bin/orbctl config set memory_mib 49152
+~/.orbstack/bin/orbctl config set memory_mib 49152
apps/dashboard/src/lib/aggregations-compare.ts-20-26 (1)

20-26: ⚠️ Potential issue | 🟡 Minor

Add @throws to the exported function docs.

The exported JSDoc should include a @throws tag.

✏️ Suggested doc update
  * `@param` runA - First run (baseline)
  * `@param` runB - Second run (comparison)
  * `@returns` Compare result with matched items and deltas
+ * `@throws` {Error} Never thrown; returns best-effort deltas when data is missing.
As per coding guidelines: "All exported functions must have TSDoc/JSDoc with purpose, params, returns, throws".
src/harnesses/opencode-output.ts-194-205 (1)

194-205: ⚠️ Potential issue | 🟡 Minor

Add Zod parsing and @throws documentation for boundary input.

The function accepts raw CLI output which is a boundary input per coding guidelines and should be parsed as unknown type with Zod. Additionally, the exported function lacks @throws documentation.

Suggested update
 /**
  * Normalize OpenCode JSON/JSONL output into plain assistant text or extracted tool-call code.
  *
  * `@param` raw - Raw stdout/stderr from OpenCode
  * `@returns` Normalized output and method indicator
+ * `@throws` {Error} Never thrown; normalization is best-effort.
  */
-export function normalizeOpenCodeOutput(raw: string): OpenCodeNormalizedOutput {
-	const trimmed = raw.trim();
+export function normalizeOpenCodeOutput(raw: unknown): OpenCodeNormalizedOutput {
+	const parsedRaw = z.string().safeParse(raw);
+	const input = parsedRaw.success ? parsedRaw.data : String(raw ?? "");
+	const trimmed = input.trim();
 	if (!trimmed) {
-		return { output: raw, method: "raw" };
+		return { output: input, method: "raw" };
 	}
@@
-	const directToolCallCode = extractFromToolCall(raw);
+	const directToolCallCode = extractFromToolCall(input);
 	if (directToolCallCode) {
 		return { output: directToolCallCode, method: "tool_call" };
 	}
 
-	return { output: raw, method: "raw" };
+	return { output: input, method: "raw" };
 }

Per coding guidelines: "Treat all boundary inputs (CLI args, env, JSON files, HTTP responses) as 'unknown' and parse immediately with Zod" and "All exported functions must have TSDoc/JSDoc with purpose, params, returns, throws".

src/harnesses/opencode-adapter.ts-217-292 (1)

217-292: ⚠️ Potential issue | 🟡 Minor

Potential unhandled rejection from dangling timeout/stale promises.

When the process completes normally, the timeoutPromise and stalePromise remain pending with their timers still active. Although timers are cleared after Promise.race resolves, if the timer fires between the race resolution and the clearTimeout/clearInterval calls, the reject() will create an unhandled rejection.

🛡️ Suggested fix: Guard rejection with completion flag
+let completed = false;
+
 const timeoutPromise: Promise<never> = new Promise((_, reject) => {
   timeoutId = setTimeout(() => {
-    if (killAttempted) return;
+    if (killAttempted || completed) return;
     killAttempted = true;
     // ... rest of handler
   }, timeoutMs);
 });

 const stalePromise: Promise<never> = new Promise((_, reject) => {
   staleCheckId = setInterval(() => {
-    if (killAttempted) return;
+    if (killAttempted || completed) return;
     // ... rest of handler
   }, STALE_CHECK_INTERVAL_MS);
 });

 const result = await Promise.race([proc, timeoutPromise, stalePromise]);
+completed = true;
apps/dashboard/src/components/charts/composite-score-chart.tsx-349-352 (1)

349-352: ⚠️ Potential issue | 🟡 Minor

Add full TSDoc for exported CompositeScoreChart.

✍️ Suggested doc block
+/**
+ * Renders the composite score chart with tabs by dimension.
+ * `@param` props - Chart props including items and click handler
+ * `@returns` JSX element for the composite score card
+ */
 export function CompositeScoreChart({
 	items,
 	onDimensionClick,
 }: CompositeScoreChartProps) {

As per coding guidelines: "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

llm/implementation/setup-phase-implementation.md-77-78 (1)

77-78: ⚠️ Potential issue | 🟡 Minor

Update the CLI runtime option example to include vLLM.

✍️ Suggested wording
-| `-r, --runtimes <runtimes...>` | Limit to specific runtimes: ollama | All available |
+| `-r, --runtimes <runtimes...>` | Limit to specific runtimes: ollama, vllm | All available |
apps/dashboard/src/components/charts/composite-score-chart.tsx-96-115 (1)

96-115: ⚠️ Potential issue | 🟡 Minor

Avoid truncating the data key used for clicks.

Truncating name can collide and route clicks to the wrong row. Keep the raw name as the key and truncate only for display in the tick.

🛠️ Suggested adjustment
 interface ChartData {
 	name: string;
 	effectiveScore: number;
 	passRate: number;
@@
 	// Keep raw data for tooltip
 	raw: CompositeMetrics;
 }
 
 function prepareChartData(metrics: CompositeMetrics[]): ChartData[] {
 	return metrics.map((m) => ({
-		name: m.name.length > 20 ? `${m.name.slice(0, 18)}...` : m.name,
+		name: m.name,
 		effectiveScore: m.effectiveScore * 100, // Primary ranking metric
@@
 function ClickableYAxisTick({
 	x,
 	y,
 	payload,
 	onClick,
 }: {
@@
 }) {
 	const isInteractive = Boolean(onClick);
+	const displayValue =
+		payload.value.length > 20
+			? `${payload.value.slice(0, 18)}...`
+			: payload.value;
@@
 			<text
 				x={-5}
 				y={0}
 				dy={4}
 				textAnchor="end"
 				fill="hsl(210, 30%, 92%)"
 				fontSize={12}
 				className={onClick ? "hover:fill-amber-400 transition-colors" : ""}
 			>
-				{payload.value}
+				{displayValue}
 			</text>

Also applies to: 117-167, 260-278

llm/project/phases/setup-phase.md-49-55 (1)

49-55: ⚠️ Potential issue | 🟡 Minor

Align the GenerateOpts snippet with timeoutMs.

✍️ Suggested update
-   - `GenerateOpts`: `{ model, prompt, timeout, runtime }`
+   - `GenerateOpts`: `{ model, prompt, timeoutMs, runtime }`
llm/implementation/setup-phase-implementation.md-28-33 (1)

28-33: ⚠️ Potential issue | 🟡 Minor

Include the vLLM runtime in the architecture tree.

The runtimes section lists ollama-runtime.ts but omits the vLLM implementation now present in the codebase.

✍️ Suggested update
 ├── runtimes/                # Runtime adapters (inference backends)
 │   ├── runtime.ts           # Runtime interface + types
 │   ├── ollama-runtime.ts    # Ollama HTTP implementation
+│   ├── vllm-runtime.ts      # vLLM HTTP implementation
 │   ├── discovery.ts         # Detect available runtimes
 │   └── index.ts             # Factory + exports
apps/dashboard/src/components/charts/composite-score-chart.tsx-1-19 (1)

1-19: ⚠️ Potential issue | 🟡 Minor

Move the file header above imports and include exports/invariants.

The header exists but isn’t the first element and doesn’t list exports/invariants.

✏️ Suggested header placement
+/**
+ * Purpose: Composite score bar chart showing pass rate, tool success, and frontier score.
+ * Exports: CompositeScoreChart
+ * Invariants:
+ * - Chart values are percent-scaled (0–100) for rendering
+ */
 import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
 import { WithInfoTooltip } from "@/components/ui/info-tooltip";
 import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
@@
-import type { KeyboardEvent } from "react";
-/**
- * Purpose: Composite score bar chart showing pass rate, tool success, and frontier score.
- * Replaces simple pass rate chart with multi-metric grouped bars.
- */
+import type { KeyboardEvent } from "react";

As per coding guidelines: "Begin every file with a short header documenting purpose, exports, and invariants".

src/harnesses/harness.ts-124-137 (1)

124-137: ⚠️ Potential issue | 🟡 Minor

Document the thrown error in normalizeHarnessName.

✍️ Suggested doc update
 /**
  * Normalizes a harness name, mapping legacy names to current ones.
  * `@param` name - Harness name (may be legacy)
  * `@returns` Normalized harness name
+ * `@throws` {Error} When the name is not a supported harness
  */
 export function normalizeHarnessName(name: string): HarnessName {

As per coding guidelines: "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

Comment thread apps/dashboard/src/components/run-detail/status-badge.tsx Outdated
Comment thread llm/context/codebase-overview.md Outdated
@AustinKelsay
Copy link
Copy Markdown
Owner Author

@CodeRabbit full review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 10, 2026

✅ Actions performed

Full review triggered.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (10)
apps/dashboard/src/components/ui/skeleton.tsx (1)

1-3: ⚠️ Potential issue | 🟡 Minor

Complete the file header (purpose, exports, invariants).

Current header only states purpose; please add exports and invariants as required.

✅ Suggested header update
-/**
- * Purpose: Skeleton loading placeholder component.
- */
+/**
+ * Purpose: Skeleton loading placeholder component.
+ * Exports: `Skeleton`.
+ * Invariants: Renders a single div with skeleton styles; forwards HTML div props.
+ */

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

apps/dashboard/src/components/ui/dialog.tsx (1)

10-123: ⚠️ Potential issue | 🟡 Minor

Add TSDoc/JSDoc for exported components.

Exported components are missing required TSDoc/JSDoc (purpose, params, returns, throws).

📝 Example pattern (apply to each exported component)
+/**
+ * Purpose: Root dialog component.
+ * `@returns` React element for Dialog root.
+ * `@throws` Never.
+ */
 const Dialog = DialogPrimitive.Root;

As per coding guidelines: “All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws.”

src/cli/compare-command.ts (1)

124-192: ⚠️ Potential issue | 🔴 Critical

Add RUNTIME to compare key and display in regression/improvement tables.

Runtime is a dimension in the benchmark matrix (runtimes × harnesses × models × tests × passTypes), but buildCompareKey() omits it (currently: model|harness|test|passType). This causes collisions when a single run contains items with the same model/harness/test/passType across different runtimes—only the last variant is retained during map building. Additionally, the regression and improvement tables omit the RUNTIME column, making output ambiguous. Update buildCompareKey() to include runtime, expose runtime in MatchedItem, and display it in the tables.

apps/dashboard/src/lib/utils.ts (1)

1-4: ⚠️ Potential issue | 🟡 Minor

Complete the file header (exports + invariants).

The header omits some exports and doesn’t state invariants. Please list all exported utilities and add an invariants line.

🔧 Suggested header update
 /**
  * Purpose: Utility functions for the dashboard.
- * Exports: cn (class name merger), formatDuration, formatNumber, formatDate
+ * Exports: cn (class name merger), formatDuration, formatNumber, formatPercent, formatDate, formatShortDate
+ * Invariants: Inputs are expected to be valid numbers or ISO date strings.
  */

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

src/lib/failure-classifier.ts (1)

14-28: ⚠️ Potential issue | 🟡 Minor

Add @throws to exported function docs.

Both exported functions should declare @throws (even if they don’t throw).

📌 Suggested doc additions
  * `@param` errorMessage - The error message from harness/execution
  * `@returns` The classified failure type
+ * `@throws` Does not throw.
@@
  * `@param` errorMessage - The error message from scoring
  * `@returns` The classified scoring failure type
+ * `@throws` Does not throw.
As per coding guidelines: "All exported functions require TSDoc/JSDoc (purpose, params, returns, throws)."

Also applies to: 81-93

apps/dashboard/src/lib/api.ts (1)

63-70: ⚠️ Potential issue | 🟡 Minor

Add @throws to the exported function JSDoc.

fetchRunWithPlan can throw when either fetch/validation fails; document that explicitly.

📝 Suggested JSDoc update
 /**
  * Fetches both run and plan data for a run.
  * `@param` runId - The run ID (directory name in results/)
  * `@returns` Object with run and plan data
+ * `@throws` Error if run/plan fetch fails or validation fails
  */

As per coding guidelines: "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

src/runner/item-executor.ts (2)

102-183: ⚠️ Potential issue | 🟠 Major

Don’t swallow config/programmer errors inside the generation catch.
loadPrompt, createRuntime, and createHarness failures should crash the run (config/programmer errors), not be recorded as per-item generation failures.

Suggested restructuring
-	try {
-		// Load prompt
-		log.debug("Loading prompt...");
-		const prompt = loadPrompt(item.test, item.passType);
-
-		// Create runtime instance
-		const runtime = createRuntime(item.runtime, {
-			ollamaBaseUrl: runtimeConfig.ollamaBaseUrl,
-			vllmBaseUrl: runtimeConfig.vllmBaseUrl,
-			defaultTimeoutMs: timeoutMs,
-		});
-
-		// Create harness adapter
-		log.debug({ harness: item.harness }, "Creating harness...");
-		const harness = createHarness(item.harness);
-
-		// Generate completion (pass runtime to harness)
-		generationStartTime = performance.now();
-		const result = await harness.generate({
-			model: item.model,
-			prompt,
-			timeoutMs,
-			unloadAfter,
-			runtime,
-		});
+	// Load prompt (config error should throw)
+	log.debug("Loading prompt...");
+	const prompt = loadPrompt(item.test, item.passType);
+
+	// Create runtime instance (config error should throw)
+	const runtime = createRuntime(item.runtime, {
+		ollamaBaseUrl: runtimeConfig.ollamaBaseUrl,
+		vllmBaseUrl: runtimeConfig.vllmBaseUrl,
+		defaultTimeoutMs: timeoutMs,
+	});
+
+	// Create harness adapter (config error should throw)
+	log.debug({ harness: item.harness }, "Creating harness...");
+	const harness = createHarness(item.harness);
+
+	try {
+		// Generate completion (pass runtime to harness)
+		generationStartTime = performance.now();
+		const result = await harness.generate({
+			model: item.model,
+			prompt,
+			timeoutMs,
+			unloadAfter,
+			runtime,
+		});
Based on learnings, “Throw on programmer/config errors; record runtime per-item failures in results instead of silent fallbacks.”

69-80: ⚠️ Potential issue | 🟡 Minor

Add @throws to the exported executeItem JSDoc.
It should document the config errors you now allow to bubble.

Suggested JSDoc tweak
 /**
  * Executes a single matrix item.
@@
  * `@returns` The execution result
+ * `@throws` {Error} For configuration/programmer errors (missing prompt, invalid runtime/harness)
  *
  * Note: This function does NOT throw on generation failures.
  * Instead, failures are recorded in the result.
  */
As per coding guidelines, “All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws.”
llm/implementation/setup-phase-implementation.md (1)

239-245: ⚠️ Potential issue | 🟡 Minor

Update the execution loop snippet to the new executeItem signature.
It still shows the old (item, ollamaBaseUrl, timeout) call.

Suggested edit
-  result = executeItem(item, ollamaBaseUrl, timeout)
+  result = executeItem(item, runtimeConfig, timeout)
src/cli/run-command.ts (1)

1-11: ⚠️ Potential issue | 🟡 Minor

Add an explicit Invariants section to the file header.
The header has purpose/exports but no invariants, which the guidelines require.

✏️ Suggested header addition
 /**
  * Purpose: `bench run` command - execute benchmark matrix.
  * Exports: runCommand
  *
  * This command orchestrates:
  * 1. Config parsing from CLI options
  * 2. Runtime/Model/Test discovery
  * 3. Matrix expansion and plan creation
  * 4. Item execution
  * 5. Result writing
+ *
+ * Invariants:
+ * - CLI options are validated with BenchConfigSchema before execution
+ * - Run aborts early on invalid configuration
  */

As per coding guidelines: "Every file must start with a descriptive header describing purpose, exports, and invariants".

🤖 Fix all issues with AI agents
In `@apps/dashboard/scripts/build-index.ts`:
- Around line 29-38: The code reads and JSON.parse's run.json directly; instead
use the existing RunResultSchema to validate the parsed data immediately: after
awaiting readFile(runJsonPath, "utf-8") and JSON.parse(content) treat the parsed
value as unknown and call RunResultSchema.parse (or safeParse and handle errors)
to get a typed run object, then extract run.runId, run.startedAt,
run.completedAt, run.durationMs, run.summary into the runs array; on parse
failure log or skip the file instead of silently proceeding. Ensure you
reference RunResultSchema and the local variables runJsonPath, content/readFile,
and runs when modifying build-index.ts.

In `@apps/dashboard/src/components/compare/compare-page.tsx`:
- Around line 26-33: Extracted route params (urlRunA, urlRunB from useParams)
must be runtime-validated with Zod before being used to seed state; import or
create a Zod schema (e.g., compareRouteParamsSchema or reuse the existing schema
in schemas.ts), parse the params from useParams via
compareRouteParamsSchema.parse or .safeParse, and only call
setSelectedRunA/setSelectedRunB (and initialize selectedRunA/selectedRunB state)
with the validated values (or undefined on failure) so invalid route values are
rejected at the boundary; keep useRuns usage unchanged and ensure any parsing
errors are handled silently or logged but do not propagate invalid strings into
selectedRunA/selectedRunB.
🟡 Minor comments (49)
apps/dashboard/src/components/ui/dialog.tsx-1-8 (1)

1-8: ⚠️ Potential issue | 🟡 Minor

Move and expand the file header to the very top (include exports + invariants).

The header starts after imports and doesn’t list exports or invariants. Please move it above Line 1 and expand it.

📄 Suggested header placement/content
+/**
+ * Purpose: Dialog UI primitives for modals/drill-downs.
+ * Exports: Dialog, DialogTrigger, DialogPortal, DialogClose, DialogOverlay,
+ *          DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription.
+ * Invariants: Radix Dialog primitives are re-exported with terminal-native styling.
+ */
 import { cn } from "@/lib/utils";
 import * as DialogPrimitive from "@radix-ui/react-dialog";
 import { X } from "lucide-react";
-/**
- *
- * Purpose: Dialog component for modals/drill-downs.
- * Based on shadcn/ui Dialog (Radix UI) with terminal-native styling.
- */
 import * as React from "react";

As per coding guidelines: “Begin every file with a short header documenting purpose, exports, and invariants.”

apps/dashboard/src/components/ui/button.tsx-45-55 (1)

45-55: ⚠️ Potential issue | 🟡 Minor

Add TSDoc for exported Button.

Button is exported but lacks the required TSDoc with purpose, params, returns, and throws.

🧾 Suggested docblock
-const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
+/**
+ * Purpose: Render a styled button (or Slot when asChild is true).
+ * `@param` props - Button props including variant, size, asChild, and native button attributes.
+ * `@param` ref - Forwarded ref to the underlying button element.
+ * `@returns` The rendered button/slot element.
+ * `@throws` None.
+ */
+const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(

As per coding guidelines, All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws.

apps/dashboard/src/components/ui/button.tsx-1-7 (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Move/expand the header to the top and document exports/invariants.

The file header appears after imports and does not list exports or invariants. Please move it to the top and include exports/invariants explicitly.

🔧 Suggested update
- import { cn } from "@/lib/utils";
- import { Slot } from "@radix-ui/react-slot";
- import { type VariantProps, cva } from "class-variance-authority";
- /**
-  * Purpose: Button component with variants.
-  * Based on shadcn/ui Button with terminal-native styling.
-  */
- import * as React from "react";
+/**
+ * Purpose: Button component with variants (terminal-native styling).
+ * Exports: Button, buttonVariants.
+ * Invariants: buttonVariants defines allowed {variant,size}; Button merges className via cn and supports asChild Slot.
+ */
+import { cn } from "@/lib/utils";
+import { Slot } from "@radix-ui/react-slot";
+import { type VariantProps, cva } from "class-variance-authority";
+import * as React from "react";

As per coding guidelines, Begin every file with a short header documenting purpose, exports, and invariants.

apps/dashboard/src/hooks/use-runs.ts-16-20 (1)

16-20: ⚠️ Potential issue | 🟡 Minor

Complete the exported hook’s JSDoc.
Add explicit @returns and @throws (even if it never throws).

✅ Suggested update
 /**
  * Fetches the list of all available benchmark runs.
  * Returns runs sorted by startedAt descending (newest first).
+ * `@returns` UseRunsResult containing runs, loading, error, and refetch.
+ * `@throws` {never} Errors are surfaced via `error` state instead of thrown.
  */
 export function useRuns(): UseRunsResult {

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/hooks/use-runs.ts-1-7 (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Move the file header above imports and add invariants.
The header isn’t at the top and doesn’t document invariants.

✅ Suggested update
- import { fetchRuns } from "@/lib/api";
- import type { RunListItem } from "@/lib/types";
- /**
-  * Purpose: React hook for fetching the list of all runs.
-  * Exports: useRuns
-  */
- import { useCallback, useEffect, useState } from "react";
+/**
+ * Purpose: React hook for fetching the list of all runs.
+ * Exports: useRuns, UseRunsResult
+ * Invariants: runs is sorted by startedAt descending; loading is true only while fetching.
+ */
+import { fetchRuns } from "@/lib/api";
+import type { RunListItem } from "@/lib/types";
+import { useCallback, useEffect, useState } from "react";

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

.gitignore-141-144 (1)

141-144: ⚠️ Potential issue | 🟡 Minor

Preserved sample run files will still be ignored.

results/* ignores all files; !results/20260209-080211-751e64/ only unignores the directory itself, not its contents, so the sample run won’t be committed. Add an exception for the directory contents as well.

✅ Suggested fix
 results/*
 !results/index.json
 !results/20260209-080211-751e64/
+!results/20260209-080211-751e64/**
apps/dashboard/src/components/ui/info-tooltip.tsx-1-7 (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Move the file header to the top and include exports/invariants.

The header comment is not the first statement and doesn’t document exports/invariants. Please move it above imports and add the missing details.
As per coding guidelines, Begin every file with a short header documenting purpose, exports, and invariants.

Suggested update
+/**
+ * Purpose: Reusable info tooltip component with question mark trigger.
+ * Exports: InfoTooltip, WithInfoTooltip.
+ * Invariants: Uses Radix Tooltip primitives; content is required text; side is one of "top" | "right" | "bottom" | "left".
+ */
 import { cn } from "@/lib/utils";
 import * as TooltipPrimitive from "@radix-ui/react-tooltip";
-/**
- * Purpose: Reusable info tooltip component with question mark trigger.
- * Uses Radix UI Tooltip for accessibility and consistent styling.
- */
 import type * as React from "react";
apps/dashboard/src/components/ui/info-tooltip.tsx-15-23 (1)

15-23: ⚠️ Potential issue | 🟡 Minor

Add full TSDoc (@param/@returns/@throws) for exported InfoTooltip.

The current comment is descriptive but missing required tags.
As per coding guidelines, All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws.

Suggested update
 /**
  * Info tooltip with question mark icon trigger.
  * Shows explanatory text on hover/focus.
+ * `@param` content - Tooltip text to display.
+ * `@param` side - Tooltip placement relative to trigger.
+ * `@param` className - Optional class overrides for the trigger.
+ * `@returns` The tooltip trigger and content.
+ * `@throws` {Error} Never throws.
  */
 export function InfoTooltip({
apps/dashboard/src/components/ui/info-tooltip.tsx-69-81 (1)

69-81: ⚠️ Potential issue | 🟡 Minor

Add full TSDoc (@param/@returns/@throws) for exported WithInfoTooltip.

Same requirement applies here.
As per coding guidelines, All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws.

Suggested update
 /**
  * Wrapper to add info tooltip next to any content.
  * Provides consistent spacing and alignment.
+ * `@param` children - Content to decorate with an info tooltip.
+ * `@param` tooltip - Tooltip text to display.
+ * `@param` side - Tooltip placement relative to trigger.
+ * `@returns` A span with content and tooltip.
+ * `@throws` {Error} Never throws.
  */
 export function WithInfoTooltip({
src/cli/compare-command.ts-291-298 (1)

291-298: ⚠️ Potential issue | 🟡 Minor

Remove unnecessary await on synchronous readResult calls.

readResult returns RunResult synchronously (lines 294 and 298). Remove await for clarity:

Lines 294, 298
- const resultA = await readResult(dirA);
+ const resultA = readResult(dirA);

- const resultB = await readResult(dirB);
+ const resultB = readResult(dirB);
apps/dashboard/src/components/charts/pass-rate-chart.tsx-1-9 (1)

1-9: ⚠️ Potential issue | 🟡 Minor

Move the required file header to the top and include exports/invariants.

The header comment is not at the beginning of the file and doesn’t document exports/invariants. Please place it before imports and expand it per the guideline.

🔧 Suggested header placement/update
+/**
+ * Purpose: Pass rate bar chart component using Recharts.
+ * Exports: PassRateChart.
+ * Invariants: `items` are validated MatrixItemResult entries; passRate is in [0, 1].
+ */
 import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
 import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
 import {
 	computeBreakdown,
 	groupByHarness,
 	groupByModel,
 	groupByTest,
 } from "@/lib/aggregations";
 import type { MatrixItemResult } from "@/lib/types";
-/**
- * Purpose: Pass rate bar chart component using Recharts.
- * Shows pass rate by model, harness, or test dimension.
- */
 import {
 	Bar,
 	BarChart,
 	CartesianGrid,
 	Cell,
 	ResponsiveContainer,
 	Tooltip,
 	XAxis,
 	YAxis,
 } from "recharts";

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

apps/dashboard/src/components/charts/pass-rate-chart.tsx-29-109 (1)

29-109: ⚠️ Potential issue | 🟡 Minor

Use block comments for functions instead of line comments.

The functions rely on // comments, but the guideline asks for descriptive block comments. Consider converting the function headers to JSDoc-style blocks.

📝 Example conversion
-// Custom tooltip component
+/**
+ * Custom tooltip for pass-rate bars.
+ */
 function CustomTooltip({
 	active,
 	payload,
 }: {
 	active?: boolean;
 	payload?: Array<{
 		payload: { name: string; passRate: number; passed: number; total: number };
 	}>;
 }) {
 	// ...
 }
 
-// Get bar color based on pass rate
+/**
+ * Map a pass rate to a semantic color.
+ */
 function getBarColor(passRate: number): string {
 	// ...
 }
 
+/**
+ * Render a vertical bar chart for pass rate breakdowns.
+ */
 function PassRateBarChart({
 	data,
 }: {
 	data: Array<{
 		name: string;
 		passRate: number;
 		passed: number;
 		total: number;
 	}>;
 }) {
 	// ...
 }

Based on learnings, "Write concise, technical code with descriptive block comments for functions".

apps/dashboard/vite.config.ts-1-8 (1)

1-8: ⚠️ Potential issue | 🟡 Minor

Move the file header above imports and include exports/invariants.

The header isn’t at the top of the file and doesn’t document exports/invariants as required.

💡 Proposed fix
-import { existsSync, readFileSync } from "node:fs";
-import path from "node:path";
-import react from "@vitejs/plugin-react";
-/**
- *
- * Purpose: Vite configuration for plebdev-bench dashboard.
- * Configures React plugin, path aliases, and dev server for results.
- */
-import { type ViteDevServer, defineConfig } from "vite";
+/**
+ * Purpose: Vite configuration for plebdev-bench dashboard.
+ * Exports: Default Vite config for the dashboard app.
+ * Invariants: /results/ middleware serves only files under ../../results.
+ */
+import { existsSync, readFileSync } from "node:fs";
+import path from "node:path";
+import react from "@vitejs/plugin-react";
+import { type ViteDevServer, defineConfig } from "vite";
As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".
apps/dashboard/vite.config.ts-19-23 (1)

19-23: ⚠️ Potential issue | 🟡 Minor

Guard decodeURIComponent to prevent crashes from malformed URLs.

decodeURIComponent throws a URIError on invalid percent-encoded strings (e.g., stray %, incomplete escapes, or invalid UTF-8 sequences). Without a guard, this exception can bubble up and crash the middleware. Wrap the call in try-catch and return a 400 response for invalid paths.

Proposed fix
-					const parsed = new URL(req.url, "http://localhost");
-					const relativePath = decodeURIComponent(
-						parsed.pathname.replace("/results/", ""),
-					);
+					let relativePath: string;
+					try {
+						const parsed = new URL(req.url, "http://localhost");
+						relativePath = decodeURIComponent(
+							parsed.pathname.replace("/results/", ""),
+						);
+					} catch {
+						res.statusCode = 400;
+						res.end("Invalid results path");
+						return;
+					}
apps/dashboard/src/components/layout/header.tsx-8-9 (1)

8-9: ⚠️ Potential issue | 🟡 Minor

Add required TSDoc for Header.

The exported Header function is missing purpose, @returns, and @throws tags.

📝 TSDoc example
+/**
+ * Purpose: Renders the application header with primary navigation.
+ * `@returns` Header JSX element.
+ * `@throws` Never.
+ */
 export function Header() {

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/components/ui/badge.tsx-32-35 (1)

32-35: ⚠️ Potential issue | 🟡 Minor

Add required TSDoc for Badge.

The exported Badge function is missing purpose, params, returns, and throws tags.

📝 TSDoc example
+/**
+ * Purpose: Renders a styled badge.
+ * `@param` className - Additional class names.
+ * `@param` variant - Visual variant key.
+ * `@param` props - Remaining HTML div attributes.
+ * `@returns` Badge JSX element.
+ * `@throws` Never.
+ */
 function Badge({ className, variant, ...props }: BadgeProps) {

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/components/layout/header.tsx-1-5 (1)

1-5: ⚠️ Potential issue | 🟡 Minor

Move the file header to the top and include exports/invariants.

Line 1 import precedes the header, and the header doesn’t list exports or invariants. Please move the header above imports and add the missing fields.

🔧 Suggested header placement
-import { cn } from "@/lib/utils";
 /**
  * Purpose: Application header with navigation.
  * Provides links to Runs, Compare views.
+ * Exports: Header
+ * Invariants: Navigation items remain static and keyed by href.
  */
+import { cn } from "@/lib/utils";

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

apps/dashboard/src/components/ui/badge.tsx-1-7 (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Move the file header to the top and include exports/invariants.

The header comes after imports and doesn’t list exports or invariants. Please move it above imports and include the missing fields.

🔧 Suggested header placement
-import { cn } from "@/lib/utils";
-import { type VariantProps, cva } from "class-variance-authority";
 /**
  * Purpose: Badge component for status and labels.
  * Based on shadcn/ui Badge with terminal-native styling.
+ * Exports: Badge, badgeVariants
+ * Invariants: Variants map remains the single source of badge styles.
  */
+import { cn } from "@/lib/utils";
+import { type VariantProps, cva } from "class-variance-authority";
 import type * as React from "react";

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

apps/dashboard/src/components/run-list/run-card.tsx-11-18 (1)

11-18: ⚠️ Potential issue | 🟡 Minor

Add TSDoc for the exported RunCard component.
Include purpose, params, returns, and throws.

📝 Suggested TSDoc
 interface RunCardProps {
 	run: RunListItem;
 	/** Optional pass rate (0-1 scale) */
 	passRate?: number;
 }
 
+/**
+ * Purpose: Render a summary card for a benchmark run.
+ * `@param` run - Run summary data used for rendering.
+ * `@param` passRate - Optional pass rate in the 0-1 range.
+ * `@returns` Rendered run card element.
+ * `@throws` None.
+ */
 export function RunCard({ run, passRate }: RunCardProps) {

As per coding guidelines: "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

apps/dashboard/src/components/run-list/run-card.tsx-1-9 (1)

1-9: ⚠️ Potential issue | 🟡 Minor

Move the file header above imports and include exports/invariants.
The required header must be the first content in the file and include purpose, exports, and invariants.

🔧 Suggested header placement
+/**
+ * Purpose: Card component for displaying a single run summary.
+ * Exports: RunCard
+ * Invariants: passRate is 0-1 when provided; summary counts are non-negative.
+ */
 import { Badge } from "@/components/ui/badge";
 import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
 import type { RunListItem } from "@/lib/types";
 import { formatDate, formatDuration, formatPercent } from "@/lib/utils";
-/**
- * Purpose: Card component for displaying a single run summary.
- * Shows runId, timestamp, duration, pass rate, and item counts.
- */
 import { Link } from "react-router-dom";

As per coding guidelines: "Every file must start with a descriptive header describing purpose, exports, and invariants".

apps/dashboard/src/components/run-list/run-list-page.tsx-12-13 (1)

12-13: ⚠️ Potential issue | 🟡 Minor

Add TSDoc for the exported RunListPage component.
Include purpose, params (none), returns, and throws.

📝 Suggested TSDoc
 const RUN_LIST_SKELETON_KEYS = ["s1", "s2", "s3", "s4", "s5", "s6"] as const;
 
+/**
+ * Purpose: Render the benchmark runs list page.
+ * `@returns` Rendered runs list page element.
+ * `@throws` None.
+ */
 export function RunListPage() {

As per coding guidelines: "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

apps/dashboard/src/components/run-list/run-list-page.tsx-1-6 (1)

1-6: ⚠️ Potential issue | 🟡 Minor

Move the file header above imports and include exports/invariants.
The required header must be the first content in the file and include purpose, exports, and invariants.

🔧 Suggested header placement
+/**
+ * Purpose: Page component listing benchmark runs.
+ * Exports: RunListPage
+ * Invariants: useRuns provides sorted runs; skeleton keys are stable.
+ */
 import { PageContainer, PageHeader } from "@/components/layout/page-container";
 import { Skeleton } from "@/components/ui/skeleton";
-/**
- * Purpose: Run list page component displaying all benchmark runs.
- * Shows a grid of RunCard components sorted by date (newest first).
- */
 import { useRuns } from "@/hooks/use-runs";

As per coding guidelines: "Every file must start with a descriptive header describing purpose, exports, and invariants".

apps/dashboard/src/components/ui/tabs.tsx-1-7 (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Move the file header to the top and document exports/invariants.

The header no longer begins the file and doesn’t list exports/invariants.

📝 Suggested header placement and content
-import { cn } from "@/lib/utils";
-import * as TabsPrimitive from "@radix-ui/react-tabs";
-/**
- * Purpose: Tabs component for view switching.
- * Based on shadcn/ui Tabs (Radix UI) with terminal-native styling.
- */
-import * as React from "react";
+/**
+ * Purpose: Tabs component for view switching.
+ * Exports: Tabs, TabsList, TabsTrigger, TabsContent
+ * Invariants: Terminal-native styling wraps Radix Tabs primitives.
+ */
+import { cn } from "@/lib/utils";
+import * as TabsPrimitive from "@radix-ui/react-tabs";
+import * as React from "react";
As per coding guidelines: "Begin every file with a short header documenting purpose, exports, and invariants."
apps/dashboard/src/components/ui/card.tsx-1-6 (1)

1-6: ⚠️ Potential issue | 🟡 Minor

Move the file header to the top and document exports/invariants.

The header is no longer the first content in the file and doesn’t list exports/invariants.

📝 Suggested header placement and content
-import { cn } from "@/lib/utils";
-/**
- * Purpose: Card component for content containers.
- * Based on shadcn/ui Card with terminal-native styling.
- */
-import * as React from "react";
+/**
+ * Purpose: Card components for content containers.
+ * Exports: Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter
+ * Invariants: Terminal-native styling wraps shadcn/ui Card primitives.
+ */
+import { cn } from "@/lib/utils";
+import * as React from "react";
As per coding guidelines: "Begin every file with a short header documenting purpose, exports, and invariants."
apps/dashboard/src/components/ui/card.tsx-35-38 (1)

35-38: ⚠️ Potential issue | 🟡 Minor

Fix the ref element type for CardTitle.

CardTitle renders an <h3>, so the ref should be HTMLHeadingElement, not HTMLParagraphElement.

✅ Correct ref element type
-const CardTitle = React.forwardRef<
-	HTMLParagraphElement,
-	React.HTMLAttributes<HTMLHeadingElement>
->(({ className, ...props }, ref) => (
+const CardTitle = React.forwardRef<
+	HTMLHeadingElement,
+	React.HTMLAttributes<HTMLHeadingElement>
+>(({ className, ...props }, ref) => (
apps/dashboard/src/components/compare/run-selector.tsx-31-36 (1)

31-36: ⚠️ Potential issue | 🟡 Minor

Wire the label to SelectTrigger for screen reader accessibility.

The <p> label is not programmatically associated with the select control. Add aria-labelledby to make the label discoverable by assistive technologies.

Implementation using `useId`
+ const labelId = useId();
  {label && (
-   <p className="text-sm font-medium text-foreground-muted">{label}</p>
+   <p id={labelId} className="text-sm font-medium text-foreground-muted">
+     {label}
+   </p>
  )}
  <Select value={value} onValueChange={onValueChange}>
-   <SelectTrigger className="w-full md:w-[300px]">
+   <SelectTrigger
+     aria-labelledby={label ? labelId : undefined}
+     className="w-full md:w-[300px]"
+   >
      <SelectValue placeholder={placeholder} />
    </SelectTrigger>

Add the import:

import { useId } from "react";
apps/dashboard/src/hooks/use-run-detail.ts-1-7 (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Move the header comment to the top of the file.

The file currently begins with imports; the header should be the first content.

As per coding guidelines: "Every file must start with a descriptive header describing purpose, exports, and invariants".

apps/dashboard/src/components/compare/compare-table.tsx-1-5 (1)

1-5: ⚠️ Potential issue | 🟡 Minor

Place the header comment at the top of the file.

The header currently follows imports; it should be the first content in the file.

As per coding guidelines: "Every file must start with a descriptive header describing purpose, exports, and invariants".

apps/dashboard/src/components/compare/compare-table.tsx-22-25 (1)

22-25: ⚠️ Potential issue | 🟡 Minor

Add full TSDoc for CompareTable.

The exported component needs @param, @returns, and @throws.

📝 Suggested JSDoc block
+/**
+ * Renders the compare table for matched items.
+ * `@param` props - Compare table props
+ * `@returns` Table element with delta columns
+ * `@throws` Never
+ */
 export function CompareTable({
 	items,
 	showOnlyChanges = false,
 }: CompareTableProps) {

As per coding guidelines: "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

apps/dashboard/src/hooks/use-run-detail.ts-16-20 (1)

16-20: ⚠️ Potential issue | 🟡 Minor

Add @returns/@throws to the hook JSDoc.

The exported hook’s documentation is missing required tags.

📝 Suggested JSDoc update
 /**
  * Fetches both run.json and plan.json for a single run.
  * `@param` runId - The run ID to fetch
+ * `@returns` Run/plan data plus loading/error state
+ * `@throws` Never (errors are captured into state)
  */

As per coding guidelines: "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

apps/dashboard/src/components/compare/compare-table.tsx-138-181 (1)

138-181: ⚠️ Potential issue | 🟡 Minor

Add full TSDoc for RegressionsTable and ImprovementsTable.

Both exported components require @param, @returns, and @throws tags.

📝 Suggested JSDoc blocks
 /** Table showing regressions (completed → failed) */
+/**
+ * Renders the regressions table.
+ * `@param` props - Items to render
+ * `@returns` Table element listing regressions
+ * `@throws` Never
+ */
 export function RegressionsTable({ items }: { items: MatchedItem[] }) {

 ...

 /** Table showing improvements (failed → completed) */
+/**
+ * Renders the improvements table.
+ * `@param` props - Items to render
+ * `@returns` Table element listing improvements
+ * `@throws` Never
+ */
 export function ImprovementsTable({ items }: { items: MatchedItem[] }) {

As per coding guidelines: "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

apps/dashboard/scripts/build-index.ts-16-17 (1)

16-17: ⚠️ Potential issue | 🟡 Minor

Use Pino logger instead of console.log throughout this script.

The file matches the TS pattern where Pino should be used for logging. Multiple console.log calls (lines 16, 41, 44, 57, 60, 61, 65, 72) should be replaced with Pino logger calls for consistency with project logging standards.

llm/implementation/setup-phase-implementation.md-77-82 (1)

77-82: ⚠️ Potential issue | 🟡 Minor

Update runtime examples to include all supported runtimes.
The options table, MatrixItem example, and discovery notes still imply only “ollama.”

Suggested edits
-| `-r, --runtimes <runtimes...>` | Limit to specific runtimes: ollama | All available |
+| `-r, --runtimes <runtimes...>` | Limit to specific runtimes: ollama, vllm | All available |

-  runtime: string            // "ollama"
+  runtime: string            // "ollama" | "vllm"

-- Runtimes: If `config.runtimes` is empty, discover available runtimes (Ollama)
+-- Runtimes: If `config.runtimes` is empty, discover available runtimes (Ollama, vLLM)

Also applies to: 136-141, 223-226

apps/dashboard/src/components/charts/blind-vs-informed-chart.tsx-270-270 (1)

270-270: ⚠️ Potential issue | 🟡 Minor

Add JSDoc for exported BlindVsInformedChart.
Exported functions should document purpose/params/returns/throws.

Suggested JSDoc
+/**
+ * Purpose: Render blind vs informed pass-rate comparison by model/harness.
+ * `@param` items - Matrix item results to summarize
+ * `@returns` Chart card element
+ * `@throws` Never (renders empty states when data is missing)
+ */
 export function BlindVsInformedChart({ items }: BlindVsInformedChartProps) {
As per coding guidelines, “All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws.”
src/harnesses/opencode-output.ts-194-200 (1)

194-200: ⚠️ Potential issue | 🟡 Minor

Add an explicit @throws line to the exported JSDoc.
Even “never throws” should be documented per guideline.

Suggested JSDoc tweak
 /**
  * Normalize OpenCode JSON/JSONL output into plain assistant text or extracted tool-call code.
  *
  * `@param` raw - Raw stdout/stderr from OpenCode
  * `@returns` Normalized output and method indicator
+ * `@throws` Never (malformed output falls back to `{ method: "raw" }`)
  */
 export function normalizeOpenCodeOutput(raw: string): OpenCodeNormalizedOutput {
As per coding guidelines, “All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws.”
apps/dashboard/src/components/charts/frontier-eval-scatter.tsx-1-9 (1)

1-9: ⚠️ Potential issue | 🟡 Minor

Move/expand the file header to the top and include exports/invariants.
Right now the header appears after imports and doesn’t list exports/invariants.

Suggested update
+/**
+ * Purpose: Frontier eval scatter plot using Recharts.
+ * Exports: FrontierEvalScatter
+ * Invariants: items include automatedScore + frontierEval for plotting.
+ */
 import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
 import { WithInfoTooltip } from "@/components/ui/info-tooltip";
 import { computeItemPassRate } from "@/lib/aggregations";
 import { scatter as scatterTooltips } from "@/lib/tooltip-content";
 import type { MatrixItemResult } from "@/lib/types";
-/**
- * Purpose: Frontier eval scatter plot using Recharts.
- * Shows relationship between automated pass rate and frontier eval score.
- */
As per coding guidelines, “Begin every file with a short header documenting purpose, exports, and invariants.”
apps/dashboard/src/components/charts/frontier-eval-scatter.tsx-66-66 (1)

66-66: ⚠️ Potential issue | 🟡 Minor

Add JSDoc for exported FrontierEvalScatter.
Exported functions require purpose/params/returns/throws.

Suggested JSDoc
+/**
+ * Purpose: Render frontier-eval scatter plot for a set of matrix items.
+ * `@param` items - Matrix item results to plot
+ * `@returns` Chart card element
+ * `@throws` Never (renders empty state when no data)
+ */
 export function FrontierEvalScatter({ items }: FrontierEvalScatterProps) {
As per coding guidelines, “All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws.”
apps/dashboard/src/components/charts/blind-vs-informed-chart.tsx-1-15 (1)

1-15: ⚠️ Potential issue | 🟡 Minor

Move/expand the file header to the top and include exports/invariants.
The header sits after imports and doesn’t list exports/invariants.

Suggested update
+/**
+ * Purpose: Blind vs informed prompt comparison chart.
+ * Exports: BlindVsInformedChart
+ * Invariants: items include passType values (blind|informed).
+ */
 import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
 import { WithInfoTooltip } from "@/components/ui/info-tooltip";
 import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
@@
-import type { MatrixItemResult } from "@/lib/types";
-/**
- * Purpose: Blind vs informed prompt comparison chart.
- * Shows paired bars comparing pass rates between blind and informed prompts.
- */
+import type { MatrixItemResult } from "@/lib/types";
As per coding guidelines, “Begin every file with a short header documenting purpose, exports, and invariants.”
apps/dashboard/src/components/run-detail/matrix-table.tsx-69-73 (1)

69-73: ⚠️ Potential issue | 🟡 Minor

Clarify column header semantics: "PASS" header shows prompt type, not pass status.

The column header "PASS" (line 71) and tooltip "Prompt type: blind (no hints) or informed (includes guidance and examples)" indicate this column displays the prompt type dimension, but the header label is ambiguous—it could be confused with the TESTS column that shows actual pass rates. The cell content at line 123 confirms it displays item.passType ("blind" or "informed"), not a pass/fail indicator.

Consider renaming the header to "PASS TYPE" or "TYPE" to align with the actual content and clarify the distinction from the TESTS column.

apps/dashboard/src/components/charts/composite-score-chart.tsx-106-114 (1)

106-114: ⚠️ Potential issue | 🟡 Minor

Avoid truncated-name collisions in Y-axis click handling.

Lines 108 and 271–273 use truncated names to look up raw items. If two names share the same prefix, clicks can resolve to the wrong row.

✅ Safer mapping (keep raw name, truncate only for display)
-	return metrics.map((m) => ({
-		name: m.name.length > 20 ? `${m.name.slice(0, 18)}...` : m.name,
+	return metrics.map((m) => ({
+		name: m.name,
 		effectiveScore: m.effectiveScore * 100,
@@
-			<text
+			<text
 				x={-5}
 				y={0}
 				dy={4}
 				textAnchor="end"
 				fill="hsl(210, 30%, 92%)"
 				fontSize={12}
 				className={onClick ? "hover:fill-amber-400 transition-colors" : ""}
 			>
-				{payload.value}
+				{payload.value.length > 20
+					? `${payload.value.slice(0, 18)}...`
+					: payload.value}
 			</text>
@@
-							onClick={
-								onBarClick
-									? (name) => {
-											// Find the raw name from the data
-											const item = data.find((d) => d.name === name);
-											if (item) onBarClick(item.raw.name);
-										}
-									: undefined
-							}
+							onClick={onBarClick ? (name) => onBarClick(name) : undefined}
 						/>
 					)}
 				/>

Also applies to: 155-165, 260-276

apps/dashboard/src/components/charts/composite-score-chart.tsx-349-352 (1)

349-352: ⚠️ Potential issue | 🟡 Minor

Add required TSDoc for CompositeScoreChart.

The exported component needs purpose/params/returns/throws documentation.

📝 Example TSDoc
+/**
+ * Purpose: Render composite score charts by dimension.
+ * `@param` items - Matrix items used to compute composite metrics.
+ * `@param` onDimensionClick - Optional click handler for a selected dimension row.
+ * `@returns` Composite score chart card element.
+ * `@throws` Never.
+ */
 export function CompositeScoreChart({
 	items,
 	onDimensionClick,
 }: CompositeScoreChartProps) {

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/components/compare/compare-page.tsx-24-24 (1)

24-24: ⚠️ Potential issue | 🟡 Minor

Add required TSDoc for ComparePageContent.

Line 24 exports a component without the required TSDoc (purpose, params, returns, throws).

📝 Example TSDoc
+/**
+ * Purpose: Compare page component for comparing two benchmark runs.
+ * `@returns` Compare page content element.
+ * `@throws` Never.
+ */
 export function ComparePageContent() {

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/lib/aggregations-tooling.ts-21-26 (1)

21-26: ⚠️ Potential issue | 🟡 Minor

Add @throws to exported function TSDoc blocks.

The exported functions include purpose/params/returns but omit @throws.

📝 Example fix
 /**
  * Infers which harnesses are expected to use tools.
  *
  * `@param` items - Matrix items
  * `@returns` Set of harness names with expected tool usage
+ * `@throws` Never.
  */

As per coding guidelines, "All exported functions must have TSDoc/JSDoc with purpose, params, returns, and throws".

apps/dashboard/src/components/charts/composite-score-chart.tsx-1-19 (1)

1-19: ⚠️ Potential issue | 🟡 Minor

Move the header to the top and document exports/invariants.

The current purpose block starts after imports and omits exports/invariants.

💡 Suggested header placement
+/**
+ * Purpose: Composite score bar chart showing pass rate, tool success, and frontier score.
+ * Exports: CompositeScoreChart
+ * Invariants:
+ * - Metrics are normalized to 0–100 for display.
+ */
 import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
 import { WithInfoTooltip } from "@/components/ui/info-tooltip";
 import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
@@
-import type { KeyboardEvent } from "react";
-/**
- * Purpose: Composite score bar chart showing pass rate, tool success, and frontier score.
- * Replaces simple pass rate chart with multi-metric grouped bars.
- */
+import type { KeyboardEvent } from "react";

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

apps/dashboard/src/components/compare/compare-page.tsx-1-13 (1)

1-13: ⚠️ Potential issue | 🟡 Minor

Move the file header above imports and include exports/invariants.

Line 8 places the header after imports and it doesn’t document exports/invariants. Please move it to the top and include those fields.

💡 Suggested header placement
+/**
+ * Purpose: Compare page component for comparing two benchmark runs.
+ * Exports: ComparePageContent
+ * Invariants:
+ * - Requires two run selections to render comparison results.
+ */
 import { PageContainer, PageHeader } from "@/components/layout/page-container";
 import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
 import { Skeleton } from "@/components/ui/skeleton";
 import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
 import { useCompare } from "@/hooks/use-compare";
 import { useRuns } from "@/hooks/use-runs";
 import { formatDate } from "@/lib/utils";
-/**
- * Purpose: Compare page component for comparing two benchmark runs.
- * Provides run selectors and displays comparison results.
- */
 import { useEffect, useState } from "react";

As per coding guidelines, "Begin every file with a short header documenting purpose, exports, and invariants".

src/runtimes/discovery.ts-48-48 (1)

48-48: ⚠️ Potential issue | 🟡 Minor

Validate VLLM_API_KEY with Zod before use.

process.env.VLLM_API_KEY is a boundary input and should be validated with Zod. The same validation is already done in src/runtimes/index.ts - consider importing that validated value or applying the same pattern here.

✅ Suggested fix
+import { z } from "zod";
 import { logger } from "../lib/logger.js";
 import { createOllamaRuntime } from "./ollama-runtime.js";
 import type { RuntimeName } from "./runtime.js";
 import { createVllmRuntime } from "./vllm-runtime.js";
 
+const VllmApiKeySchema = z.string().min(1).optional();
+const vllmApiKey = VllmApiKeySchema.parse(process.env.VLLM_API_KEY);
+
 // ... in isRuntimeAvailable:
 		case "vllm": {
 			const runtime = createVllmRuntime({
 				baseUrl: config.vllmBaseUrl,
 				defaultTimeoutMs: config.timeoutMs,
-				apiKey: process.env.VLLM_API_KEY,
+				apiKey: vllmApiKey,
 			});

As per coding guidelines: "Treat all boundary inputs (CLI args, env, JSON files, HTTP responses) as 'unknown' and parse immediately with Zod."

src/harnesses/goose-output.ts-222-274 (1)

222-274: ⚠️ Potential issue | 🟡 Minor

Add @throws to the exported normalizeGooseOutput JSDoc.
The function doesn’t throw, but the guideline requires explicit @throws coverage.

📘 Doc update
 /**
  * Normalizes Goose JSON output into plain assistant text or extracted code.
  *
  * `@param` raw - Raw stdout from Goose
  * `@returns` Normalized output and method indicator
+ * `@throws` {Error} Never directly; malformed input returns a raw fallback.
  */
 export function normalizeGooseOutput(raw: string): GooseNormalizedOutput {

As per coding guidelines: "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

src/lib/model-aliases.ts-133-233 (1)

133-233: ⚠️ Potential issue | 🟡 Minor

Add @throws to the exported helper docs in this section.
parseInlineAliases can throw via parseInlineAlias, and the other exported helpers should explicitly document no-throw behavior to satisfy the guideline.

📘 Doc updates (apply similarly to the remaining exports)
 /**
  * Parses multiple inline alias definitions.
  *
  * `@param` inlines - Array of inline alias strings
  * `@returns` Combined alias map
+ * `@throws` {Error} If any inline definition is invalid (bubbles from parseInlineAlias)
  */
 export function parseInlineAliases(inlines: string[]): ModelAliasMap {
 /**
  * Checks if a model name is a known alias.
  *
  * `@param` modelName - Model name to check
  * `@param` aliases - Alias map to check against
  * `@returns` true if the name is a defined alias
+ * `@throws` {Error} Never directly
  */
 export function isAlias(modelName: string, aliases: ModelAliasMap): boolean {

As per coding guidelines: "All exported functions require TSDoc/JSDoc documentation (purpose, params, returns, throws)".

src/runner/index.ts-302-309 (1)

302-309: ⚠️ Potential issue | 🟡 Minor

Consider swallowing errors in the finally block to avoid masking the original exception.

If stopManagedVllm throws in the finally block, it will mask any exception that caused the loop to exit early. The cleanup should be best-effort.

🛡️ Proposed fix
 	} finally {
 		if (managedVllm && managedVllmStarted && managedVllm.stopAfterRun) {
 			log.warn(
 				"Benchmark ended while managed vLLM was running; stopping vLLM in finally...",
 			);
-			await stopManagedVllm(managedVllm);
+			try {
+				await stopManagedVllm(managedVllm);
+			} catch (cleanupError) {
+				log.error({ cleanupError }, "Failed to stop managed vLLM in finally block");
+			}
 		}
 	}

Comment thread apps/dashboard/scripts/build-index.ts
Comment thread apps/dashboard/src/components/compare/compare-page.tsx Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant