diff --git a/.claude/agents/code-reviewer.md b/.claude/agents/code-reviewer.md index f4508814..7912066a 100644 --- a/.claude/agents/code-reviewer.md +++ b/.claude/agents/code-reviewer.md @@ -3,4 +3,46 @@ name: code-reviewer description: Reviews code for quality, security, and NeoBoard conventions. model: sonnet --- -Senior reviewer for NeoBoard. Priority: 1) Security (credentials, parameterized queries, read-only, tenant isolation) 2) Query safety (timeouts, row limits, concurrency) 3) Architecture boundaries (component=UI, connection=DB, app=orchestration) 4) Performance (lazy loading, modular ECharts) 5) TypeScript strict 6) Tests. +Senior reviewer for NeoBoard. Check staged/unstaged changes against these rules in priority order. + +## Steps + +1. Run `git diff` and `git diff --cached` to get all changes. +2. Read each changed file to understand full context. +3. Check against the rules below. + +## Rules (priority order) + +### Security (BLOCKING) +- Parameterized queries only — no string interpolation in SQL/Cypher +- Credentials never logged or exposed in responses +- `tenant_id` filter present on all DB queries +- `can_write` enforced server-side in API routes, not just UI + +### Query Safety (BLOCKING) +- Read-only transactions for non-Form widgets +- Row limits use MAX_ROWS+1 pattern, never LIMIT on user queries +- Timeouts at driver level +- User queries never modified or wrapped + +### Architecture (HIGH) +- `component/` has no imports from `app/` or business logic +- `connection/` has no UI/React imports +- Charts use `next/dynamic` with `ssr: false` +- ECharts imports from `echarts/core` + specific modules + +### Code Quality (MEDIUM) +- TypeScript strict — no untyped `any` without justification +- New behavior has corresponding tests +- No over-engineering (single-use abstractions, premature generalization) + +## Output Format + +``` +[CRITICAL] file:line — Issue → Required fix +[HIGH] file:line — Issue → Suggested fix +[MEDIUM] file:line — Issue → Suggested fix + +Verdict: APPROVE | REQUEST CHANGES (N critical, N high) +Summary: One-line summary. +``` diff --git a/.claude/agents/project-architect.md b/.claude/agents/project-architect.md index 972a2922..f2e04093 100644 --- a/.claude/agents/project-architect.md +++ b/.claude/agents/project-architect.md @@ -3,11 +3,15 @@ name: project-architect description: Analyze feature requests and produce implementation plans with file impact analysis, dependency mapping, and risk assessment. Use before starting complex features. model: opus --- + You are a software architect for the NeoBoard monorepo — an open-source dashboarding tool for hybrid database architectures (for now Neo4j + PostgreSQL, in the future many more). +**Note:** This agent is for feature-level planning with requirement briefs. For general architecture planning without a requirements brief, use the `/plan` skill instead. + ## Context Read these files for project rules and architecture: + - `CLAUDE.md` — Working rules, architecture boundaries, query safety, credentials - `claude_code_docs/` — Detailed docs on testing, widget architecture, performance @@ -21,22 +25,39 @@ Next.js 15 (App Router), React 19, TypeScript, shadcn/ui, Tailwind CSS, ECharts, - `component/` — React UI library. NO business logic, NO API calls, NO stores. - `connection/` — DB connector library. NO UI, NO React. +## Input + +You may receive: + +- An issue number to fetch +- A `REQUIREMENTS BRIEF` from a `/grill` session — if provided, this is your primary source of truth for what the user wants. It contains answers to detailed clarifying questions about scope, UX, data model, security, edge cases, and testing. + ## Steps 1. If given an issue number, fetch it: `gh issue view ` -2. Read `CLAUDE.md` and relevant docs in `claude_code_docs/`. -3. Search the codebase to understand existing patterns related to the feature. -4. Produce a structured implementation plan. +2. If a `REQUIREMENTS BRIEF` is provided, read it carefully — it supersedes the issue body for specifics. +3. Read `CLAUDE.md` and relevant docs in `claude_code_docs/`. +4. Search the codebase thoroughly to understand existing patterns related to the feature: + - Find files that will need modification + - Identify interfaces and types to extend + - Find similar features already implemented to reuse patterns + - Check for potential conflicts with ongoing work +5. Produce a structured implementation plan. +6. Save the plan to `claude_code_docs/plans/issue-.md`. ## Output Format ``` # Implementation Plan: +## Requirements Summary +<2-3 sentences summarizing what was agreed during the grilling session — scope, MVP, key decisions> + ## Impact Analysis - Packages affected: [app, component, connection] - Files to modify: [path — what changes] - Files to create: [path — purpose] +- Estimated size: S / M / L / XL ## Existing Patterns to Reuse - `path/to/file.ts:line` — Pattern description @@ -62,13 +83,18 @@ Next.js 15 (App Router), React 19, TypeScript, shadcn/ui, Tailwind CSS, ECharts, 1. **[Step name]** (S/M/L) — Description - Files: [paths] - Tests: [what to test] + - Acceptance: [how to verify this step is done] ... ## Testing Strategy -- Unit tests: [what to cover] +- Unit tests: [what to cover, which files] - Integration tests: [what to cover] -- E2E tests: [what to cover] +- E2E tests: [critical user flows to cover] +- Edge cases from brief: [list specific edge cases identified during grilling] ## Risks - [Risk] — Mitigation + +## Open Questions +- [Any remaining ambiguity not resolved during grilling] ``` diff --git a/.claude/agents/test-runner.md b/.claude/agents/test-runner.md index 754b404e..976d52a5 100644 --- a/.claude/agents/test-runner.md +++ b/.claude/agents/test-runner.md @@ -10,7 +10,7 @@ You are a test runner agent for the NeoBoard monorepo. 1. Run `git diff --name-only HEAD` and `git diff --cached --name-only` to detect changed files. 2. Check that Docker is running. 3. Determine which packages are affected: - - Files under `app/` → run `cd app && npm test` and `cd app && npm test:test:e2e` (only if Docker is available) + - Files under `app/` → run `cd app && npm test` and `cd app && npx playwright test` (only if Docker is available) - Files under `component/` → run `cd component && npm test` - Files under `connection/` → run `cd connection && npm test` (only if Docker is available) 4. If no changes detected, ask which package to test or run all. diff --git a/.claude/settings.json b/.claude/settings.json index ee718972..98d87554 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -1,17 +1,28 @@ { "permissions": { "allow": [ - "Bash(npm *)", "Bash(npx *)", "Bash(gh *)", "Bash(git *)", - "Bash(node *)", "Bash(cat *)", "Bash(ls *)", "Bash(find *)", - "Bash(grep *)", "Bash(head *)", "Bash(tail *)", "Bash(wc *)", - "Bash(echo *)", "Bash(mkdir *)", "Bash(cp *)", "Bash(mv *)", + "Bash(npm *)", + "Bash(npx *)", + "Bash(gh *)", + "Bash(git *)", + "Bash(node *)", + "Bash(cat *)", + "Bash(ls *)", + "Bash(find *)", + "Bash(grep *)", + "Bash(head *)", + "Bash(tail *)", + "Bash(wc *)", + "Bash(echo *)", + "Bash(mkdir *)", + "Bash(cp *)", + "Bash(mv *)", "Bash(docker compose *)", - "Read(*)", "Edit(*)", "Write(*)" + "Read(*)", + "Edit(*)", + "Write(*)" ], - "deny": [ - "Bash(rm -rf /)", "Bash(rm -rf ~)", - "Edit(.env*)", "Write(.env*)" - ] + "deny": ["Bash(rm -rf /)", "Bash(rm -rf ~)", "Edit(.env*)", "Write(.env*)"] }, "hooks": { "PreToolUse": [ @@ -60,7 +71,7 @@ "hooks": [ { "type": "command", - "command": "printf 'CRITICAL RULES (re-injected after compaction):\\n- TDD mandatory: write failing test FIRST, then implement\\n- Package boundaries: component/ has NO business logic/API/stores; connection/ has NO React/UI\\n- Query safety: NEVER interpolate user input, ALWAYS parameterized queries\\n- Run cd app && npx next lint --fix after app/ changes\\n- Run npm run build before committing\\n- PRs target dev branch, not main\\n- Coverage target: 80%% per package'" + "command": "printf 'CRITICAL RULES (re-injected after compaction):\\n- TDD mandatory: write failing test FIRST, then implement\\n- Package boundaries: component/ has NO business logic/API/stores; connection/ has NO React/UI\\n- Query safety: NEVER interpolate user input, ALWAYS parameterized queries\\n- Run cd app && npx next lint --fix after app/ changes\\n- Run npm run build before committing\\n- PRs target dev branch, not main\\n- Coverage target: 80%% per package\\n- WORKTREE AGENTS: tests are safe to run locally (dynamic ports). CI is the source of truth.\\n- ORCHESTRATOR: max 3 concurrent workers. Never auto-merge. Track CONFLICT_FILES across workers.'" } ] } diff --git a/.claude/skills/code/SKILL.md b/.claude/skills/code/SKILL.md index f6c5a377..21cb757c 100644 --- a/.claude/skills/code/SKILL.md +++ b/.claude/skills/code/SKILL.md @@ -14,7 +14,7 @@ allowed-tools: Read, Write, Edit, MultiEdit, Bash(npm *), Bash(npx *), Bash(git 1. If issue number: `gh issue view ` 2. If existing PR: `gh pr view --comments` — check CodeRabbit & SonarQube feedback 3. Identify package: component/ (UI only), connection/ (DB only), app/ (orchestration) -4. Read relevant docs in `claude_code_docs/` (especially `v04-widget-power.md` for v0.4 issues) +4. Read relevant docs in `claude_code_docs/` ## TDD Workflow (mandatory — no exceptions) 1. **Red** — Write a failing test describing the expected behavior. Run it. Confirm it fails. diff --git a/.claude/skills/components/SKILL.md b/.claude/skills/components/SKILL.md index 12326ba9..d174471e 100644 --- a/.claude/skills/components/SKILL.md +++ b/.claude/skills/components/SKILL.md @@ -20,7 +20,7 @@ find component/src -name '*.tsx' -not -name '*.test.*' -not -name '*.stories.*' find component/src -name '*.stories.tsx' | head -40 # Read a story to understand a component's API and variants -cat component/src/charts/BarChart.stories.tsx +# (pick a relevant story from the list above) ``` ## Step 2 — Check before creating diff --git a/.claude/skills/next/SKILL.md b/.claude/skills/next/SKILL.md index 5339193e..baea599d 100644 --- a/.claude/skills/next/SKILL.md +++ b/.claude/skills/next/SKILL.md @@ -27,7 +27,7 @@ If $ARGUMENTS is a number, use that issue instead of picking. ```bash gh issue edit --add-assignee @me -git checkout main && git pull origin main +git checkout dev && git pull origin dev git checkout -b / ``` @@ -64,6 +64,7 @@ Reference the issue: `Closes #` git push -u origin HEAD gh pr create \ --title '' \ + --base dev \ --body '## Summary\n...\n\n## Changes\n...\n\n## Testing\n- [x] Unit tests\n- [x] Lint passes\n- [x] Build passes\n\nCloses #' \ --label '' ``` diff --git a/.claude/skills/plan/SKILL.md b/.claude/skills/plan/SKILL.md index 250dae84..7570dd07 100644 --- a/.claude/skills/plan/SKILL.md +++ b/.claude/skills/plan/SKILL.md @@ -3,14 +3,23 @@ name: plan description: Architecture plan for complex features. Analyzes impact, security, scalability, breaks into tasks. model: opus context: fork -allowed-tools: Read, Bash(cat *), Bash(ls *), Bash(find *), Bash(grep *), Bash(gh *), Bash(git log *) +allowed-tools: Read, Write, Bash(cat *), Bash(ls *), Bash(find *), Bash(grep *), Bash(gh *), Bash(git log *) --- # Plan — Opus + +You are a **planning-only** agent. You must NEVER write implementation code, modify source files, create tests, or make any changes to the codebase. Your ONLY job is to read, analyze, and produce a thorough written plan. + Use ultrathink. Analyze: requirements, architecture impact, security, scalability, dependencies. -Read relevant docs in `claude_code_docs/`. +Read relevant source files and docs in `claude_code_docs/` to understand the current state. + +For each task in the plan, provide: +- The exact file(s) to modify and what to change (with code snippets showing the before/after) +- Why the change is needed +- What tests to write and what they should assert +- Dependencies on other tasks -Output a plan with: Summary, Architecture Decision, Affected Packages, Ordered Tasks (S/M/L), Migration needed?, Security Checklist, Testing Strategy, Risks, Suggested GitHub Issues. +Output a plan with: Summary, Architecture Decision, Affected Packages, Ordered Tasks (S/M/L sized), Migration needed?, Security Checklist, Testing Strategy, Risks, Suggested GitHub Issues. -Save to `claude_code_docs/plans/`. +Save the plan to `claude_code_docs/plans/` using the Write tool. Do NOT modify any other files. $ARGUMENTS = feature or change to plan. diff --git a/.claude/skills/pr/SKILL.md b/.claude/skills/pr/SKILL.md index 9754f418..05194cac 100644 --- a/.claude/skills/pr/SKILL.md +++ b/.claude/skills/pr/SKILL.md @@ -7,11 +7,11 @@ allowed-tools: Bash(gh *), Bash(git *), Bash(npm *) --- ## State - Branch: !`git branch --show-current` -- Commits: !`git log origin/main..HEAD --oneline 2>/dev/null || echo 'No upstream'` -- Changed: !`git diff origin/main --name-only 2>/dev/null || git diff --name-only` +- Commits: !`git log origin/dev..HEAD --oneline 2>/dev/null || echo 'No upstream'` +- Changed: !`git diff origin/dev --name-only 2>/dev/null || git diff --name-only` ## Pre-flight (fix failures before creating PR) -1. `git fetch origin && git rebase origin/dev` +1. `git fetch origin && git rebase origin/dev` (PRs always target `dev`) 2. `npm run lint` 3. `npm run build` 4. Run tests for affected packages (`cd app && npm test`, `cd component && npm test`) diff --git a/.claude/skills/release-plan/SKILL.md b/.claude/skills/release-plan/SKILL.md index 6651b54f..52fc9187 100644 --- a/.claude/skills/release-plan/SKILL.md +++ b/.claude/skills/release-plan/SKILL.md @@ -3,7 +3,6 @@ name: release-plan description: Read a product spec or feature doc, break it into milestones and GitHub issues with proper labels, dependencies, and ordering. Use when turning a product spec into an actionable backlog. model: opus context: fork -disable-model-invocation: true allowed-tools: Read, Bash(gh *), Bash(cat *), Bash(find *), Bash(grep *), Bash(ls *) --- # Release Plan — Opus diff --git a/.claude/skills/review/SKILL.md b/.claude/skills/review/SKILL.md index 50e22ab1..abcfecbe 100644 --- a/.claude/skills/review/SKILL.md +++ b/.claude/skills/review/SKILL.md @@ -3,7 +3,7 @@ name: review description: Review changes for code quality, security, and NeoBoard conventions. model: sonnet context: fork -allowed-tools: Read, Bash(gh *), Bash(git *), Grep(*), Glob(*) +allowed-tools: Read, Write, Bash(gh *), Bash(git *), Grep(*), Glob(*) --- ## State - Branch: !`git branch --show-current` diff --git a/.claude/skills/test/SKILL.md b/.claude/skills/test/SKILL.md index 01e70171..b13ec817 100644 --- a/.claude/skills/test/SKILL.md +++ b/.claude/skills/test/SKILL.md @@ -38,7 +38,7 @@ cd app && npm test **App integration tests** (if app/ changed): ```bash -cd app && npm test:e2e +cd app && npx playwright test ``` **Component tests** (if component/ changed): diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 04237543..3cf87ad4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,13 +24,12 @@ concurrency: cancel-in-progress: true jobs: - # ── Job 1: Fast quality gate ──────────────────────────────────────────────── - # Lint + type-check all packages + component build. Fails fast before - # expensive test jobs start. - lint-typecheck: - name: Lint & Type Check + # ── Job 0: Type-check ─────────────────────────────────────────────────────── + # Pre-hook gates are bypassable; enforce type safety in CI as well. + typecheck: + name: TypeScript type-check runs-on: ubuntu-latest - timeout-minutes: 5 + timeout-minutes: 10 steps: - name: Checkout @@ -42,42 +41,40 @@ jobs: node-version: '20' cache: 'npm' cache-dependency-path: | - package-lock.json app/package-lock.json component/package-lock.json connection/package-lock.json - name: Install dependencies run: | - npm ci & - npm ci --prefix component & npm ci --prefix app & + APP_CI_PID=$! + npm ci --prefix component & + COMP_CI_PID=$! npm ci --prefix connection & - wait + CONN_CI_PID=$! - - name: Lint (all packages) - run: npm run lint - - - name: Type-check app - working-directory: app - run: npx tsc --noEmit + FAIL=0 + wait $APP_CI_PID || FAIL=1 + wait $COMP_CI_PID || FAIL=1 + wait $CONN_CI_PID || FAIL=1 + exit $FAIL - name: Type-check component working-directory: component run: npx tsc --noEmit - - name: Build component library - working-directory: component - run: npm run build + - name: Type-check app + working-directory: app + run: npx tsc --noEmit - # ── Job 2: Unit & integration tests with coverage ────────────────────────── - # Runs all three packages in a single job to avoid redundant npm ci. + # ── Job 1: Unit & integration tests with coverage ────────────────────────── + # All three packages run in parallel within a single job. # Connection integration tests use GitHub service containers. unit-tests: name: Unit & Integration Tests runs-on: ubuntu-latest - needs: lint-typecheck - timeout-minutes: 15 + timeout-minutes: 20 services: postgres: @@ -125,23 +122,32 @@ jobs: - name: Install dependencies run: | npm ci --prefix app & + APP_CI_PID=$! npm ci --prefix component & + COMP_CI_PID=$! npm ci --prefix connection & - wait - - - name: App unit tests (with coverage) - working-directory: app - run: npm run test:coverage - env: - NODE_ENV: test + CONN_CI_PID=$! - - name: Component unit tests (with coverage) - working-directory: component - run: npm run test:coverage + FAIL=0 + wait $APP_CI_PID || FAIL=1 + wait $COMP_CI_PID || FAIL=1 + wait $CONN_CI_PID || FAIL=1 + exit $FAIL - - name: Connection integration tests (with coverage) - working-directory: connection - run: npm run test:coverage + - name: Run all tests in parallel + run: | + cd app && NODE_ENV=test npm run test:coverage & + APP_PID=$! + cd component && npm run test:coverage & + COMP_PID=$! + cd connection && npm run test:coverage & + CONN_PID=$! + + FAIL=0 + wait $APP_PID || FAIL=1 + wait $COMP_PID || FAIL=1 + wait $CONN_PID || FAIL=1 + exit $FAIL env: POSTGRES_HOST: localhost POSTGRES_PORT: '5432' @@ -163,13 +169,12 @@ jobs: component/coverage/lcov.info connection/coverage/lcov.info - # ── Job 3: E2E tests with coverage ───────────────────────────────────────── + # ── Job 2: E2E tests with coverage ───────────────────────────────────────── # Playwright + Testcontainers. Runs in parallel with unit-tests. e2e: name: E2E Tests (Playwright) runs-on: ubuntu-latest - needs: lint-typecheck - timeout-minutes: 25 + timeout-minutes: 35 steps: - name: Checkout @@ -188,11 +193,23 @@ jobs: - name: Install dependencies + pre-pull container images run: | npm ci --prefix connection & + CONN_CI_PID=$! npm ci --prefix component & + COMP_CI_PID=$! npm ci --prefix app & + APP_CI_PID=$! docker pull postgres:16-alpine & + PG_PID=$! docker pull neo4j:5-community & - wait + NEO4J_PID=$! + + FAIL=0 + wait $CONN_CI_PID || FAIL=1 + wait $COMP_CI_PID || FAIL=1 + wait $APP_CI_PID || FAIL=1 + wait $PG_PID || FAIL=1 + wait $NEO4J_PID || FAIL=1 + exit $FAIL - name: Cache Playwright browsers id: playwright-cache @@ -252,12 +269,12 @@ jobs: path: app/coverage-e2e/lcov.info if-no-files-found: warn - # ── Job 4: SonarCloud scan (no test execution) ───────────────────────────── + # ── Job 3: SonarCloud scan (no test execution) ───────────────────────────── # Downloads coverage artifacts from unit-tests + e2e and runs the scan. sonar: name: SonarCloud Scan runs-on: ubuntu-latest - needs: [unit-tests, e2e] + needs: [typecheck, unit-tests, e2e] if: ${{ !cancelled() }} timeout-minutes: 10 diff --git a/CLAUDE.md b/CLAUDE.md index df2e7b26..f409ef61 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -61,7 +61,9 @@ Rules: **Coverage target: 80% per package** (unit + E2E combined). Track with `npm run test:coverage` in each package. -**Do NOT add Vitest render tests (jsdom + @testing-library/react) in `app/`.** Component rendering is tested via Playwright E2E with real data. Vitest in `app/` is for pure logic, API routes, stores, and hooks only. UI component tests belong in `component/` (isolated, no business logic) or as Playwright E2E specs. +**Do NOT add Vitest render tests (jsdom + @testing-library/react) in `app/`.** Component rendering is tested via Playwright E2E with real data and **server-side coverage collection** (`collectServer: true` in nextcov config). Vitest in `app/` is for pure logic, API routes, stores, and hooks only. UI component tests belong in `component/` (isolated, no business logic) or as Playwright E2E specs. + +**Vendored code** (e.g., `component/src/lib/cypher-lang/`) is excluded from SonarCloud coverage requirements but should have basic smoke tests to catch regressions from local modifications. ## Working Rules diff --git a/app/.screenshots/form-widget-403-write-permission.png b/app/.screenshots/form-widget-403-write-permission.png index 23a2afc8..bb5e3c65 100644 Binary files a/app/.screenshots/form-widget-403-write-permission.png and b/app/.screenshots/form-widget-403-write-permission.png differ diff --git a/app/drizzle/migrations/0000_broken_stranger.sql b/app/drizzle/migrations/0000_broken_stranger.sql deleted file mode 100644 index 03167e2d..00000000 --- a/app/drizzle/migrations/0000_broken_stranger.sql +++ /dev/null @@ -1,133 +0,0 @@ -DO $$ -BEGIN - PERFORM pg_advisory_lock(20260000); - - -- Create enums (ignore if already exist) - BEGIN - CREATE TYPE "public"."connection_type" AS ENUM('neo4j', 'postgresql'); - EXCEPTION WHEN duplicate_object THEN NULL; - END; - - BEGIN - CREATE TYPE "public"."share_role" AS ENUM('viewer', 'editor'); - EXCEPTION WHEN duplicate_object THEN NULL; - END; - - -- Create tables - CREATE TABLE IF NOT EXISTS "account" ( - "userId" text NOT NULL, - "type" text NOT NULL, - "provider" text NOT NULL, - "providerAccountId" text NOT NULL, - "refresh_token" text, - "access_token" text, - "expires_at" integer, - "token_type" text, - "scope" text, - "id_token" text, - "session_state" text - ); - - CREATE TABLE IF NOT EXISTS "connection" ( - "id" text PRIMARY KEY NOT NULL, - "userId" text NOT NULL, - "name" text NOT NULL, - "type" "connection_type" NOT NULL, - "configEncrypted" text NOT NULL, - "createdAt" timestamp DEFAULT now(), - "updatedAt" timestamp DEFAULT now() - ); - - CREATE TABLE IF NOT EXISTS "dashboard_share" ( - "id" text PRIMARY KEY NOT NULL, - "dashboardId" text NOT NULL, - "userId" text NOT NULL, - "role" "share_role" NOT NULL, - "createdAt" timestamp DEFAULT now() - ); - - CREATE TABLE IF NOT EXISTS "dashboard" ( - "id" text PRIMARY KEY NOT NULL, - "userId" text NOT NULL, - "name" text NOT NULL, - "description" text, - "layoutJson" jsonb DEFAULT '{"widgets":[],"gridLayout":[]}'::jsonb, - "isPublic" boolean DEFAULT false, - "createdAt" timestamp DEFAULT now(), - "updatedAt" timestamp DEFAULT now() - ); - - CREATE TABLE IF NOT EXISTS "session" ( - "sessionToken" text PRIMARY KEY NOT NULL, - "userId" text NOT NULL, - "expires" timestamp NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "user" ( - "id" text PRIMARY KEY NOT NULL, - "name" text, - "email" text, - "emailVerified" timestamp, - "image" text, - "passwordHash" text, - "createdAt" timestamp DEFAULT now(), - CONSTRAINT "user_email_unique" UNIQUE("email") - ); - - CREATE TABLE IF NOT EXISTS "verificationToken" ( - "identifier" text NOT NULL, - "token" text NOT NULL, - "expires" timestamp NOT NULL - ); - - -- Add foreign keys (skip if already exist) - IF NOT EXISTS ( - SELECT 1 FROM information_schema.table_constraints - WHERE constraint_name = 'account_userId_user_id_fk' AND table_schema = 'public' - ) THEN - ALTER TABLE "account" ADD CONSTRAINT "account_userId_user_id_fk" - FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; - END IF; - - IF NOT EXISTS ( - SELECT 1 FROM information_schema.table_constraints - WHERE constraint_name = 'connection_userId_user_id_fk' AND table_schema = 'public' - ) THEN - ALTER TABLE "connection" ADD CONSTRAINT "connection_userId_user_id_fk" - FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; - END IF; - - IF NOT EXISTS ( - SELECT 1 FROM information_schema.table_constraints - WHERE constraint_name = 'dashboard_share_dashboardId_dashboard_id_fk' AND table_schema = 'public' - ) THEN - ALTER TABLE "dashboard_share" ADD CONSTRAINT "dashboard_share_dashboardId_dashboard_id_fk" - FOREIGN KEY ("dashboardId") REFERENCES "public"."dashboard"("id") ON DELETE cascade ON UPDATE no action; - END IF; - - IF NOT EXISTS ( - SELECT 1 FROM information_schema.table_constraints - WHERE constraint_name = 'dashboard_share_userId_user_id_fk' AND table_schema = 'public' - ) THEN - ALTER TABLE "dashboard_share" ADD CONSTRAINT "dashboard_share_userId_user_id_fk" - FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; - END IF; - - IF NOT EXISTS ( - SELECT 1 FROM information_schema.table_constraints - WHERE constraint_name = 'dashboard_userId_user_id_fk' AND table_schema = 'public' - ) THEN - ALTER TABLE "dashboard" ADD CONSTRAINT "dashboard_userId_user_id_fk" - FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; - END IF; - - IF NOT EXISTS ( - SELECT 1 FROM information_schema.table_constraints - WHERE constraint_name = 'session_userId_user_id_fk' AND table_schema = 'public' - ) THEN - ALTER TABLE "session" ADD CONSTRAINT "session_userId_user_id_fk" - FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; - END IF; - - PERFORM pg_advisory_unlock(20260000); -END $$; diff --git a/app/drizzle/migrations/0000_wooden_zeigeist.sql b/app/drizzle/migrations/0000_wooden_zeigeist.sql new file mode 100644 index 00000000..cae9bb7a --- /dev/null +++ b/app/drizzle/migrations/0000_wooden_zeigeist.sql @@ -0,0 +1,114 @@ +CREATE TYPE "public"."connection_type" AS ENUM('neo4j', 'postgresql');--> statement-breakpoint +CREATE TYPE "public"."share_role" AS ENUM('viewer', 'editor');--> statement-breakpoint +CREATE TYPE "public"."user_role" AS ENUM('admin', 'creator', 'reader');--> statement-breakpoint +CREATE TABLE "account" ( + "userId" text NOT NULL, + "type" text NOT NULL, + "provider" text NOT NULL, + "providerAccountId" text NOT NULL, + "refresh_token" text, + "access_token" text, + "expires_at" integer, + "token_type" text, + "scope" text, + "id_token" text, + "session_state" text +); +--> statement-breakpoint +CREATE TABLE "api_key" ( + "id" text PRIMARY KEY NOT NULL, + "userId" text NOT NULL, + "tenant_id" text DEFAULT 'default' NOT NULL, + "key_hash" text NOT NULL, + "name" text NOT NULL, + "last_used_at" timestamp, + "expires_at" timestamp, + "created_at" timestamp DEFAULT now(), + CONSTRAINT "api_key_key_hash_unique" UNIQUE("key_hash") +); +--> statement-breakpoint +CREATE TABLE "connection" ( + "id" text PRIMARY KEY NOT NULL, + "userId" text NOT NULL, + "name" text NOT NULL, + "type" "connection_type" NOT NULL, + "configEncrypted" text NOT NULL, + "createdAt" timestamp DEFAULT now(), + "updatedAt" timestamp DEFAULT now() +); +--> statement-breakpoint +CREATE TABLE "dashboard_share" ( + "id" text PRIMARY KEY NOT NULL, + "dashboardId" text NOT NULL, + "userId" text NOT NULL, + "tenant_id" text DEFAULT 'default' NOT NULL, + "role" "share_role" NOT NULL, + "createdAt" timestamp DEFAULT now() +); +--> statement-breakpoint +CREATE TABLE "dashboard" ( + "id" text PRIMARY KEY NOT NULL, + "userId" text NOT NULL, + "tenant_id" text DEFAULT 'default' NOT NULL, + "name" text NOT NULL, + "description" text, + "layoutJson" jsonb DEFAULT '{"version":2,"pages":[{"id":"page-1","title":"Page 1","widgets":[],"gridLayout":[]}]}'::jsonb, + "thumbnailJson" jsonb, + "isPublic" boolean DEFAULT false, + "createdAt" timestamp DEFAULT now(), + "updatedAt" timestamp DEFAULT now(), + "updated_by" text +); +--> statement-breakpoint +CREATE TABLE "session" ( + "sessionToken" text PRIMARY KEY NOT NULL, + "userId" text NOT NULL, + "expires" timestamp NOT NULL +); +--> statement-breakpoint +CREATE TABLE "user" ( + "id" text PRIMARY KEY NOT NULL, + "name" text, + "email" text, + "emailVerified" timestamp, + "image" text, + "passwordHash" text, + "role" "user_role" DEFAULT 'creator' NOT NULL, + "can_write" boolean DEFAULT true NOT NULL, + "createdAt" timestamp DEFAULT now(), + CONSTRAINT "user_email_unique" UNIQUE("email") +); +--> statement-breakpoint +CREATE TABLE "verificationToken" ( + "identifier" text NOT NULL, + "token" text NOT NULL, + "expires" timestamp NOT NULL +); +--> statement-breakpoint +CREATE TABLE "widget_template" ( + "id" text PRIMARY KEY NOT NULL, + "name" text NOT NULL, + "description" text, + "tags" text[] DEFAULT '{}', + "chartType" text NOT NULL, + "connectorType" text NOT NULL, + "connectionId" text, + "query" text DEFAULT '' NOT NULL, + "params" jsonb, + "settings" jsonb, + "previewImageUrl" text, + "createdBy" text NOT NULL, + "tenant_id" text DEFAULT 'default' NOT NULL, + "createdAt" timestamp DEFAULT now(), + "updatedAt" timestamp DEFAULT now() +); +--> statement-breakpoint +ALTER TABLE "account" ADD CONSTRAINT "account_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "api_key" ADD CONSTRAINT "api_key_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "connection" ADD CONSTRAINT "connection_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "dashboard_share" ADD CONSTRAINT "dashboard_share_dashboardId_dashboard_id_fk" FOREIGN KEY ("dashboardId") REFERENCES "public"."dashboard"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "dashboard_share" ADD CONSTRAINT "dashboard_share_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "dashboard" ADD CONSTRAINT "dashboard_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "dashboard" ADD CONSTRAINT "dashboard_updated_by_user_id_fk" FOREIGN KEY ("updated_by") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "session" ADD CONSTRAINT "session_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "widget_template" ADD CONSTRAINT "widget_template_createdBy_user_id_fk" FOREIGN KEY ("createdBy") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; \ No newline at end of file diff --git a/app/drizzle/migrations/0001_groovy_the_phantom.sql b/app/drizzle/migrations/0001_groovy_the_phantom.sql new file mode 100644 index 00000000..47b11e7c --- /dev/null +++ b/app/drizzle/migrations/0001_groovy_the_phantom.sql @@ -0,0 +1 @@ +ALTER TABLE "connection" ADD COLUMN "tenant_id" text DEFAULT 'default' NOT NULL; \ No newline at end of file diff --git a/app/drizzle/migrations/0001_user_role.sql b/app/drizzle/migrations/0001_user_role.sql deleted file mode 100644 index 694c35df..00000000 --- a/app/drizzle/migrations/0001_user_role.sql +++ /dev/null @@ -1,18 +0,0 @@ -DO $$ -BEGIN - PERFORM pg_advisory_lock(20260001); - - BEGIN - CREATE TYPE "public"."user_role" AS ENUM('admin', 'creator', 'reader'); - EXCEPTION WHEN duplicate_object THEN NULL; - END; - - IF NOT EXISTS ( - SELECT 1 FROM information_schema.columns - WHERE table_name = 'user' AND column_name = 'role' - ) THEN - ALTER TABLE "user" ADD COLUMN "role" "user_role" DEFAULT 'creator' NOT NULL; - END IF; - - PERFORM pg_advisory_unlock(20260001); -END $$; diff --git a/app/drizzle/migrations/0002_tenant_id.sql b/app/drizzle/migrations/0002_tenant_id.sql deleted file mode 100644 index 2cf44452..00000000 --- a/app/drizzle/migrations/0002_tenant_id.sql +++ /dev/null @@ -1,20 +0,0 @@ -DO $$ -BEGIN - PERFORM pg_advisory_lock(20260002); - - IF NOT EXISTS ( - SELECT 1 FROM information_schema.columns - WHERE table_name = 'dashboard' AND column_name = 'tenant_id' - ) THEN - ALTER TABLE "dashboard" ADD COLUMN "tenant_id" text NOT NULL DEFAULT 'default'; - END IF; - - IF NOT EXISTS ( - SELECT 1 FROM information_schema.columns - WHERE table_name = 'dashboard_share' AND column_name = 'tenant_id' - ) THEN - ALTER TABLE "dashboard_share" ADD COLUMN "tenant_id" text NOT NULL DEFAULT 'default'; - END IF; - - PERFORM pg_advisory_unlock(20260002); -END $$; diff --git a/app/drizzle/migrations/0003_stormy_apocalypse.sql b/app/drizzle/migrations/0003_stormy_apocalypse.sql deleted file mode 100644 index 6fa8b17e..00000000 --- a/app/drizzle/migrations/0003_stormy_apocalypse.sql +++ /dev/null @@ -1,12 +0,0 @@ -DO $$ -BEGIN - PERFORM pg_advisory_lock(20260001); - IF ( - SELECT column_default - FROM information_schema.columns - WHERE table_name = 'dashboard' AND column_name = 'layoutJson' - ) IS DISTINCT FROM '{"version":2,"pages":[{"id":"page-1","title":"Page 1","widgets":[],"gridLayout":[]}]}'::text THEN - ALTER TABLE "dashboard" ALTER COLUMN "layoutJson" SET DEFAULT '{"version":2,"pages":[{"id":"page-1","title":"Page 1","widgets":[],"gridLayout":[]}]}'::jsonb; - END IF; - PERFORM pg_advisory_unlock(20260001); -END $$; diff --git a/app/drizzle/migrations/0004_can_write.sql b/app/drizzle/migrations/0004_can_write.sql deleted file mode 100644 index df819ff9..00000000 --- a/app/drizzle/migrations/0004_can_write.sql +++ /dev/null @@ -1,11 +0,0 @@ -DO $$ -BEGIN - PERFORM pg_advisory_lock(20260004); - IF NOT EXISTS ( - SELECT 1 FROM information_schema.columns - WHERE table_name = 'user' AND column_name = 'can_write' - ) THEN - ALTER TABLE "user" ADD COLUMN "can_write" BOOLEAN NOT NULL DEFAULT true; - END IF; - PERFORM pg_advisory_unlock(20260004); -END $$; diff --git a/app/drizzle/migrations/0005_widget_template.sql b/app/drizzle/migrations/0005_widget_template.sql deleted file mode 100644 index a750fa22..00000000 --- a/app/drizzle/migrations/0005_widget_template.sql +++ /dev/null @@ -1,25 +0,0 @@ -DO $$ -BEGIN - PERFORM pg_advisory_lock(20260004); - IF NOT EXISTS ( - SELECT 1 FROM information_schema.tables - WHERE table_name = 'widget_template' - ) THEN - CREATE TABLE "widget_template" ( - "id" text PRIMARY KEY NOT NULL, - "name" text NOT NULL, - "description" text, - "tags" text[] DEFAULT '{}', - "chartType" text NOT NULL, - "connectorType" text NOT NULL, - "query" text NOT NULL DEFAULT '', - "params" jsonb, - "settings" jsonb, - "createdBy" text NOT NULL REFERENCES "user"("id") ON DELETE CASCADE, - "tenant_id" text NOT NULL DEFAULT 'default', - "createdAt" timestamp DEFAULT now(), - "updatedAt" timestamp DEFAULT now() - ); - END IF; - PERFORM pg_advisory_unlock(20260004); -END $$; diff --git a/app/drizzle/migrations/0006_preview_image_url.sql b/app/drizzle/migrations/0006_preview_image_url.sql deleted file mode 100644 index 4bc7ad06..00000000 --- a/app/drizzle/migrations/0006_preview_image_url.sql +++ /dev/null @@ -1,11 +0,0 @@ -DO $$ -BEGIN - PERFORM pg_advisory_lock(20260006); - IF NOT EXISTS ( - SELECT 1 FROM information_schema.columns - WHERE table_name = 'widget_template' AND column_name = 'previewImageUrl' - ) THEN - ALTER TABLE "widget_template" ADD COLUMN "previewImageUrl" TEXT; - END IF; - PERFORM pg_advisory_unlock(20260006); -END $$; diff --git a/app/drizzle/migrations/0007_keen_the_captain.sql b/app/drizzle/migrations/0007_keen_the_captain.sql deleted file mode 100644 index 71c18911..00000000 --- a/app/drizzle/migrations/0007_keen_the_captain.sql +++ /dev/null @@ -1,13 +0,0 @@ -DO $$ -BEGIN - PERFORM pg_advisory_lock(20260007); - - IF NOT EXISTS ( - SELECT 1 FROM information_schema.columns - WHERE table_name = 'user' AND column_name = 'can_write' - ) THEN - ALTER TABLE "user" ADD COLUMN "can_write" boolean DEFAULT true NOT NULL; - END IF; - - PERFORM pg_advisory_unlock(20260007); -END $$; diff --git a/app/drizzle/migrations/0008_template_connection_id.sql b/app/drizzle/migrations/0008_template_connection_id.sql deleted file mode 100644 index 33a1f69d..00000000 --- a/app/drizzle/migrations/0008_template_connection_id.sql +++ /dev/null @@ -1,9 +0,0 @@ -DO $$ -BEGIN - IF NOT EXISTS ( - SELECT 1 FROM information_schema.columns - WHERE table_name = 'widget_template' AND column_name = 'connectionId' - ) THEN - ALTER TABLE "widget_template" ADD COLUMN "connectionId" text; - END IF; -END $$; diff --git a/app/drizzle/migrations/0009_dashboard_thumbnails.sql b/app/drizzle/migrations/0009_dashboard_thumbnails.sql deleted file mode 100644 index 4b7f1cf2..00000000 --- a/app/drizzle/migrations/0009_dashboard_thumbnails.sql +++ /dev/null @@ -1,11 +0,0 @@ -DO $$ -BEGIN - PERFORM pg_advisory_xact_lock(20260009); - - IF NOT EXISTS ( - SELECT 1 FROM information_schema.columns - WHERE table_name = 'dashboard' AND column_name = 'thumbnailJson' - ) THEN - ALTER TABLE "dashboard" ADD COLUMN "thumbnailJson" jsonb; - END IF; -END $$; diff --git a/app/drizzle/migrations/0010_updated_by.sql b/app/drizzle/migrations/0010_updated_by.sql deleted file mode 100644 index f085c5ad..00000000 --- a/app/drizzle/migrations/0010_updated_by.sql +++ /dev/null @@ -1,11 +0,0 @@ -DO $$ -BEGIN - PERFORM pg_advisory_xact_lock(20260010); - - IF NOT EXISTS ( - SELECT 1 FROM information_schema.columns - WHERE table_name = 'dashboard' AND column_name = 'updated_by' - ) THEN - ALTER TABLE "dashboard" ADD COLUMN "updated_by" text REFERENCES "user"("id") ON DELETE SET NULL; - END IF; -END $$; diff --git a/app/drizzle/migrations/0011_api_keys.sql b/app/drizzle/migrations/0011_api_keys.sql deleted file mode 100644 index d7fd27d1..00000000 --- a/app/drizzle/migrations/0011_api_keys.sql +++ /dev/null @@ -1,20 +0,0 @@ -DO $$ -BEGIN - PERFORM pg_advisory_xact_lock(20260011); - IF NOT EXISTS ( - SELECT 1 FROM information_schema.tables - WHERE table_name = 'api_key' AND table_schema = 'public' - ) THEN - CREATE TABLE "api_key" ( - "id" text PRIMARY KEY, - "userId" text NOT NULL REFERENCES "user"("id") ON DELETE CASCADE, - "tenant_id" text NOT NULL DEFAULT 'default', - "key_hash" text NOT NULL UNIQUE, - "name" text NOT NULL, - "last_used_at" timestamp, - "expires_at" timestamp, - "created_at" timestamp DEFAULT now() - ); - CREATE INDEX "api_key_user_id_idx" ON "api_key" ("userId"); - END IF; -END $$; diff --git a/app/drizzle/migrations/meta/0000_snapshot.json b/app/drizzle/migrations/meta/0000_snapshot.json index 55bd5b0a..f7a2f610 100644 --- a/app/drizzle/migrations/meta/0000_snapshot.json +++ b/app/drizzle/migrations/meta/0000_snapshot.json @@ -1,5 +1,5 @@ { - "id": "fc9d5399-db40-4766-abdd-af28bcba0225", + "id": "17208288-2aaa-46a7-9c62-39817edc1550", "prevId": "00000000-0000-0000-0000-000000000000", "version": "7", "dialect": "postgresql", @@ -81,12 +81,8 @@ "name": "account_userId_user_id_fk", "tableFrom": "account", "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], + "columnsFrom": ["userId"], + "columnsTo": ["id"], "onDelete": "cascade", "onUpdate": "no action" } @@ -97,6 +93,85 @@ "checkConstraints": {}, "isRLSEnabled": false }, + "public.api_key": { + "name": "api_key", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'default'" + }, + "key_hash": { + "name": "key_hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "last_used_at": { + "name": "last_used_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "api_key_userId_user_id_fk": { + "name": "api_key_userId_user_id_fk", + "tableFrom": "api_key", + "tableTo": "user", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "api_key_key_hash_unique": { + "name": "api_key_key_hash_unique", + "nullsNotDistinct": false, + "columns": ["key_hash"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, "public.connection": { "name": "connection", "schema": "", @@ -153,12 +228,8 @@ "name": "connection_userId_user_id_fk", "tableFrom": "connection", "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], + "columnsFrom": ["userId"], + "columnsTo": ["id"], "onDelete": "cascade", "onUpdate": "no action" } @@ -191,6 +262,13 @@ "primaryKey": false, "notNull": true }, + "tenant_id": { + "name": "tenant_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'default'" + }, "role": { "name": "role", "type": "share_role", @@ -212,12 +290,8 @@ "name": "dashboard_share_dashboardId_dashboard_id_fk", "tableFrom": "dashboard_share", "tableTo": "dashboard", - "columnsFrom": [ - "dashboardId" - ], - "columnsTo": [ - "id" - ], + "columnsFrom": ["dashboardId"], + "columnsTo": ["id"], "onDelete": "cascade", "onUpdate": "no action" }, @@ -225,12 +299,8 @@ "name": "dashboard_share_userId_user_id_fk", "tableFrom": "dashboard_share", "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], + "columnsFrom": ["userId"], + "columnsTo": ["id"], "onDelete": "cascade", "onUpdate": "no action" } @@ -257,6 +327,13 @@ "primaryKey": false, "notNull": true }, + "tenant_id": { + "name": "tenant_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'default'" + }, "name": { "name": "name", "type": "text", @@ -274,7 +351,13 @@ "type": "jsonb", "primaryKey": false, "notNull": false, - "default": "'{\"widgets\":[],\"gridLayout\":[]}'::jsonb" + "default": "'{\"version\":2,\"pages\":[{\"id\":\"page-1\",\"title\":\"Page 1\",\"widgets\":[],\"gridLayout\":[]}]}'::jsonb" + }, + "thumbnailJson": { + "name": "thumbnailJson", + "type": "jsonb", + "primaryKey": false, + "notNull": false }, "isPublic": { "name": "isPublic", @@ -296,6 +379,12 @@ "primaryKey": false, "notNull": false, "default": "now()" + }, + "updated_by": { + "name": "updated_by", + "type": "text", + "primaryKey": false, + "notNull": false } }, "indexes": {}, @@ -304,14 +393,19 @@ "name": "dashboard_userId_user_id_fk", "tableFrom": "dashboard", "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], + "columnsFrom": ["userId"], + "columnsTo": ["id"], "onDelete": "cascade", "onUpdate": "no action" + }, + "dashboard_updated_by_user_id_fk": { + "name": "dashboard_updated_by_user_id_fk", + "tableFrom": "dashboard", + "tableTo": "user", + "columnsFrom": ["updated_by"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, @@ -349,12 +443,8 @@ "name": "session_userId_user_id_fk", "tableFrom": "session", "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], + "columnsFrom": ["userId"], + "columnsTo": ["id"], "onDelete": "cascade", "onUpdate": "no action" } @@ -405,6 +495,21 @@ "primaryKey": false, "notNull": false }, + "role": { + "name": "role", + "type": "user_role", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'creator'" + }, + "can_write": { + "name": "can_write", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, "createdAt": { "name": "createdAt", "type": "timestamp", @@ -420,9 +525,7 @@ "user_email_unique": { "name": "user_email_unique", "nullsNotDistinct": false, - "columns": [ - "email" - ] + "columns": ["email"] } }, "policies": {}, @@ -459,24 +562,141 @@ "policies": {}, "checkConstraints": {}, "isRLSEnabled": false + }, + "public.widget_template": { + "name": "widget_template", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "tags": { + "name": "tags", + "type": "text[]", + "primaryKey": false, + "notNull": false, + "default": "'{}'" + }, + "chartType": { + "name": "chartType", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "connectorType": { + "name": "connectorType", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "connectionId": { + "name": "connectionId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "query": { + "name": "query", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "params": { + "name": "params", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "settings": { + "name": "settings", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "previewImageUrl": { + "name": "previewImageUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdBy": { + "name": "createdBy", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'default'" + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "widget_template_createdBy_user_id_fk": { + "name": "widget_template_createdBy_user_id_fk", + "tableFrom": "widget_template", + "tableTo": "user", + "columnsFrom": ["createdBy"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false } }, "enums": { "public.connection_type": { "name": "connection_type", "schema": "public", - "values": [ - "neo4j", - "postgresql" - ] + "values": ["neo4j", "postgresql"] }, "public.share_role": { "name": "share_role", "schema": "public", - "values": [ - "viewer", - "editor" - ] + "values": ["viewer", "editor"] + }, + "public.user_role": { + "name": "user_role", + "schema": "public", + "values": ["admin", "creator", "reader"] } }, "schemas": {}, @@ -489,4 +709,4 @@ "schemas": {}, "tables": {} } -} \ No newline at end of file +} diff --git a/app/drizzle/migrations/meta/0008_snapshot.json b/app/drizzle/migrations/meta/0001_snapshot.json similarity index 83% rename from app/drizzle/migrations/meta/0008_snapshot.json rename to app/drizzle/migrations/meta/0001_snapshot.json index f3cbfd3b..a105ac15 100644 --- a/app/drizzle/migrations/meta/0008_snapshot.json +++ b/app/drizzle/migrations/meta/0001_snapshot.json @@ -1,6 +1,6 @@ { - "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "prevId": "cc0fe4c6-cd8a-4709-9bb8-0985da8df09a", + "id": "118fbb90-f931-48b7-9385-be5afc431bf8", + "prevId": "17208288-2aaa-46a7-9c62-39817edc1550", "version": "7", "dialect": "postgresql", "tables": { @@ -97,6 +97,91 @@ "checkConstraints": {}, "isRLSEnabled": false }, + "public.api_key": { + "name": "api_key", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "tenant_id": { + "name": "tenant_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'default'" + }, + "key_hash": { + "name": "key_hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "last_used_at": { + "name": "last_used_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "api_key_userId_user_id_fk": { + "name": "api_key_userId_user_id_fk", + "tableFrom": "api_key", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "api_key_key_hash_unique": { + "name": "api_key_key_hash_unique", + "nullsNotDistinct": false, + "columns": [ + "key_hash" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, "public.connection": { "name": "connection", "schema": "", @@ -113,6 +198,13 @@ "primaryKey": false, "notNull": true }, + "tenant_id": { + "name": "tenant_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'default'" + }, "name": { "name": "name", "type": "text", @@ -290,6 +382,12 @@ "notNull": false, "default": "'{\"version\":2,\"pages\":[{\"id\":\"page-1\",\"title\":\"Page 1\",\"widgets\":[],\"gridLayout\":[]}]}'::jsonb" }, + "thumbnailJson": { + "name": "thumbnailJson", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, "isPublic": { "name": "isPublic", "type": "boolean", @@ -310,6 +408,12 @@ "primaryKey": false, "notNull": false, "default": "now()" + }, + "updated_by": { + "name": "updated_by", + "type": "text", + "primaryKey": false, + "notNull": false } }, "indexes": {}, @@ -326,6 +430,19 @@ ], "onDelete": "cascade", "onUpdate": "no action" + }, + "dashboard_updated_by_user_id_fk": { + "name": "dashboard_updated_by_user_id_fk", + "tableFrom": "dashboard", + "tableTo": "user", + "columnsFrom": [ + "updated_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, diff --git a/app/drizzle/migrations/meta/0003_snapshot.json b/app/drizzle/migrations/meta/0003_snapshot.json deleted file mode 100644 index cac34905..00000000 --- a/app/drizzle/migrations/meta/0003_snapshot.json +++ /dev/null @@ -1,523 +0,0 @@ -{ - "id": "ea365329-b84c-4626-8765-31a67059a9d5", - "prevId": "fc9d5399-db40-4766-abdd-af28bcba0225", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "token_type": { - "name": "token_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "session_state": { - "name": "session_state", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "account_userId_user_id_fk": { - "name": "account_userId_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.connection": { - "name": "connection", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "connection_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "configEncrypted": { - "name": "configEncrypted", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "connection_userId_user_id_fk": { - "name": "connection_userId_user_id_fk", - "tableFrom": "connection", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dashboard_share": { - "name": "dashboard_share", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "dashboardId": { - "name": "dashboardId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "role": { - "name": "role", - "type": "share_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "dashboard_share_dashboardId_dashboard_id_fk": { - "name": "dashboard_share_dashboardId_dashboard_id_fk", - "tableFrom": "dashboard_share", - "tableTo": "dashboard", - "columnsFrom": [ - "dashboardId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dashboard_share_userId_user_id_fk": { - "name": "dashboard_share_userId_user_id_fk", - "tableFrom": "dashboard_share", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dashboard": { - "name": "dashboard", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "layoutJson": { - "name": "layoutJson", - "type": "jsonb", - "primaryKey": false, - "notNull": false, - "default": "'{\"version\":2,\"pages\":[{\"id\":\"page-1\",\"title\":\"Page 1\",\"widgets\":[],\"gridLayout\":[]}]}'::jsonb" - }, - "isPublic": { - "name": "isPublic", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "dashboard_userId_user_id_fk": { - "name": "dashboard_userId_user_id_fk", - "tableFrom": "dashboard", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "sessionToken": { - "name": "sessionToken", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_userId_user_id_fk": { - "name": "session_userId_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailVerified": { - "name": "emailVerified", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "passwordHash": { - "name": "passwordHash", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "role": { - "name": "role", - "type": "user_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'creator'" - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_email_unique": { - "name": "user_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verificationToken": { - "name": "verificationToken", - "schema": "", - "columns": { - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.connection_type": { - "name": "connection_type", - "schema": "public", - "values": [ - "neo4j", - "postgresql" - ] - }, - "public.share_role": { - "name": "share_role", - "schema": "public", - "values": [ - "viewer", - "editor" - ] - }, - "public.user_role": { - "name": "user_role", - "schema": "public", - "values": [ - "admin", - "creator", - "reader" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/app/drizzle/migrations/meta/0004_snapshot.json b/app/drizzle/migrations/meta/0004_snapshot.json deleted file mode 100644 index efbea0a5..00000000 --- a/app/drizzle/migrations/meta/0004_snapshot.json +++ /dev/null @@ -1,523 +0,0 @@ -{ - "id": "aafe637b-2158-45ac-a07f-2f11be9bb256", - "prevId": "4c47d2d3-36ea-416c-a41f-b4a7b7a7d366", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "token_type": { - "name": "token_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "session_state": { - "name": "session_state", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "account_userId_user_id_fk": { - "name": "account_userId_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.connection": { - "name": "connection", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "connection_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "configEncrypted": { - "name": "configEncrypted", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "connection_userId_user_id_fk": { - "name": "connection_userId_user_id_fk", - "tableFrom": "connection", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dashboard_share": { - "name": "dashboard_share", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "dashboardId": { - "name": "dashboardId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "role": { - "name": "role", - "type": "share_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "dashboard_share_dashboardId_dashboard_id_fk": { - "name": "dashboard_share_dashboardId_dashboard_id_fk", - "tableFrom": "dashboard_share", - "tableTo": "dashboard", - "columnsFrom": [ - "dashboardId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dashboard_share_userId_user_id_fk": { - "name": "dashboard_share_userId_user_id_fk", - "tableFrom": "dashboard_share", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dashboard": { - "name": "dashboard", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "layoutJson": { - "name": "layoutJson", - "type": "jsonb", - "primaryKey": false, - "notNull": false, - "default": "'{\"version\":2,\"pages\":[{\"id\":\"page-1\",\"title\":\"Page 1\",\"widgets\":[],\"gridLayout\":[]}]}'::jsonb" - }, - "isPublic": { - "name": "isPublic", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "dashboard_userId_user_id_fk": { - "name": "dashboard_userId_user_id_fk", - "tableFrom": "dashboard", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "sessionToken": { - "name": "sessionToken", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_userId_user_id_fk": { - "name": "session_userId_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailVerified": { - "name": "emailVerified", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "passwordHash": { - "name": "passwordHash", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "role": { - "name": "role", - "type": "user_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'creator'" - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_email_unique": { - "name": "user_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verificationToken": { - "name": "verificationToken", - "schema": "", - "columns": { - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.connection_type": { - "name": "connection_type", - "schema": "public", - "values": [ - "neo4j", - "postgresql" - ] - }, - "public.share_role": { - "name": "share_role", - "schema": "public", - "values": [ - "viewer", - "editor" - ] - }, - "public.user_role": { - "name": "user_role", - "schema": "public", - "values": [ - "admin", - "creator", - "reader" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/app/drizzle/migrations/meta/0005_snapshot.json b/app/drizzle/migrations/meta/0005_snapshot.json deleted file mode 100644 index 235427a2..00000000 --- a/app/drizzle/migrations/meta/0005_snapshot.json +++ /dev/null @@ -1,633 +0,0 @@ -{ - "id": "38eea08c-d8b6-498f-ae9e-bfaf9ab5e1b8", - "prevId": "aafe637b-2158-45ac-a07f-2f11be9bb256", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "token_type": { - "name": "token_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "session_state": { - "name": "session_state", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "account_userId_user_id_fk": { - "name": "account_userId_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.connection": { - "name": "connection", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "connection_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "configEncrypted": { - "name": "configEncrypted", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "connection_userId_user_id_fk": { - "name": "connection_userId_user_id_fk", - "tableFrom": "connection", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dashboard_share": { - "name": "dashboard_share", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "dashboardId": { - "name": "dashboardId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "role": { - "name": "role", - "type": "share_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "dashboard_share_dashboardId_dashboard_id_fk": { - "name": "dashboard_share_dashboardId_dashboard_id_fk", - "tableFrom": "dashboard_share", - "tableTo": "dashboard", - "columnsFrom": [ - "dashboardId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dashboard_share_userId_user_id_fk": { - "name": "dashboard_share_userId_user_id_fk", - "tableFrom": "dashboard_share", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dashboard": { - "name": "dashboard", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "layoutJson": { - "name": "layoutJson", - "type": "jsonb", - "primaryKey": false, - "notNull": false, - "default": "'{\"version\":2,\"pages\":[{\"id\":\"page-1\",\"title\":\"Page 1\",\"widgets\":[],\"gridLayout\":[]}]}'::jsonb" - }, - "isPublic": { - "name": "isPublic", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "dashboard_userId_user_id_fk": { - "name": "dashboard_userId_user_id_fk", - "tableFrom": "dashboard", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "sessionToken": { - "name": "sessionToken", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_userId_user_id_fk": { - "name": "session_userId_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailVerified": { - "name": "emailVerified", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "passwordHash": { - "name": "passwordHash", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "role": { - "name": "role", - "type": "user_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'creator'" - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_email_unique": { - "name": "user_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verificationToken": { - "name": "verificationToken", - "schema": "", - "columns": { - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.widget_template": { - "name": "widget_template", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "tags": { - "name": "tags", - "type": "text[]", - "primaryKey": false, - "notNull": false, - "default": "'{}'" - }, - "chartType": { - "name": "chartType", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "connectorType": { - "name": "connectorType", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "query": { - "name": "query", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "params": { - "name": "params", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "settings": { - "name": "settings", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "createdBy": { - "name": "createdBy", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "widget_template_createdBy_user_id_fk": { - "name": "widget_template_createdBy_user_id_fk", - "tableFrom": "widget_template", - "tableTo": "user", - "columnsFrom": [ - "createdBy" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.connection_type": { - "name": "connection_type", - "schema": "public", - "values": [ - "neo4j", - "postgresql" - ] - }, - "public.share_role": { - "name": "share_role", - "schema": "public", - "values": [ - "viewer", - "editor" - ] - }, - "public.user_role": { - "name": "user_role", - "schema": "public", - "values": [ - "admin", - "creator", - "reader" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/app/drizzle/migrations/meta/0006_snapshot.json b/app/drizzle/migrations/meta/0006_snapshot.json deleted file mode 100644 index 2090b732..00000000 --- a/app/drizzle/migrations/meta/0006_snapshot.json +++ /dev/null @@ -1,639 +0,0 @@ -{ - "id": "9d3a3c18-65e7-46ff-9eba-d83a8299489f", - "prevId": "38eea08c-d8b6-498f-ae9e-bfaf9ab5e1b8", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "token_type": { - "name": "token_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "session_state": { - "name": "session_state", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "account_userId_user_id_fk": { - "name": "account_userId_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.connection": { - "name": "connection", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "connection_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "configEncrypted": { - "name": "configEncrypted", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "connection_userId_user_id_fk": { - "name": "connection_userId_user_id_fk", - "tableFrom": "connection", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dashboard_share": { - "name": "dashboard_share", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "dashboardId": { - "name": "dashboardId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "role": { - "name": "role", - "type": "share_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "dashboard_share_dashboardId_dashboard_id_fk": { - "name": "dashboard_share_dashboardId_dashboard_id_fk", - "tableFrom": "dashboard_share", - "tableTo": "dashboard", - "columnsFrom": [ - "dashboardId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dashboard_share_userId_user_id_fk": { - "name": "dashboard_share_userId_user_id_fk", - "tableFrom": "dashboard_share", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dashboard": { - "name": "dashboard", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "layoutJson": { - "name": "layoutJson", - "type": "jsonb", - "primaryKey": false, - "notNull": false, - "default": "'{\"version\":2,\"pages\":[{\"id\":\"page-1\",\"title\":\"Page 1\",\"widgets\":[],\"gridLayout\":[]}]}'::jsonb" - }, - "isPublic": { - "name": "isPublic", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "dashboard_userId_user_id_fk": { - "name": "dashboard_userId_user_id_fk", - "tableFrom": "dashboard", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "sessionToken": { - "name": "sessionToken", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_userId_user_id_fk": { - "name": "session_userId_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailVerified": { - "name": "emailVerified", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "passwordHash": { - "name": "passwordHash", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "role": { - "name": "role", - "type": "user_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'creator'" - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_email_unique": { - "name": "user_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verificationToken": { - "name": "verificationToken", - "schema": "", - "columns": { - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.widget_template": { - "name": "widget_template", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "tags": { - "name": "tags", - "type": "text[]", - "primaryKey": false, - "notNull": false, - "default": "'{}'" - }, - "chartType": { - "name": "chartType", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "connectorType": { - "name": "connectorType", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "query": { - "name": "query", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "params": { - "name": "params", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "settings": { - "name": "settings", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "createdBy": { - "name": "createdBy", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "previewImageUrl": { - "name": "previewImageUrl", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "widget_template_createdBy_user_id_fk": { - "name": "widget_template_createdBy_user_id_fk", - "tableFrom": "widget_template", - "tableTo": "user", - "columnsFrom": [ - "createdBy" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.connection_type": { - "name": "connection_type", - "schema": "public", - "values": [ - "neo4j", - "postgresql" - ] - }, - "public.share_role": { - "name": "share_role", - "schema": "public", - "values": [ - "viewer", - "editor" - ] - }, - "public.user_role": { - "name": "user_role", - "schema": "public", - "values": [ - "admin", - "creator", - "reader" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/app/drizzle/migrations/meta/0007_snapshot.json b/app/drizzle/migrations/meta/0007_snapshot.json deleted file mode 100644 index d1d0c5d3..00000000 --- a/app/drizzle/migrations/meta/0007_snapshot.json +++ /dev/null @@ -1,646 +0,0 @@ -{ - "id": "cc0fe4c6-cd8a-4709-9bb8-0985da8df09a", - "prevId": "9d3a3c18-65e7-46ff-9eba-d83a8299489f", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "token_type": { - "name": "token_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "session_state": { - "name": "session_state", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "account_userId_user_id_fk": { - "name": "account_userId_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.connection": { - "name": "connection", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "connection_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "configEncrypted": { - "name": "configEncrypted", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "connection_userId_user_id_fk": { - "name": "connection_userId_user_id_fk", - "tableFrom": "connection", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dashboard_share": { - "name": "dashboard_share", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "dashboardId": { - "name": "dashboardId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "role": { - "name": "role", - "type": "share_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "dashboard_share_dashboardId_dashboard_id_fk": { - "name": "dashboard_share_dashboardId_dashboard_id_fk", - "tableFrom": "dashboard_share", - "tableTo": "dashboard", - "columnsFrom": [ - "dashboardId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dashboard_share_userId_user_id_fk": { - "name": "dashboard_share_userId_user_id_fk", - "tableFrom": "dashboard_share", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dashboard": { - "name": "dashboard", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "layoutJson": { - "name": "layoutJson", - "type": "jsonb", - "primaryKey": false, - "notNull": false, - "default": "'{\"version\":2,\"pages\":[{\"id\":\"page-1\",\"title\":\"Page 1\",\"widgets\":[],\"gridLayout\":[]}]}'::jsonb" - }, - "isPublic": { - "name": "isPublic", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "dashboard_userId_user_id_fk": { - "name": "dashboard_userId_user_id_fk", - "tableFrom": "dashboard", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "sessionToken": { - "name": "sessionToken", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_userId_user_id_fk": { - "name": "session_userId_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailVerified": { - "name": "emailVerified", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "passwordHash": { - "name": "passwordHash", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "role": { - "name": "role", - "type": "user_role", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'creator'" - }, - "can_write": { - "name": "can_write", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_email_unique": { - "name": "user_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verificationToken": { - "name": "verificationToken", - "schema": "", - "columns": { - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.widget_template": { - "name": "widget_template", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "tags": { - "name": "tags", - "type": "text[]", - "primaryKey": false, - "notNull": false, - "default": "'{}'" - }, - "chartType": { - "name": "chartType", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "connectorType": { - "name": "connectorType", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "query": { - "name": "query", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "params": { - "name": "params", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "settings": { - "name": "settings", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "previewImageUrl": { - "name": "previewImageUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdBy": { - "name": "createdBy", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tenant_id": { - "name": "tenant_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'default'" - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "widget_template_createdBy_user_id_fk": { - "name": "widget_template_createdBy_user_id_fk", - "tableFrom": "widget_template", - "tableTo": "user", - "columnsFrom": [ - "createdBy" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.connection_type": { - "name": "connection_type", - "schema": "public", - "values": [ - "neo4j", - "postgresql" - ] - }, - "public.share_role": { - "name": "share_role", - "schema": "public", - "values": [ - "viewer", - "editor" - ] - }, - "public.user_role": { - "name": "user_role", - "schema": "public", - "values": [ - "admin", - "creator", - "reader" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/app/drizzle/migrations/meta/_journal.json b/app/drizzle/migrations/meta/_journal.json index a4f2ed63..f27286c1 100644 --- a/app/drizzle/migrations/meta/_journal.json +++ b/app/drizzle/migrations/meta/_journal.json @@ -5,85 +5,15 @@ { "idx": 0, "version": "7", - "when": 1771158046983, - "tag": "0000_broken_stranger", + "when": 1773765270786, + "tag": "0000_wooden_zeigeist", "breakpoints": true }, { "idx": 1, "version": "7", - "when": 1771200000000, - "tag": "0001_user_role", - "breakpoints": true - }, - { - "idx": 2, - "version": "7", - "when": 1771286400000, - "tag": "0002_tenant_id", - "breakpoints": true - }, - { - "idx": 3, - "version": "7", - "when": 1771860582454, - "tag": "0003_stormy_apocalypse", - "breakpoints": true - }, - { - "idx": 4, - "version": "7", - "when": 1771946400000, - "tag": "0004_can_write", - "breakpoints": true - }, - { - "idx": 5, - "version": "7", - "when": 1772000000000, - "tag": "0005_widget_template", - "breakpoints": true - }, - { - "idx": 6, - "version": "7", - "when": 1772986400000, - "tag": "0006_preview_image_url", - "breakpoints": true - }, - { - "idx": 7, - "version": "7", - "when": 1773054729831, - "tag": "0007_keen_the_captain", - "breakpoints": true - }, - { - "idx": 8, - "version": "7", - "when": 1773230400000, - "tag": "0008_template_connection_id", - "breakpoints": true - }, - { - "idx": 9, - "version": "7", - "when": 1773316800000, - "tag": "0009_dashboard_thumbnails", - "breakpoints": true - }, - { - "idx": 10, - "version": "7", - "when": 1773403200000, - "tag": "0010_updated_by", - "breakpoints": true - }, - { - "idx": 11, - "version": "7", - "when": 1773489600000, - "tag": "0011_api_keys", + "when": 1774104530432, + "tag": "0001_groovy_the_phantom", "breakpoints": true } ] diff --git a/app/e2e/api-keys.spec.ts b/app/e2e/api-keys.spec.ts index df6b8bf8..e7259ea2 100644 --- a/app/e2e/api-keys.spec.ts +++ b/app/e2e/api-keys.spec.ts @@ -80,8 +80,9 @@ test.describe("API Key management", () => { await dialog.getByRole("button", { name: "Done" }).click(); - // Use the API key to make a programmatic request - const res = await request.get("http://localhost:3100/api/keys", { + // Use the API key to make a programmatic request. + // request.get() uses the baseURL from Playwright config, so we use a relative path. + const res = await request.get("/api/keys", { headers: { Authorization: `Bearer ${keyText}`, }, @@ -136,7 +137,8 @@ test.describe("API key authentication", () => { test("should return 401 when using an invalid API key", async ({ request, }) => { - const res = await request.get("http://localhost:3100/api/keys", { + // request.get() uses the baseURL from Playwright config, so we use a relative path. + const res = await request.get("/api/keys", { headers: { Authorization: "Bearer nb_" + "f".repeat(64), }, diff --git a/app/e2e/charts.spec.ts b/app/e2e/charts.spec.ts index 17624266..37492be9 100644 --- a/app/e2e/charts.spec.ts +++ b/app/e2e/charts.spec.ts @@ -950,7 +950,7 @@ test.describe("Map widget", () => { const dialog = page.getByRole("dialog", { name: "Add Widget" }); await dialog.getByRole("combobox").nth(1).click(); - await page.getByRole("option", { name: "Map" }).click(); + await page.getByRole("option", { name: "Map", exact: true }).click(); await dialog.getByRole("combobox").nth(0).click(); await page.getByRole("option", { name: /Movies Graph/ }).click(); @@ -974,7 +974,7 @@ test.describe("Map widget", () => { const dialog = page.getByRole("dialog", { name: "Add Widget" }); await dialog.getByRole("combobox").nth(1).click(); - await page.getByRole("option", { name: "Map" }).click(); + await page.getByRole("option", { name: "Map", exact: true }).click(); await dialog.getByRole("combobox").nth(0).click(); await page.getByRole("option", { name: /PostgreSQL/ }).click(); @@ -998,7 +998,7 @@ test.describe("Map widget", () => { const dialog = page.getByRole("dialog", { name: "Add Widget" }); await dialog.getByRole("combobox").nth(1).click(); - await page.getByRole("option", { name: "Map" }).click(); + await page.getByRole("option", { name: "Map", exact: true }).click(); await dialog.getByRole("combobox").nth(0).click(); await page.getByRole("option", { name: /Movies Graph/ }).click(); diff --git a/app/e2e/code-completion.spec.ts b/app/e2e/code-completion.spec.ts new file mode 100644 index 00000000..9ea1d647 --- /dev/null +++ b/app/e2e/code-completion.spec.ts @@ -0,0 +1,342 @@ +/** + * E2E tests: schema-aware code completion in the query editor. + * + * Covers: + * - SQL table-name completions from PostgreSQL schema (after FROM) + * - Cypher label completions from Neo4j schema (after ":") + * - Schema refresh button: click → fetching state → settled state + */ +import { test, expect, ALICE, createTestDashboard } from "./fixtures"; +import type { Locator, Page } from "@playwright/test"; + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +/** + * Wait until the CodeMirror editor is mounted, writable, and fully initialised. + */ +async function waitForEditorReady(dialog: Locator, page: Page): Promise { + const container = dialog.locator("[data-testid='codemirror-container']"); + await container + .locator(".cm-editor") + .waitFor({ state: "visible", timeout: 10_000 }); + await expect(container).toHaveAttribute("data-readonly", "false", { + timeout: 10_000, + }); + await expect(container).toHaveAttribute("data-editor-ready", "true", { + timeout: 15_000, + }); + + // Poll for 3 consecutive "ready" checks (600 ms stable window) to rule out + // any re-mount triggered by async schema-fetch or dynamic-import side-effects. + let stableCount = 0; + for (let i = 0; i < 15; i++) { + await page.waitForTimeout(200); + const ready = await container.getAttribute("data-editor-ready"); + stableCount = ready === "true" ? stableCount + 1 : 0; + if (stableCount >= 3) break; + } + if (stableCount < 3) { + throw new Error( + `Editor never stabilized: data-editor-ready was "true" for ${stableCount}/3 consecutive checks`, + ); + } +} + +/** + * Wait for the schema API response to complete (watches the /schema network + * request) and then allows time for the async reconfigure pipeline: + * Zustand store → React re-render → QueryEditor schema effect → loadSqlExt → dispatch + * + * Uses the Refresh button's enabled state as the primary readiness signal, + * then polls until no further CM6 reconfigurations are happening. + */ +async function waitForSchemaLoaded(dialog: Locator, page: Page): Promise { + const refreshBtn = dialog.getByRole("button", { name: "Refresh schema" }); + await expect(refreshBtn).toBeVisible({ timeout: 10_000 }); + await expect(refreshBtn).toBeEnabled({ timeout: 20_000 }); + + // Wait for the editor to settle after the schema propagates through the + // async pipeline: fetch → store → render → effect → dynamic import → dispatch. + // Poll data-editor-ready to confirm the editor hasn't been torn down by a + // late-arriving reconfigure. + const container = dialog.locator("[data-testid='codemirror-container']"); + let stableCount = 0; + for (let i = 0; i < 20; i++) { + await page.waitForTimeout(200); + const ready = await container.getAttribute("data-editor-ready"); + stableCount = ready === "true" ? stableCount + 1 : 0; + if (stableCount >= 5) break; // 1 s stable window + } +} + +/** + * Trigger autocomplete in the Cypher editor with retry. + * The neo4j-cypher editor's completion source needs the schema to be fully + * propagated through the editor-support instance before it returns results. + * Retry Ctrl+Space until the popup appears. + * + * Note: Do NOT press Escape — it will close the parent dialog, not the popup. + */ +async function triggerCypherAutocomplete( + page: Page, + maxRetries = 5, +): Promise { + for (let i = 0; i < maxRetries; i++) { + await page.keyboard.press("Control+Space"); + try { + await page.waitForFunction( + () => !!document.querySelector(".cm-tooltip-autocomplete"), + { timeout: 2_000 }, + ); + return; // Popup appeared + } catch { + // Popup didn't appear — wait and retry + await page.waitForTimeout(1000); + } + } +} + +/** + * Click inside the CM editor content area and type text via keyboard events. + * After typing, re-clicks the editor to ensure focus is fully settled — the + * neo4j-cypher editor's completion keymap requires a settled focus state that + * keyboard.type() alone doesn't guarantee. + */ +async function typeInCmEditor( + dialog: Locator, + page: Page, + text: string, +): Promise { + const cm = dialog.locator("[data-testid='codemirror-container'] .cm-content"); + await cm.click(); + await page.keyboard.type(text, { delay: 30 }); + // Re-focus: the Cypher editor's CM6 completion keymap needs a settled focus + // state after programmatic typing. Without this, Ctrl+Space may not trigger. + await page.waitForTimeout(100); + await cm.click(); +} + +/** + * Wait for the CM6 autocomplete popup to appear. Uses raw JS DOM query via + * waitForFunction because Playwright's locator system cannot reliably resolve + * the dynamically-created `.cm-tooltip-autocomplete` element. + */ +async function waitForAutocompletePopup( + page: Page, + timeout = 10_000, +): Promise { + await page.waitForFunction( + () => { + const el = document.querySelector(".cm-tooltip-autocomplete"); + if (!el) return false; + const style = window.getComputedStyle(el); + return style.display !== "none" && style.visibility !== "hidden"; + }, + { timeout }, + ); +} + +/** + * Check if a specific completion option is visible in the autocomplete popup. + */ +async function hasCompletionItem( + page: Page, + pattern: RegExp, +): Promise { + return page.evaluate( + ([source, flags]) => { + const el = document.querySelector(".cm-tooltip-autocomplete"); + if (!el) return false; + const re = new RegExp(source, flags); + const items = el.querySelectorAll("[role='option'], li"); + return Array.from(items).some((item) => re.test(item.textContent ?? "")); + }, + [pattern.source, pattern.flags] as [string, string], + ); +} + +// --------------------------------------------------------------------------- +// Suite +// --------------------------------------------------------------------------- + +test.describe("Code completion — Cypher + SQL", () => { + let dashboardCleanup: (() => Promise) | undefined; + + // Autocomplete tests depend on schema fetch + async reconfigure; allow extra time. + test.setTimeout(60_000); + + test.beforeEach(async ({ authPage, page }) => { + await authPage.login(ALICE.email, ALICE.password); + const { id, cleanup } = await createTestDashboard( + page.request, + `Code Completion ${Date.now()}`, + ); + dashboardCleanup = cleanup; + await page.goto(`/${id}/edit`); + await expect(page.getByText("Editing:")).toBeVisible(); + }); + + test.afterEach(async () => { + await dashboardCleanup?.(); + }); + + // ── SQL: table-name completions ───────────────────────────────────────── + + test("SQL editor shows table name completions from PostgreSQL schema", async ({ + page, + }) => { + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + // Select the PostgreSQL connection + await dialog.getByRole("combobox").nth(0).click(); + await page.getByRole("option", { name: /PostgreSQL/i }).click(); + + await waitForEditorReady(dialog, page); + await waitForSchemaLoaded(dialog, page); + + await typeInCmEditor(dialog, page, "SELECT * FROM m"); + await page.keyboard.press("Control+Space"); + await waitForAutocompletePopup(page); + + // The seeded PostgreSQL database exposes a "movies" table. + expect(await hasCompletionItem(page, /movies/i)).toBe(true); + }); + + test("SQL editor shows column name completions from PostgreSQL schema", async ({ + page, + }) => { + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + await dialog.getByRole("combobox").nth(0).click(); + await page.getByRole("option", { name: /PostgreSQL/i }).click(); + + await waitForEditorReady(dialog, page); + await waitForSchemaLoaded(dialog, page); + + // Use table-qualified name: @codemirror/lang-sql shows column completions + // only after a table qualifier (e.g., "movies."). + await typeInCmEditor(dialog, page, "SELECT movies."); + await page.keyboard.press("Control+Space"); + + await waitForAutocompletePopup(page); + + // The "movies" table has a "title" column in the seed data. + expect(await hasCompletionItem(page, /\btitle\b/i)).toBe(true); + }); + + // ── Cypher: label completions ─────────────────────────────────────────── + + test("Cypher editor shows schema-aware completions from Neo4j", async ({ + page, + }) => { + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + // The first connection option is the seeded Neo4j instance. + await dialog.getByRole("combobox").nth(0).click(); + await page.getByRole("option").first().click(); + + await waitForEditorReady(dialog, page); + await waitForSchemaLoaded(dialog, page); + + // Type "MATCH (n:" — the ":" triggers label completions in a node pattern. + await typeInCmEditor(dialog, page, "MATCH (n:"); + + await triggerCypherAutocomplete(page); + await waitForAutocompletePopup(page); + + // After ":" in a node pattern, the completion engine returns node labels + // (e.g., Movie, Person) and property keys from the schema. + const hasItems = await page.evaluate(() => { + const el = document.querySelector(".cm-tooltip-autocomplete"); + if (!el) return false; + return el.querySelectorAll("[role='option'], li").length > 0; + }); + expect(hasItems).toBe(true); + }); + + test("Cypher editor shows completions for relationship patterns", async ({ + page, + }) => { + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + await dialog.getByRole("combobox").nth(0).click(); + await page.getByRole("option").first().click(); + + await waitForEditorReady(dialog, page); + await waitForSchemaLoaded(dialog, page); + + // ":" inside a relationship pattern is a trigger string that opens + // the autocomplete popup with schema-derived completions. + await typeInCmEditor(dialog, page, "MATCH ()-[r:"); + await triggerCypherAutocomplete(page); + + await waitForAutocompletePopup(page); + + // Verify schema-derived items appear (property keys or relationship types). + const hasItems = await page.evaluate(() => { + const el = document.querySelector(".cm-tooltip-autocomplete"); + if (!el) return false; + return el.querySelectorAll("[role='option'], li").length > 0; + }); + expect(hasItems).toBe(true); + }); + + // ── Schema refresh button ─────────────────────────────────────────────── + + test("schema refresh button is visible after selecting a connection", async ({ + page, + }) => { + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + // Refresh button should NOT be visible before a connection is chosen + await expect( + dialog.getByRole("button", { name: "Refresh schema" }), + ).not.toBeVisible(); + + await dialog.getByRole("combobox").nth(0).click(); + await page.getByRole("option").first().click(); + + // Now it should appear (connectionId is set) + await expect( + dialog.getByRole("button", { name: "Refresh schema" }), + ).toBeVisible({ timeout: 5_000 }); + }); + + test("schema refresh button triggers schema re-fetch", async ({ page }) => { + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + await dialog.getByRole("combobox").nth(0).click(); + await page.getByRole("option").first().click(); + + await waitForEditorReady(dialog, page); + await waitForSchemaLoaded(dialog, page); + + const refreshBtn = dialog.getByRole("button", { name: "Refresh schema" }); + + // Confirm it's enabled before clicking + await expect(refreshBtn).toBeEnabled(); + + // Intercept the schema API call to verify it is re-issued + const [schemaRequest] = await Promise.all([ + page.waitForRequest((req) => req.url().includes("/schema"), { + timeout: 10_000, + }), + refreshBtn.click(), + ]); + expect(schemaRequest).toBeTruthy(); + + // Button is disabled while the new fetch is in-flight + await expect(refreshBtn).toBeDisabled({ timeout: 3_000 }); + + // After the fetch resolves, the button becomes enabled again + await expect(refreshBtn).toBeEnabled({ timeout: 20_000 }); + }); +}); diff --git a/app/e2e/connections.spec.ts b/app/e2e/connections.spec.ts index ce9cd515..f6b5ea0b 100644 --- a/app/e2e/connections.spec.ts +++ b/app/e2e/connections.spec.ts @@ -72,7 +72,7 @@ test.describe("Connections", () => { await dialog.getByRole("button", { name: "Test Connection" }).click(); await expect(dialog.getByText("Connection successful!")).toBeVisible({ - timeout: 15_000, + timeout: 30_000, }); }); @@ -89,13 +89,9 @@ test.describe("Connections", () => { await dialog.locator("#conn-password").fill("wrong"); await dialog.getByRole("button", { name: "Test Connection" }).click(); - // Should NOT show success - await expect(dialog.getByText("Connection successful!")).not.toBeVisible({ - timeout: 15_000, - }); - // Should show a destructive alert with error text - await expect(dialog.getByText(/failed|error|refused|ECONNREFUSED/i)).toBeVisible({ - timeout: 15_000, + // Should show a destructive alert — scope to the AlertDescription to avoid multiple matches + await expect(dialog.locator('[role="alert"]').getByText(/failed|error|refused|ECONNREFUSED/i).first()).toBeVisible({ + timeout: 30_000, }); }); @@ -114,11 +110,11 @@ test.describe("Connections", () => { await dialog.getByRole("button", { name: "Create" }).click(); await expect(dialog).not.toBeVisible(); - // Wait for auto-test to complete — should show "Error" badge + // Wait for auto-test to complete — should show "Error" badge on the card await expect(page.getByText(name).first()).toBeVisible(); - // The auto-test will run, resulting in an error status with error text visible - const card = page.locator("div").filter({ hasText: name }).first(); - await expect(card.getByText("Error")).toBeVisible({ timeout: 30_000 }); + // Use the card heading to locate the specific card, then find "Error" badge within it + const card = page.locator("div").filter({ has: page.getByText(name, { exact: true }) }).first(); + await expect(card.getByText("Error").first()).toBeVisible({ timeout: 30_000 }); }); test("should duplicate a connection via card dropdown", async ({ page }) => { diff --git a/app/e2e/content-widgets.spec.ts b/app/e2e/content-widgets.spec.ts new file mode 100644 index 00000000..c5417e5c --- /dev/null +++ b/app/e2e/content-widgets.spec.ts @@ -0,0 +1,60 @@ +import { test, expect, ALICE, createTestDashboard } from "./fixtures"; + +test.describe("Content-only widgets (Markdown & iFrame)", () => { + let dashboardCleanup: (() => Promise) | undefined; + + test.beforeEach(async ({ authPage, page }) => { + await authPage.login(ALICE.email, ALICE.password); + const { id, cleanup } = await createTestDashboard( + page.request, + `Content Widgets ${Date.now()}`, + ); + dashboardCleanup = cleanup; + await page.goto(`/${id}/edit`); + await expect(page.getByText("Editing:")).toBeVisible(); + }); + + test.afterEach(async () => { + await dashboardCleanup?.(); + }); + + test("should add a Markdown widget without connection or query", async ({ + page, + }) => { + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + // Chart type is the second combobox (first is connection) + await dialog.getByRole("combobox").nth(1).click(); + await page.getByRole("option", { name: "Markdown" }).click(); + + // The Add Widget button should be enabled without a query + await expect( + dialog.getByRole("button", { name: "Add Widget" }), + ).toBeEnabled({ timeout: 5_000 }); + + // Add the widget + await dialog.getByRole("button", { name: "Add Widget" }).click(); + await expect(dialog).not.toBeVisible(); + }); + + test("should add an iFrame widget without connection or query", async ({ + page, + }) => { + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + // Chart type is the second combobox (first is connection) + await dialog.getByRole("combobox").nth(1).click(); + await page.getByRole("option", { name: "iFrame" }).click(); + + // The Add Widget button should be enabled without a query + await expect( + dialog.getByRole("button", { name: "Add Widget" }), + ).toBeEnabled({ timeout: 5_000 }); + + // Add the widget + await dialog.getByRole("button", { name: "Add Widget" }).click(); + await expect(dialog).not.toBeVisible(); + }); +}); diff --git a/app/e2e/form-widget.spec.ts b/app/e2e/form-widget.spec.ts index 0ae55598..ef0ed2e8 100644 --- a/app/e2e/form-widget.spec.ts +++ b/app/e2e/form-widget.spec.ts @@ -106,7 +106,12 @@ test.describe("Form widget", () => { // Navigate to view mode await page.getByRole("button", { name: "Back" }).click(); - await page.waitForURL(/\/[\w-]+$/, { timeout: 10_000 }); + // Handle unsaved-changes dialog if it appears (grid compaction race) + const leaveBtn = page.getByRole("button", { name: "Leave" }); + if (await leaveBtn.isVisible({ timeout: 1_000 }).catch(() => false)) { + await leaveBtn.click(); + } + await expect(page).not.toHaveURL(/\/edit$/, { timeout: 10_000 }); // The form widget should render with the configured fields // Fields default to required=true, so the label includes an asterisk "*". @@ -150,7 +155,12 @@ test.describe("Form widget", () => { timeout: 15_000, }); await page.getByRole("button", { name: "Back" }).click(); - await page.waitForURL(/\/[\w-]+$/, { timeout: 10_000 }); + // Handle unsaved-changes dialog if it appears (grid compaction race) + const leaveBtn = page.getByRole("button", { name: "Leave" }); + if (await leaveBtn.isVisible({ timeout: 1_000 }).catch(() => false)) { + await leaveBtn.click(); + } + await expect(page).not.toHaveURL(/\/edit$/, { timeout: 10_000 }); // Wait for the form to render — the label "Name" should be visible // (fields default to required, so label renders as "Name*") @@ -226,7 +236,12 @@ test.describe("Form widget", () => { timeout: 15_000, }); await page.getByRole("button", { name: "Back" }).click(); - await page.waitForURL(/\/[\w-]+$/, { timeout: 10_000 }); + // Handle unsaved-changes dialog if it appears (grid compaction race) + const leaveBtn = page.getByRole("button", { name: "Leave" }); + if (await leaveBtn.isVisible({ timeout: 1_000 }).catch(() => false)) { + await leaveBtn.click(); + } + await expect(page).not.toHaveURL(/\/edit$/, { timeout: 10_000 }); // The form widget should show the empty-state message await expect( @@ -270,7 +285,12 @@ test.describe("Form widget", () => { timeout: 15_000, }); await page.getByRole("button", { name: "Back" }).click(); - await page.waitForURL(/\/[\w-]+$/, { timeout: 10_000 }); + // Handle unsaved-changes dialog if it appears (grid compaction race) + const leaveBtn = page.getByRole("button", { name: "Leave" }); + if (await leaveBtn.isVisible({ timeout: 1_000 }).catch(() => false)) { + await leaveBtn.click(); + } + await expect(page).not.toHaveURL(/\/edit$/, { timeout: 10_000 }); // Label includes asterisk for required fields await expect(page.getByText(/^Full Name/)).toBeVisible({ @@ -372,7 +392,12 @@ test.describe("Form widget", () => { timeout: 15_000, }); await page.getByRole("button", { name: "Back" }).click(); - await page.waitForURL(/\/[\w-]+$/, { timeout: 10_000 }); + // Handle unsaved-changes dialog if it appears (grid compaction race) + const leaveBtn = page.getByRole("button", { name: "Leave" }); + if (await leaveBtn.isVisible({ timeout: 1_000 }).catch(() => false)) { + await leaveBtn.click(); + } + await expect(page).not.toHaveURL(/\/edit$/, { timeout: 10_000 }); // Wait for form to render (label includes asterisk for required fields) await expect(page.getByText(/^Name/)).toBeVisible({ diff --git a/app/e2e/global-setup.ts b/app/e2e/global-setup.ts index 5fbf9e08..c09f405f 100644 --- a/app/e2e/global-setup.ts +++ b/app/e2e/global-setup.ts @@ -1,10 +1,8 @@ -import { - GenericContainer, - Wait, -} from "testcontainers"; +import { GenericContainer, Wait } from "testcontainers"; import * as fs from "node:fs"; import * as path from "node:path"; import * as crypto from "node:crypto"; +import * as net from "node:net"; import * as http from "node:http"; import { spawn } from "node:child_process"; import postgres from "postgres"; @@ -21,6 +19,8 @@ const TEST_ENCRYPTION_KEY = "b8c0dbaad415694973d7cf4a3a40d4e53fc940493a6362ecff4dae45245e05d9"; const TEST_NEXTAUTH_SECRET = "d0eece19938fc5e2e3e45ed76fb5c92b0fc6ba2c4f213404ccca7ea0e641cd65"; +const TEST_API_KEY_HMAC_SECRET = + "a1f3c9e2d47b6a85f0e12d3c4b5a6978f0e1d2c3b4a59687f0e1d2c3b4a59687"; /** Encrypt JSON using the same algorithm as the app (aes-256-gcm). */ function encryptJson(data: unknown): string { @@ -33,7 +33,25 @@ function encryptJson(data: unknown): string { return `${iv.toString("base64")}:${authTag.toString("base64")}:${encrypted.toString("base64")}`; } -const MIGRATIONS_FOLDER = path.resolve(__dirname, "..", "drizzle", "migrations"); +/** Bind to port 0 to let the OS assign an available port, then release it. */ +function getFreePort(): Promise { + return new Promise((resolve, reject) => { + const srv = net.createServer(); + srv.listen(0, () => { + const addr = srv.address(); + const port = typeof addr === "object" && addr ? addr.port : 0; + srv.close(() => resolve(port)); + }); + srv.on("error", reject); + }); +} + +const MIGRATIONS_FOLDER = path.resolve( + __dirname, + "..", + "drizzle", + "migrations", +); /** Run all Drizzle migrations against the neoboard database. */ async function runDrizzleMigrations(connectionString: string) { @@ -45,7 +63,14 @@ async function runDrizzleMigrations(connectionString: string) { /** Seed the neoboard database with test data (users, connections, dashboards). */ async function seedNeoboard(connectionString: string) { - const seedFile = path.resolve(__dirname, "..", "..", "docker", "postgres", "seed-neoboard.sql"); + const seedFile = path.resolve( + __dirname, + "..", + "..", + "docker", + "postgres", + "seed-neoboard.sql", + ); const seedSql = fs.readFileSync(seedFile, "utf-8"); const client = postgres(connectionString, { max: 1 }); await client.unsafe(seedSql); @@ -142,9 +167,12 @@ export default async function globalSetup() { console.log("⏳ Seeding Neo4j with movies dataset..."); const seedResult = await neo4jContainer.exec([ "cypher-shell", - "-u", "neo4j", - "-p", "neoboard123", - "-f", "/var/lib/neo4j/import/init.cypher", + "-u", + "neo4j", + "-p", + "neoboard123", + "-f", + "/var/lib/neo4j/import/init.cypher", ]); if (seedResult.exitCode !== 0) { console.error("❌ Neo4j seed failed:", seedResult.output); @@ -176,12 +204,22 @@ export default async function globalSetup() { console.log("⏳ Updating seeded connection configs with encrypted values..."); await updateConnectionConfigs(pgHost, pgPort, neo4jBoltPort); + // ── Resolve the server port ────────────────────────────────────────────── + // Use TEST_SERVER_PORT when set; otherwise default to 3100 to stay in sync + // with playwright.config.ts which uses the same env var and the same default. + // Using getFreePort() here would desync the server port from the baseURL that + // Playwright evaluates before globalSetup runs. + const serverPort = + parseInt(process.env.TEST_SERVER_PORT || "3100", 10) || (await getFreePort()); + // ── Write .env.test for the Next.js dev server ────────────────────────── const envContent = [ `DATABASE_URL=${databaseUrl}`, `ENCRYPTION_KEY=${TEST_ENCRYPTION_KEY}`, + `API_KEY_HMAC_SECRET=${TEST_API_KEY_HMAC_SECRET}`, `NEXTAUTH_SECRET=${TEST_NEXTAUTH_SECRET}`, - `NEXTAUTH_URL=http://localhost:3100`, + `NEXTAUTH_URL=http://localhost:${serverPort}`, + `TEST_SERVER_PORT=${serverPort}`, `# Test container ports (for reference in tests)`, `TEST_NEO4J_BOLT_URL=bolt://localhost:${neo4jBoltPort}`, `TEST_NEO4J_HTTP_PORT=${neo4jHttpPort}`, @@ -195,18 +233,21 @@ export default async function globalSetup() { // Expose env vars to the current process (available to test workers). process.env.DATABASE_URL = databaseUrl; process.env.ENCRYPTION_KEY = TEST_ENCRYPTION_KEY; + process.env.API_KEY_HMAC_SECRET = TEST_API_KEY_HMAC_SECRET; process.env.NEXTAUTH_SECRET = TEST_NEXTAUTH_SECRET; - process.env.NEXTAUTH_URL = "http://localhost:3100"; + process.env.NEXTAUTH_URL = `http://localhost:${serverPort}`; + process.env.TEST_SERVER_PORT = String(serverPort); process.env.TEST_NEO4J_BOLT_URL = `bolt://localhost:${neo4jBoltPort}`; process.env.TEST_PG_PORT = String(pgPort); - // ── Start the Next.js server on a dedicated test port ─────────────────── - // Port 3100 avoids conflicts with the dev server on 3000. + // ── Start the Next.js server on a dynamically allocated port ──────────── // Env vars are passed directly to the process — .env.local is never touched. const appDir = path.resolve(__dirname, ".."); const serverCmd = process.env.CI ? "start" : "dev"; - console.log(`⏳ Starting Next.js ${serverCmd} server on port 3100...`); - const args = ["next", serverCmd, "--port", "3100"]; + console.log( + `⏳ Starting Next.js ${serverCmd} server on port ${serverPort}...`, + ); + const args = ["next", serverCmd, "--port", String(serverPort)]; if (serverCmd === "dev") args.push("--turbopack"); const server = spawn("npx", args, { cwd: appDir, @@ -215,8 +256,9 @@ export default async function globalSetup() { ...process.env, DATABASE_URL: databaseUrl, ENCRYPTION_KEY: TEST_ENCRYPTION_KEY, + API_KEY_HMAC_SECRET: TEST_API_KEY_HMAC_SECRET, NEXTAUTH_SECRET: TEST_NEXTAUTH_SECRET, - NEXTAUTH_URL: "http://localhost:3100", + NEXTAUTH_URL: `http://localhost:${serverPort}`, }, detached: true, }); @@ -233,9 +275,9 @@ export default async function globalSetup() { // Save PID so globalTeardown can kill it. fs.writeFileSync(SERVER_PID_FILE, String(server.pid)); - // Wait for port 3100 to accept connections (up to 60 s). - await waitForPort(3100, 60_000); - console.log("✅ Next.js server ready on port 3100"); + // Wait for the server to accept connections (up to 60 s). + await waitForPort(serverPort, 60_000); + console.log(`✅ Next.js server ready on port ${serverPort}`); // ── Initialize E2E coverage collection (nextcov) ──────────────────────── if (process.env.E2E_COVERAGE) { diff --git a/app/e2e/new-charts.spec.ts b/app/e2e/new-charts.spec.ts new file mode 100644 index 00000000..7a548f02 --- /dev/null +++ b/app/e2e/new-charts.spec.ts @@ -0,0 +1,231 @@ +import { test, expect, ALICE, createTestDashboard, typeInEditor } from "./fixtures"; + +// --------------------------------------------------------------------------- +// New chart types (v0.8) — creation flow tests +// --------------------------------------------------------------------------- +// These tests verify the end-to-end creation flow for each new chart type: +// Gauge, Sankey, Sunburst, Radar, Treemap. +// +// We focus on the creation flow (dialog → query → add widget) rather than +// visual rendering details — chart rendering is verified by unit tests. +// --------------------------------------------------------------------------- + +test.describe("New chart types — creation flow", () => { + let dashboardCleanup: (() => Promise) | undefined; + + test.beforeEach(async ({ authPage, page }) => { + await authPage.login(ALICE.email, ALICE.password); + const { id, cleanup } = await createTestDashboard( + page.request, + `Charts ${Date.now()}`, + ); + dashboardCleanup = cleanup; + await page.goto(`/${id}/edit`); + await expect(page.getByText("Editing:")).toBeVisible(); + }); + + test.afterEach(async () => { + await dashboardCleanup?.(); + }); + + test("should create a Gauge widget", async ({ page }) => { + test.setTimeout(60_000); + + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + // Select Neo4j connection first + await dialog.getByRole("combobox").nth(0).click(); + await page.getByRole("option").first().click(); + + // Select Gauge chart type + await dialog.getByRole("combobox").nth(1).click(); + await page.getByRole("option", { name: "Gauge" }).click(); + + // Type query + await typeInEditor( + dialog, + page, + "MATCH (m:Movie) RETURN count(m) AS value, 'Movies' AS name", + ); + + // The Add Widget button should be enabled (no Run required for this flow) + await expect(dialog.getByRole("button", { name: "Add Widget" })).toBeEnabled({ + timeout: 10_000, + }); + await dialog.getByRole("button", { name: "Add Widget" }).click(); + await expect(dialog).not.toBeVisible({ timeout: 10_000 }); + }); + + test("should create a Treemap widget", async ({ page }) => { + test.setTimeout(60_000); + + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + // Select Neo4j connection first + await dialog.getByRole("combobox").nth(0).click(); + await page.getByRole("option").first().click(); + + // Select Treemap chart type + await dialog.getByRole("combobox").nth(1).click(); + await page.getByRole("option", { name: "Treemap" }).click(); + + // Type query + await typeInEditor( + dialog, + page, + "MATCH (p:Person)-[:ACTED_IN]->(m:Movie) WITH m, count(p) AS cast RETURN m.title AS name, cast AS value ORDER BY cast DESC LIMIT 10", + ); + + await expect(dialog.getByRole("button", { name: "Add Widget" })).toBeEnabled({ + timeout: 10_000, + }); + await dialog.getByRole("button", { name: "Add Widget" }).click(); + await expect(dialog).not.toBeVisible({ timeout: 10_000 }); + }); + + test("should create a Radar widget", async ({ page }) => { + test.setTimeout(60_000); + + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + // Select Neo4j connection first + await dialog.getByRole("combobox").nth(0).click(); + await page.getByRole("option").first().click(); + + // Select Radar chart type + await dialog.getByRole("combobox").nth(1).click(); + await page.getByRole("option", { name: "Radar" }).click(); + + // Type query + await typeInEditor( + dialog, + page, + "MATCH (p:Person)-[r]->(m:Movie) WITH type(r) AS indicator, count(*) AS value RETURN indicator, value, 100 AS max", + ); + + await expect(dialog.getByRole("button", { name: "Add Widget" })).toBeEnabled({ + timeout: 10_000, + }); + await dialog.getByRole("button", { name: "Add Widget" }).click(); + await expect(dialog).not.toBeVisible({ timeout: 10_000 }); + }); + + test("should create a Sankey widget", async ({ page }) => { + test.setTimeout(60_000); + + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + // Select Neo4j connection first + await dialog.getByRole("combobox").nth(0).click(); + await page.getByRole("option").first().click(); + + // Select Sankey chart type + await dialog.getByRole("combobox").nth(1).click(); + await page.getByRole("option", { name: "Sankey" }).click(); + + // Type query + await typeInEditor( + dialog, + page, + "MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) RETURN p.name AS source, m.title AS target, 1 AS value LIMIT 15", + ); + + await expect(dialog.getByRole("button", { name: "Add Widget" })).toBeEnabled({ + timeout: 10_000, + }); + await dialog.getByRole("button", { name: "Add Widget" }).click(); + await expect(dialog).not.toBeVisible({ timeout: 10_000 }); + }); + + test("should create a Sunburst widget", async ({ page }) => { + test.setTimeout(60_000); + + await page.getByRole("button", { name: "Add Widget" }).first().click(); + const dialog = page.getByRole("dialog", { name: "Add Widget" }); + + // Select Neo4j connection first + await dialog.getByRole("combobox").nth(0).click(); + await page.getByRole("option").first().click(); + + // Select Sunburst chart type + await dialog.getByRole("combobox").nth(1).click(); + await page.getByRole("option", { name: "Sunburst" }).click(); + + // Type query + await typeInEditor( + dialog, + page, + "MATCH (p:Person)-[r]->(m:Movie) RETURN type(r) AS parent, m.title AS name, 1 AS value LIMIT 20", + ); + + await expect(dialog.getByRole("button", { name: "Add Widget" })).toBeEnabled({ + timeout: 10_000, + }); + await dialog.getByRole("button", { name: "Add Widget" }).click(); + await expect(dialog).not.toBeVisible({ timeout: 10_000 }); + }); +}); + +// --------------------------------------------------------------------------- +// Seed dashboard — verify Widget Showcase renders correctly +// --------------------------------------------------------------------------- + +test.describe("Widget Showcase seed dashboard", () => { + test.beforeEach(async ({ authPage, page }) => { + await authPage.login(ALICE.email, ALICE.password); + // Navigate to Widget Showcase dashboard + await page.getByText("Widget Showcase", { exact: true }).click(); + await page.waitForURL(/\/[\w-]+$/, { timeout: 10_000 }); + }); + + test("should render the Widget Showcase dashboard with widget cards", async ({ page }) => { + test.setTimeout(60_000); + + // At least one widget card should be visible on the page + await expect(page.locator("[data-testid='widget-card']").first()).toBeVisible({ + timeout: 15_000, + }); + }); + + test("should show the Simple Charts page tab", async ({ page }) => { + test.setTimeout(30_000); + + await expect(page.getByRole("tab", { name: "Simple Charts" })).toBeVisible({ + timeout: 10_000, + }); + }); + + test("should show the Rule-Based Styling page tab", async ({ page }) => { + test.setTimeout(30_000); + + await expect(page.getByRole("tab", { name: "Rule-Based Styling" })).toBeVisible({ + timeout: 10_000, + }); + }); + + test("should render widgets on the Simple Charts page", async ({ page }) => { + test.setTimeout(60_000); + + // Click the Simple Charts page tab + await page.getByRole("tab", { name: "Simple Charts" }).click(); + + // Multiple widget cards should be present (bar, line, pie, single-value, table, gauge, radar, sankey, treemap, sunburst) + await expect(page.locator("[data-testid='widget-card']").first()).toBeVisible({ + timeout: 15_000, + }); + + // At least 10 widgets should be on this page + const widgetCount = await page.locator("[data-testid='widget-card']").count(); + expect(widgetCount).toBeGreaterThanOrEqual(10); + }); + + test("should show Color Palettes page tab", async ({ page }) => { + await expect( + page.getByRole("tab", { name: "Color Palettes" }), + ).toBeVisible({ timeout: 10_000 }); + }); +}); diff --git a/app/e2e/parameters.spec.ts b/app/e2e/parameters.spec.ts index b5d54a39..30521d60 100644 --- a/app/e2e/parameters.spec.ts +++ b/app/e2e/parameters.spec.ts @@ -181,7 +181,7 @@ test.describe("Parameter-to-refresh cycle", () => { await page.getByRole("option").first().click(); await typeInEditor(dialog, page, - "MATCH (m:Movie) WHERE m.released = $param_year RETURN m.title AS title LIMIT 5" + "MATCH (m:Movie) WHERE m.released = toInteger($param_year) RETURN m.title AS title LIMIT 5" ); await dialog.getByRole("button", { name: "Add Widget" }).click(); await expect(dialog).not.toBeVisible(); @@ -193,7 +193,12 @@ test.describe("Parameter-to-refresh cycle", () => { // Navigate to view mode via the "Back" button await page.getByRole("button", { name: "Back" }).click(); - await page.waitForURL(/\/[\w-]+$/, { timeout: 10_000 }); + // Handle unsaved-changes dialog if it appears (grid compaction race) + const leaveBtn = page.getByRole("button", { name: "Leave" }); + if (await leaveBtn.isVisible({ timeout: 1_000 }).catch(() => false)) { + await leaveBtn.click(); + } + await expect(page).not.toHaveURL(/\/edit$/, { timeout: 10_000 }); // The parameter-select widget should render a dropdown with "year" label await expect(page.getByText("year", { exact: true })).toBeVisible({ timeout: 15_000 }); diff --git a/app/e2e/widget-states.spec.ts b/app/e2e/widget-states.spec.ts index c243a448..1e767869 100644 --- a/app/e2e/widget-states.spec.ts +++ b/app/e2e/widget-states.spec.ts @@ -54,11 +54,20 @@ test.describe("Widget editor", () => { await expect(page.getByRole("option", { name: "Pie Chart" })).toBeVisible(); await expect(page.getByRole("option", { name: "Data Table" })).toBeVisible(); await expect(page.getByRole("option", { name: "Graph" })).toBeVisible(); - await expect(page.getByRole("option", { name: "Map" })).toBeVisible(); + await expect(page.getByRole("option", { name: "Map", exact: true })).toBeVisible(); await expect(page.getByRole("option", { name: "Single Value" })).toBeVisible(); await expect(page.getByRole("option", { name: "JSON Viewer" })).toBeVisible(); await expect(page.getByRole("option", { name: "Form" })).toBeVisible(); + // v0.8 chart types + await expect(page.getByRole("option", { name: "Gauge" })).toBeVisible(); + await expect(page.getByRole("option", { name: "Sankey" })).toBeVisible(); + await expect(page.getByRole("option", { name: "Sunburst" })).toBeVisible(); + await expect(page.getByRole("option", { name: "Radar" })).toBeVisible(); + await expect(page.getByRole("option", { name: "Treemap" })).toBeVisible(); + await expect(page.getByRole("option", { name: "Markdown" })).toBeVisible(); + await expect(page.getByRole("option", { name: "iFrame" })).toBeVisible(); + // Close by pressing Escape await page.keyboard.press("Escape"); }); diff --git a/app/next.config.ts b/app/next.config.ts index 5ef2500d..18697f15 100644 --- a/app/next.config.ts +++ b/app/next.config.ts @@ -44,6 +44,18 @@ const nextConfig: NextConfig = { mobx: mobxPath, }; + // When transpilePackages includes @neoboard/components, webpack resolves + // the component library's bare imports (echarts, @neo4j-nvl, etc.) from + // the app's node_modules context. In CI, each package runs `npm ci` in + // isolation, so deps installed only in component/node_modules/ aren't + // visible to the app's webpack resolver. Adding component/node_modules + // to resolve.modules fixes this without duplicating dependencies. + config.resolve.modules = [ + ...(config.resolve.modules ?? []), + resolve(import.meta.dirname, "..", "component", "node_modules"), + "node_modules", + ]; + // The component library uses @/ as a path alias pointing to its own src/. // The app also uses @/ (via tsconfig paths) pointing to app/src/. // We need to resolve @/ differently based on which package the import originates from. diff --git a/app/package-lock.json b/app/package-lock.json index d438a3c8..bd252a27 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -62,6 +62,8 @@ "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.39.15", "@hookform/resolvers": "^5.2.2", + "@neo4j-cypher/codemirror": "^1.0.3", + "@neo4j-cypher/editor-support": "^1.0.2", "@neo4j-nvl/react": "^1.1.0", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", diff --git a/app/playwright.config.ts b/app/playwright.config.ts index 36b6cda2..4b28e169 100644 --- a/app/playwright.config.ts +++ b/app/playwright.config.ts @@ -1,15 +1,17 @@ import { defineConfig, devices } from "@playwright/test"; -import type { NextcovConfig } from "nextcov"; + +// global-setup writes TEST_SERVER_PORT to process.env before tests run. +const serverPort = process.env.TEST_SERVER_PORT || "3100"; /** Nextcov coverage config — read by loadNextcovConfig() in global-setup/teardown. */ -export const nextcov: NextcovConfig = { +export const nextcov: import("nextcov").NextcovConfig = { buildDir: ".next", outputDir: "coverage-e2e", sourceRoot: "./src", include: ["src/**/*.{ts,tsx}"], exclude: ["src/**/__tests__/**", "src/**/*.test.ts"], reporters: ["lcov", "json", "text-summary"], - collectServer: false, + collectServer: true, }; export default defineConfig({ @@ -34,7 +36,7 @@ export default defineConfig({ globalTeardown: "./e2e/global-teardown.ts", use: { - baseURL: "http://localhost:3100", + baseURL: `http://localhost:${serverPort}`, trace: "on-first-retry", screenshot: "only-on-failure", navigationTimeout: 15_000, diff --git a/app/src/app/(dashboard)/[id]/edit/page.tsx b/app/src/app/(dashboard)/[id]/edit/page.tsx index bc09b0f8..e65a9abd 100644 --- a/app/src/app/(dashboard)/[id]/edit/page.tsx +++ b/app/src/app/(dashboard)/[id]/edit/page.tsx @@ -3,10 +3,22 @@ import { use, useEffect, useCallback, useRef, useState, useMemo } from "react"; import { useRouter } from "next/navigation"; import { useSession } from "next-auth/react"; -import { ArrowLeft, Filter, Plus, Save, LayoutDashboard, Users } from "lucide-react"; +import { + ArrowLeft, + Filter, + Plus, + Save, + LayoutDashboard, + Users, +} from "lucide-react"; import { useQueryClient } from "@tanstack/react-query"; -import { useDashboard, useUpdateDashboard, useUpdateDashboardThumbnails } from "@/hooks/use-dashboards"; +import { + useDashboard, + useUpdateDashboard, + useUpdateDashboardThumbnails, +} from "@/hooks/use-dashboards"; import { useConnections } from "@/hooks/use-connections"; +import { useUnsavedChangesWarning } from "@/hooks/use-unsaved-changes-warning"; import { useParameterStore } from "@/stores/parameter-store"; import { filterParentParams } from "@/lib/format-parameter-value"; import { useDashboardStore } from "@/stores/dashboard-store"; @@ -17,7 +29,11 @@ import { WidgetEditorModal } from "@/components/widget-editor-modal"; import { DashboardAssignPanel } from "@/components/dashboard-assign-panel"; import { SaveTemplateDialog } from "@/components/save-template-dialog"; import { migrateLayout } from "@/lib/migrate-layout"; -import type { DashboardWidget, GridLayoutItem, WidgetTemplate } from "@/lib/db/schema"; +import type { + DashboardWidget, + GridLayoutItem, + WidgetTemplate, +} from "@/lib/db/schema"; import { captureDashboardThumbnails } from "@/lib/capture-dashboard-thumbnails"; import { Button, @@ -31,6 +47,7 @@ import { SheetTrigger, } from "@neoboard/components"; import { + ConfirmDialog, EmptyState, LoadingButton, Toolbar, @@ -73,7 +90,7 @@ export default function DashboardEditorPage({ const initialPage = pageParam !== undefined ? parseInt(pageParam, 10) : 0; const [visitedPages, setVisitedPages] = useState>( - () => new Set([isNaN(initialPage) ? 0 : initialPage]) + () => new Set([isNaN(initialPage) ? 0 : initialPage]), ); function markVisited(index: number) { @@ -121,6 +138,15 @@ export default function DashboardEditorPage({ const updateWidget = useDashboardStore((s) => s.updateWidget); const updateGridLayout = useDashboardStore((s) => s.updateGridLayout); const duplicateWidget = useDashboardStore((s) => s.duplicateWidget); + const markSaved = useDashboardStore((s) => s.markSaved); + + const { + showNavWarning, + setShowNavWarning, + confirmNavigation, + cancelNavigation, + requestNavigation, + } = useUnsavedChangesWarning(); const handleNavigateToPage = useCallback( (pageId: string) => { @@ -130,19 +156,21 @@ export default function DashboardEditorPage({ setActivePage(index); } }, - [layout.pages, setActivePage] + [layout.pages, setActivePage], ); // Template sync — fetch all tenant templates once; build lookup map const { data: allTemplates } = useWidgetTemplates(); const templateMap = useMemo>( () => Object.fromEntries((allTemplates ?? []).map((t) => [t.id, t])), - [allTemplates] + [allTemplates], ); const handleSyncWidget = useCallback( (widget: DashboardWidget) => { - const tmpl = widget.templateId ? templateMap[widget.templateId] : undefined; + const tmpl = widget.templateId + ? templateMap[widget.templateId] + : undefined; if (!tmpl) return; // template deleted — "Detach" will clean up updateWidget(widget.id, { ...widget, @@ -154,28 +182,41 @@ export default function DashboardEditorPage({ // Never overwrite the widget's connection connectionId: widget.settings?.connectionId, }, - templateSyncedAt: tmpl.updatedAt?.toISOString() ?? new Date().toISOString(), + templateSyncedAt: + tmpl.updatedAt?.toISOString() ?? new Date().toISOString(), }); }, - [templateMap, updateWidget] + [templateMap, updateWidget], ); const handleDetachWidget = useCallback( (widgetId: string) => { - const page = layout.pages.find((p) => p.widgets.some((w) => w.id === widgetId)); + const page = layout.pages.find((p) => + p.widgets.some((w) => w.id === widgetId), + ); const widget = page?.widgets.find((w) => w.id === widgetId); if (!widget) return; - updateWidget(widgetId, { ...widget, templateId: undefined, templateSyncedAt: undefined }); + updateWidget(widgetId, { + ...widget, + templateId: undefined, + templateSyncedAt: undefined, + }); }, - [layout.pages, updateWidget] + [layout.pages, updateWidget], ); const [editorOpen, setEditorOpen] = useState(!!templateIdParam); const [editorMode, setEditorMode] = useState<"add" | "edit">("add"); - const [editingWidget, setEditingWidget] = useState(); + const [editingWidget, setEditingWidget] = useState< + DashboardWidget | undefined + >(); const [saveError, setSaveError] = useState(null); - const [templateWidget, setTemplateWidget] = useState(); - const [pendingTemplateId, setPendingTemplateId] = useState(templateIdParam); + const [templateWidget, setTemplateWidget] = useState< + DashboardWidget | undefined + >(); + const [pendingTemplateId, setPendingTemplateId] = useState< + string | undefined + >(templateIdParam); // Redirect Readers away from edit mode useEffect(() => { @@ -198,7 +239,35 @@ export default function DashboardEditorPage({ const handleSave = useCallback(async () => { setSaveError(null); try { - await updateDashboard.mutateAsync({ id, layoutJson: layout }); + // Sanitize: replace any y: Infinity from pending widget additions. + // react-grid-layout compacts these asynchronously, but if save fires + // before compaction completes the Infinity value gets persisted and + // all widgets collapse into a single vertical column on reload. + const sanitizedLayout = { + ...layout, + pages: layout.pages.map((page) => { + const hasInfinity = page.gridLayout.some( + (g) => !Number.isFinite(g.y), + ); + if (!hasInfinity) return page; + const maxY = page.gridLayout.reduce( + (m, g) => (Number.isFinite(g.y) ? Math.max(m, g.y + g.h) : m), + 0, + ); + let nextY = maxY; + return { + ...page, + gridLayout: page.gridLayout.map((g) => { + if (Number.isFinite(g.y)) return g; + const placed = { ...g, y: nextY }; + nextY += g.h; + return placed; + }), + }; + }), + }; + await updateDashboard.mutateAsync({ id, layoutJson: sanitizedLayout }); + markSaved(); // Fire-and-forget: capture widget thumbnails from the active page's live DOM. // Uses a short delay to let ECharts finish rendering after any layout changes. @@ -209,7 +278,10 @@ export default function DashboardEditorPage({ try { const thumbnails = await captureDashboardThumbnails( container, - currentPage.widgets.map((w) => ({ id: w.id, chartType: w.chartType })), + currentPage.widgets.map((w) => ({ + id: w.id, + chartType: w.chartType, + })), ); if (Object.keys(thumbnails).length > 0) { updateThumbnails.mutate({ id, thumbnailJson: thumbnails }); @@ -221,10 +293,10 @@ export default function DashboardEditorPage({ } } catch (error) { setSaveError( - error instanceof Error ? error.message : "Failed to save dashboard" + error instanceof Error ? error.message : "Failed to save dashboard", ); } - }, [id, layout, activePage, updateDashboard, updateThumbnails]); + }, [id, layout, activePage, updateDashboard, updateThumbnails, markSaved]); function openAddWidget() { setEditorMode("add"); @@ -263,7 +335,9 @@ export default function DashboardEditorPage({ @@ -276,7 +402,8 @@ export default function ConnectionsPage() {
- New {form.type === "neo4j" ? "Neo4j" : "PostgreSQL"} Connection + New {form.type === "neo4j" ? "Neo4j" : "PostgreSQL"}{" "} + Connection
@@ -297,7 +424,7 @@ export default function ConnectionsPage() { + onChange={(e: React.ChangeEvent) => setForm((f) => ({ ...f, name: e.target.value })) } required @@ -310,7 +437,7 @@ export default function ConnectionsPage() { + onChange={(e: React.ChangeEvent) => setForm((f) => ({ ...f, uri: e.target.value })) } required @@ -328,7 +455,7 @@ export default function ConnectionsPage() { + onChange={(e: React.ChangeEvent) => setForm((f) => ({ ...f, username: e.target.value })) } required @@ -340,7 +467,7 @@ export default function ConnectionsPage() { + onChange={(e: React.ChangeEvent) => setForm((f) => ({ ...f, password: e.target.value })) } required @@ -356,7 +483,7 @@ export default function ConnectionsPage() { + onChange={(e: React.ChangeEvent) => setForm((f) => ({ ...f, database: e.target.value })) } /> @@ -380,23 +507,73 @@ export default function ConnectionsPage() { {form.type === "neo4j" ? ( <>
- {numericField("conn-connection-timeout", "Connection Timeout (ms)", "connectionTimeout", "30000", 0)} - {numericField("conn-query-timeout", "Query Timeout (ms)", "queryTimeout", "2000", 0)} + {numericField( + "conn-connection-timeout", + "Connection Timeout (ms)", + "connectionTimeout", + "30000", + 0, + )} + {numericField( + "conn-query-timeout", + "Query Timeout (ms)", + "queryTimeout", + "2000", + 0, + )}
- {numericField("conn-max-pool", "Max Pool Size", "maxPoolSize", "driver default", 1, 100)} - {numericField("conn-acquisition-timeout", "Acquisition Timeout (ms)", "connectionAcquisitionTimeout", "driver default", 0)} + {numericField( + "conn-max-pool", + "Max Pool Size", + "maxPoolSize", + "driver default", + 1, + 100, + )} + {numericField( + "conn-acquisition-timeout", + "Acquisition Timeout (ms)", + "connectionAcquisitionTimeout", + "driver default", + 0, + )}
) : ( <>
- {numericField("conn-connection-timeout", "Connection Timeout (ms)", "connectionTimeout", "10000", 0)} - {numericField("conn-idle-timeout", "Idle Timeout (ms)", "idleTimeout", "10000", 0)} + {numericField( + "conn-connection-timeout", + "Connection Timeout (ms)", + "connectionTimeout", + "10000", + 0, + )} + {numericField( + "conn-idle-timeout", + "Idle Timeout (ms)", + "idleTimeout", + "10000", + 0, + )}
- {numericField("conn-max-pool", "Max Pool Size", "maxPoolSize", "10", 1, 100)} - {numericField("conn-statement-timeout", "Statement Timeout (ms)", "statementTimeout", "30000", 0)} + {numericField( + "conn-max-pool", + "Max Pool Size", + "maxPoolSize", + "10", + 1, + 100, + )} + {numericField( + "conn-statement-timeout", + "Statement Timeout (ms)", + "statementTimeout", + "30000", + 0, + )}
@@ -422,7 +602,9 @@ export default function ConnectionsPage() { )} {inlineTestResult && ( - + {inlineTestResult.success ? "Connection successful!" @@ -461,9 +643,214 @@ export default function ConnectionsPage() { + {/* Edit dialog — advanced options + credentials (required to re-encrypt) */} + { + if (!open) setEditTarget(null); + }} + > + + + + Edit {editTarget?.name} + +
+

+ Re-enter your credentials to update advanced settings. +

+ +
+ + ) => + setEditForm((f) => ({ ...f, uri: e.target.value })) + } + required + placeholder={ + editTarget?.type === "neo4j" + ? "bolt://localhost:7687" + : "postgresql://localhost:5432" + } + /> +
+ +
+
+ + ) => + setEditForm((f) => ({ ...f, username: e.target.value })) + } + required + /> +
+
+ + ) => + setEditForm((f) => ({ ...f, password: e.target.value })) + } + required + /> +
+
+ +
+ + ) => + setEditForm((f) => ({ ...f, database: e.target.value })) + } + /> +
+ + {/* Advanced Settings */} +
+ + + {showEditAdvanced && ( +
+ {editTarget?.type === "neo4j" ? ( + <> +
+ {editNumericField( + "edit-connection-timeout", + "Connection Timeout (ms)", + "connectionTimeout", + "30000", + 0, + )} + {editNumericField( + "edit-query-timeout", + "Query Timeout (ms)", + "queryTimeout", + "2000", + 0, + )} +
+
+ {editNumericField( + "edit-max-pool", + "Max Pool Size", + "maxPoolSize", + "driver default", + 1, + 100, + )} + {editNumericField( + "edit-acquisition-timeout", + "Acquisition Timeout (ms)", + "connectionAcquisitionTimeout", + "driver default", + 0, + )} +
+ + ) : ( + <> +
+ {editNumericField( + "edit-connection-timeout", + "Connection Timeout (ms)", + "connectionTimeout", + "10000", + 0, + )} + {editNumericField( + "edit-idle-timeout", + "Idle Timeout (ms)", + "idleTimeout", + "10000", + 0, + )} +
+
+ {editNumericField( + "edit-max-pool", + "Max Pool Size", + "maxPoolSize", + "10", + 1, + 100, + )} + {editNumericField( + "edit-statement-timeout", + "Statement Timeout (ms)", + "statementTimeout", + "30000", + 0, + )} +
+
+ + + setEditForm((f) => ({ + ...f, + sslRejectUnauthorized: checked, + })) + } + /> +
+ + )} +
+ )} +
+
+ {editError && ( + + {editError} + + )} + + + + Save + + + +
+
+ { + onOpenChange={(open: boolean) => { if (!open) setDeleteTarget(null); }} title="Delete Connection" @@ -502,6 +889,7 @@ export default function ConnectionsPage() { status={getConnectionStatus(c.id)} statusText={testErrors[c.id]} onTest={() => handleTest(c.id)} + onEdit={() => openEditDialog(c)} onDelete={() => setDeleteTarget(c.id)} onDuplicate={() => handleDuplicate(c)} /> diff --git a/app/src/app/api/connections/[id]/__tests__/route.test.ts b/app/src/app/api/connections/[id]/__tests__/route.test.ts index aefba12f..af89c10a 100644 --- a/app/src/app/api/connections/[id]/__tests__/route.test.ts +++ b/app/src/app/api/connections/[id]/__tests__/route.test.ts @@ -19,11 +19,23 @@ const mockDb = { delete: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("@/lib/crypto", () => ({ encryptJson: mockEncryptJson, decryptJson: vi.fn() })); vi.mock("@/lib/schema-prefetch", () => ({ prefetchSchema: mockPrefetchSchema })); vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); const SESSION = { userId: "user-1", role: "creator", canWrite: true, tenantId: "t1" }; const ADMIN_SESSION = { userId: "admin-1", role: "admin", canWrite: true, tenantId: "t1" }; @@ -44,7 +56,7 @@ describe("GET /api/connections/[id]", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await GET(makeRequest({}), makeParams("c1")); expect(res.status).toBe(401); }); @@ -112,7 +124,7 @@ describe("PATCH /api/connections/[id]", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await PATCH(makeRequest({ name: "New name" }), makeParams("c1")); expect(res.status).toBe(401); }); @@ -166,7 +178,7 @@ describe("DELETE /api/connections/[id]", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await DELETE({} as Request, makeParams("c1")); expect(res.status).toBe(401); }); diff --git a/app/src/app/api/connections/[id]/route.ts b/app/src/app/api/connections/[id]/route.ts index c93172c2..1a13e053 100644 --- a/app/src/app/api/connections/[id]/route.ts +++ b/app/src/app/api/connections/[id]/route.ts @@ -13,10 +13,10 @@ export async function GET( { params }: { params: Promise<{ id: string }> } ) { try { - const { userId, role } = await requireSession(); + const { userId, tenantId, role } = await requireSession(); const { id } = await params; - // Owner check first + // Owner check first (tenant-scoped) let [connection] = await db .select({ id: connections.id, @@ -26,10 +26,10 @@ export async function GET( updatedAt: connections.updatedAt, }) .from(connections) - .where(and(eq(connections.id, id), eq(connections.userId, userId))) + .where(and(eq(connections.id, id), eq(connections.userId, userId), eq(connections.tenantId, tenantId))) .limit(1); - // Admin fallback: admin can view any connection + // Admin fallback: admin can view any connection in the same tenant. if (!connection && role === "admin") { [connection] = await db .select({ @@ -40,7 +40,7 @@ export async function GET( updatedAt: connections.updatedAt, }) .from(connections) - .where(eq(connections.id, id)) + .where(and(eq(connections.id, id), eq(connections.tenantId, tenantId))) .limit(1); } @@ -59,7 +59,7 @@ export async function PATCH( { params }: { params: Promise<{ id: string }> } ) { try { - const { userId } = await requireSession(); + const { userId, tenantId } = await requireSession(); const { id } = await params; const body = await request.json(); const result = validateBody(updateConnectionSchema, body); @@ -72,11 +72,12 @@ export async function PATCH( const [connection] = await db .update(connections) .set(updates) - .where(and(eq(connections.id, id), eq(connections.userId, userId))) + .where(and(eq(connections.id, id), eq(connections.userId, userId), eq(connections.tenantId, tenantId))) .returning({ id: connections.id, name: connections.name, type: connections.type, + createdAt: connections.createdAt, updatedAt: connections.updatedAt, }); @@ -100,12 +101,12 @@ export async function DELETE( { params }: { params: Promise<{ id: string }> } ) { try { - const { userId } = await requireSession(); + const { userId, tenantId } = await requireSession(); const { id } = await params; const deleted = await db .delete(connections) - .where(and(eq(connections.id, id), eq(connections.userId, userId))) + .where(and(eq(connections.id, id), eq(connections.userId, userId), eq(connections.tenantId, tenantId))) .returning({ id: connections.id }); if (deleted.length === 0) { diff --git a/app/src/app/api/connections/[id]/schema/__tests__/route.test.ts b/app/src/app/api/connections/[id]/schema/__tests__/route.test.ts index c2e12aab..60bfe9d2 100644 --- a/app/src/app/api/connections/[id]/schema/__tests__/route.test.ts +++ b/app/src/app/api/connections/[id]/schema/__tests__/route.test.ts @@ -6,7 +6,9 @@ import { nextResponseMockFactory } from "@/__tests__/helpers/next-mocks"; // Mocks // --------------------------------------------------------------------------- -const mockRequireUserId = vi.fn<() => Promise>(); +const mockRequireSession = vi.fn< + () => Promise<{ userId: string; role: string; canWrite: boolean; tenantId: string }> +>(); const mockDecryptJson = vi.fn(); const mockFetchConnectionSchema = vi.fn(); @@ -22,11 +24,25 @@ function makeSelectChain(rows: unknown[]) { const mockDb = { select: vi.fn() }; -vi.mock("@/lib/auth/session", () => ({ requireUserId: mockRequireUserId })); +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + +vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("@/lib/crypto", () => ({ decryptJson: mockDecryptJson })); vi.mock("@/lib/schema-prefetch", () => ({ fetchConnectionSchema: mockFetchConnectionSchema })); vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); + +const SESSION = { userId: "user-1", role: "creator", canWrite: true, tenantId: "t1" }; // --------------------------------------------------------------------------- // Tests @@ -43,25 +59,25 @@ describe("GET /api/connections/[id]/schema", () => { GET = mod.GET; }); - it("returns 500 with 'Unauthorized' when unauthenticated", async () => { - mockRequireUserId.mockRejectedValue(new Error("Unauthorized")); + it("returns 401 when unauthenticated", async () => { + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await GET({} as Request, makeParams("c1")); - expect(res.status).toBe(500); + expect(res.status).toBe(401); const body = await res.json(); - expect(body.error).toBe("Unauthorized"); + expect(body.error.code).toBe("UNAUTHORIZED"); }); it("returns 404 when connection not found or not owned", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); mockDb.select.mockReturnValue(makeSelectChain([])); const res = await GET({} as Request, makeParams("c1")); expect(res.status).toBe(404); const body = await res.json(); - expect(body.error).toBe("Not found"); + expect(body.error.code).toBe("NOT_FOUND"); }); it("returns schema on success", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); const conn = { id: "c1", userId: "user-1", type: "neo4j", configEncrypted: "enc" }; mockDb.select.mockReturnValue(makeSelectChain([conn])); mockDecryptJson.mockReturnValue({ uri: "bolt://localhost", username: "neo4j", password: "pass" }); @@ -71,11 +87,12 @@ describe("GET /api/connections/[id]/schema", () => { const res = await GET({} as Request, makeParams("c1")); expect(res.status).toBe(200); const body = await res.json(); - expect(body).toEqual(schema); + expect(body.data).toEqual(schema); + expect(body.error).toBeNull(); }); it("returns 500 when fetchConnectionSchema throws", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); const conn = { id: "c1", userId: "user-1", type: "postgresql", configEncrypted: "enc" }; mockDb.select.mockReturnValue(makeSelectChain([conn])); mockDecryptJson.mockReturnValue({ uri: "pg://localhost", username: "pg", password: "pass" }); @@ -84,6 +101,7 @@ describe("GET /api/connections/[id]/schema", () => { const res = await GET({} as Request, makeParams("c1")); expect(res.status).toBe(500); const body = await res.json(); - expect(body.error).toBe("Schema fetch failed"); + expect(body.error.code).toBe("INTERNAL_ERROR"); + expect(body.error.message).toBe("Failed to fetch schema"); }); }); diff --git a/app/src/app/api/connections/[id]/schema/route.ts b/app/src/app/api/connections/[id]/schema/route.ts index a60397d6..6fe0b3e5 100644 --- a/app/src/app/api/connections/[id]/schema/route.ts +++ b/app/src/app/api/connections/[id]/schema/route.ts @@ -1,18 +1,19 @@ -import { NextResponse } from "next/server"; import { and, eq } from "drizzle-orm"; import { db } from "@/lib/db"; import { connections } from "@/lib/db/schema"; -import { requireUserId } from "@/lib/auth/session"; +import { requireSession } from "@/lib/auth/session"; import { decryptJson } from "@/lib/crypto"; import { fetchConnectionSchema } from "@/lib/schema-prefetch"; import type { ConnectionCredentials } from "@/lib/query-executor"; +import { apiSuccess } from "@/lib/api-response"; +import { notFound, handleRouteError } from "@/lib/api-utils"; export async function GET( _request: Request, - { params }: { params: Promise<{ id: string }> } + { params }: { params: Promise<{ id: string }> }, ) { try { - const userId = await requireUserId(); + const { userId } = await requireSession(); const { id } = await params; const [connection] = await db @@ -22,22 +23,20 @@ export async function GET( .limit(1); if (!connection) { - return NextResponse.json({ error: "Not found" }, { status: 404 }); + return notFound("Connection not found"); } const credentials = decryptJson( - connection.configEncrypted + connection.configEncrypted, ); const schema = await fetchConnectionSchema( connection.type as "neo4j" | "postgresql", - credentials + credentials, ); - return NextResponse.json(schema); + return apiSuccess(schema); } catch (error) { - const message = - error instanceof Error ? error.message : "Failed to fetch schema"; - return NextResponse.json({ error: message }, { status: 500 }); + return handleRouteError(error, "Failed to fetch schema"); } } diff --git a/app/src/app/api/connections/[id]/test/__tests__/route.test.ts b/app/src/app/api/connections/[id]/test/__tests__/route.test.ts index 36667605..328d2dc5 100644 --- a/app/src/app/api/connections/[id]/test/__tests__/route.test.ts +++ b/app/src/app/api/connections/[id]/test/__tests__/route.test.ts @@ -6,7 +6,9 @@ import { nextResponseMockFactory } from "@/__tests__/helpers/next-mocks"; // Mocks // --------------------------------------------------------------------------- -const mockRequireUserId = vi.fn<() => Promise>(); +const mockRequireSession = vi.fn< + () => Promise<{ userId: string; role: string; canWrite: boolean; tenantId: string }> +>(); const mockDecryptJson = vi.fn(); const mockTestConnection = vi.fn(); @@ -22,11 +24,25 @@ function makeSelectChain(rows: unknown[]) { const mockDb = { select: vi.fn() }; -vi.mock("@/lib/auth/session", () => ({ requireUserId: mockRequireUserId })); +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + +vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("@/lib/crypto", () => ({ decryptJson: mockDecryptJson })); vi.mock("@/lib/query-executor", () => ({ testConnection: mockTestConnection })); vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); + +const SESSION = { userId: "user-1", role: "creator", canWrite: true, tenantId: "t1" }; // --------------------------------------------------------------------------- // Tests @@ -43,25 +59,25 @@ describe("POST /api/connections/[id]/test", () => { POST = mod.POST; }); - it("returns 500 with 'Unauthorized' when unauthenticated", async () => { - mockRequireUserId.mockRejectedValue(new Error("Unauthorized")); + it("returns 401 when unauthenticated", async () => { + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await POST({} as Request, makeParams("c1")); - expect(res.status).toBe(500); + expect(res.status).toBe(401); const body = await res.json(); - expect(body.error).toBe("Unauthorized"); + expect(body.error.code).toBe("UNAUTHORIZED"); }); it("returns 404 when connection not found or not owned", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); mockDb.select.mockReturnValue(makeSelectChain([])); const res = await POST({} as Request, makeParams("c1")); expect(res.status).toBe(404); const body = await res.json(); - expect(body.error).toBe("Not found"); + expect(body.error.code).toBe("NOT_FOUND"); }); it("returns success:true when test passes", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); const conn = { id: "c1", userId: "user-1", type: "neo4j", configEncrypted: "enc" }; mockDb.select.mockReturnValue(makeSelectChain([conn])); mockDecryptJson.mockReturnValue({ uri: "bolt://localhost", username: "neo4j", password: "pass" }); @@ -70,11 +86,12 @@ describe("POST /api/connections/[id]/test", () => { const res = await POST({} as Request, makeParams("c1")); expect(res.status).toBe(200); const body = await res.json(); - expect(body.success).toBe(true); + expect(body.data.success).toBe(true); + expect(body.error).toBeNull(); }); it("returns 500 when testConnection throws", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); const conn = { id: "c1", userId: "user-1", type: "postgresql", configEncrypted: "enc" }; mockDb.select.mockReturnValue(makeSelectChain([conn])); mockDecryptJson.mockReturnValue({ uri: "pg://localhost", username: "pg", password: "pass" }); @@ -83,6 +100,7 @@ describe("POST /api/connections/[id]/test", () => { const res = await POST({} as Request, makeParams("c1")); expect(res.status).toBe(500); const body = await res.json(); - expect(body.error).toBe("Connection refused"); + expect(body.error.code).toBe("INTERNAL_ERROR"); + expect(body.error.message).toBe("Connection test failed"); }); }); diff --git a/app/src/app/api/connections/[id]/test/route.ts b/app/src/app/api/connections/[id]/test/route.ts index 774913a3..cd4e3ab5 100644 --- a/app/src/app/api/connections/[id]/test/route.ts +++ b/app/src/app/api/connections/[id]/test/route.ts @@ -1,18 +1,19 @@ -import { NextResponse } from "next/server"; import { and, eq } from "drizzle-orm"; import { db } from "@/lib/db"; import { connections } from "@/lib/db/schema"; -import { requireUserId } from "@/lib/auth/session"; +import { requireSession } from "@/lib/auth/session"; import { decryptJson } from "@/lib/crypto"; import { testConnection } from "@/lib/query-executor"; import type { ConnectionCredentials, DbType } from "@/lib/query-executor"; +import { apiSuccess } from "@/lib/api-response"; +import { notFound, handleRouteError } from "@/lib/api-utils"; export async function POST( _request: Request, - { params }: { params: Promise<{ id: string }> } + { params }: { params: Promise<{ id: string }> }, ) { try { - const userId = await requireUserId(); + const { userId } = await requireSession(); const { id } = await params; const [connection] = await db @@ -22,22 +23,20 @@ export async function POST( .limit(1); if (!connection) { - return NextResponse.json({ error: "Not found" }, { status: 404 }); + return notFound("Connection not found"); } const credentials = decryptJson( - connection.configEncrypted + connection.configEncrypted, ); const success = await testConnection( connection.type as DbType, - credentials + credentials, ); - return NextResponse.json({ success }); + return apiSuccess({ success }); } catch (error) { - const message = - error instanceof Error ? error.message : "Connection test failed"; - return NextResponse.json({ success: false, error: message }, { status: 500 }); + return handleRouteError(error, "Connection test failed"); } } diff --git a/app/src/app/api/connections/__tests__/route.test.ts b/app/src/app/api/connections/__tests__/route.test.ts index a8400893..ad155f8a 100644 --- a/app/src/app/api/connections/__tests__/route.test.ts +++ b/app/src/app/api/connections/__tests__/route.test.ts @@ -18,11 +18,23 @@ const mockDb = { insert: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("@/lib/crypto", () => ({ encryptJson: mockEncryptJson, decryptJson: vi.fn() })); vi.mock("@/lib/schema-prefetch", () => ({ prefetchSchema: mockPrefetchSchema })); vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); const SESSION = { userId: "user-1", role: "creator", canWrite: true, tenantId: "t1" }; const ADMIN_SESSION = { userId: "admin-1", role: "admin", canWrite: true, tenantId: "t1" }; @@ -43,7 +55,7 @@ describe("GET /api/connections", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await GET(makeRequest({}, "http://localhost/api/connections")); expect(res.status).toBe(401); }); @@ -104,7 +116,7 @@ describe("POST /api/connections", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await POST(makeRequest({ name: "DB", type: "neo4j", config: { uri: "bolt://localhost", username: "neo4j", password: "pass" } })); expect(res.status).toBe(401); }); diff --git a/app/src/app/api/connections/route.ts b/app/src/app/api/connections/route.ts index 7ec759a0..cc8629d6 100644 --- a/app/src/app/api/connections/route.ts +++ b/app/src/app/api/connections/route.ts @@ -1,4 +1,4 @@ -import { count, eq } from "drizzle-orm"; +import { and, count, eq } from "drizzle-orm"; import { db } from "@/lib/db"; import { connections } from "@/lib/db/schema"; import { requireSession } from "@/lib/auth/session"; @@ -10,11 +10,14 @@ import { apiSuccess, apiList, parsePagination } from "@/lib/api-response"; export async function GET(request: Request) { try { - const { userId, role } = await requireSession(); + const { userId, tenantId, role } = await requireSession(); const { limit, offset } = parsePagination(request); const isAdmin = role === "admin"; - const whereClause = isAdmin ? undefined : eq(connections.userId, userId); + // Admin sees all connections in the tenant; non-admin sees only own. + const whereClause = isAdmin + ? eq(connections.tenantId, tenantId) + : and(eq(connections.userId, userId), eq(connections.tenantId, tenantId)); const [{ count: total }] = await db .select({ count: count() }) @@ -43,7 +46,7 @@ export async function GET(request: Request) { export async function POST(request: Request) { try { - const { userId } = await requireSession(); + const { userId, tenantId } = await requireSession(); const body = await request.json(); const result = validateBody(createConnectionSchema, body); if (!result.success) return result.response; @@ -55,6 +58,7 @@ export async function POST(request: Request) { .insert(connections) .values({ userId, + tenantId, name, type, configEncrypted, diff --git a/app/src/app/api/connections/test-inline/__tests__/route.test.ts b/app/src/app/api/connections/test-inline/__tests__/route.test.ts index dbf33547..94e42101 100644 --- a/app/src/app/api/connections/test-inline/__tests__/route.test.ts +++ b/app/src/app/api/connections/test-inline/__tests__/route.test.ts @@ -6,13 +6,17 @@ import { nextResponseMockFactory } from "@/__tests__/helpers/next-mocks"; // Mocks // --------------------------------------------------------------------------- -const mockRequireUserId = vi.fn<() => Promise>(); +const mockRequireSession = vi.fn< + () => Promise<{ userId: string; role: string; canWrite: boolean; tenantId: string }> +>(); const mockTestConnection = vi.fn(); -vi.mock("@/lib/auth/session", () => ({ requireUserId: mockRequireUserId })); +vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession })); vi.mock("@/lib/query-executor", () => ({ testConnection: mockTestConnection })); vi.mock("next/server", () => nextResponseMockFactory()); +const SESSION = { userId: "user-1", role: "creator", canWrite: true, tenantId: "t1" }; + // --------------------------------------------------------------------------- // Tests // --------------------------------------------------------------------------- @@ -28,71 +32,74 @@ describe("POST /api/connections/test-inline", () => { POST = mod.POST; }); - it("returns 500 with 'Unauthorized' when unauthenticated", async () => { - mockRequireUserId.mockRejectedValue(new Error("Unauthorized")); + it("returns 401 when unauthenticated", async () => { + mockRequireSession.mockRejectedValue(new Error("Unauthorized")); const res = await POST(makeRequest({})); - expect(res.status).toBe(500); + expect(res.status).toBe(401); const body = await res.json(); - expect(body.error).toBe("Unauthorized"); + expect(body.error.code).toBe("UNAUTHORIZED"); }); it("returns 400 for invalid body (missing type)", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); const res = await POST(makeRequest({ config: { uri: "x", username: "u", password: "p" } })); expect(res.status).toBe(400); const body = await res.json(); - expect(body.success).toBe(false); + expect(body.error.code).toBe("VALIDATION_ERROR"); }); it("returns 400 for invalid type value", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); const res = await POST( - makeRequest({ type: "mysql", config: { uri: "x", username: "u", password: "p" } }) + makeRequest({ type: "mysql", config: { uri: "x", username: "u", password: "p" } }), ); expect(res.status).toBe(400); }); it("returns 400 when config.uri is empty", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); const res = await POST( - makeRequest({ type: "neo4j", config: { uri: "", username: "u", password: "p" } }) + makeRequest({ type: "neo4j", config: { uri: "", username: "u", password: "p" } }), ); expect(res.status).toBe(400); }); it("returns success:true when test passes", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); mockTestConnection.mockResolvedValue(true); const res = await POST( makeRequest({ type: "neo4j", config: { uri: "bolt://localhost:7687", username: "neo4j", password: "pass" }, - }) + }), ); expect(res.status).toBe(200); const body = await res.json(); - expect(body.success).toBe(true); + expect(body.data.success).toBe(true); }); it("passes optional database to testConnection", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); mockTestConnection.mockResolvedValue(true); await POST( makeRequest({ type: "postgresql", config: { uri: "pg://localhost", username: "pg", password: "pass", database: "mydb" }, - }) + }), + ); + expect(mockTestConnection).toHaveBeenCalledWith( + "postgresql", + expect.objectContaining({ + uri: "pg://localhost", + username: "pg", + password: "pass", + database: "mydb", + }), ); - expect(mockTestConnection).toHaveBeenCalledWith("postgresql", { - uri: "pg://localhost", - username: "pg", - password: "pass", - database: "mydb", - }); }); it("passes advanced pool settings to testConnection", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); mockTestConnection.mockResolvedValue(true); await POST( makeRequest({ @@ -109,60 +116,64 @@ describe("POST /api/connections/test-inline", () => { statementTimeout: 60000, sslRejectUnauthorized: false, }, - }) + }), + ); + expect(mockTestConnection).toHaveBeenCalledWith( + "neo4j", + expect.objectContaining({ + uri: "bolt://localhost:7687", + username: "neo4j", + password: "pass", + connectionTimeout: 5000, + queryTimeout: 30000, + maxPoolSize: 20, + connectionAcquisitionTimeout: 10000, + idleTimeout: 15000, + statementTimeout: 60000, + sslRejectUnauthorized: false, + }), ); - expect(mockTestConnection).toHaveBeenCalledWith("neo4j", { - uri: "bolt://localhost:7687", - username: "neo4j", - password: "pass", - database: undefined, - connectionTimeout: 5000, - queryTimeout: 30000, - maxPoolSize: 20, - connectionAcquisitionTimeout: 10000, - idleTimeout: 15000, - statementTimeout: 60000, - sslRejectUnauthorized: false, - }); }); it("returns success:false when testConnection returns false", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); mockTestConnection.mockResolvedValue(false); const res = await POST( makeRequest({ type: "postgresql", config: { uri: "pg://localhost", username: "pg", password: "pass" }, - }) + }), ); expect(res.status).toBe(200); - expect(res._body.success).toBe(false); + const body = await res.json(); + expect(body.data.success).toBe(false); }); it("returns 500 with fallback message for non-Error throws", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); mockTestConnection.mockRejectedValue("string error"); const res = await POST( makeRequest({ type: "neo4j", config: { uri: "bolt://localhost", username: "neo4j", password: "pass" }, - }) + }), ); expect(res.status).toBe(500); - expect(res._body.error).toBe("Connection test failed"); + const body = await res.json(); + expect(body.error.message).toBe("Connection test failed"); }); it("returns 500 when testConnection throws", async () => { - mockRequireUserId.mockResolvedValue("user-1"); + mockRequireSession.mockResolvedValue(SESSION); mockTestConnection.mockRejectedValue(new Error("Refused")); const res = await POST( makeRequest({ type: "neo4j", config: { uri: "bolt://localhost", username: "neo4j", password: "pass" }, - }) + }), ); expect(res.status).toBe(500); const body = await res.json(); - expect(body.error).toBe("Refused"); + expect(body.error.code).toBe("INTERNAL_ERROR"); }); }); diff --git a/app/src/app/api/connections/test-inline/route.ts b/app/src/app/api/connections/test-inline/route.ts index b98bb8a4..e60c0abd 100644 --- a/app/src/app/api/connections/test-inline/route.ts +++ b/app/src/app/api/connections/test-inline/route.ts @@ -1,23 +1,21 @@ -import { NextResponse } from "next/server"; -import { requireUserId } from "@/lib/auth/session"; +import { requireSession } from "@/lib/auth/session"; import { testConnection } from "@/lib/query-executor"; import type { DbType } from "@/lib/query-executor"; import { testInlineSchema } from "@/lib/schemas"; +import { apiSuccess } from "@/lib/api-response"; +import { handleRouteError, validateBody } from "@/lib/api-utils"; export async function POST(request: Request) { try { - await requireUserId(); + await requireSession(); const body = await request.json(); - const parsed = testInlineSchema.safeParse(body); + const validation = validateBody(testInlineSchema, body); - if (!parsed.success) { - return NextResponse.json( - { success: false, error: parsed.error.errors[0].message }, - { status: 400 } - ); + if (!validation.success) { + return validation.response; } - const { type, config } = parsed.data; + const { type, config } = validation.data; const success = await testConnection(type as DbType, { uri: config.uri, username: config.username, @@ -32,10 +30,8 @@ export async function POST(request: Request) { sslRejectUnauthorized: config.sslRejectUnauthorized, }); - return NextResponse.json({ success }); + return apiSuccess({ success }); } catch (error) { - const message = - error instanceof Error ? error.message : "Connection test failed"; - return NextResponse.json({ success: false, error: message }, { status: 500 }); + return handleRouteError(error, "Connection test failed"); } } diff --git a/app/src/app/api/dashboards/[id]/__tests__/route.test.ts b/app/src/app/api/dashboards/[id]/__tests__/route.test.ts index 64e33b56..8a158715 100644 --- a/app/src/app/api/dashboards/[id]/__tests__/route.test.ts +++ b/app/src/app/api/dashboards/[id]/__tests__/route.test.ts @@ -24,12 +24,24 @@ const mockDb = { delete: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession, requireUserId: vi.fn(), })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); // --------------------------------------------------------------------------- // Helpers @@ -65,7 +77,7 @@ describe("GET /api/dashboards/[id]", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await GET({} as Request, makeParams("d1")); expect(res.status).toBe(401); }); @@ -189,7 +201,7 @@ describe("PUT /api/dashboards/[id]", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await PUT(makeRequest({ name: "New name" }), makeParams("d1")); expect(res.status).toBe(401); }); @@ -327,7 +339,7 @@ describe("DELETE /api/dashboards/[id]", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await DELETE({} as Request, makeParams("d1")); expect(res.status).toBe(401); }); diff --git a/app/src/app/api/dashboards/[id]/duplicate/__tests__/route.test.ts b/app/src/app/api/dashboards/[id]/duplicate/__tests__/route.test.ts index 30c9b779..deb474c2 100644 --- a/app/src/app/api/dashboards/[id]/duplicate/__tests__/route.test.ts +++ b/app/src/app/api/dashboards/[id]/duplicate/__tests__/route.test.ts @@ -47,9 +47,21 @@ const mockDb = { insert: vi.fn(() => makeInsertChain([])), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); // --------------------------------------------------------------------------- // Tests @@ -68,7 +80,7 @@ describe("POST /api/dashboards/[id]/duplicate", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await POST({} as Request, makeParams("d1")); expect(res.status).toBe(401); }); diff --git a/app/src/app/api/dashboards/[id]/export/__tests__/route.test.ts b/app/src/app/api/dashboards/[id]/export/__tests__/route.test.ts index 17ab324f..d4103e22 100644 --- a/app/src/app/api/dashboards/[id]/export/__tests__/route.test.ts +++ b/app/src/app/api/dashboards/[id]/export/__tests__/route.test.ts @@ -13,10 +13,22 @@ const mockDb = { select: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession, })); vi.mock("@/lib/db", () => ({ db: mockDb })); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); // --------------------------------------------------------------------------- // Helpers @@ -70,7 +82,7 @@ describe("GET /api/dashboards/[id]/export", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await GET(new Request("http://localhost"), { params: Promise.resolve({ id: "dash-1" }), @@ -78,7 +90,7 @@ describe("GET /api/dashboards/[id]/export", () => { expect(res.status).toBe(401); const body = await res.json(); - expect(body.error).toBe("Unauthorized"); + expect(body.error.code).toBe("UNAUTHORIZED"); }); it("returns 404 when dashboard is not found", async () => { @@ -91,7 +103,7 @@ describe("GET /api/dashboards/[id]/export", () => { expect(res.status).toBe(404); const body = await res.json(); - expect(body.error).toBe("Not found"); + expect(body.error.code).toBe("NOT_FOUND"); }); it("returns 200 with export payload and download headers", async () => { @@ -183,7 +195,7 @@ describe("GET /api/dashboards/[id]/export", () => { expect(res.status).toBe(500); const body = await res.json(); - expect(body.error).toBe("Internal Server Error"); + expect(body.error.code).toBe("INTERNAL_ERROR"); }); it("scopes connection query to userId", async () => { diff --git a/app/src/app/api/dashboards/[id]/export/route.ts b/app/src/app/api/dashboards/[id]/export/route.ts index 3d3a4524..53871a66 100644 --- a/app/src/app/api/dashboards/[id]/export/route.ts +++ b/app/src/app/api/dashboards/[id]/export/route.ts @@ -1,9 +1,9 @@ -import { NextResponse } from "next/server"; import { and, eq, inArray } from "drizzle-orm"; import { db } from "@/lib/db"; -import { connections, dashboards } from "@/lib/db/schema"; +import { connections, dashboards, dashboardShares } from "@/lib/db/schema"; import { requireSession } from "@/lib/auth/session"; import { buildExportPayload } from "@/lib/dashboard-export"; +import { notFound, handleRouteError } from "@/lib/api-utils"; import type { DashboardLayoutV2 } from "@/lib/db/schema"; export async function GET( @@ -11,9 +11,10 @@ export async function GET( { params }: { params: Promise<{ id: string }> } ) { try { - const { userId, tenantId } = await requireSession(); + const { userId, tenantId, role } = await requireSession(); const { id } = await params; + // Fetch the dashboard with tenant scoping const [dashboard] = await db .select() .from(dashboards) @@ -21,7 +22,28 @@ export async function GET( .limit(1); if (!dashboard) { - return NextResponse.json({ error: "Not found" }, { status: 404 }); + return notFound("Dashboard not found"); + } + + // Access control: admin can export any dashboard in the tenant; + // owners and shared users (viewer or editor) can export; + // public dashboards are exportable by any tenant user. + if (role !== "admin" && dashboard.userId !== userId) { + const [share] = await db + .select({ id: dashboardShares.id }) + .from(dashboardShares) + .where( + and( + eq(dashboardShares.dashboardId, id), + eq(dashboardShares.userId, userId), + eq(dashboardShares.tenantId, tenantId), + ) + ) + .limit(1); + + if (!share && !dashboard.isPublic) { + return notFound("Dashboard not found"); + } } const layout = dashboard.layoutJson as DashboardLayoutV2 | null; @@ -38,13 +60,21 @@ export async function GET( } } - // Load connection name + type (no credentials) + // Load connection name + type (no credentials). + // Include connections owned by the user OR referenced by dashboards + // they have access to (admin sees all in tenant context). let connectionRows: { id: string; name: string; type: string }[] = []; if (connectionIds.size > 0) { connectionRows = await db .select({ id: connections.id, name: connections.name, type: connections.type }) .from(connections) - .where(and(inArray(connections.id, [...connectionIds]), eq(connections.userId, userId))); + .where( + and( + inArray(connections.id, [...connectionIds]), + eq(connections.tenantId, tenantId), + role === "admin" ? undefined : eq(connections.userId, userId), + ) + ); } const payload = buildExportPayload(dashboard, connectionRows); @@ -62,10 +92,7 @@ export async function GET( "Content-Disposition": `attachment; filename="dashboard-${slug}.json"`, }, }); - } catch (e) { - if (e instanceof Error && e.message === "Unauthorized") { - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - return NextResponse.json({ error: "Internal Server Error" }, { status: 500 }); + } catch (error) { + return handleRouteError(error, "Failed to export dashboard"); } } diff --git a/app/src/app/api/dashboards/[id]/share/__tests__/route.test.ts b/app/src/app/api/dashboards/[id]/share/__tests__/route.test.ts index 47631edd..baa2570b 100644 --- a/app/src/app/api/dashboards/[id]/share/__tests__/route.test.ts +++ b/app/src/app/api/dashboards/[id]/share/__tests__/route.test.ts @@ -32,12 +32,24 @@ const mockDb = { delete: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession, requireUserId: vi.fn(), })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); // --------------------------------------------------------------------------- // Helpers @@ -67,7 +79,7 @@ describe("GET /api/dashboards/[id]/share", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await GET({} as Request, makeParams("d1")); expect(res.status).toBe(401); }); @@ -119,7 +131,7 @@ describe("POST /api/dashboards/[id]/share", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await POST(makeRequest({ email: "a@b.com", role: "viewer" }), makeParams("d1")); expect(res.status).toBe(401); }); @@ -208,7 +220,7 @@ describe("DELETE /api/dashboards/[id]/share", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await DELETE( makeDeleteRequest("http://localhost/api/dashboards/d1/share"), makeParams("d1") diff --git a/app/src/app/api/dashboards/[id]/share/route.ts b/app/src/app/api/dashboards/[id]/share/route.ts index 6363fa3f..20590747 100644 --- a/app/src/app/api/dashboards/[id]/share/route.ts +++ b/app/src/app/api/dashboards/[id]/share/route.ts @@ -68,7 +68,12 @@ export async function GET( }) .from(dashboardShares) .innerJoin(users, eq(dashboardShares.userId, users.id)) - .where(eq(dashboardShares.dashboardId, id)); + .where( + and( + eq(dashboardShares.dashboardId, id), + eq(dashboardShares.tenantId, tenantId), + ) + ); return apiSuccess(shares); } catch (error) { @@ -165,7 +170,8 @@ export async function DELETE( .where( and( eq(dashboardShares.id, shareId), - eq(dashboardShares.dashboardId, id) + eq(dashboardShares.dashboardId, id), + eq(dashboardShares.tenantId, tenantId) ) ); diff --git a/app/src/app/api/dashboards/__tests__/route.test.ts b/app/src/app/api/dashboards/__tests__/route.test.ts index 6d250235..c6e7b97d 100644 --- a/app/src/app/api/dashboards/__tests__/route.test.ts +++ b/app/src/app/api/dashboards/__tests__/route.test.ts @@ -13,15 +13,28 @@ const mockRequireSession = vi.fn< const mockDb = { select: vi.fn(), + selectDistinctOn: vi.fn(), insert: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession, requireUserId: vi.fn(), })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); // --------------------------------------------------------------------------- // Tests @@ -39,25 +52,21 @@ describe("GET /api/dashboards", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await GET(makeRequest({}, "http://localhost/api/dashboards")); expect(res.status).toBe(401); }); it("returns owned dashboards with role=owner in envelope (creator role)", async () => { mockRequireSession.mockResolvedValue({ userId: "user-1", role: "creator", canWrite: true, tenantId: "default" }); - const ownedRow = { - id: "d1", - name: "My Dashboard", - description: null, - isPublic: false, - createdAt: new Date(), - updatedAt: new Date(), + const row = { + id: "d1", name: "My Dashboard", description: null, isPublic: false, + createdAt: new Date(), updatedAt: new Date(), + ownerId: "user-1", shareRole: null, updatedByName: null, }; - mockDb.select - .mockReturnValueOnce(makeSelectChain([ownedRow])) - .mockReturnValueOnce(makeSelectChain([])) - .mockReturnValueOnce(makeSelectChain([])); + // Non-admin: 1) count, 2) selectDistinctOn + mockDb.select.mockReturnValueOnce(makeSelectChain([{ count: 1 }])); + mockDb.selectDistinctOn.mockReturnValueOnce(makeSelectChain([row])); const res = await GET(makeRequest({}, "http://localhost/api/dashboards")); expect(res.status).toBe(200); @@ -70,12 +79,18 @@ describe("GET /api/dashboards", () => { it("merges owned and shared dashboards (creator role)", async () => { mockRequireSession.mockResolvedValue({ userId: "user-1", role: "creator", canWrite: true, tenantId: "default" }); - const ownedRow = { id: "d1", name: "Own", description: null, isPublic: false, createdAt: new Date(), updatedAt: new Date() }; - const sharedRow = { id: "d2", name: "Shared", description: null, isPublic: false, createdAt: new Date(), updatedAt: new Date(), role: "viewer" }; - mockDb.select - .mockReturnValueOnce(makeSelectChain([ownedRow])) - .mockReturnValueOnce(makeSelectChain([sharedRow])) - .mockReturnValueOnce(makeSelectChain([])); + const ownedRow = { + id: "d1", name: "Own", description: null, isPublic: false, + createdAt: new Date(), updatedAt: new Date(), + ownerId: "user-1", shareRole: null, updatedByName: null, + }; + const sharedRow = { + id: "d2", name: "Shared", description: null, isPublic: false, + createdAt: new Date(), updatedAt: new Date(), + ownerId: "other-user", shareRole: "viewer", updatedByName: null, + }; + mockDb.select.mockReturnValueOnce(makeSelectChain([{ count: 2 }])); + mockDb.selectDistinctOn.mockReturnValueOnce(makeSelectChain([ownedRow, sharedRow])); const res = await GET(makeRequest({}, "http://localhost/api/dashboards")); const body = await res.json(); @@ -88,7 +103,10 @@ describe("GET /api/dashboards", () => { mockRequireSession.mockResolvedValue({ userId: "admin-1", role: "admin", canWrite: true, tenantId: "default" }); const ownedRow = { id: "d1", name: "My Dashboard", description: null, isPublic: false, createdAt: new Date(), updatedAt: new Date(), ownerId: "admin-1" }; const otherRow = { id: "d2", name: "Other Dashboard", description: null, isPublic: false, createdAt: new Date(), updatedAt: new Date(), ownerId: "user-1" }; - mockDb.select.mockReturnValueOnce(makeSelectChain([ownedRow, otherRow])); + // Admin path: 1) count query, 2) paginated select + mockDb.select + .mockReturnValueOnce(makeSelectChain([{ count: 2 }])) + .mockReturnValueOnce(makeSelectChain([ownedRow, otherRow])); const res = await GET(makeRequest({}, "http://localhost/api/dashboards")); const body = await res.json(); @@ -100,11 +118,13 @@ describe("GET /api/dashboards", () => { it("returns only assigned dashboards for reader role", async () => { mockRequireSession.mockResolvedValue({ userId: "user-1", role: "reader", canWrite: false, tenantId: "default" }); - const assignedRow = { id: "d1", name: "Assigned", description: null, isPublic: false, createdAt: new Date(), updatedAt: new Date(), role: "viewer" }; - mockDb.select - .mockReturnValueOnce(makeSelectChain([])) - .mockReturnValueOnce(makeSelectChain([assignedRow])) - .mockReturnValueOnce(makeSelectChain([])); + const assignedRow = { + id: "d1", name: "Assigned", description: null, isPublic: false, + createdAt: new Date(), updatedAt: new Date(), + ownerId: "other-user", shareRole: "viewer", updatedByName: null, + }; + mockDb.select.mockReturnValueOnce(makeSelectChain([{ count: 1 }])); + mockDb.selectDistinctOn.mockReturnValueOnce(makeSelectChain([assignedRow])); const res = await GET(makeRequest({}, "http://localhost/api/dashboards")); const body = await res.json(); @@ -114,12 +134,18 @@ describe("GET /api/dashboards", () => { it("includes public dashboards for creator role", async () => { mockRequireSession.mockResolvedValue({ userId: "user-1", role: "creator", canWrite: true, tenantId: "default" }); - const ownedRow = { id: "d1", name: "Own", description: null, isPublic: false, createdAt: new Date(), updatedAt: new Date() }; - const publicRow = { id: "d2", name: "Public Demo", description: null, isPublic: true, createdAt: new Date(), updatedAt: new Date() }; - mockDb.select - .mockReturnValueOnce(makeSelectChain([ownedRow])) - .mockReturnValueOnce(makeSelectChain([])) - .mockReturnValueOnce(makeSelectChain([publicRow])); + const ownedRow = { + id: "d1", name: "Own", description: null, isPublic: false, + createdAt: new Date(), updatedAt: new Date(), + ownerId: "user-1", shareRole: null, updatedByName: null, + }; + const publicRow = { + id: "d2", name: "Public Demo", description: null, isPublic: true, + createdAt: new Date(), updatedAt: new Date(), + ownerId: "other-user", shareRole: null, updatedByName: null, + }; + mockDb.select.mockReturnValueOnce(makeSelectChain([{ count: 2 }])); + mockDb.selectDistinctOn.mockReturnValueOnce(makeSelectChain([ownedRow, publicRow])); const res = await GET(makeRequest({}, "http://localhost/api/dashboards")); const body = await res.json(); @@ -128,14 +154,16 @@ describe("GET /api/dashboards", () => { expect(body.data.find((d: { id: string }) => d.id === "d2")?.role).toBe("viewer"); }); - it("deduplicates public dashboards already in owned or shared", async () => { + it("deduplication handled by DB DISTINCT ON", async () => { mockRequireSession.mockResolvedValue({ userId: "user-1", role: "creator", canWrite: true, tenantId: "default" }); - const ownedRow = { id: "d1", name: "Own", description: null, isPublic: true, createdAt: new Date(), updatedAt: new Date() }; - const publicRow = { id: "d1", name: "Own", description: null, isPublic: true, createdAt: new Date(), updatedAt: new Date() }; - mockDb.select - .mockReturnValueOnce(makeSelectChain([ownedRow])) - .mockReturnValueOnce(makeSelectChain([])) - .mockReturnValueOnce(makeSelectChain([publicRow])); + // DB returns only 1 row (DISTINCT ON deduplicates at DB level) + const row = { + id: "d1", name: "Own", description: null, isPublic: true, + createdAt: new Date(), updatedAt: new Date(), + ownerId: "user-1", shareRole: null, updatedByName: null, + }; + mockDb.select.mockReturnValueOnce(makeSelectChain([{ count: 1 }])); + mockDb.selectDistinctOn.mockReturnValueOnce(makeSelectChain([row])); const res = await GET(makeRequest({}, "http://localhost/api/dashboards")); const body = await res.json(); @@ -145,11 +173,13 @@ describe("GET /api/dashboards", () => { it("includes public dashboards for reader role", async () => { mockRequireSession.mockResolvedValue({ userId: "user-1", role: "reader", canWrite: false, tenantId: "default" }); - const publicRow = { id: "d1", name: "Public Demo", description: null, isPublic: true, createdAt: new Date(), updatedAt: new Date() }; - mockDb.select - .mockReturnValueOnce(makeSelectChain([])) - .mockReturnValueOnce(makeSelectChain([])) - .mockReturnValueOnce(makeSelectChain([publicRow])); + const publicRow = { + id: "d1", name: "Public Demo", description: null, isPublic: true, + createdAt: new Date(), updatedAt: new Date(), + ownerId: "other-user", shareRole: null, updatedByName: null, + }; + mockDb.select.mockReturnValueOnce(makeSelectChain([{ count: 1 }])); + mockDb.selectDistinctOn.mockReturnValueOnce(makeSelectChain([publicRow])); const res = await GET(makeRequest({}, "http://localhost/api/dashboards")); const body = await res.json(); @@ -171,7 +201,7 @@ describe("POST /api/dashboards", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await POST(makeRequest({ name: "DB" })); expect(res.status).toBe(401); }); @@ -231,16 +261,13 @@ describe("GET /api/dashboards — updatedByName", () => { it("returns updatedByName from joined user for admin", async () => { mockRequireSession.mockResolvedValue({ userId: "admin-1", role: "admin", canWrite: true, tenantId: "default" }); const row = { - id: "d1", - name: "Dashboard", - description: null, - isPublic: false, - createdAt: new Date(), - updatedAt: new Date(), - ownerId: "admin-1", - updatedByName: "Alice", + id: "d1", name: "Dashboard", description: null, isPublic: false, + createdAt: new Date(), updatedAt: new Date(), + ownerId: "admin-1", updatedByName: "Alice", }; - mockDb.select.mockReturnValueOnce(makeSelectChain([row])); + mockDb.select + .mockReturnValueOnce(makeSelectChain([{ count: 1 }])) + .mockReturnValueOnce(makeSelectChain([row])); const res = await GET(makeRequest({}, "http://localhost/api/dashboards")); expect(res.status).toBe(200); @@ -250,19 +277,13 @@ describe("GET /api/dashboards — updatedByName", () => { it("returns updatedByName as null when no updater", async () => { mockRequireSession.mockResolvedValue({ userId: "user-1", role: "creator", canWrite: true, tenantId: "default" }); - const ownedRow = { - id: "d1", - name: "Dashboard", - description: null, - isPublic: false, - createdAt: new Date(), - updatedAt: new Date(), - updatedByName: null, + const row = { + id: "d1", name: "Dashboard", description: null, isPublic: false, + createdAt: new Date(), updatedAt: new Date(), + ownerId: "user-1", shareRole: null, updatedByName: null, }; - mockDb.select - .mockReturnValueOnce(makeSelectChain([ownedRow])) - .mockReturnValueOnce(makeSelectChain([])) - .mockReturnValueOnce(makeSelectChain([])); + mockDb.select.mockReturnValueOnce(makeSelectChain([{ count: 1 }])); + mockDb.selectDistinctOn.mockReturnValueOnce(makeSelectChain([row])); const res = await GET(makeRequest({}, "http://localhost/api/dashboards")); expect(res.status).toBe(200); diff --git a/app/src/app/api/dashboards/import/__tests__/route.test.ts b/app/src/app/api/dashboards/import/__tests__/route.test.ts index 72b51e07..9cc71f91 100644 --- a/app/src/app/api/dashboards/import/__tests__/route.test.ts +++ b/app/src/app/api/dashboards/import/__tests__/route.test.ts @@ -16,11 +16,23 @@ const mockDb = { insert: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession, })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); // --------------------------------------------------------------------------- // Helpers @@ -90,7 +102,7 @@ describe("POST /api/dashboards/import", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await POST(makeRequest({ payload: VALID_PAYLOAD, connectionMapping: {} })); expect(res.status).toBe(401); }); diff --git a/app/src/app/api/dashboards/route.ts b/app/src/app/api/dashboards/route.ts index 4a3dcaeb..dd49394a 100644 --- a/app/src/app/api/dashboards/route.ts +++ b/app/src/app/api/dashboards/route.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import { and, eq } from "drizzle-orm"; +import { and, count, countDistinct, eq, or, sql } from "drizzle-orm"; import { db } from "@/lib/db"; import { dashboards, dashboardShares, users } from "@/lib/db/schema"; import type { DashboardLayoutV2 } from "@/lib/db/schema"; @@ -49,8 +49,14 @@ export async function GET(request: Request) { const { limit, offset } = parsePagination(request); if (role === "admin") { - // Admin sees every dashboard in the tenant - const all = await db + // Admin sees every dashboard in the tenant — use DB-level pagination + // to avoid loading all dashboards into memory for large deployments. + const [{ count: total }] = await db + .select({ count: count() }) + .from(dashboards) + .where(eq(dashboards.tenantId, tenantId)); + + const rows = await db .select({ id: dashboards.id, name: dashboards.name, @@ -65,9 +71,12 @@ export async function GET(request: Request) { }) .from(dashboards) .leftJoin(users, eq(dashboards.updatedBy, users.id)) - .where(eq(dashboards.tenantId, tenantId)); + .where(eq(dashboards.tenantId, tenantId)) + .orderBy(dashboards.updatedAt) + .limit(limit) + .offset(offset); - const mapped = all.map((d) => { + const mapped = rows.map((d) => { const { layoutJson, thumbnailJson, ...rest } = d; return { ...rest, @@ -77,99 +86,78 @@ export async function GET(request: Request) { }; }); - const total = mapped.length; - const paginated = mapped.slice(offset, offset + limit); - return apiList(paginated, { total, limit, offset }); + return apiList(mapped, { total: Number(total), limit, offset }); } - // Creator & Reader: owned dashboards + explicitly assigned/shared + public - const owned = await db - .select({ - id: dashboards.id, - name: dashboards.name, - description: dashboards.description, - isPublic: dashboards.isPublic, - createdAt: dashboards.createdAt, - updatedAt: dashboards.updatedAt, - layoutJson: dashboards.layoutJson, - thumbnailJson: dashboards.thumbnailJson, - updatedByName: users.name, - }) + // Creator & Reader: single query with LEFT JOIN + OR for owned/shared/public. + // DB-level deduplication via DISTINCT ON, pagination via LIMIT/OFFSET. + const accessFilter = role === "reader" + ? or( + sql`${dashboardShares.id} IS NOT NULL`, + eq(dashboards.isPublic, true), + ) + : or( + eq(dashboards.userId, userId), + sql`${dashboardShares.id} IS NOT NULL`, + eq(dashboards.isPublic, true), + ); + + const [{ count: total }] = await db + .select({ count: countDistinct(dashboards.id) }) .from(dashboards) - .leftJoin(users, eq(dashboards.updatedBy, users.id)) - .where(and(eq(dashboards.userId, userId), eq(dashboards.tenantId, tenantId))); - - const shared = await db - .select({ - id: dashboards.id, - name: dashboards.name, - description: dashboards.description, - isPublic: dashboards.isPublic, - createdAt: dashboards.createdAt, - updatedAt: dashboards.updatedAt, - role: dashboardShares.role, - layoutJson: dashboards.layoutJson, - thumbnailJson: dashboards.thumbnailJson, - updatedByName: users.name, - }) - .from(dashboardShares) - .innerJoin(dashboards, eq(dashboardShares.dashboardId, dashboards.id)) - .leftJoin(users, eq(dashboards.updatedBy, users.id)) - .where( + .leftJoin( + dashboardShares, and( + eq(dashboardShares.dashboardId, dashboards.id), eq(dashboardShares.userId, userId), - eq(dashboards.tenantId, tenantId) - ) - ); + eq(dashboardShares.tenantId, tenantId), + ), + ) + .where(and(eq(dashboards.tenantId, tenantId), accessFilter)); - const publicDashboards = await db - .select({ + const rows = await db + .selectDistinctOn([dashboards.id], { id: dashboards.id, name: dashboards.name, description: dashboards.description, isPublic: dashboards.isPublic, createdAt: dashboards.createdAt, updatedAt: dashboards.updatedAt, + ownerId: dashboards.userId, + shareRole: dashboardShares.role, layoutJson: dashboards.layoutJson, thumbnailJson: dashboards.thumbnailJson, updatedByName: users.name, }) .from(dashboards) + .leftJoin( + dashboardShares, + and( + eq(dashboardShares.dashboardId, dashboards.id), + eq(dashboardShares.userId, userId), + eq(dashboardShares.tenantId, tenantId), + ), + ) .leftJoin(users, eq(dashboards.updatedBy, users.id)) - .where(and(eq(dashboards.tenantId, tenantId), eq(dashboards.isPublic, true))); - - function addPreview | null }>( - d: T - ) { - const { layoutJson, thumbnailJson, ...rest } = d; + .where(and(eq(dashboards.tenantId, tenantId), accessFilter)) + .orderBy(dashboards.id, dashboards.updatedAt) + .limit(limit) + .offset(offset); + + const mapped = rows.map((d) => { + const { layoutJson, thumbnailJson, ownerId, shareRole, ...rest } = d; + const dashRole = ownerId === userId + ? ("owner" as const) + : shareRole ?? ("viewer" as const); return { ...rest, + role: dashRole, preview: computePreview(layoutJson, thumbnailJson), widgetCount: countWidgets(layoutJson), }; - } - - // Build combined list: owned + shared + public, deduplicated by ID - const ownedMapped = owned.map((d) => addPreview({ ...d, role: "owner" as const })); - const sharedMapped = shared.map(addPreview); - const publicMapped = publicDashboards.map((d) => addPreview({ ...d, role: "viewer" as const })); - - const combined = - role === "reader" - ? [...sharedMapped, ...publicMapped] - : [...ownedMapped, ...sharedMapped, ...publicMapped]; - - // Deduplicate by ID (first occurrence wins — preserves owner/editor role over viewer) - const seen = new Set(); - const deduped = combined.filter((d) => { - if (seen.has(d.id)) return false; - seen.add(d.id); - return true; }); - const total = deduped.length; - const paginated = deduped.slice(offset, offset + limit); - return apiList(paginated, { total, limit, offset }); + return apiList(mapped, { total: Number(total), limit, offset }); } catch (error) { return handleRouteError(error, "Failed to fetch dashboards"); } diff --git a/app/src/app/api/keys/[id]/__tests__/route.test.ts b/app/src/app/api/keys/[id]/__tests__/route.test.ts index c3a5b284..aafe0ae9 100644 --- a/app/src/app/api/keys/[id]/__tests__/route.test.ts +++ b/app/src/app/api/keys/[id]/__tests__/route.test.ts @@ -13,6 +13,17 @@ const mockDb = { delete: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("next/server", () => nextResponseMockFactory()); @@ -31,12 +42,13 @@ describe("DELETE /api/keys/[id]", () => { vi.doMock("@/lib/auth/session", () => ({ requireSession: mockRequireSession })); vi.doMock("@/lib/db", () => ({ db: mockDb })); vi.doMock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); const mod = await import("../route"); DELETE = mod.DELETE; }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await DELETE({} as Request, makeParams("key-1")); expect(res.status).toBe(401); }); diff --git a/app/src/app/api/keys/__tests__/route.test.ts b/app/src/app/api/keys/__tests__/route.test.ts index 0553af6d..8a6cb16d 100644 --- a/app/src/app/api/keys/__tests__/route.test.ts +++ b/app/src/app/api/keys/__tests__/route.test.ts @@ -18,6 +18,17 @@ const mockDb = { insert: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession })); vi.mock("@/lib/auth/api-key", () => ({ generateApiKey: mockGenerateApiKey })); vi.mock("@/lib/db", () => ({ db: mockDb })); @@ -43,7 +54,7 @@ describe("GET /api/keys", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await GET(makeRequest(null)); expect(res.status).toBe(401); }); @@ -138,12 +149,13 @@ describe("POST /api/keys", () => { vi.doMock("@/lib/auth/api-key", () => ({ generateApiKey: mockGenerateApiKey })); vi.doMock("@/lib/db", () => ({ db: mockDb })); vi.doMock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); const mod = await import("../route"); POST = mod.POST; }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await POST(makeRequest({ name: "Test" })); expect(res.status).toBe(401); }); diff --git a/app/src/app/api/keys/route.ts b/app/src/app/api/keys/route.ts index b75d6179..db9b55b1 100644 --- a/app/src/app/api/keys/route.ts +++ b/app/src/app/api/keys/route.ts @@ -1,11 +1,11 @@ -import { NextResponse } from "next/server"; import { z } from "zod"; import { and, eq } from "drizzle-orm"; import { db } from "@/lib/db"; import { apiKeys } from "@/lib/db/schema"; import { requireSession } from "@/lib/auth/session"; import { generateApiKey } from "@/lib/auth/api-key"; -import { validateBody, handleRouteError } from "@/lib/api-utils"; +import { validateBody, forbidden, handleRouteError } from "@/lib/api-utils"; +import { apiSuccess } from "@/lib/api-response"; const createKeySchema = z.object({ name: z.string().min(1, "Name is required"), @@ -27,7 +27,7 @@ export async function GET() { .from(apiKeys) .where(and(eq(apiKeys.userId, userId), eq(apiKeys.tenantId, tenantId))); - return NextResponse.json({ data: rows, error: null, meta: null }); + return apiSuccess(rows); } catch (e) { return handleRouteError(e, "Failed to list API keys"); } @@ -37,7 +37,7 @@ export async function POST(request: Request) { try { const { userId, tenantId, canWrite } = await requireSession(); if (!canWrite) { - throw new Error("Forbidden"); + return forbidden(); } const body = await request.json(); @@ -63,10 +63,7 @@ export async function POST(request: Request) { createdAt: apiKeys.createdAt, }); - return NextResponse.json( - { data: { ...inserted, key: plaintext }, error: null, meta: null }, - { status: 201 } - ); + return apiSuccess({ ...inserted, key: plaintext }, 201); } catch (e) { return handleRouteError(e, "Failed to create API key"); } diff --git a/app/src/app/api/query/__tests__/route.test.ts b/app/src/app/api/query/__tests__/route.test.ts index 6c4764cd..7810e96b 100644 --- a/app/src/app/api/query/__tests__/route.test.ts +++ b/app/src/app/api/query/__tests__/route.test.ts @@ -16,6 +16,17 @@ const mockDb = { const mockDecryptJson = vi.fn(); const mockExecuteQuery = vi.fn(); +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("@/lib/crypto", () => ({ decryptJson: mockDecryptJson, encryptJson: vi.fn() })); @@ -24,6 +35,7 @@ vi.mock("@/lib/schema-prefetch", () => ({ prefetchSchema: vi.fn() })); // Minimal Next.js server shim vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); /** Default authenticated session */ const defaultSession = { userId: "user-1", tenantId: "tenant-a", role: "creator", canWrite: true }; @@ -68,7 +80,7 @@ describe("POST /api/query", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await POST(makeRequest({ connectionId: "c1", query: "MATCH (n) RETURN n" })); expect(res.status).toBe(500); // route catches and returns 500 with message const body = await res.json(); diff --git a/app/src/app/api/query/route.ts b/app/src/app/api/query/route.ts index 95108aeb..dcc267de 100644 --- a/app/src/app/api/query/route.ts +++ b/app/src/app/api/query/route.ts @@ -45,12 +45,12 @@ export async function POST(request: Request) { ) .limit(1); - // 2. Admin fallback: admin can use any connection in the tenant + // 2. Admin fallback: admin can use any connection in the same tenant. if (!connection && role === "admin") { [connection] = await db .select() .from(connections) - .where(eq(connections.id, connectionId)) + .where(and(eq(connections.id, connectionId), eq(connections.tenantId, sessionTenantId))) .limit(1); } @@ -66,7 +66,7 @@ export async function POST(request: Request) { [connection] = await db .select() .from(connections) - .where(eq(connections.id, connectionId)) + .where(and(eq(connections.id, connectionId), eq(connections.tenantId, sessionTenantId))) .limit(1); } } diff --git a/app/src/app/api/query/write/__tests__/route.test.ts b/app/src/app/api/query/write/__tests__/route.test.ts index edfdbae8..76eb3489 100644 --- a/app/src/app/api/query/write/__tests__/route.test.ts +++ b/app/src/app/api/query/write/__tests__/route.test.ts @@ -16,6 +16,17 @@ const mockDb = { const mockDecryptJson = vi.fn(); const mockExecuteQuery = vi.fn(); +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("@/lib/crypto", () => ({ decryptJson: mockDecryptJson, encryptJson: vi.fn() })); @@ -23,6 +34,7 @@ vi.mock("@/lib/query-executor", () => ({ executeQuery: mockExecuteQuery })); // Minimal Next.js server shim vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); /** Chainable drizzle query builder stub that resolves to `rows`. */ function drizzleSelectChain(rows: unknown[]) { @@ -69,7 +81,7 @@ describe("POST /api/query/write", () => { }); it("returns 500 when session retrieval fails", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await POST(makeRequest({ connectionId: "c1", query: "CREATE (n:Test)" })); expect(res.status).toBe(500); const body = await res.json(); diff --git a/app/src/app/api/query/write/route.ts b/app/src/app/api/query/write/route.ts index 6f67a711..a12d6af6 100644 --- a/app/src/app/api/query/write/route.ts +++ b/app/src/app/api/query/write/route.ts @@ -17,7 +17,7 @@ const writeQuerySchema = z.object({ export async function POST(request: Request) { try { - const { userId, canWrite } = await requireSession(); + const { userId, canWrite, tenantId } = await requireSession(); if (!canWrite) { return forbidden("Write permission required"); @@ -29,11 +29,11 @@ export async function POST(request: Request) { const { connectionId, query, params } = validation.data; - // Only connection owners can execute write queries + // Only connection owners can execute write queries (tenant-scoped) const [connection] = await db .select() .from(connections) - .where(and(eq(connections.id, connectionId), eq(connections.userId, userId))) + .where(and(eq(connections.id, connectionId), eq(connections.userId, userId), eq(connections.tenantId, tenantId))) .limit(1); if (!connection) { diff --git a/app/src/app/api/users/[id]/__tests__/route.test.ts b/app/src/app/api/users/[id]/__tests__/route.test.ts index 9b473307..34592e44 100644 --- a/app/src/app/api/users/[id]/__tests__/route.test.ts +++ b/app/src/app/api/users/[id]/__tests__/route.test.ts @@ -15,6 +15,17 @@ const mockDb = { delete: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireAdmin: mockRequireAdmin })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("next/server", () => nextResponseMockFactory()); @@ -41,7 +52,7 @@ describe("GET /api/users/[id]", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireAdmin.mockRejectedValue(new Error("Unauthorized")); + mockRequireAdmin.mockRejectedValue(new UnauthorizedError()); const res = await GET(makeRequest({}), makeParams("u1")); expect(res.status).toBe(401); const body = await res.json(); @@ -91,7 +102,7 @@ describe("PATCH /api/users/[id]", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireAdmin.mockRejectedValue(new Error("Unauthorized")); + mockRequireAdmin.mockRejectedValue(new UnauthorizedError()); const res = await PATCH(makeRequest({ canWrite: false }), makeParams("u1")); expect(res.status).toBe(401); }); @@ -162,12 +173,13 @@ describe("DELETE /api/users/[id]", () => { vi.doMock("@/lib/auth/session", () => ({ requireAdmin: mockRequireAdmin })); vi.doMock("@/lib/db", () => ({ db: mockDb })); vi.doMock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); const mod = await import("../route"); DELETE = mod.DELETE; }); it("returns 401 when unauthenticated", async () => { - mockRequireAdmin.mockRejectedValue(new Error("Unauthorized")); + mockRequireAdmin.mockRejectedValue(new UnauthorizedError()); const res = await DELETE(makeRequest({}), makeParams("u1")); expect(res.status).toBe(401); }); diff --git a/app/src/app/api/users/__tests__/route.test.ts b/app/src/app/api/users/__tests__/route.test.ts index 6517626e..eb1e66e7 100644 --- a/app/src/app/api/users/__tests__/route.test.ts +++ b/app/src/app/api/users/__tests__/route.test.ts @@ -15,6 +15,17 @@ const mockDb = { insert: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireAdmin: mockRequireAdmin })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("bcryptjs", () => ({ default: { hash: mockBcryptHash } })); @@ -40,7 +51,7 @@ describe("GET /api/users", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireAdmin.mockRejectedValue(new Error("Unauthorized")); + mockRequireAdmin.mockRejectedValue(new UnauthorizedError()); const res = await GET(makeRequest({}, "http://localhost/api/users")); expect(res.status).toBe(401); const body = await res.json(); @@ -48,7 +59,7 @@ describe("GET /api/users", () => { }); it("returns 403 when caller is not admin", async () => { - mockRequireAdmin.mockRejectedValue(new Error("Forbidden")); + mockRequireAdmin.mockRejectedValue(new ForbiddenError()); const res = await GET(makeRequest({}, "http://localhost/api/users")); expect(res.status).toBe(403); const body = await res.json(); @@ -102,6 +113,7 @@ describe("POST /api/users", () => { vi.doMock("@/lib/db", () => ({ db: mockDb })); vi.doMock("bcryptjs", () => ({ default: { hash: mockBcryptHash } })); vi.doMock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); const mod = await import("../route"); POST = mod.POST; }); diff --git a/app/src/app/api/widget-templates/[id]/__tests__/route.test.ts b/app/src/app/api/widget-templates/[id]/__tests__/route.test.ts index d44a835a..5d92de13 100644 --- a/app/src/app/api/widget-templates/[id]/__tests__/route.test.ts +++ b/app/src/app/api/widget-templates/[id]/__tests__/route.test.ts @@ -16,12 +16,24 @@ const mockDb = { delete: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession, requireUserId: vi.fn(), })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); // --------------------------------------------------------------------------- // Tests — GET /api/widget-templates/[id] @@ -39,7 +51,7 @@ describe("GET /api/widget-templates/[id]", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await GET({} as Request, { params: Promise.resolve({ id: "t1" }) }); expect(res.status).toBe(401); }); @@ -85,7 +97,7 @@ describe("PUT /api/widget-templates/[id]", () => { } it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await PUT(makeRequest({ name: "Updated" }), { params: Promise.resolve({ id: "t1" }) }); expect(res.status).toBe(401); }); @@ -157,7 +169,7 @@ describe("DELETE /api/widget-templates/[id]", () => { }); it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await DELETE({} as Request, { params: Promise.resolve({ id: "t1" }) }); expect(res.status).toBe(401); }); diff --git a/app/src/app/api/widget-templates/__tests__/route.test.ts b/app/src/app/api/widget-templates/__tests__/route.test.ts index 907aab52..fb2793ff 100644 --- a/app/src/app/api/widget-templates/__tests__/route.test.ts +++ b/app/src/app/api/widget-templates/__tests__/route.test.ts @@ -15,12 +15,24 @@ const mockDb = { insert: vi.fn(), }; +class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} + vi.mock("@/lib/auth/session", () => ({ requireSession: mockRequireSession, requireUserId: vi.fn(), })); vi.mock("@/lib/db", () => ({ db: mockDb })); vi.mock("next/server", () => nextResponseMockFactory()); +vi.mock("@/lib/auth/errors", () => ({ UnauthorizedError, ForbiddenError })); // --------------------------------------------------------------------------- // Tests — GET /api/widget-templates @@ -46,7 +58,7 @@ describe("GET /api/widget-templates", () => { } it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await GET(makeRequest()); expect(res.status).toBe(401); }); @@ -105,7 +117,7 @@ describe("POST /api/widget-templates", () => { } it("returns 401 when unauthenticated", async () => { - mockRequireSession.mockRejectedValue(new Error("Unauthorized")); + mockRequireSession.mockRejectedValue(new UnauthorizedError()); const res = await POST(makeRequest({ name: "T", chartType: "bar", connectorType: "neo4j" })); expect(res.status).toBe(401); }); diff --git a/app/src/components/card-container.tsx b/app/src/components/card-container.tsx index 6df6357b..9261043c 100644 --- a/app/src/components/card-container.tsx +++ b/app/src/components/card-container.tsx @@ -19,6 +19,7 @@ import { import { EmptyState, ColumnMappingOverlay, + substituteParams, } from "@neoboard/components"; import { ChartRenderer } from "./chart-renderer"; import { migrateColorThresholds } from "@/lib/migrate-color-thresholds"; @@ -106,9 +107,10 @@ export function CardContainer({ const enableCache = widget.settings?.enableCache !== false; const cacheTtlMinutes = (widget.settings?.cacheTtlMinutes as number | undefined) ?? 5; - // Parameter-select and form widgets are self-contained (no auto-query). + // Parameter-select, form, markdown, and iframe widgets are self-contained (no auto-query). const isParameterWidget = widget.chartType === "parameter-select"; const isFormWidget = widget.chartType === "form"; + const isContentOnly = widget.chartType === "markdown" || widget.chartType === "iframe"; const chartOptions = useMemo( () => (widget.settings?.chartOptions ?? {}) as Record, @@ -131,7 +133,7 @@ export function CardContainer({ // Only fire the query when there's no previewData — useWidgetQuery handles // caching so navigating view->edit won't re-run the same query. // Parameter-select and form widgets skip query execution entirely. - const queryInput = (previewData !== undefined || isParameterWidget || isFormWidget) ? null : { + const queryInput = (previewData !== undefined || isParameterWidget || isFormWidget || isContentOnly) ? null : { connectionId: widget.connectionId, query: widget.query, params: widget.params as Record | undefined, @@ -272,6 +274,36 @@ export function CardContainer({ ); } + // Content-only widgets (markdown, iframe) — no query, just render with settings. + // Substitute $param_xxx placeholders in content/url so markdown and iframe + // widgets can reference dashboard parameters without executing a query. + if (isContentOnly) { + const resolvedContentOptions: Record = { ...chartOptions }; + if (typeof chartOptions.content === "string") { + resolvedContentOptions.content = substituteParams( + chartOptions.content, + allParamValues, + ); + } + if (typeof chartOptions.url === "string") { + resolvedContentOptions.url = substituteParams( + chartOptions.url, + allParamValues, + ); + } + return ( +
+
+ +
+
+ ); + } + // ── Manual Run overlay ────────────────────────────────────────────────── // When manualRun is enabled and the user hasn't clicked "Run Query" yet, // show an overlay button instead of the loading skeleton. diff --git a/app/src/components/chart-renderer.tsx b/app/src/components/chart-renderer.tsx index 66dc9b07..02c287f9 100644 --- a/app/src/components/chart-renderer.tsx +++ b/app/src/components/chart-renderer.tsx @@ -9,6 +9,8 @@ import { Skeleton, EmptyState, JsonViewer, + MarkdownWidget, + IframeWidget, } from "@neoboard/components"; // Chart components use ECharts (browser APIs) — must be loaded client-side only @@ -37,6 +39,11 @@ import type { MapMarker, EChartsClickEvent, StylingRule, + GaugeDataPoint, + SankeyChartData, + SunburstDataItem, + RadarChartData, + TreemapDataItem, } from "@neoboard/components"; import { ParameterWidgetRenderer } from "@/components/parameter-widget-renderer"; import type { ParameterType } from "@/stores/parameter-store"; @@ -65,6 +72,28 @@ const MapChart = dynamic( } ); +// New ECharts chart types — loaded client-side only +const GaugeChart = dynamic( + () => import("@neoboard/components").then((m) => ({ default: m.GaugeChart })), + { ssr: false, loading: () => } +); +const SankeyChart = dynamic( + () => import("@neoboard/components").then((m) => ({ default: m.SankeyChart })), + { ssr: false, loading: () => } +); +const SunburstChart = dynamic( + () => import("@neoboard/components").then((m) => ({ default: m.SunburstChart })), + { ssr: false, loading: () => } +); +const RadarChart = dynamic( + () => import("@neoboard/components").then((m) => ({ default: m.RadarChart })), + { ssr: false, loading: () => } +); +const TreemapChart = dynamic( + () => import("@neoboard/components").then((m) => ({ default: m.TreemapChart })), + { ssr: false, loading: () => } +); + export interface ChartRendererProps { type: ChartType; data: unknown; @@ -116,6 +145,7 @@ export function ChartRenderer({ type, data, settings = {}, onChartClick, clickab stylingRules={stylingRules} paramValues={paramValues} onClick={handleEChartsClick} + colorPalette={settings.colorPalette as string | undefined} colorblindMode={settings.colorblindMode as boolean | undefined} /> ); @@ -137,6 +167,7 @@ export function ChartRenderer({ type, data, settings = {}, onChartClick, clickab stylingRules={stylingRules} paramValues={paramValues} onClick={handleEChartsClick} + colorPalette={settings.colorPalette as string | undefined} colorblindMode={settings.colorblindMode as boolean | undefined} /> ); @@ -156,6 +187,7 @@ export function ChartRenderer({ type, data, settings = {}, onChartClick, clickab stylingRules={stylingRules} paramValues={paramValues} onClick={handleEChartsClick} + colorPalette={settings.colorPalette as string | undefined} colorblindMode={settings.colorblindMode as boolean | undefined} /> ); @@ -285,6 +317,106 @@ export function ChartRenderer({ type, data, settings = {}, onChartClick, clickab /> ); + case "markdown": + return ( + + ); + + case "iframe": + return ( + + ); + + case "gauge": + return ( + + ); + + case "sankey": { + const sankeyData = (data as SankeyChartData) ?? { nodes: [], links: [] }; + return ( + + ); + } + + case "sunburst": + return ( + + ); + + case "radar": { + const radarData = (data as RadarChartData) ?? { indicators: [], series: [] }; + return ( + + ); + } + + case "treemap": + return ( + + ); + default: return ( ) => void; + onWidgetSettingsChange?: ( + widgetId: string, + settings: Record, + ) => void; /** TanStack Query refetchInterval — periodically re-executes all widget queries. */ refetchInterval?: number | false; /** Called when a click action navigates to a different page. */ @@ -70,7 +76,6 @@ function getWidgetTitle(widget: DashboardWidget): string { return getChartConfig(widget.chartType)?.label ?? widget.chartType; } - export function DashboardContainer({ page, editable = false, @@ -90,6 +95,19 @@ export function DashboardContainer({ const queryClient = useQueryClient(); const [fullscreenWidget, setFullscreenWidget] = useState(null); + // Defer fullscreen content render until the dialog animation (200ms zoom-in-95) + // settles. Without this, NVL reads the canvas dimensions mid-animation + // (at ~95% of final size) and the hit-test coordinates are permanently offset. + const [fullscreenReady, setFullscreenReady] = useState(false); + const openFullscreen = useCallback((w: DashboardWidget) => { + setFullscreenReady(false); + setFullscreenWidget(w); + setTimeout(() => setFullscreenReady(true), 250); + }, []); + const closeFullscreen = useCallback(() => { + setFullscreenWidget(null); + setFullscreenReady(false); + }, []); const [pendingSyncWidget, setPendingSyncWidget] = useState(null); const parameters = useParameterStore((s) => s.parameters); @@ -98,7 +116,7 @@ export function DashboardContainer({ const allEntries = Object.entries(parameters); const displayEntries = useMemo( () => filterParentParams(allEntries), - [allEntries] + [allEntries], ); const hasParameters = displayEntries.length > 0; @@ -191,6 +209,7 @@ export function DashboardContainer({ ))} )} +
onLayoutChange?.(items as GridLayoutItem[])} @@ -199,74 +218,90 @@ export function DashboardContainer({ > {page.widgets.map((widget) => { const outdated = editable && isWidgetOutdated(widget); - const chartOpts = (widget.settings?.chartOptions ?? {}) as Record; + const chartOpts = (widget.settings?.chartOptions ?? {}) as Record< + string, + unknown + >; const showRefresh = shouldShowRefreshButton(chartOpts); return ( -
- { - // Invalidate all TanStack Query entries matching this widget's - // connection + query combo. This triggers a refetch. - void queryClient.invalidateQueries({ - queryKey: ["widget-query", widget.connectionId, widget.query, widget.params], - }); - } - : undefined - } - headerExtra={ - <> - {outdated && ( +
+ { + // Invalidate all TanStack Query entries matching this widget's + // connection + query combo. This triggers a refetch. + void queryClient.invalidateQueries({ + queryKey: [ + "widget-query", + widget.connectionId, + widget.query, + widget.params, + ], + }); + } + : undefined + } + headerExtra={ + <> + {outdated && ( + + )} - )} - - - } - > - onWidgetSettingsChange(widget.id, settings) - : undefined + } - refetchInterval={refetchInterval} - onNavigateToPage={onNavigateToPage} - /> - -
+ > + + onWidgetSettingsChange(widget.id, settings) + : undefined + } + refetchInterval={refetchInterval} + onNavigateToPage={onNavigateToPage} + /> +
+
); })}
+
{ - if (!open) setFullscreenWidget(null); + if (!open) closeFullscreen(); }} > @@ -276,13 +311,19 @@ export function DashboardContainer({ {interpolateTitle(getWidgetTitle(fullscreenWidget), parameters)}
- + {fullscreenReady ? ( + + ) : ( +
+ Loading… +
+ )}
)} @@ -291,7 +332,9 @@ export function DashboardContainer({ { if (!open) setPendingSyncWidget(null); }} + onOpenChange={(open) => { + if (!open) setPendingSyncWidget(null); + }} > diff --git a/app/src/components/graph-exploration-wrapper.tsx b/app/src/components/graph-exploration-wrapper.tsx index a60a44c2..e83b5ea9 100644 --- a/app/src/components/graph-exploration-wrapper.tsx +++ b/app/src/components/graph-exploration-wrapper.tsx @@ -1,7 +1,6 @@ "use client"; import { useState, useCallback, useRef, useEffect } from "react"; -import { createPortal } from "react-dom"; import { unwrapFullResponse } from "@/lib/api-client"; import { GraphChart, @@ -80,11 +79,11 @@ function NodeContextMenu({ onCollapse && { label: "Collapse", action: onCollapse }, ].filter(Boolean) as { label: string; action: () => void }[]; - return createPortal( + return (
@@ -107,8 +106,7 @@ function NodeContextMenu({ {item.label} ))} -
, - document.body, +
); } @@ -118,16 +116,23 @@ function nodeToSections(node: GraphNode): PropertySection[] { const normalized = normalizeValue(value) ?? value; return { key, - value: typeof normalized === "object" && normalized !== null ? JSON.stringify(normalized) : String(normalized ?? ""), + value: + typeof normalized === "object" && normalized !== null + ? JSON.stringify(normalized) + : String(normalized ?? ""), }; }); const metaItems = [ { key: "id", value: node.id }, - ...(node.labels?.length ? [{ key: "labels", value: node.labels.join(", ") }] : []), + ...(node.labels?.length + ? [{ key: "labels", value: node.labels.join(", ") }] + : []), ]; return [ { title: "Metadata", items: metaItems, collapsible: false as const }, - ...(propertyItems.length > 0 ? [{ title: "Properties", items: propertyItems }] : []), + ...(propertyItems.length > 0 + ? [{ title: "Properties", items: propertyItems }] + : []), ]; } @@ -141,6 +146,7 @@ export function GraphExplorationWrapper({ resultId, autoFit, }: GraphExplorationWrapperProps) { + const containerRef = useRef(null); const [menu, setMenu] = useState(null); const [propertiesNode, setPropertiesNode] = useState(null); const storeSetState = useGraphWidgetStore((s) => s.setState); @@ -201,18 +207,22 @@ export function GraphExplorationWrapper({ edges: exploration.edges, resultId, }); - // eslint-disable-next-line react-hooks/exhaustive-deps + // eslint-disable-next-line react-hooks/exhaustive-deps }, [exploration.nodes, exploration.edges]); - const handleNodeRightClick = useCallback( - (e: GraphNodeEvent) => { - setMenu({ node: e.node, x: e.position.x, y: e.position.y }); - }, - [], - ); + const handleNodeRightClick = useCallback((e: GraphNodeEvent) => { + const rect = containerRef.current?.getBoundingClientRect(); + const x = e.position.x - (rect?.left ?? 0); + const y = e.position.y - (rect?.top ?? 0); + setMenu({ node: e.node, x, y }); + }, []); return ( -
+
storeSetState(widgetId, { layout })} - onCaptionMapChange={(captionMap) => storeSetState(widgetId, { captionMap })} + onCaptionMapChange={(captionMap) => + storeSetState(widgetId, { captionMap }) + } autoFit={autoFit} /> @@ -281,10 +293,17 @@ export function GraphExplorationWrapper({ )} {/* Node properties dialog */} - { if (!open) setPropertiesNode(null); }}> + { + if (!open) setPropertiesNode(null); + }} + > - {propertiesNode?.label ?? propertiesNode?.id ?? "Node Properties"} + + {propertiesNode?.label ?? propertiesNode?.id ?? "Node Properties"} + {propertiesNode && (
diff --git a/app/src/components/widget-editor-modal.tsx b/app/src/components/widget-editor-modal.tsx index 2b5870c0..813e2fc8 100644 --- a/app/src/components/widget-editor-modal.tsx +++ b/app/src/components/widget-editor-modal.tsx @@ -28,6 +28,8 @@ import { DialogFooter, Checkbox, CodePreview, + MarkdownWidget, + IframeWidget, } from "@neoboard/components"; import { getCompatibleChartTypes, @@ -290,8 +292,9 @@ export function WidgetEditorModal({ setTemplateSearch(""); setDialogStep("main"); } - const editorLanguage: "cypher" | "sql" = - selectedConnection?.type === "postgresql" ? "sql" : "cypher"; + // Pass connector type directly — the language resolver registry maps it + // to the right editor extension (e.g., "neo4j" → cypher, "postgresql" → sql). + const editorLanguage = selectedConnection?.type ?? "cypher"; // Chart types compatible with the selected connector const compatibleChartTypes = useMemo( @@ -586,6 +589,8 @@ export function WidgetEditorModal({ // Handles CMD+Shift+Enter (Mac) / Ctrl+Shift+Enter (Win/Linux): run query, then save on success. const handleRunAndSave = useCallback(() => { + // Content-only widgets (markdown, iframe) don't have a query — skip the run+save shortcut. + if (chartType === "markdown" || chartType === "iframe") return; if (!query.trim() || saveStatus === "saving") return; setSaveStatus("saving"); previewQuery.mutate( @@ -683,6 +688,10 @@ export function WidgetEditorModal({ const isParamSelect = chartType === "parameter-select"; const isForm = chartType === "form"; + const isMarkdown = chartType === "markdown"; + const isIframe = chartType === "iframe"; + /** True for widget types that don't need a query or connection. */ + const isContentOnly = isMarkdown || isIframe; function handleSave() { const id = widget?.id ?? crypto.randomUUID(); @@ -699,8 +708,8 @@ export function WidgetEditorModal({ onSave({ id, chartType, - connectionId: isParamSelect && paramUIType !== "select" ? "" : connectionId, - query: isParamSelect ? "" : query, + connectionId: (isParamSelect && paramUIType !== "select") || isContentOnly ? "" : connectionId, + query: isParamSelect || isContentOnly ? "" : query, params: widget?.params, settings: { ...(widget?.settings ?? {}), @@ -713,10 +722,10 @@ export function WidgetEditorModal({ } : resolvedChartOptions, formFields: isForm ? formFields : undefined, - clickAction: (isParamSelect || isForm) ? undefined : clickAction, - stylingConfig: (isParamSelect || isForm) ? undefined : stylingConfig, - enableCache: (isParamSelect || isForm) ? undefined : enableCache, - cacheTtlMinutes: (isParamSelect || isForm) ? undefined : cacheTtlMinutes, + clickAction: (isParamSelect || isForm || isContentOnly) ? undefined : clickAction, + stylingConfig: (isParamSelect || isForm || isContentOnly) ? undefined : stylingConfig, + enableCache: (isParamSelect || isForm || isContentOnly) ? undefined : enableCache, + cacheTtlMinutes: (isParamSelect || isForm || isContentOnly) ? undefined : cacheTtlMinutes, }, templateId, templateSyncedAt, @@ -744,8 +753,8 @@ export function WidgetEditorModal({ tags: tags.length > 0 ? tags : undefined, chartType, connectorType, - connectionId: connectionId || undefined, - query, + connectionId: isContentOnly ? undefined : (connectionId || undefined), + query: isContentOnly ? "" : query, settings: { title: title || undefined, chartOptions, @@ -931,7 +940,7 @@ export function WidgetEditorModal({ onChartTypeChange={handleChartTypeChange} compatibleChartTypes={compatibleChartTypes} connections={connections} - showConnection={isForm || !isParamSelect || paramUIType === "select"} + showConnection={!isContentOnly && (isForm || !isParamSelect || paramUIType === "select")} /> {mode === "add" && !isLabMode && ( @@ -948,7 +957,7 @@ export function WidgetEditorModal({ )} {/* Connector-changed warning */} - {!isParamSelect && connectorChanged && ( + {!isParamSelect && !isContentOnly && connectorChanged && ( Connector changed @@ -992,8 +1001,8 @@ export function WidgetEditorModal({ )} - {/* Query editor (non-parameter types) */} - {!isParamSelect && ( + {/* Query editor (non-parameter and non-content types) */} + {!isParamSelect && !isContentOnly && ( )} @@ -1226,7 +1236,7 @@ export function WidgetEditorModal({
- {!isParamSelect && !isForm && ( + {!isParamSelect && !isForm && !isContentOnly && (
- {!isParamSelect && !isForm && previewQuery.isError && ( + {!isParamSelect && !isForm && !isContentOnly && previewQuery.isError && ( Query Failed @@ -1256,7 +1266,15 @@ export function WidgetEditorModal({ )}
- {isParamSelect ? ( + {isMarkdown ? ( + + ) : isIframe ? ( + + ) : isParamSelect ? ( ({ + value: type, + label: chartTypeMeta[type].label, + })); + const chartTypeSelect = (
- +
); diff --git a/app/src/components/widget-editor/query-editor-panel.tsx b/app/src/components/widget-editor/query-editor-panel.tsx index fc0cdd77..21e3cb9c 100644 --- a/app/src/components/widget-editor/query-editor-panel.tsx +++ b/app/src/components/widget-editor/query-editor-panel.tsx @@ -1,20 +1,23 @@ "use client"; import dynamic from "next/dynamic"; -import { Info } from "lucide-react"; +import { Info, RefreshCw } from "lucide-react"; import { Label, Tooltip, TooltipContent, TooltipTrigger, + Button, } from "@neoboard/components"; import type { ChartType } from "@/lib/chart-registry"; +import { useConnectionSchema } from "@/hooks/use-schema"; +import { useSchemaStore } from "@/stores/schema-store"; // CodeMirror accesses real DOM APIs — load it only client-side. const QueryEditor = dynamic( () => import("@neoboard/components").then((m) => ({ default: m.QueryEditor })), - { ssr: false } + { ssr: false }, ); /** Per-chart-type hints shown next to the Query label to guide column conventions. */ @@ -55,8 +58,11 @@ export interface QueryEditorPanelProps { onQueryChange: (q: string) => void; /** When omitted, the Ctrl/Cmd+Enter run shortcut is disabled (e.g. form widgets). */ onRun?: () => void; - editorLanguage: "cypher" | "sql"; + /** Connector type or language name — mapped to editor extension by the language resolver registry. */ + editorLanguage: string; connectionId: string; + /** When true, shows a running/loading indicator on the query editor. */ + running?: boolean; } export function QueryEditorPanel({ @@ -66,7 +72,13 @@ export function QueryEditorPanel({ onRun, editorLanguage, connectionId, + running, }: QueryEditorPanelProps) { + // Prefetch schema for autocompletion. The hook caches for 10 min + // and also writes to the Zustand store for synchronous reads. + const { isFetching, refreshSchema } = useConnectionSchema(connectionId); + const schema = useSchemaStore((s) => s.getSchema(connectionId)); + return (
@@ -78,18 +90,45 @@ export function QueryEditorPanel({ - + {QUERY_HINTS[chartType as ChartType]} )} + {connectionId && ( + + + + + + Refresh schema for autocompletion + + + )}
{ + beforeEach(() => { + useSchemaStore.setState({ schemas: {} }); + }); + + it("schema written by hook is retrievable synchronously", () => { + // Simulate what the queryFn does after a successful fetch + useSchemaStore.getState().setSchema("conn-1", neo4jSchema); + const stored = useSchemaStore.getState().getSchema("conn-1"); + expect(stored).toEqual(neo4jSchema); + expect(stored?.type).toBe("neo4j"); + }); + + it("clearSchema removes the entry — simulates refreshSchema side effect", () => { + useSchemaStore.getState().setSchema("conn-1", neo4jSchema); + useSchemaStore.getState().clearSchema("conn-1"); + expect(useSchemaStore.getState().getSchema("conn-1")).toBeUndefined(); + }); + + it("multiple schemas can be stored independently", () => { + useSchemaStore.getState().setSchema("neo4j-conn", neo4jSchema); + useSchemaStore.getState().setSchema("pg-conn", pgSchema); + expect(useSchemaStore.getState().getSchema("neo4j-conn")?.type).toBe("neo4j"); + expect(useSchemaStore.getState().getSchema("pg-conn")?.type).toBe("postgresql"); + }); + + it("clearSchema only removes the targeted connection", () => { + useSchemaStore.getState().setSchema("neo4j-conn", neo4jSchema); + useSchemaStore.getState().setSchema("pg-conn", pgSchema); + useSchemaStore.getState().clearSchema("neo4j-conn"); + expect(useSchemaStore.getState().getSchema("neo4j-conn")).toBeUndefined(); + expect(useSchemaStore.getState().getSchema("pg-conn")).toEqual(pgSchema); + }); +}); + +// --------------------------------------------------------------------------- +// Module exports +// --------------------------------------------------------------------------- + +describe("use-schema module exports", () => { + // Note: the hook uses queryKey ["connection-schema", connectionId]. + // The full query key contract is validated via createRefreshSchema tests below, + // which call invalidateQueries with the same key pattern. + it("exports useConnectionSchema as a function", async () => { + const mod = await import("@/hooks/use-schema"); + expect(typeof mod.useConnectionSchema).toBe("function"); + }); + + it("exports createRefreshSchema as a function", async () => { + const mod = await import("@/hooks/use-schema"); + expect(typeof mod.createRefreshSchema).toBe("function"); + }); +}); + +// --------------------------------------------------------------------------- +// createRefreshSchema utility +// --------------------------------------------------------------------------- + +describe("createRefreshSchema utility", () => { + beforeEach(() => { + useSchemaStore.setState({ schemas: {} }); + }); + + /** Helper to create a minimal fake QueryClient with the methods refreshSchema uses. */ + function makeFakeQueryClient( + overrides: Partial<{ + cancelQueries: () => Promise; + invalidateQueries: () => Promise; + }> = {}, + ) { + return { + cancelQueries: vi.fn().mockResolvedValue(undefined), + invalidateQueries: vi.fn().mockResolvedValue(undefined), + ...overrides, + } as unknown as QueryClient; + } + + it("returns a function when called with a QueryClient", () => { + const mockQueryClient = makeFakeQueryClient(); + const refresh = createRefreshSchema(mockQueryClient); + expect(typeof refresh).toBe("function"); + }); + + it("calls cancelQueries then invalidateQueries with the correct queryKey", async () => { + const fakeQueryClient = makeFakeQueryClient(); + const mockInvalidate = fakeQueryClient.invalidateQueries as ReturnType; + + const refresh = createRefreshSchema(fakeQueryClient); + await refresh("conn-42"); + + expect(fakeQueryClient.cancelQueries).toHaveBeenCalledWith({ + queryKey: ["connection-schema", "conn-42"], + }); + expect(mockInvalidate).toHaveBeenCalledWith({ + queryKey: ["connection-schema", "conn-42"], + }); + }); + + it("clears the schema from the store", async () => { + const fakeQueryClient = makeFakeQueryClient(); + + const connectionId = "conn-42"; + useSchemaStore.getState().setSchema(connectionId, neo4jSchema); + + const refresh = createRefreshSchema(fakeQueryClient); + await refresh(connectionId); + + expect(useSchemaStore.getState().getSchema(connectionId)).toBeUndefined(); + }); + + it("performs both operations: clears store AND invalidates query", async () => { + const fakeQueryClient = makeFakeQueryClient(); + const mockInvalidate = fakeQueryClient.invalidateQueries as ReturnType; + + const connectionId = "conn-42"; + useSchemaStore.getState().setSchema(connectionId, neo4jSchema); + + const refresh = createRefreshSchema(fakeQueryClient); + await refresh(connectionId); + + expect(mockInvalidate).toHaveBeenCalledWith({ + queryKey: ["connection-schema", connectionId], + }); + expect(useSchemaStore.getState().getSchema(connectionId)).toBeUndefined(); + }); + + it("uses the connectionId from the call, not from the factory", async () => { + const fakeQueryClient = makeFakeQueryClient(); + const mockInvalidate = fakeQueryClient.invalidateQueries as ReturnType; + + const refresh = createRefreshSchema(fakeQueryClient); + await refresh("conn-abc"); + + expect(mockInvalidate).toHaveBeenCalledWith({ + queryKey: ["connection-schema", "conn-abc"], + }); + }); + + it("clears only the targeted connection, not others", async () => { + const fakeQueryClient = makeFakeQueryClient(); + + useSchemaStore.getState().setSchema("conn-1", neo4jSchema); + useSchemaStore.getState().setSchema("conn-2", pgSchema); + + const refresh = createRefreshSchema(fakeQueryClient); + await refresh("conn-1"); + + expect(useSchemaStore.getState().getSchema("conn-1")).toBeUndefined(); + expect(useSchemaStore.getState().getSchema("conn-2")).toEqual(pgSchema); + }); + + it("is safe to call when no cached schema exists for the connectionId", async () => { + const fakeQueryClient = makeFakeQueryClient(); + const mockInvalidate = fakeQueryClient.invalidateQueries as ReturnType; + + // No schema set for conn-99 — should not throw + const refresh = createRefreshSchema(fakeQueryClient); + await expect(refresh("conn-99")).resolves.not.toThrow(); + expect(mockInvalidate).toHaveBeenCalledWith({ + queryKey: ["connection-schema", "conn-99"], + }); + }); + + it("uses the nested [connection-schema, id] key pattern", async () => { + const fakeQueryClient = makeFakeQueryClient(); + const mockInvalidate = fakeQueryClient.invalidateQueries as ReturnType; + + const refresh = createRefreshSchema(fakeQueryClient); + await refresh("test-id"); + + const callArg = mockInvalidate.mock.calls[0][0] as { queryKey: unknown[] }; + expect(callArg.queryKey).toHaveLength(2); + expect(callArg.queryKey[0]).toBe("connection-schema"); + expect(callArg.queryKey[1]).toBe("test-id"); + }); +}); diff --git a/app/src/hooks/__tests__/use-unsaved-changes-warning.test.ts b/app/src/hooks/__tests__/use-unsaved-changes-warning.test.ts new file mode 100644 index 00000000..6cd57b7c --- /dev/null +++ b/app/src/hooks/__tests__/use-unsaved-changes-warning.test.ts @@ -0,0 +1,122 @@ +import { describe, it, expect, beforeEach } from "vitest"; +import { useDashboardStore } from "../../stores/dashboard-store"; + +// Tests for the store-level hasUnsavedChanges logic that useUnsavedChangesWarning depends on. +// The hook itself is a thin React wrapper that: +// 1. subscribes to hasUnsavedChanges() +// 2. registers/unregisters beforeunload +// 3. guards in-app navigation via requestNavigation() + ConfirmDialog +// 4. intercepts browser back/forward via popstate +// Full browser integration (beforeunload, navigation interception) is covered by Playwright E2E. + +function resetStore() { + useDashboardStore.getState().reset(); +} + +describe("unsaved changes warning — store integration", () => { + beforeEach(resetStore); + + it("hasUnsavedChanges is false before any layout is loaded", () => { + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(false); + }); + + it("hasUnsavedChanges is false immediately after loading a layout", () => { + const layout = { + version: 2 as const, + pages: [{ id: "p1", title: "Page 1", widgets: [], gridLayout: [] }], + }; + useDashboardStore.getState().setLayout(layout); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(false); + }); + + it("hasUnsavedChanges is true after modifying the layout", () => { + const layout = { + version: 2 as const, + pages: [{ id: "p1", title: "Page 1", widgets: [], gridLayout: [] }], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().addPage(); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(true); + }); + + it("hasUnsavedChanges returns false after markSaved", () => { + const layout = { + version: 2 as const, + pages: [{ id: "p1", title: "Page 1", widgets: [], gridLayout: [] }], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().addPage(); + useDashboardStore.getState().markSaved(); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(false); + }); + + it("hasUnsavedChanges detects widget removal as a change", () => { + const layout = { + version: 2 as const, + pages: [ + { + id: "p1", + title: "Page 1", + widgets: [ + { id: "w1", chartType: "bar", connectionId: "c1", query: "q1" }, + ], + gridLayout: [{ i: "w1", x: 0, y: 0, w: 4, h: 3 }], + }, + ], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().removeWidget("w1"); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(true); + }); + + it("hasUnsavedChanges detects grid layout change as a change", () => { + const layout = { + version: 2 as const, + pages: [ + { + id: "p1", + title: "Page 1", + widgets: [], + gridLayout: [{ i: "w1", x: 0, y: 0, w: 4, h: 3 }], + }, + ], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().updateGridLayout([ + { i: "w1", x: 0, y: 0, w: 6, h: 4 }, + ]); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(true); + }); + + it("hasUnsavedChanges detects widget update as a change", () => { + const layout = { + version: 2 as const, + pages: [ + { + id: "p1", + title: "Page 1", + widgets: [ + { id: "w1", chartType: "bar", connectionId: "c1", query: "q1" }, + ], + gridLayout: [{ i: "w1", x: 0, y: 0, w: 4, h: 3 }], + }, + ], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().updateWidget("w1", { chartType: "line" }); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(true); + }); + + it("hasUnsavedChanges detects page removal as a change", () => { + const layout = { + version: 2 as const, + pages: [ + { id: "p1", title: "Page 1", widgets: [], gridLayout: [] }, + { id: "p2", title: "Page 2", widgets: [], gridLayout: [] }, + ], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().removePage(1); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(true); + }); +}); diff --git a/app/src/hooks/use-connections.ts b/app/src/hooks/use-connections.ts index 98d4f60f..5cfda551 100644 --- a/app/src/hooks/use-connections.ts +++ b/app/src/hooks/use-connections.ts @@ -22,11 +22,11 @@ export interface CreateConnectionInput { }; } -export function useConnections() { +export function useConnections(limit = 100, offset = 0) { return useQuery({ - queryKey: ["connections"], + queryKey: ["connections", limit, offset], queryFn: async () => { - const res = await fetch("/api/connections"); + const res = await fetch(`/api/connections?limit=${limit}&offset=${offset}`); return unwrapResponse(res); }, }); @@ -64,13 +64,49 @@ export function useDeleteConnection() { }); } +export interface UpdateConnectionInput { + id: string; + name?: string; + config?: Partial<{ + uri: string; + username: string; + password: string; + database: string; + connectionTimeout: number; + queryTimeout: number; + maxPoolSize: number; + connectionAcquisitionTimeout: number; + idleTimeout: number; + statementTimeout: number; + sslRejectUnauthorized: boolean; + }>; +} + +export function useUpdateConnection() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: async ({ id, ...body }: UpdateConnectionInput) => { + const res = await fetch(`/api/connections/${id}`, { + method: "PATCH", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + }); + return unwrapResponse(res); + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["connections"] }); + }, + }); +} + export function useTestConnection() { return useMutation({ mutationFn: async (id: string) => { const res = await fetch(`/api/connections/${id}/test`, { method: "POST", }); - return res.json() as Promise<{ success: boolean; error?: string }>; + return unwrapResponse<{ success: boolean; error?: string }>(res); }, }); } @@ -93,7 +129,7 @@ export function useTestInlineConnection() { headers: { "Content-Type": "application/json" }, body: JSON.stringify(input), }); - return res.json() as Promise<{ success: boolean; error?: string }>; + return unwrapResponse<{ success: boolean; error?: string }>(res); }, }); } diff --git a/app/src/hooks/use-dashboards.ts b/app/src/hooks/use-dashboards.ts index 50ea6e0f..fa61211e 100644 --- a/app/src/hooks/use-dashboards.ts +++ b/app/src/hooks/use-dashboards.ts @@ -46,11 +46,11 @@ export interface DashboardShareItem { userEmail: string | null; } -export function useDashboards() { +export function useDashboards(limit = 100, offset = 0) { return useQuery({ - queryKey: ["dashboards"], + queryKey: ["dashboards", limit, offset], queryFn: async () => { - const res = await fetch("/api/dashboards"); + const res = await fetch(`/api/dashboards?limit=${limit}&offset=${offset}`); return unwrapResponse(res); }, }); diff --git a/app/src/hooks/use-schema.ts b/app/src/hooks/use-schema.ts index 6da6c611..49758e5e 100644 --- a/app/src/hooks/use-schema.ts +++ b/app/src/hooks/use-schema.ts @@ -1,11 +1,32 @@ "use client"; -import { useQuery } from "@tanstack/react-query"; +import { + useQuery, + useQueryClient, + type QueryClient, +} from "@tanstack/react-query"; import { unwrapResponse } from "@/lib/api-client"; import { useSchemaStore } from "@/stores/schema-store"; +import type { DatabaseSchema } from "@/lib/schema-types"; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -type DatabaseSchema = Record; +/** + * Returns a refresh function for a given connectionId. + * Exported separately so it can be tested in isolation (node environment). + * + * Cancels any in-flight query before invalidating the cache to prevent a + * late-arriving response from repopulating the store with stale schema. + */ +export function createRefreshSchema(queryClient: QueryClient) { + return async function refreshSchema(connectionId: string) { + await queryClient.cancelQueries({ + queryKey: ["connection-schema", connectionId], + }); + useSchemaStore.getState().clearSchema(connectionId); + return queryClient.invalidateQueries({ + queryKey: ["connection-schema", connectionId], + }); + }; +} /** * Fetches and caches the schema for a database connection. @@ -14,14 +35,19 @@ type DatabaseSchema = Record; * - Results are cached for 10 minutes via React Query staleTime. * - The fetched schema is also written to the Zustand schema store * so it can be accessed synchronously by other parts of the app. + * - Returns a `refreshSchema()` helper that invalidates the cache + * and clears the Zustand entry, forcing a re-fetch. */ export function useConnectionSchema(connectionId: string | null | undefined) { const setSchema = useSchemaStore((s) => s.setSchema); + const queryClient = useQueryClient(); - return useQuery({ + const query = useQuery({ queryKey: ["connection-schema", connectionId], - queryFn: async () => { - const r = await fetch(`/api/connections/${connectionId}/schema`); + queryFn: async ({ signal }) => { + const r = await fetch(`/api/connections/${connectionId}/schema`, { + signal, + }); const schema = await unwrapResponse(r); setSchema(connectionId!, schema); return schema; @@ -30,4 +56,10 @@ export function useConnectionSchema(connectionId: string | null | undefined) { staleTime: 10 * 60 * 1000, retry: 1, }); + + const refreshSchema = connectionId + ? createRefreshSchema(queryClient).bind(null, connectionId) + : () => {}; + + return { ...query, refreshSchema }; } diff --git a/app/src/hooks/use-unsaved-changes-warning.ts b/app/src/hooks/use-unsaved-changes-warning.ts new file mode 100644 index 00000000..4bd53cb3 --- /dev/null +++ b/app/src/hooks/use-unsaved-changes-warning.ts @@ -0,0 +1,94 @@ +"use client"; + +import { useEffect, useCallback, useRef, useState } from "react"; +import { useDashboardStore } from "@/stores/dashboard-store"; + +/** + * Hook that warns users about unsaved changes when they try to: + * 1. Close/refresh the browser tab (native beforeunload dialog) + * 2. Navigate away within the app (explicit requestNavigation guard) + * + * Returns state and handlers for rendering an in-app confirmation dialog. + */ +export function useUnsavedChangesWarning() { + const hasUnsavedChanges = useDashboardStore((s) => s.hasUnsavedChanges); + + // State for the in-app navigation confirmation dialog + const [showNavWarning, setShowNavWarning] = useState(false); + const pendingUrl = useRef(null); + // When true, the user has confirmed "Leave" — skip the native beforeunload dialog + const navigatingRef = useRef(false); + + // ── 1. Browser close/refresh: beforeunload ─────────────────────── + useEffect(() => { + const handler = (e: BeforeUnloadEvent) => { + if (hasUnsavedChanges() && !navigatingRef.current) { + e.preventDefault(); + } + }; + window.addEventListener("beforeunload", handler); + return () => window.removeEventListener("beforeunload", handler); + }, [hasUnsavedChanges]); + + // ── 2. Browser back/forward button: popstate ───────────────────── + useEffect(() => { + const handler = () => { + if (hasUnsavedChanges()) { + // Re-push current URL to stay on the page + window.history.pushState(null, "", window.location.href); + setShowNavWarning(true); + // pendingUrl stays null — confirm will use history.back() + } + }; + window.addEventListener("popstate", handler); + return () => window.removeEventListener("popstate", handler); + }, [hasUnsavedChanges]); + + /** + * Guard navigation: if unsaved changes exist, show dialog and return false. + * If no unsaved changes, return true so the caller can navigate. + * + * Usage: + * if (requestNavigation(`/${id}`)) router.push(`/${id}`); + */ + const requestNavigation = useCallback( + (url: string): boolean => { + if (hasUnsavedChanges()) { + pendingUrl.current = url; + setShowNavWarning(true); + return false; + } + return true; + }, + [hasUnsavedChanges], + ); + + // User confirmed: proceed with navigation + const confirmNavigation = useCallback(() => { + setShowNavWarning(false); + navigatingRef.current = true; // Bypass native beforeunload dialog + if (pendingUrl.current) { + const url = pendingUrl.current; + pendingUrl.current = null; + // Full-page navigation bypasses any SPA interceptors + window.location.href = url; + } else { + // Triggered from popstate — go back + window.history.back(); + } + }, []); + + // User cancelled: stay on the page + const cancelNavigation = useCallback(() => { + setShowNavWarning(false); + pendingUrl.current = null; + }, []); + + return { + showNavWarning, + setShowNavWarning, + confirmNavigation, + cancelNavigation, + requestNavigation, + }; +} diff --git a/app/src/lib/__tests__/api-utils.test.ts b/app/src/lib/__tests__/api-utils.test.ts index 6c283492..84ea3a57 100644 --- a/app/src/lib/__tests__/api-utils.test.ts +++ b/app/src/lib/__tests__/api-utils.test.ts @@ -12,6 +12,7 @@ import { handleRouteError, validateBody, } from "../api-utils"; +import { UnauthorizedError, ForbiddenError } from "../auth/errors"; import { z } from "zod"; describe("error helpers return envelope format", () => { @@ -66,20 +67,15 @@ describe("error helpers return envelope format", () => { }); describe("handleRouteError", () => { - it("returns 401 for Unauthorized errors", async () => { - const res = handleRouteError(new Error("Unauthorized")); + it("returns 401 for UnauthorizedError", async () => { + const res = handleRouteError(new UnauthorizedError()); expect(res.status).toBe(401); const body = await res.json(); expect(body.error.code).toBe("UNAUTHORIZED"); }); - it("returns 401 for session-related errors", async () => { - const res = handleRouteError(new Error("Invalid session")); - expect(res.status).toBe(401); - }); - - it("returns 403 for Forbidden errors", async () => { - const res = handleRouteError(new Error("Forbidden")); + it("returns 403 for ForbiddenError", async () => { + const res = handleRouteError(new ForbiddenError()); expect(res.status).toBe(403); const body = await res.json(); expect(body.error.code).toBe("FORBIDDEN"); diff --git a/app/src/lib/__tests__/chart-registry.test.ts b/app/src/lib/__tests__/chart-registry.test.ts index 321d0425..84da75d1 100644 --- a/app/src/lib/__tests__/chart-registry.test.ts +++ b/app/src/lib/__tests__/chart-registry.test.ts @@ -1055,3 +1055,562 @@ describe("line transform normalizes date x-axis", () => { }); }); +// --------------------------------------------------------------------------- +// markdown chart type +// --------------------------------------------------------------------------- +describe("markdown chart type", () => { + it("is registered in chartRegistry", () => { + expect(chartRegistry.markdown).toBeDefined(); + expect(chartRegistry.markdown.type).toBe("markdown"); + expect(chartRegistry.markdown.label).toBe("Markdown"); + }); + + it("is compatible with both neo4j and postgresql", () => { + expect(chartRegistry.markdown.compatibleWith).toContain("neo4j"); + expect(chartRegistry.markdown.compatibleWith).toContain("postgresql"); + }); + + it("transform returns null (content-only widget)", () => { + expect(chartRegistry.markdown.transform([])).toBeNull(); + expect(chartRegistry.markdown.transform([{ a: 1 }])).toBeNull(); + }); + + it("transformWithMapping returns null", () => { + expect(chartRegistry.markdown.transformWithMapping([{ a: 1 }], {})).toBeNull(); + }); + + it("supportsClickAction is false", () => { + expect(chartSupportsClickAction("markdown")).toBe(false); + }); + + it("supportsStyling is false", () => { + expect(chartSupportsStyling("markdown")).toBe(false); + }); + + it("getStylingTargets returns empty array", () => { + expect(getStylingTargets("markdown")).toEqual([]); + }); + + it("is included in compatible chart types for both connectors", () => { + expect(getCompatibleChartTypes("neo4j")).toContain("markdown"); + expect(getCompatibleChartTypes("postgresql")).toContain("markdown"); + }); +}); + +// --------------------------------------------------------------------------- +// iframe chart type +// --------------------------------------------------------------------------- +describe("iframe chart type", () => { + it("is registered in chartRegistry", () => { + expect(chartRegistry.iframe).toBeDefined(); + expect(chartRegistry.iframe.type).toBe("iframe"); + expect(chartRegistry.iframe.label).toBe("iFrame"); + }); + + it("is compatible with both neo4j and postgresql", () => { + expect(chartRegistry.iframe.compatibleWith).toContain("neo4j"); + expect(chartRegistry.iframe.compatibleWith).toContain("postgresql"); + }); + + it("transform returns null (content-only widget)", () => { + expect(chartRegistry.iframe.transform([])).toBeNull(); + expect(chartRegistry.iframe.transform([{ a: 1 }])).toBeNull(); + }); + + it("transformWithMapping returns null", () => { + expect(chartRegistry.iframe.transformWithMapping([{ a: 1 }], {})).toBeNull(); + }); + + it("supportsClickAction is false", () => { + expect(chartSupportsClickAction("iframe")).toBe(false); + }); + + it("supportsStyling is false", () => { + expect(chartSupportsStyling("iframe")).toBe(false); + }); + + it("getStylingTargets returns empty array", () => { + expect(getStylingTargets("iframe")).toEqual([]); + }); + + it("is included in compatible chart types for both connectors", () => { + expect(getCompatibleChartTypes("neo4j")).toContain("iframe"); + expect(getCompatibleChartTypes("postgresql")).toContain("iframe"); + }); +}); + +// --------------------------------------------------------------------------- +// gauge chart type +// --------------------------------------------------------------------------- +describe("gauge chart type", () => { + it("is registered in chartRegistry", () => { + expect(chartRegistry.gauge).toBeDefined(); + expect(chartRegistry.gauge.type).toBe("gauge"); + expect(chartRegistry.gauge.label).toBe("Gauge"); + }); + + it("is compatible with both neo4j and postgresql", () => { + expect(chartRegistry.gauge.compatibleWith).toContain("neo4j"); + expect(chartRegistry.gauge.compatibleWith).toContain("postgresql"); + }); + + it("supportsClickAction is false", () => { + expect(chartSupportsClickAction("gauge")).toBe(false); + }); + + it("supportsStyling is true", () => { + expect(chartSupportsStyling("gauge")).toBe(true); + }); + + it("getStylingTargets returns Gauge Color target", () => { + expect(getStylingTargets("gauge")).toEqual([{ value: "color", label: "Gauge Color" }]); + }); + + it("is included in compatible chart types for both connectors", () => { + expect(getCompatibleChartTypes("neo4j")).toContain("gauge"); + expect(getCompatibleChartTypes("postgresql")).toContain("gauge"); + }); +}); + +describe("gauge transform", () => { + const { transform } = chartRegistry.gauge; + + it("returns single { value, name } from first record", () => { + const data = [{ value: 75, name: "Score" }]; + const result = transform(data) as Array<{ value: number; name: string }>; + expect(result).toHaveLength(1); + expect(result[0].value).toBe(75); + expect(result[0].name).toBe("Score"); + }); + + it("extracts value from first column, name from second column", () => { + const data = [{ score: 60, label: "CPU" }]; + const result = transform(data) as Array<{ value: number; name: string }>; + expect(result[0].value).toBe(60); + expect(result[0].name).toBe("CPU"); + }); + + it("uses first column as value when only one column exists", () => { + const data = [{ score: 80 }]; + const result = transform(data) as Array<{ value: number; name: string }>; + expect(result[0].value).toBe(80); + }); + + it("coerces non-numeric values to 0", () => { + const data = [{ value: "bad", name: "Test" }]; + const result = transform(data) as Array<{ value: number }>; + expect(result[0].value).toBe(0); + }); + + it("returns empty array for empty input", () => { + expect(transform([])).toEqual([]); + }); + + it("returns empty array for null/undefined input", () => { + expect(transform(null)).toEqual([]); + expect(transform(undefined)).toEqual([]); + }); + + it("handles postgresql { records } wrapper format", () => { + const data = { records: [{ value: 42, name: "Load" }] }; + const result = transform(data) as Array<{ value: number; name: string }>; + expect(result[0].value).toBe(42); + expect(result[0].name).toBe("Load"); + }); + + it("transformWithMapping returns same result as transform", () => { + const data = [{ value: 50, name: "Test" }]; + const result = chartRegistry.gauge.transformWithMapping(data, {}); + expect(result).toEqual(transform(data)); + }); +}); + +// --------------------------------------------------------------------------- +// sankey chart type +// --------------------------------------------------------------------------- +describe("sankey chart type", () => { + it("is registered in chartRegistry", () => { + expect(chartRegistry.sankey).toBeDefined(); + expect(chartRegistry.sankey.type).toBe("sankey"); + expect(chartRegistry.sankey.label).toBe("Sankey"); + }); + + it("is compatible with both neo4j and postgresql", () => { + expect(chartRegistry.sankey.compatibleWith).toContain("neo4j"); + expect(chartRegistry.sankey.compatibleWith).toContain("postgresql"); + }); + + it("supportsClickAction is true", () => { + expect(chartSupportsClickAction("sankey")).toBe(true); + }); + + it("supportsStyling is true", () => { + expect(chartSupportsStyling("sankey")).toBe(true); + }); + + it("getStylingTargets returns Link Color target", () => { + expect(getStylingTargets("sankey")).toEqual([{ value: "color", label: "Link Color" }]); + }); + + it("is included in compatible chart types for both connectors", () => { + expect(getCompatibleChartTypes("neo4j")).toContain("sankey"); + expect(getCompatibleChartTypes("postgresql")).toContain("sankey"); + }); +}); + +describe("sankey transform", () => { + const { transform } = chartRegistry.sankey; + + it("produces { nodes, links } from source/target/value records", () => { + const data = [ + { source: "A", target: "B", value: 10 }, + { source: "B", target: "C", value: 5 }, + ]; + const result = transform(data) as { nodes: Array<{ name: string }>; links: Array<{ source: string; target: string; value: number }> }; + expect(result.nodes).toBeDefined(); + expect(result.links).toBeDefined(); + expect(result.links).toHaveLength(2); + expect(result.links[0].source).toBe("A"); + expect(result.links[0].target).toBe("B"); + expect(result.links[0].value).toBe(10); + }); + + it("deduplicates nodes from source and target columns", () => { + const data = [ + { source: "A", target: "B", value: 10 }, + { source: "A", target: "C", value: 5 }, + ]; + const result = transform(data) as { nodes: Array<{ name: string }>; links: unknown[] }; + const nodeNames = result.nodes.map((n) => n.name); + expect(nodeNames.filter((n) => n === "A")).toHaveLength(1); + expect(nodeNames).toContain("B"); + expect(nodeNames).toContain("C"); + }); + + it("returns empty { nodes: [], links: [] } for empty input", () => { + const result = transform([]) as { nodes: unknown[]; links: unknown[] }; + expect(result.nodes).toEqual([]); + expect(result.links).toEqual([]); + }); + + it("returns empty for null/undefined", () => { + const r1 = transform(null) as { nodes: unknown[]; links: unknown[] }; + expect(r1.nodes).toEqual([]); + expect(r1.links).toEqual([]); + }); + + it("handles postgresql { records } wrapper format", () => { + const data = { records: [{ source: "X", target: "Y", value: 3 }] }; + const result = transform(data) as { nodes: unknown[]; links: Array<{ value: number }> }; + expect(result.links[0].value).toBe(3); + }); + + it("coerces non-numeric values to 0", () => { + const data = [{ source: "A", target: "B", value: "bad" }]; + const result = transform(data) as { links: Array<{ value: number }> }; + expect(result.links[0].value).toBe(0); + }); + + it("transformWithMapping returns same result as transform", () => { + const data = [{ source: "A", target: "B", value: 10 }]; + const result = chartRegistry.sankey.transformWithMapping(data, {}); + expect(result).toEqual(transform(data)); + }); +}); + +// --------------------------------------------------------------------------- +// sunburst chart type +// --------------------------------------------------------------------------- +describe("sunburst chart type", () => { + it("is registered in chartRegistry", () => { + expect(chartRegistry.sunburst).toBeDefined(); + expect(chartRegistry.sunburst.type).toBe("sunburst"); + expect(chartRegistry.sunburst.label).toBe("Sunburst"); + }); + + it("is compatible with both neo4j and postgresql", () => { + expect(chartRegistry.sunburst.compatibleWith).toContain("neo4j"); + expect(chartRegistry.sunburst.compatibleWith).toContain("postgresql"); + }); + + it("supportsClickAction is true", () => { + expect(chartSupportsClickAction("sunburst")).toBe(true); + }); + + it("supportsStyling is true", () => { + expect(chartSupportsStyling("sunburst")).toBe(true); + }); + + it("getStylingTargets returns Segment Color target", () => { + expect(getStylingTargets("sunburst")).toEqual([{ value: "color", label: "Segment Color" }]); + }); + + it("is included in compatible chart types for both connectors", () => { + expect(getCompatibleChartTypes("neo4j")).toContain("sunburst"); + expect(getCompatibleChartTypes("postgresql")).toContain("sunburst"); + }); +}); + +describe("sunburst transform", () => { + const { transform } = chartRegistry.sunburst; + + it("passes through hierarchical data unchanged", () => { + const data = [{ name: "Root", value: 100, children: [{ name: "Child", value: 50 }] }]; + const result = transform(data) as Array<{ name: string; value: number; children?: unknown[] }>; + expect(result[0].name).toBe("Root"); + expect(result[0].value).toBe(100); + expect(result[0].children).toHaveLength(1); + }); + + it("builds hierarchy from flat records with parent column", () => { + const data = [ + { name: "root", parent: "", value: 0 }, + { name: "A", parent: "root", value: 10 }, + { name: "B", parent: "root", value: 20 }, + ]; + const result = transform(data) as Array<{ name: string; children?: Array<{ name: string }> }>; + // Top-level nodes (no parent or parent is "") + expect(result.some((r) => r.name === "root")).toBe(true); + const rootNode = result.find((r) => r.name === "root"); + expect(rootNode?.children).toBeDefined(); + expect(rootNode?.children?.some((c) => c.name === "A")).toBe(true); + expect(rootNode?.children?.some((c) => c.name === "B")).toBe(true); + }); + + it("returns flat array when no parent column or children key", () => { + const data = [ + { name: "A", value: 10 }, + { name: "B", value: 20 }, + ]; + const result = transform(data) as Array<{ name: string; value: number }>; + expect(result).toHaveLength(2); + expect(result[0].name).toBe("A"); + }); + + it("returns empty array for empty input", () => { + expect(transform([])).toEqual([]); + }); + + it("returns empty array for null input", () => { + expect(transform(null)).toEqual([]); + }); + + it("handles postgresql { records } wrapper format", () => { + const data = { records: [{ name: "X", value: 5 }] }; + const result = transform(data) as Array<{ name: string }>; + expect(result[0].name).toBe("X"); + }); + + it("transformWithMapping returns same result as transform", () => { + const data = [{ name: "A", value: 10 }]; + const result = chartRegistry.sunburst.transformWithMapping(data, {}); + expect(result).toEqual(transform(data)); + }); +}); + +// --------------------------------------------------------------------------- +// radar chart type +// --------------------------------------------------------------------------- +describe("radar chart type", () => { + it("is registered in chartRegistry", () => { + expect(chartRegistry.radar).toBeDefined(); + expect(chartRegistry.radar.type).toBe("radar"); + expect(chartRegistry.radar.label).toBe("Radar"); + }); + + it("is compatible with both neo4j and postgresql", () => { + expect(chartRegistry.radar.compatibleWith).toContain("neo4j"); + expect(chartRegistry.radar.compatibleWith).toContain("postgresql"); + }); + + it("supportsClickAction is false", () => { + expect(chartSupportsClickAction("radar")).toBe(false); + }); + + it("supportsStyling is true", () => { + expect(chartSupportsStyling("radar")).toBe(true); + }); + + it("getStylingTargets returns Area Color target", () => { + expect(getStylingTargets("radar")).toEqual([{ value: "color", label: "Area Color" }]); + }); + + it("is included in compatible chart types for both connectors", () => { + expect(getCompatibleChartTypes("neo4j")).toContain("radar"); + expect(getCompatibleChartTypes("postgresql")).toContain("radar"); + }); +}); + +describe("radar transform", () => { + const { transform } = chartRegistry.radar; + + it("produces { indicators, series } from indicator/value/max records", () => { + const data = [ + { indicator: "Speed", value: 80, max: 100 }, + { indicator: "Strength", value: 60, max: 100 }, + { indicator: "Agility", value: 90, max: 100 }, + ]; + const result = transform(data) as { indicators: Array<{ name: string; max: number }>; series: Array<{ name: string; values: number[] }> }; + expect(result.indicators).toBeDefined(); + expect(result.series).toBeDefined(); + expect(result.indicators).toHaveLength(3); + expect(result.indicators[0].name).toBe("Speed"); + expect(result.indicators[0].max).toBe(100); + expect(result.series[0].values).toHaveLength(3); + expect(result.series[0].values[0]).toBe(80); + }); + + it("groups multiple series by seriesName column when present", () => { + const data = [ + { indicator: "Speed", value: 80, max: 100, series: "Player A" }, + { indicator: "Strength", value: 60, max: 100, series: "Player A" }, + { indicator: "Speed", value: 70, max: 100, series: "Player B" }, + { indicator: "Strength", value: 85, max: 100, series: "Player B" }, + ]; + const result = transform(data) as { indicators: unknown[]; series: Array<{ name: string; values: number[] }> }; + expect(result.series).toHaveLength(2); + expect(result.series.map((s) => s.name)).toContain("Player A"); + expect(result.series.map((s) => s.name)).toContain("Player B"); + }); + + it("returns empty { indicators: [], series: [] } for empty input", () => { + const result = transform([]) as { indicators: unknown[]; series: unknown[] }; + expect(result.indicators).toEqual([]); + expect(result.series).toEqual([]); + }); + + it("returns empty for null input", () => { + const r = transform(null) as { indicators: unknown[]; series: unknown[] }; + expect(r.indicators).toEqual([]); + expect(r.series).toEqual([]); + }); + + it("handles postgresql { records } wrapper format", () => { + const data = { records: [{ indicator: "X", value: 50, max: 100 }] }; + const result = transform(data) as { indicators: Array<{ name: string }>; series: unknown[] }; + expect(result.indicators[0].name).toBe("X"); + }); + + it("auto-scales max from data when max column is missing", () => { + const data = [{ indicator: "Speed", value: 80 }]; + const result = transform(data) as { indicators: Array<{ name: string; max: number }>; series: unknown[] }; + // 80 * 1.1 = 88, ceil → 88 + expect(result.indicators[0].max).toBe(88); + }); + + it("handles flat tabular data without indicator column (uses column names as indicators)", () => { + const data = [{ Speed: 80, Strength: 60, Agility: 90 }]; + const result = transform(data) as { indicators: Array<{ name: string }>; series: Array<{ values: number[] }> }; + expect(result.indicators.map((i) => i.name)).toContain("Speed"); + expect(result.indicators.map((i) => i.name)).toContain("Strength"); + expect(result.series[0].values).toHaveLength(3); + }); + + it("transformWithMapping returns same result as transform", () => { + const data = [{ indicator: "Speed", value: 80, max: 100 }]; + const result = chartRegistry.radar.transformWithMapping(data, {}); + expect(result).toEqual(transform(data)); + }); +}); + +// --------------------------------------------------------------------------- +// treemap chart type +// --------------------------------------------------------------------------- +describe("treemap chart type", () => { + it("is registered in chartRegistry", () => { + expect(chartRegistry.treemap).toBeDefined(); + expect(chartRegistry.treemap.type).toBe("treemap"); + expect(chartRegistry.treemap.label).toBe("Treemap"); + }); + + it("is compatible with both neo4j and postgresql", () => { + expect(chartRegistry.treemap.compatibleWith).toContain("neo4j"); + expect(chartRegistry.treemap.compatibleWith).toContain("postgresql"); + }); + + it("supportsClickAction is true", () => { + expect(chartSupportsClickAction("treemap")).toBe(true); + }); + + it("supportsStyling is true", () => { + expect(chartSupportsStyling("treemap")).toBe(true); + }); + + it("getStylingTargets returns Block Color target", () => { + expect(getStylingTargets("treemap")).toEqual([{ value: "color", label: "Block Color" }]); + }); + + it("is included in compatible chart types for both connectors", () => { + expect(getCompatibleChartTypes("neo4j")).toContain("treemap"); + expect(getCompatibleChartTypes("postgresql")).toContain("treemap"); + }); +}); + +describe("treemap transform", () => { + const { transform } = chartRegistry.treemap; + + it("converts flat records to { name, value } items", () => { + const data = [ + { name: "A", value: 10 }, + { name: "B", value: 30 }, + ]; + const result = transform(data) as Array<{ name: string; value: number }>; + expect(result).toHaveLength(2); + expect(result[0].name).toBe("A"); + expect(result[0].value).toBe(10); + expect(result[1].name).toBe("B"); + expect(result[1].value).toBe(30); + }); + + it("passes through hierarchical data with children", () => { + const data = [ + { name: "Root", value: 100, children: [{ name: "Child", value: 50 }] }, + ]; + const result = transform(data) as Array<{ name: string; value: number; children?: unknown[] }>; + expect(result[0].children).toHaveLength(1); + }); + + it("builds hierarchy from flat records with parent column", () => { + const data = [ + { name: "root", parent: "", value: 0 }, + { name: "A", parent: "root", value: 10 }, + ]; + const result = transform(data) as Array<{ name: string; children?: unknown[] }>; + const rootNode = result.find((r) => r.name === "root"); + expect(rootNode?.children).toBeDefined(); + }); + + it("returns empty array for empty input", () => { + expect(transform([])).toEqual([]); + }); + + it("returns empty array for null input", () => { + expect(transform(null)).toEqual([]); + }); + + it("handles postgresql { records } wrapper format", () => { + const data = { records: [{ name: "X", value: 5 }] }; + const result = transform(data) as Array<{ name: string }>; + expect(result[0].name).toBe("X"); + }); + + it("uses first column as name and second as value when no name/value columns present", () => { + const data = [{ category: "Alpha", count: 42 }]; + const result = transform(data) as Array<{ name: string; value: number }>; + expect(result[0].name).toBe("Alpha"); + expect(result[0].value).toBe(42); + }); + + it("coerces non-numeric values to 0", () => { + const data = [{ name: "A", value: "bad" }]; + const result = transform(data) as Array<{ value: number }>; + expect(result[0].value).toBe(0); + }); + + it("transformWithMapping returns same result as transform", () => { + const data = [{ name: "A", value: 10 }]; + const result = chartRegistry.treemap.transformWithMapping(data, {}); + expect(result).toEqual(transform(data)); + }); +}); + diff --git a/app/src/lib/__tests__/format-parameter-value.test.ts b/app/src/lib/__tests__/format-parameter-value.test.ts new file mode 100644 index 00000000..d6040bf4 --- /dev/null +++ b/app/src/lib/__tests__/format-parameter-value.test.ts @@ -0,0 +1,186 @@ +import { describe, it, expect } from "vitest"; +import { formatParameterValue, filterParentParams } from "../format-parameter-value"; +import type { ParameterEntry } from "@/stores/parameter-store"; + +// --------------------------------------------------------------------------- +// formatParameterValue +// --------------------------------------------------------------------------- + +describe("formatParameterValue", () => { + it("returns empty string for null", () => { + expect(formatParameterValue(null)).toBe(""); + }); + + it("returns empty string for undefined", () => { + expect(formatParameterValue(undefined)).toBe(""); + }); + + it("returns the string as-is for plain strings", () => { + expect(formatParameterValue("hello")).toBe("hello"); + }); + + it("converts number to string", () => { + expect(formatParameterValue(42)).toBe("42"); + expect(formatParameterValue(0)).toBe("0"); + expect(formatParameterValue(-3.14)).toBe("-3.14"); + }); + + it("converts boolean to string", () => { + expect(formatParameterValue(true)).toBe("true"); + expect(formatParameterValue(false)).toBe("false"); + }); + + // Relative date presets + it("maps 'today' to 'Today'", () => { + expect(formatParameterValue("today")).toBe("Today"); + }); + + it("maps 'yesterday' to 'Yesterday'", () => { + expect(formatParameterValue("yesterday")).toBe("Yesterday"); + }); + + it("maps 'last_7_days' to 'Last 7 days'", () => { + expect(formatParameterValue("last_7_days")).toBe("Last 7 days"); + }); + + it("maps 'last_30_days' to 'Last 30 days'", () => { + expect(formatParameterValue("last_30_days")).toBe("Last 30 days"); + }); + + it("maps 'last_90_days' to 'Last 90 days'", () => { + expect(formatParameterValue("last_90_days")).toBe("Last 90 days"); + }); + + it("maps 'this_month' to 'This month'", () => { + expect(formatParameterValue("this_month")).toBe("This month"); + }); + + it("maps 'last_month' to 'Last month'", () => { + expect(formatParameterValue("last_month")).toBe("Last month"); + }); + + it("maps 'this_quarter' to 'This quarter'", () => { + expect(formatParameterValue("this_quarter")).toBe("This quarter"); + }); + + it("maps 'this_year' to 'This year'", () => { + expect(formatParameterValue("this_year")).toBe("This year"); + }); + + it("maps 'last_year' to 'Last year'", () => { + expect(formatParameterValue("last_year")).toBe("Last year"); + }); + + it("returns unknown string keys as-is (not a preset)", () => { + expect(formatParameterValue("some_custom_value")).toBe("some_custom_value"); + }); + + // Number range (2-element numeric tuple) + it("formats a [min, max] number range with en-dash", () => { + expect(formatParameterValue([10, 500])).toBe("10 – 500"); + }); + + // Generic arrays + it("formats a string array as comma-separated", () => { + expect(formatParameterValue(["a", "b", "c"])).toBe("a, b, c"); + }); + + it("formats a number array with 3+ elements as comma-separated", () => { + expect(formatParameterValue([1, 2, 3])).toBe("1, 2, 3"); + }); + + it("formats a single-element array", () => { + expect(formatParameterValue(["only"])).toBe("only"); + }); + + it("formats an empty array", () => { + expect(formatParameterValue([])).toBe(""); + }); + + // Date range objects + it("formats an object with from/to as arrow notation", () => { + expect(formatParameterValue({ from: "2024-01-01", to: "2024-12-31" })).toBe( + "2024-01-01 → 2024-12-31" + ); + }); + + // Fallback + it("stringifies other objects via String()", () => { + expect(formatParameterValue({ foo: "bar" })).toBe("[object Object]"); + }); +}); + +// --------------------------------------------------------------------------- +// filterParentParams +// --------------------------------------------------------------------------- + +describe("filterParentParams", () => { + function entry(value: unknown = "v"): ParameterEntry { + return { + value, + source: "test", + field: "f", + type: "text", + sourceType: "click-action", + }; + } + + it("returns all entries when no sub-parameters exist", () => { + const entries: [string, ParameterEntry][] = [ + ["alpha", entry()], + ["beta", entry()], + ]; + expect(filterParentParams(entries)).toEqual(entries); + }); + + it("hides parent when _from sub-param exists", () => { + const entries: [string, ParameterEntry][] = [ + ["dates", entry()], + ["dates_from", entry()], + ["dates_to", entry()], + ]; + const result = filterParentParams(entries); + expect(result.map(([n]) => n)).toEqual(["dates_from", "dates_to"]); + }); + + it("hides parent when _min sub-param exists", () => { + const entries: [string, ParameterEntry][] = [ + ["price", entry()], + ["price_min", entry()], + ["price_max", entry()], + ]; + const result = filterParentParams(entries); + expect(result.map(([n]) => n)).toEqual(["price_min", "price_max"]); + }); + + it("does not hide parent when no matching suffix sub-params exist", () => { + const entries: [string, ParameterEntry][] = [ + ["price", entry()], + ["price_label", entry()], // Not a known suffix + ]; + expect(filterParentParams(entries)).toEqual(entries); + }); + + it("handles empty array", () => { + expect(filterParentParams([])).toEqual([]); + }); + + it("does not hide sub-params that also have their own sub-params", () => { + // Edge case: dates_from does not have dates_from_from or dates_from_to + const entries: [string, ParameterEntry][] = [ + ["dates", entry()], + ["dates_from", entry()], + ]; + const result = filterParentParams(entries); + expect(result.map(([n]) => n)).toEqual(["dates_from"]); + }); + + it("only hides parent with _to suffix", () => { + const entries: [string, ParameterEntry][] = [ + ["period", entry()], + ["period_to", entry()], + ]; + const result = filterParentParams(entries); + expect(result.map(([n]) => n)).toEqual(["period_to"]); + }); +}); diff --git a/app/src/lib/__tests__/schema-prefetch.test.ts b/app/src/lib/__tests__/schema-prefetch.test.ts new file mode 100644 index 00000000..9797f601 --- /dev/null +++ b/app/src/lib/__tests__/schema-prefetch.test.ts @@ -0,0 +1,120 @@ +/** + * schema-prefetch — unit tests for pure logic (node environment, no DOM). + * + * Only `buildAuthConfig` is fully unit-testable here because it is a pure + * function with no external dependencies. + * + * `fetchConnectionSchema` and `prefetchSchema` require the compiled + * connection package modules (Neo4jSchemaManager, PostgresSchemaManager) + * which are not available in the Vitest node environment. Those code paths + * are exercised via the Playwright E2E suite. + */ +import { describe, it, expect } from "vitest"; +import { buildAuthConfig } from "@/lib/schema-prefetch"; +import type { ConnectionCredentials } from "@/lib/query-executor"; + +const baseCredentials: ConnectionCredentials = { + uri: "bolt://localhost:7687", + username: "neo4j", + password: "secret", +}; + +describe("buildAuthConfig", () => { + it("maps uri, username, and password from credentials", () => { + const result = buildAuthConfig(baseCredentials); + expect(result.uri).toBe("bolt://localhost:7687"); + expect(result.username).toBe("neo4j"); + expect(result.password).toBe("secret"); + }); + + it("sets authType to 1 (NATIVE)", () => { + const result = buildAuthConfig(baseCredentials); + expect(result.authType).toBe(1); + }); + + it("returns uri unchanged when no database is provided", () => { + const result = buildAuthConfig(baseCredentials); + expect(result.uri).toBe("bolt://localhost:7687"); + }); + + it("embeds database in URI path when database is provided", () => { + const creds: ConnectionCredentials = { + ...baseCredentials, + database: "mydb", + }; + const result = buildAuthConfig(creds); + expect(result.uri).toContain("mydb"); + }); + + it("does not embed database when URI already has a path", () => { + const creds: ConnectionCredentials = { + ...baseCredentials, + uri: "bolt://localhost:7687/existing", + database: "otherdb", + }; + const result = buildAuthConfig(creds); + // ensureDatabaseInUri preserves existing path + expect(result.uri).toContain("existing"); + }); + + it("handles postgres URI scheme", () => { + const creds: ConnectionCredentials = { + uri: "postgresql://localhost:5432", + username: "pguser", + password: "pgpass", + database: "appdb", + }; + const result = buildAuthConfig(creds); + expect(result.uri).toContain("appdb"); + expect(result.username).toBe("pguser"); + expect(result.password).toBe("pgpass"); + expect(result.authType).toBe(1); + }); + + it("handles empty string database (treats as no database)", () => { + const creds: ConnectionCredentials = { + ...baseCredentials, + database: "", + }; + const result = buildAuthConfig(creds); + // Empty database string: ensureDatabaseInUri returns uri unchanged + expect(result.uri).toBe("bolt://localhost:7687"); + }); + + it("returns an object with exactly the expected keys", () => { + const result = buildAuthConfig(baseCredentials); + expect(Object.keys(result).sort()).toEqual( + ["authType", "password", "uri", "username"].sort(), + ); + }); + + it("does not expose advanced options (connectionTimeout, etc.)", () => { + const creds: ConnectionCredentials = { + ...baseCredentials, + connectionTimeout: 5000, + queryTimeout: 30000, + maxPoolSize: 10, + }; + const result = buildAuthConfig(creds); + expect(result).not.toHaveProperty("connectionTimeout"); + expect(result).not.toHaveProperty("queryTimeout"); + expect(result).not.toHaveProperty("maxPoolSize"); + }); +}); + +describe("schema-prefetch module exports", () => { + it("exports buildAuthConfig as a function", async () => { + const mod = await import("@/lib/schema-prefetch"); + expect(typeof mod.buildAuthConfig).toBe("function"); + }); + + it("exports fetchConnectionSchema as a function", async () => { + const mod = await import("@/lib/schema-prefetch"); + expect(typeof mod.fetchConnectionSchema).toBe("function"); + }); + + it("exports prefetchSchema as a function", async () => { + const mod = await import("@/lib/schema-prefetch"); + expect(typeof mod.prefetchSchema).toBe("function"); + }); +}); diff --git a/app/src/lib/api-utils.ts b/app/src/lib/api-utils.ts index 18ba9432..03b45b09 100644 --- a/app/src/lib/api-utils.ts +++ b/app/src/lib/api-utils.ts @@ -57,10 +57,7 @@ export function handleRouteError( fallbackMsg = "Internal server error", ): ReturnType { const message = error instanceof Error ? error.message : fallbackMsg; - if ( - message.includes("Unauthorized") || - message.includes("session") - ) { + if (message.includes("Unauthorized") || message.includes("session")) { return unauthorized(); } if (message === "Forbidden") { diff --git a/app/src/lib/auth/__tests__/api-key.test.ts b/app/src/lib/auth/__tests__/api-key.test.ts index 5dcc5027..722bd8b3 100644 --- a/app/src/lib/auth/__tests__/api-key.test.ts +++ b/app/src/lib/auth/__tests__/api-key.test.ts @@ -38,8 +38,7 @@ describe("generateApiKey", () => { beforeEach(async () => { vi.resetModules(); vi.clearAllMocks(); - delete process.env.API_KEY_HMAC_SECRET; - process.env.ENCRYPTION_KEY = TEST_HMAC_SECRET; + process.env.API_KEY_HMAC_SECRET = TEST_HMAC_SECRET; vi.doMock("next/headers", () => ({ headers: mockHeaders })); vi.doMock("@/lib/db", () => ({ db: mockDb })); const mod = await import("../api-key"); @@ -83,8 +82,7 @@ describe("hashApiKey", () => { beforeEach(async () => { vi.resetModules(); vi.clearAllMocks(); - delete process.env.API_KEY_HMAC_SECRET; - process.env.ENCRYPTION_KEY = TEST_HMAC_SECRET; + process.env.API_KEY_HMAC_SECRET = TEST_HMAC_SECRET; vi.doMock("next/headers", () => ({ headers: mockHeaders })); vi.doMock("@/lib/db", () => ({ db: mockDb })); const mod = await import("../api-key"); @@ -117,10 +115,9 @@ describe("hashApiKey", () => { expect(hashApiKey("nb_abc")).not.toBe(hashApiKey("nb_xyz")); }); - it("uses API_KEY_HMAC_SECRET when available (over ENCRYPTION_KEY)", async () => { + it("uses API_KEY_HMAC_SECRET exclusively (no ENCRYPTION_KEY fallback)", async () => { vi.resetModules(); process.env.API_KEY_HMAC_SECRET = "dedicated-hmac-secret"; - process.env.ENCRYPTION_KEY = TEST_HMAC_SECRET; vi.doMock("next/headers", () => ({ headers: mockHeaders })); vi.doMock("@/lib/db", () => ({ db: mockDb })); const mod = await import("../api-key"); @@ -130,8 +127,6 @@ describe("hashApiKey", () => { .update("nb_abc") .digest("hex"); expect(result).toBe(expected); - - delete process.env.API_KEY_HMAC_SECRET; }); }); @@ -150,8 +145,7 @@ describe("resolveApiKeyAuth", () => { beforeEach(async () => { vi.resetModules(); vi.clearAllMocks(); - delete process.env.API_KEY_HMAC_SECRET; - process.env.ENCRYPTION_KEY = TEST_HMAC_SECRET; + process.env.API_KEY_HMAC_SECRET = TEST_HMAC_SECRET; vi.doMock("next/headers", () => ({ headers: mockHeaders })); vi.doMock("@/lib/db", () => ({ db: mockDb })); const mod = await import("../api-key"); @@ -191,13 +185,16 @@ describe("resolveApiKeyAuth", () => { it("throws generic Unauthorized when key is expired (no info disclosure)", async () => { const pastDate = new Date(Date.now() - 1000); - mockHeadersGet.mockReturnValue("Bearer nb_" + "a".repeat(64)); + const token = "nb_" + "a".repeat(64); + const keyHash = createHmac("sha256", TEST_HMAC_SECRET).update(token).digest("hex"); + mockHeadersGet.mockReturnValue("Bearer " + token); mockDb.select.mockReturnValue( makeSelectChain([ { id: "key-1", userId: "user-1", tenantId: "default", + keyHash, role: "creator", canWrite: true, expiresAt: pastDate, @@ -209,13 +206,16 @@ describe("resolveApiKeyAuth", () => { it("returns user context for a valid non-expired key", async () => { const futureDate = new Date(Date.now() + 86400_000); - mockHeadersGet.mockReturnValue("Bearer nb_" + "b".repeat(64)); + const token = "nb_" + "b".repeat(64); + const keyHash = createHmac("sha256", TEST_HMAC_SECRET).update(token).digest("hex"); + mockHeadersGet.mockReturnValue("Bearer " + token); mockDb.select.mockReturnValue( makeSelectChain([ { id: "key-2", userId: "user-2", tenantId: "tenant-abc", + keyHash, role: "creator", canWrite: true, expiresAt: futureDate, @@ -233,13 +233,16 @@ describe("resolveApiKeyAuth", () => { }); it("returns user context for a key with no expiry (null expiresAt)", async () => { - mockHeadersGet.mockReturnValue("Bearer nb_" + "c".repeat(64)); + const token = "nb_" + "c".repeat(64); + const keyHash = createHmac("sha256", TEST_HMAC_SECRET).update(token).digest("hex"); + mockHeadersGet.mockReturnValue("Bearer " + token); mockDb.select.mockReturnValue( makeSelectChain([ { id: "key-3", userId: "user-3", tenantId: "default", + keyHash, role: "admin", canWrite: true, expiresAt: null, @@ -256,13 +259,16 @@ describe("resolveApiKeyAuth", () => { }); it("calls db.update to set lastUsedAt on successful resolution", async () => { - mockHeadersGet.mockReturnValue("Bearer nb_" + "d".repeat(64)); + const token = "nb_" + "d".repeat(64); + const keyHash = createHmac("sha256", TEST_HMAC_SECRET).update(token).digest("hex"); + mockHeadersGet.mockReturnValue("Bearer " + token); mockDb.select.mockReturnValue( makeSelectChain([ { id: "key-4", userId: "user-4", tenantId: "default", + keyHash, role: "creator", canWrite: false, expiresAt: null, diff --git a/app/src/lib/auth/api-key.ts b/app/src/lib/auth/api-key.ts index c9b74024..8603bb9d 100644 --- a/app/src/lib/auth/api-key.ts +++ b/app/src/lib/auth/api-key.ts @@ -1,4 +1,4 @@ -import { createHmac, randomBytes } from "node:crypto"; +import { createHmac, randomBytes, timingSafeEqual } from "node:crypto"; import { headers } from "next/headers"; import { and, eq } from "drizzle-orm"; import { db } from "@/lib/db"; @@ -7,12 +7,12 @@ import type { UserRole } from "@/lib/db/schema"; /** * Server-side secret for HMAC-SHA256 key hashing. - * Falls back to ENCRYPTION_KEY if no dedicated secret is set. - * Without this secret, a DB dump cannot be used to reconstruct keys. + * Requires a dedicated API_KEY_HMAC_SECRET — never shares the ENCRYPTION_KEY + * to prevent key rotation from invalidating all API key hashes. */ function getHmacSecret(): string { - const secret = process.env.API_KEY_HMAC_SECRET ?? process.env.ENCRYPTION_KEY; - if (!secret) throw new Error("API_KEY_HMAC_SECRET or ENCRYPTION_KEY must be set"); + const secret = process.env.API_KEY_HMAC_SECRET; + if (!secret) throw new Error("API_KEY_HMAC_SECRET must be set"); return secret; } @@ -57,6 +57,7 @@ export async function resolveApiKeyAuth(): Promise<{ id: apiKeys.id, userId: apiKeys.userId, tenantId: apiKeys.tenantId, + keyHash: apiKeys.keyHash, role: users.role, canWrite: users.canWrite, expiresAt: apiKeys.expiresAt, @@ -69,6 +70,14 @@ export async function resolveApiKeyAuth(): Promise<{ throw new Error("Unauthorized"); } + // Constant-time comparison to prevent timing attacks that could + // distinguish valid key hashes from invalid ones via response latency. + const storedHash = Buffer.from(rows[0].keyHash, "hex"); + const computedHash = Buffer.from(keyHash, "hex"); + if (storedHash.length !== computedHash.length || !timingSafeEqual(storedHash, computedHash)) { + throw new Error("Unauthorized"); + } + const row = rows[0]; if (row.expiresAt && row.expiresAt < new Date()) { @@ -79,8 +88,8 @@ export async function resolveApiKeyAuth(): Promise<{ db.update(apiKeys) .set({ lastUsedAt: new Date() }) .where(and(eq(apiKeys.id, row.id), eq(apiKeys.tenantId, row.tenantId))) - .catch(() => { - // intentionally silent — lastUsedAt is audit data + .catch((err: unknown) => { + console.warn("[api-key] Failed to update lastUsedAt:", err instanceof Error ? err.message : "unknown"); }); const role: UserRole = row.role; diff --git a/app/src/lib/auth/errors.ts b/app/src/lib/auth/errors.ts new file mode 100644 index 00000000..3dd2e829 --- /dev/null +++ b/app/src/lib/auth/errors.ts @@ -0,0 +1,10 @@ +export class UnauthorizedError extends Error { + constructor() { + super("Unauthorized"); + } +} +export class ForbiddenError extends Error { + constructor() { + super("Forbidden"); + } +} diff --git a/app/src/lib/auth/session.ts b/app/src/lib/auth/session.ts index 10e65a0e..a3225749 100644 --- a/app/src/lib/auth/session.ts +++ b/app/src/lib/auth/session.ts @@ -1,6 +1,7 @@ import { auth } from "./config"; import { resolveApiKeyAuth } from "./api-key"; import type { UserRole } from "@/lib/db/schema"; +import { UnauthorizedError, ForbiddenError } from "./errors"; /** * Require the current user to be an admin. @@ -13,7 +14,7 @@ export async function requireAdmin(): Promise<{ }> { const { userId, role, canWrite, tenantId } = await requireSession(); if (role !== "admin") { - throw new Error("Forbidden"); + throw new ForbiddenError(); } return { userId, canWrite, tenantId }; } @@ -28,7 +29,7 @@ export async function requireUserId(): Promise { const session = await auth(); if (!session?.user?.id) { - throw new Error("Unauthorized"); + throw new UnauthorizedError(); } return session.user.id; } @@ -51,7 +52,7 @@ export async function requireSession(): Promise<{ // Fall back to session-based auth const session = await auth(); if (!session?.user?.id) { - throw new Error("Unauthorized"); + throw new UnauthorizedError(); } const role = session.user.role ?? "creator"; // tenantId is stamped into the JWT at sign-in time from TENANT_ID env var. diff --git a/app/src/lib/chart-registry.ts b/app/src/lib/chart-registry.ts index 141135f3..56507c78 100644 --- a/app/src/lib/chart-registry.ts +++ b/app/src/lib/chart-registry.ts @@ -24,7 +24,14 @@ export type ChartType = | "map" | "json" | "parameter-select" - | "form"; + | "form" + | "markdown" + | "iframe" + | "gauge" + | "sankey" + | "sunburst" + | "radar" + | "treemap"; export type ConnectorType = "neo4j" | "postgresql"; @@ -185,15 +192,6 @@ function transformToTableData(data: unknown): unknown { return toRecords(data); } -/** - * Safely extract a usable string ID from a value that may be a string, - * number, or a serialized Neo4j Integer ({low, high} plain object). - */ -function safeId(v: unknown): string { - if (typeof v === "string") return v; - if (typeof v === "number") return String(v); - return String(v); -} // ─── Graph helpers (extracted from transformToGraphData) ──────────────────── @@ -228,7 +226,7 @@ function transformToGraphData(data: unknown): unknown { const edgesMap = new Map>(); function addNode(v: Record) { - const id = safeId(v.elementId ?? v.identity ?? Math.random()); + const id = String(v.elementId ?? v.identity ?? crypto.randomUUID()); if (!nodesMap.has(id)) { const labels = (v.labels as string[]) ?? []; const rawProps = (v.properties as Record) ?? {}; @@ -244,14 +242,14 @@ function transformToGraphData(data: unknown): unknown { } function addEdge(v: Record) { - const edgeId = safeId( + const edgeId = String( v.elementId ?? v.identity ?? `${v.startNodeElementId ?? v.start}-${v.type}-${v.endNodeElementId ?? v.end}` ); if (!edgesMap.has(edgeId)) { const rawProps = (v.properties ?? {}) as Record; edgesMap.set(edgeId, { - source: safeId(v.startNodeElementId ?? v.start), - target: safeId(v.endNodeElementId ?? v.end), + source: String(v.startNodeElementId ?? v.start), + target: String(v.endNodeElementId ?? v.end), label: String(v.type), properties: normalizeProps(rawProps), }); @@ -344,6 +342,203 @@ function transformToSelectData(data: unknown): unknown { return records.map((r) => r[firstKey]).filter((v) => v !== null && v !== undefined); } +// ─── New chart type transforms ────────────────────────────────────────────── + +/** + * Transform to gauge chart format: [{ value, name }] + * Extracts the first row. If two columns exist, first = value, second = name. + */ +function transformToGaugeData(data: unknown): unknown { + const records = toRecords(data); + if (!records.length) return []; + const first = records[0]; + const keys = Object.keys(first); + if (!keys.length) return []; + + // Look for explicit "value"/"name" keys, then fall back to positional + const valueKey = keys.find((k) => /^value$/i.test(k)) ?? keys[0]; + const nameKey = keys.find((k) => /^(name|label|title)$/i.test(k) && k !== valueKey) ?? keys[1]; + + return [ + { + value: Number(first[valueKey]) || 0, + name: nameKey ? String(normalizeValue(first[nameKey]) ?? "") : "", + }, + ]; +} + +/** + * Transform to Sankey chart format: { nodes: [{ name }], links: [{ source, target, value }] } + * Expects records with source, target, and value columns. + */ +function transformToSankeyData(data: unknown): unknown { + const records = toRecords(data); + if (!records.length) return { nodes: [], links: [] }; + const keys = Object.keys(records[0]); + if (keys.length < 2) return { nodes: [], links: [] }; + + // Resolve source/target/value columns heuristically + const sourceKey = keys.find((k) => /source|from|start/i.test(k)) ?? keys[0]; + const targetKey = keys.find((k) => /target|to|end/i.test(k) && k !== sourceKey) ?? keys[1]; + const valueKey = keys.find((k) => /value|count|weight|amount/i.test(k) && k !== sourceKey && k !== targetKey) ?? keys[2]; + + const nodeNames = new Set(); + const links: Array<{ source: string; target: string; value: number }> = []; + + for (const r of records) { + const src = String(normalizeValue(r[sourceKey]) ?? ""); + const tgt = String(normalizeValue(r[targetKey]) ?? ""); + const val = valueKey ? Number(r[valueKey]) || 0 : 1; + if (src) nodeNames.add(src); + if (tgt) nodeNames.add(tgt); + links.push({ source: src, target: tgt, value: val }); + } + + return { + nodes: Array.from(nodeNames).map((name) => ({ name })), + links, + }; +} + +/** + * Transform to Sunburst/Treemap hierarchical format. + * Handles three cases: + * 1. Data already has `children` array — pass through. + * 2. Flat data with `parent` column — build hierarchy. + * 3. Flat data with name/value only — return flat array. + */ +function transformToHierarchicalData(data: unknown): unknown { + const records = toRecords(data); + if (!records.length) return []; + + const first = records[0]; + const keys = Object.keys(first); + + // Case 1: pre-hierarchical (has children key on first record) + if ("children" in first) { + return records; + } + + // Case 2: flat with parent column — build hierarchy + const hasParent = keys.includes("parent"); + if (hasParent) { + const nameKey = keys.find((k) => /^(name|label|title)$/i.test(k)) ?? keys[0]; + const valueKey = keys.find((k) => /^(value|count|size)$/i.test(k) && k !== nameKey) ?? keys.find((k) => k !== nameKey && k !== "parent"); + + type HierNode = { name: string; value: number; children?: HierNode[] }; + const nodeMap = new Map(); + + // Build node map + for (const r of records) { + const name = String(normalizeValue(r[nameKey]) ?? ""); + const value = valueKey ? Number(r[valueKey]) || 0 : 0; + nodeMap.set(name, { name, value }); + } + + const roots: HierNode[] = []; + + // Link children to parents + for (const r of records) { + const name = String(normalizeValue(r[nameKey]) ?? ""); + const parent = String(r.parent ?? ""); + const node = nodeMap.get(name); + if (!node) continue; + + if (!parent || !nodeMap.has(parent)) { + roots.push(node); + } else { + const parentNode = nodeMap.get(parent)!; + if (!parentNode.children) parentNode.children = []; + parentNode.children.push(node); + } + } + + return roots; + } + + // Case 3: flat name/value pairs + const nameKey = keys.find((k) => /^(name|label|title|category)$/i.test(k)) ?? keys[0]; + const valueKey = keys.find((k) => k !== nameKey) ?? keys[1]; + + return records.map((r) => ({ + name: String(normalizeValue(r[nameKey]) ?? ""), + value: valueKey ? Number(r[valueKey]) || 0 : 0, + })); +} + +/** + * Transform to Radar chart format: { indicators: [{ name, max }], series: [{ name, values }] } + * Handles: + * 1. Records with indicator/value/max columns (optionally a series/group column). + * 2. Flat tabular records where column names become indicators. + */ +function transformToRadarData(data: unknown): unknown { + const records = toRecords(data); + if (!records.length) return { indicators: [], series: [] }; + + const keys = Object.keys(records[0]); + const indicatorKey = keys.find((k) => /^(indicator|axis|dimension|category)$/i.test(k)); + const valueKey = keys.find((k) => /^(value|score)$/i.test(k) && k !== indicatorKey); + const maxKey = keys.find((k) => /^(max|maximum)$/i.test(k)); + const seriesKey = keys.find((k) => /^(series|group|name|label)$/i.test(k) && k !== indicatorKey && k !== valueKey && k !== maxKey); + + if (indicatorKey && valueKey) { + // Long-format: one row per (series, indicator) combination + const indicatorMaxFromData = new Map(); // name -> observed max value + const indicatorExplicitMax = new Map(); // name -> explicit max from data + const seriesMap = new Map>(); // seriesName -> { indicator -> value } + + for (const r of records) { + const indName = String(normalizeValue(r[indicatorKey]) ?? ""); + const val = Number(r[valueKey]) || 0; + const serName = seriesKey ? String(normalizeValue(r[seriesKey]) ?? "Default") : "Default"; + + if (maxKey) { + const explicitMax = Number(r[maxKey]) || 100; + if (!indicatorExplicitMax.has(indName)) indicatorExplicitMax.set(indName, explicitMax); + } + indicatorMaxFromData.set(indName, Math.max(indicatorMaxFromData.get(indName) ?? 0, val)); + if (!seriesMap.has(serName)) seriesMap.set(serName, new Map()); + seriesMap.get(serName)!.set(indName, val); + } + + // Use explicit max if provided, otherwise auto-scale from observed values (+10% headroom) + const indicatorEntries = Array.from(indicatorMaxFromData.keys()); + const indicators = indicatorEntries.map((name) => ({ + name, + max: maxKey && indicatorExplicitMax.has(name) + ? indicatorExplicitMax.get(name)! + : Math.ceil((indicatorMaxFromData.get(name) ?? 100) * 1.1) || 100, + })); + const series = Array.from(seriesMap.entries()).map(([name, valMap]) => ({ + name, + values: indicators.map((ind) => valMap.get(ind.name) ?? 0), + })); + + return { indicators, series }; + } + + // Wide-format: each column is an indicator, each row is a series + // Auto-scale max from observed values per column (+10% headroom) + const maxPerCol = new Map(); + for (const r of records) { + for (const k of keys) { + const v = Number(r[k]) || 0; + maxPerCol.set(k, Math.max(maxPerCol.get(k) ?? 0, v)); + } + } + const indicators = keys.map((k) => ({ + name: k, + max: Math.ceil((maxPerCol.get(k) ?? 100) * 1.1) || 100, + })); + const series = records.map((r, i) => ({ + name: String(i + 1), + values: keys.map((k) => Number(r[k]) || 0), + })); + + return { indicators, series }; +} + // ─── Validators ──────────────────────────────────────────────────────────── // Each returns null if valid or empty, error string if rows exist but shape is wrong. @@ -418,24 +613,24 @@ export const chartRegistry: Record = { bar: { type: "bar", label: "Bar Chart", - transform: (data) => transformToBarData(data), - transformWithMapping: (data, mapping) => transformToBarData(data, mapping), + transform: transformToBarData, + transformWithMapping: transformToBarData, validate: validateBarData, compatibleWith: ["neo4j", "postgresql"], }, line: { type: "line", label: "Line Chart", - transform: (data) => transformToLineData(data), - transformWithMapping: (data, mapping) => transformToLineData(data, mapping), + transform: transformToLineData, + transformWithMapping: transformToLineData, validate: validateLineData, compatibleWith: ["neo4j", "postgresql"], }, pie: { type: "pie", label: "Pie Chart", - transform: (data) => transformToPieData(data), - transformWithMapping: (data, mapping) => transformToPieData(data, mapping), + transform: transformToPieData, + transformWithMapping: transformToPieData, validate: validatePieData, compatibleWith: ["neo4j", "postgresql"], }, @@ -443,14 +638,14 @@ export const chartRegistry: Record = { type: "table", label: "Data Table", transform: transformToTableData, - transformWithMapping: (data) => transformToTableData(data), + transformWithMapping: transformToTableData, compatibleWith: ["neo4j", "postgresql"], }, "single-value": { type: "single-value", label: "Single Value", transform: transformToValueData, - transformWithMapping: (data) => transformToValueData(data), + transformWithMapping: transformToValueData, validate: validateValueData, compatibleWith: ["neo4j", "postgresql"], supportsClickAction: false, @@ -460,7 +655,7 @@ export const chartRegistry: Record = { type: "graph", label: "Graph", transform: transformToGraphData, - transformWithMapping: (data) => transformToGraphData(data), + transformWithMapping: transformToGraphData, validate: validateGraphData, compatibleWith: ["neo4j"], supportsStyling: false, @@ -469,7 +664,7 @@ export const chartRegistry: Record = { type: "map", label: "Map", transform: transformToMapData, - transformWithMapping: (data) => transformToMapData(data), + transformWithMapping: transformToMapData, validate: validateMapData, compatibleWith: ["neo4j", "postgresql"], supportsStyling: false, @@ -478,7 +673,7 @@ export const chartRegistry: Record = { type: "json", label: "JSON Viewer", transform: transformToJsonData, - transformWithMapping: (data) => transformToJsonData(data), + transformWithMapping: transformToJsonData, compatibleWith: ["neo4j", "postgresql"], supportsClickAction: false, supportsStyling: false, @@ -487,7 +682,7 @@ export const chartRegistry: Record = { type: "parameter-select", label: "Parameter Selector", transform: transformToSelectData, - transformWithMapping: (data) => transformToSelectData(data), + transformWithMapping: transformToSelectData, compatibleWith: ["neo4j", "postgresql"], supportsClickAction: false, supportsStyling: false, @@ -500,6 +695,61 @@ export const chartRegistry: Record = { compatibleWith: ["neo4j", "postgresql"], supportsStyling: false, }, + markdown: { + type: "markdown", + label: "Markdown", + transform: () => null, + transformWithMapping: () => null, + compatibleWith: ["neo4j", "postgresql"], + supportsClickAction: false, + supportsStyling: false, + }, + iframe: { + type: "iframe", + label: "iFrame", + transform: () => null, + transformWithMapping: () => null, + compatibleWith: ["neo4j", "postgresql"], + supportsClickAction: false, + supportsStyling: false, + }, + gauge: { + type: "gauge", + label: "Gauge", + transform: transformToGaugeData, + transformWithMapping: transformToGaugeData, + compatibleWith: ["neo4j", "postgresql"], + supportsClickAction: false, + }, + sankey: { + type: "sankey", + label: "Sankey", + transform: transformToSankeyData, + transformWithMapping: transformToSankeyData, + compatibleWith: ["neo4j", "postgresql"], + }, + sunburst: { + type: "sunburst", + label: "Sunburst", + transform: transformToHierarchicalData, + transformWithMapping: transformToHierarchicalData, + compatibleWith: ["neo4j", "postgresql"], + }, + radar: { + type: "radar", + label: "Radar", + transform: transformToRadarData, + transformWithMapping: transformToRadarData, + compatibleWith: ["neo4j", "postgresql"], + supportsClickAction: false, + }, + treemap: { + type: "treemap", + label: "Treemap", + transform: transformToHierarchicalData, + transformWithMapping: transformToHierarchicalData, + compatibleWith: ["neo4j", "postgresql"], + }, }; export function getChartConfig(type: string): ChartConfig | undefined { @@ -543,6 +793,16 @@ export function getStylingTargets(type: string): { value: string; label: string { value: "backgroundColor", label: "Background Color" }, { value: "textColor", label: "Text Color" }, ]; + case "gauge": + return [{ value: "color", label: "Gauge Color" }]; + case "sankey": + return [{ value: "color", label: "Link Color" }]; + case "sunburst": + return [{ value: "color", label: "Segment Color" }]; + case "radar": + return [{ value: "color", label: "Area Color" }]; + case "treemap": + return [{ value: "color", label: "Block Color" }]; default: return [{ value: "color", label: "Color" }]; } diff --git a/app/src/lib/db/schema.ts b/app/src/lib/db/schema.ts index 8248973d..5e7c5009 100644 --- a/app/src/lib/db/schema.ts +++ b/app/src/lib/db/schema.ts @@ -92,6 +92,7 @@ export const connections = pgTable("connection", { userId: text("userId") .notNull() .references(() => users.id, { onDelete: "cascade" }), + tenantId: text("tenant_id").notNull().default("default"), name: text("name").notNull(), type: connectionTypeEnum("type").notNull(), configEncrypted: text("configEncrypted").notNull(), diff --git a/app/src/lib/schema-prefetch.ts b/app/src/lib/schema-prefetch.ts index 74e6106b..2392e1bb 100644 --- a/app/src/lib/schema-prefetch.ts +++ b/app/src/lib/schema-prefetch.ts @@ -1,31 +1,47 @@ import type { ConnectionCredentials } from "@/lib/query-executor"; +import { ensureDatabaseInUri } from "@/lib/query-params"; -// eslint-disable-next-line @typescript-eslint/no-require-imports -const { Neo4jSchemaManager } = require("connection/src/schema/neo4j-schema"); -// eslint-disable-next-line @typescript-eslint/no-require-imports -const { PostgresSchemaManager } = require("connection/src/schema/pg-schema"); +/** + * Builds the auth configuration object for schema manager calls. + * Exported for unit testing in isolation. + */ +export function buildAuthConfig(credentials: ConnectionCredentials) { + return { + uri: ensureDatabaseInUri(credentials.uri, credentials.database), + username: credentials.username, + password: credentials.password, + authType: 1 as const, // AuthType.NATIVE + }; +} /** * Fetch the database schema for a given connection. * Used both by the schema API route and as a fire-and-forget prefetch * after connection create/update. + * + * The connection package modules are required lazily (inside the function) + * so that this module can be imported in test environments without needing + * the compiled connection package to be available at module load time. */ export async function fetchConnectionSchema( type: "neo4j" | "postgresql", - credentials: ConnectionCredentials -) { - const authConfig = { - uri: credentials.uri, - username: credentials.username, - password: credentials.password, - authType: 1, // AuthType.NATIVE - }; + credentials: ConnectionCredentials, +): Promise { + const authConfig = buildAuthConfig(credentials); if (type === "neo4j") { - const manager = new Neo4jSchemaManager() as { fetchSchema: (a: typeof authConfig) => Promise }; + // eslint-disable-next-line @typescript-eslint/no-require-imports + const { Neo4jSchemaManager } = require("connection/src/schema/neo4j-schema") as { + Neo4jSchemaManager: new () => { fetchSchema: (a: typeof authConfig) => Promise }; + }; + const manager = new Neo4jSchemaManager(); return manager.fetchSchema(authConfig); } else { - const manager = new PostgresSchemaManager() as { fetchSchema: (a: typeof authConfig) => Promise }; + // eslint-disable-next-line @typescript-eslint/no-require-imports + const { PostgresSchemaManager } = require("connection/src/schema/pg-schema") as { + PostgresSchemaManager: new () => { fetchSchema: (a: typeof authConfig) => Promise }; + }; + const manager = new PostgresSchemaManager(); return manager.fetchSchema(authConfig); } } @@ -36,7 +52,7 @@ export async function fetchConnectionSchema( */ export function prefetchSchema( type: "neo4j" | "postgresql", - credentials: ConnectionCredentials + credentials: ConnectionCredentials, ): void { fetchConnectionSchema(type, credentials).catch(() => { // Non-critical: schema prefetch failure should not surface to the user diff --git a/app/src/lib/schema-types.ts b/app/src/lib/schema-types.ts new file mode 100644 index 00000000..84c195c1 --- /dev/null +++ b/app/src/lib/schema-types.ts @@ -0,0 +1,35 @@ +/** + * DatabaseSchema type definition for the app package. + * + * Mirrored from connection/src/schema/types.ts because the connection + * package ships as TypeScript source with internal neo4j-driver-core + * references that don't resolve under the app's strict tsconfig. + * + * This type is used by the schema store, schema hooks, and any app-layer + * code that handles database schema metadata. + */ + +export interface PropertyDef { + name: string; + type: string; +} + +export interface ColumnDef { + name: string; + type: string; + nullable: boolean; +} + +export interface TableDef { + name: string; + columns: ColumnDef[]; +} + +export interface DatabaseSchema { + type: "neo4j" | "postgresql"; + labels?: string[]; + relationshipTypes?: string[]; + nodeProperties?: Record; + relProperties?: Record; + tables?: TableDef[]; +} diff --git a/app/src/stores/__tests__/dashboard-store.test.ts b/app/src/stores/__tests__/dashboard-store.test.ts index 1acf308f..2ae3f746 100644 --- a/app/src/stores/__tests__/dashboard-store.test.ts +++ b/app/src/stores/__tests__/dashboard-store.test.ts @@ -544,4 +544,110 @@ describe("useDashboardStore", () => { expect(detached.templateSyncedAt).toBeUndefined(); expect(detached.chartType).toBe("bar"); // data unchanged }); + + // ── Unsaved changes tracking ──────────────────────────────────── + + it("hasUnsavedChanges is false before any layout is loaded", () => { + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(false); + }); + + it("hasUnsavedChanges is false immediately after loading a layout", () => { + const layout = { + version: 2 as const, + pages: [{ id: "p1", title: "Page 1", widgets: [], gridLayout: [] }], + }; + useDashboardStore.getState().setLayout(layout); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(false); + }); + + it("hasUnsavedChanges is true after modifying the layout", () => { + const layout = { + version: 2 as const, + pages: [{ id: "p1", title: "Page 1", widgets: [], gridLayout: [] }], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().addPage(); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(true); + }); + + it("hasUnsavedChanges returns false after markSaved", () => { + const layout = { + version: 2 as const, + pages: [{ id: "p1", title: "Page 1", widgets: [], gridLayout: [] }], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().addPage(); + useDashboardStore.getState().markSaved(); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(false); + }); + + it("hasUnsavedChanges detects widget removal as a change", () => { + const layout = { + version: 2 as const, + pages: [ + { + id: "p1", + title: "Page 1", + widgets: [ + { id: "w1", chartType: "bar", connectionId: "c1", query: "q1" }, + ], + gridLayout: [{ i: "w1", x: 0, y: 0, w: 4, h: 3 }], + }, + ], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().removeWidget("w1"); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(true); + }); + + it("hasUnsavedChanges detects grid layout change as a change", () => { + const layout = { + version: 2 as const, + pages: [ + { + id: "p1", + title: "Page 1", + widgets: [], + gridLayout: [{ i: "w1", x: 0, y: 0, w: 4, h: 3 }], + }, + ], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().updateGridLayout([ + { i: "w1", x: 0, y: 0, w: 6, h: 4 }, + ]); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(true); + }); + + it("hasUnsavedChanges detects widget update as a change", () => { + const layout = { + version: 2 as const, + pages: [ + { + id: "p1", + title: "Page 1", + widgets: [ + { id: "w1", chartType: "bar", connectionId: "c1", query: "q1" }, + ], + gridLayout: [{ i: "w1", x: 0, y: 0, w: 4, h: 3 }], + }, + ], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().updateWidget("w1", { chartType: "line" }); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(true); + }); + + it("hasUnsavedChanges detects page removal as a change", () => { + const layout = { + version: 2 as const, + pages: [ + { id: "p1", title: "Page 1", widgets: [], gridLayout: [] }, + { id: "p2", title: "Page 2", widgets: [], gridLayout: [] }, + ], + }; + useDashboardStore.getState().setLayout(layout); + useDashboardStore.getState().removePage(1); + expect(useDashboardStore.getState().hasUnsavedChanges()).toBe(true); + }); }); diff --git a/app/src/stores/__tests__/schema-store.test.ts b/app/src/stores/__tests__/schema-store.test.ts index 9c7c23ad..043ad716 100644 --- a/app/src/stores/__tests__/schema-store.test.ts +++ b/app/src/stores/__tests__/schema-store.test.ts @@ -1,9 +1,27 @@ import { describe, it, expect, beforeEach } from "vitest"; +import type { DatabaseSchema } from "@/lib/schema-types"; import { useSchemaStore } from "../schema-store"; +const neo4jSchema: DatabaseSchema = { + type: "neo4j", + labels: ["Person", "Movie"], + relationshipTypes: ["ACTED_IN"], + nodeProperties: { Person: [{ name: "name", type: "String" }] }, + relProperties: {}, +}; + +const pgSchema: DatabaseSchema = { + type: "postgresql", + tables: [ + { + name: "users", + columns: [{ name: "id", type: "integer", nullable: false }], + }, + ], +}; + describe("useSchemaStore", () => { beforeEach(() => { - // Reset schemas to empty useSchemaStore.setState({ schemas: {} }); }); @@ -12,15 +30,13 @@ describe("useSchemaStore", () => { }); it("setSchema stores schema for a connection", () => { - const schema = { labels: ["Person"], relationshipTypes: ["KNOWS"] }; - useSchemaStore.getState().setSchema("conn-1", schema); - expect(useSchemaStore.getState().schemas["conn-1"]).toEqual(schema); + useSchemaStore.getState().setSchema("conn-1", neo4jSchema); + expect(useSchemaStore.getState().schemas["conn-1"]).toEqual(neo4jSchema); }); it("getSchema returns the stored schema", () => { - const schema = { tables: ["users", "orders"] }; - useSchemaStore.getState().setSchema("conn-2", schema); - expect(useSchemaStore.getState().getSchema("conn-2")).toEqual(schema); + useSchemaStore.getState().setSchema("conn-2", pgSchema); + expect(useSchemaStore.getState().getSchema("conn-2")).toEqual(pgSchema); }); it("getSchema returns undefined for unknown connection", () => { @@ -28,15 +44,36 @@ describe("useSchemaStore", () => { }); it("setSchema overwrites existing schema", () => { - useSchemaStore.getState().setSchema("conn-1", { v: 1 }); - useSchemaStore.getState().setSchema("conn-1", { v: 2 }); - expect(useSchemaStore.getState().getSchema("conn-1")).toEqual({ v: 2 }); + useSchemaStore.getState().setSchema("conn-1", neo4jSchema); + useSchemaStore.getState().setSchema("conn-1", pgSchema); + expect(useSchemaStore.getState().getSchema("conn-1")).toEqual(pgSchema); }); it("stores multiple schemas independently", () => { - useSchemaStore.getState().setSchema("conn-1", { a: 1 }); - useSchemaStore.getState().setSchema("conn-2", { b: 2 }); - expect(useSchemaStore.getState().getSchema("conn-1")).toEqual({ a: 1 }); - expect(useSchemaStore.getState().getSchema("conn-2")).toEqual({ b: 2 }); + useSchemaStore.getState().setSchema("conn-1", neo4jSchema); + useSchemaStore.getState().setSchema("conn-2", pgSchema); + expect(useSchemaStore.getState().getSchema("conn-1")).toEqual(neo4jSchema); + expect(useSchemaStore.getState().getSchema("conn-2")).toEqual(pgSchema); + }); + + it("clearSchema removes the entry for a connection", () => { + useSchemaStore.getState().setSchema("conn-1", neo4jSchema); + useSchemaStore.getState().clearSchema("conn-1"); + expect(useSchemaStore.getState().getSchema("conn-1")).toBeUndefined(); + }); + + it("clearSchema does not affect other connections", () => { + useSchemaStore.getState().setSchema("conn-1", neo4jSchema); + useSchemaStore.getState().setSchema("conn-2", pgSchema); + useSchemaStore.getState().clearSchema("conn-1"); + expect(useSchemaStore.getState().getSchema("conn-2")).toEqual(pgSchema); + }); + + it("clearSchema on unknown id is a no-op", () => { + useSchemaStore.getState().setSchema("conn-1", neo4jSchema); + expect(() => + useSchemaStore.getState().clearSchema("unknown"), + ).not.toThrow(); + expect(useSchemaStore.getState().getSchema("conn-1")).toEqual(neo4jSchema); }); }); diff --git a/app/src/stores/dashboard-store.ts b/app/src/stores/dashboard-store.ts index 4c9bd5f4..d7902896 100644 --- a/app/src/stores/dashboard-store.ts +++ b/app/src/stores/dashboard-store.ts @@ -8,6 +8,10 @@ import type { interface DashboardState { layout: DashboardLayoutV2; + savedLayout: DashboardLayoutV2 | null; + /** Tracks whether any mutation has occurred since the last save/load. + * Avoids O(n) JSON.stringify comparison on every check. */ + _dirty: boolean; activePageIndex: number; editMode: boolean; @@ -16,6 +20,10 @@ interface DashboardState { setEditMode: (editMode: boolean) => void; reset: () => void; + // Unsaved changes tracking + hasUnsavedChanges: () => boolean; + markSaved: () => void; + // Page management setActivePage: (index: number) => void; addPage: () => void; @@ -51,14 +59,30 @@ function updatePage( return pages.map((p, i) => (i === index ? updater(p) : p)); } -export const useDashboardStore = create((set) => ({ +function withActivePage( + state: DashboardState, + updater: (p: DashboardPage) => DashboardPage, +) { + return { + layout: { + ...state.layout, + pages: updatePage(state.layout.pages, state.activePageIndex, updater), + }, + }; +} + +export const useDashboardStore = create((set, get) => ({ layout: emptyLayout, + savedLayout: null, + _dirty: false, activePageIndex: 0, editMode: false, setLayout: (layout, initialPageIndex = 0) => set({ layout, + savedLayout: JSON.parse(JSON.stringify(layout)) as DashboardLayoutV2, + _dirty: false, activePageIndex: Math.min( isNaN(initialPageIndex) ? 0 : initialPageIndex, layout.pages.length - 1 @@ -66,7 +90,21 @@ export const useDashboardStore = create((set) => ({ }), setEditMode: (editMode) => set({ editMode }), reset: () => - set({ layout: emptyLayout, activePageIndex: 0, editMode: false }), + set({ layout: emptyLayout, savedLayout: null, _dirty: false, activePageIndex: 0, editMode: false }), + + // Unsaved changes tracking — uses dirty flag for O(1) checks + hasUnsavedChanges: () => { + const { savedLayout, _dirty } = get(); + if (savedLayout === null) return false; + return _dirty; + }, + markSaved: () => + set((state) => ({ + savedLayout: JSON.parse( + JSON.stringify(state.layout) + ) as DashboardLayoutV2, + _dirty: false, + })), // ── Page management ────────────────────────────────────────────── @@ -84,6 +122,7 @@ export const useDashboardStore = create((set) => ({ return { layout: { ...state.layout, pages: [...state.layout.pages, newPage] }, activePageIndex: state.layout.pages.length, + _dirty: true, }; }), @@ -95,7 +134,7 @@ export const useDashboardStore = create((set) => ({ state.activePageIndex, pages.length - 1 ); - return { layout: { ...state.layout, pages }, activePageIndex }; + return { layout: { ...state.layout, pages }, activePageIndex, _dirty: true }; }), renamePage: (index, title) => @@ -107,6 +146,7 @@ export const useDashboardStore = create((set) => ({ title, })), }, + _dirty: true, })), reorderPages: (fromIndex, toIndex) => @@ -138,75 +178,54 @@ export const useDashboardStore = create((set) => ({ ) { newActive = state.activePageIndex + 1; } - return { layout: { ...state.layout, pages }, activePageIndex: newActive }; + return { layout: { ...state.layout, pages }, activePageIndex: newActive, _dirty: true }; }), // ── Widget management (active page) ────────────────────────────── addWidget: (widget, gridItem) => - set((state) => { - const idx = state.activePageIndex; - return { - layout: { - ...state.layout, - pages: updatePage(state.layout.pages, idx, (p) => ({ - ...p, - widgets: [...p.widgets, widget], - gridLayout: [...p.gridLayout, gridItem], - })), - }, - }; - }), + set((state) => ({ + ...withActivePage(state, (p) => ({ + ...p, + widgets: [...p.widgets, widget], + gridLayout: [...p.gridLayout, gridItem], + })), + _dirty: true, + })), removeWidget: (widgetId) => - set((state) => { - const idx = state.activePageIndex; - return { - layout: { - ...state.layout, - pages: updatePage(state.layout.pages, idx, (p) => ({ - ...p, - widgets: p.widgets.filter((w) => w.id !== widgetId), - gridLayout: p.gridLayout.filter((g) => g.i !== widgetId), - })), - }, - }; - }), + set((state) => ({ + ...withActivePage(state, (p) => ({ + ...p, + widgets: p.widgets.filter((w) => w.id !== widgetId), + gridLayout: p.gridLayout.filter((g) => g.i !== widgetId), + })), + _dirty: true, + })), updateWidget: (widgetId, updates) => - set((state) => { - const idx = state.activePageIndex; - return { - layout: { - ...state.layout, - pages: updatePage(state.layout.pages, idx, (p) => ({ - ...p, - widgets: p.widgets.map((w) => - w.id === widgetId ? { ...w, ...updates } : w - ), - })), - }, - }; - }), + set((state) => ({ + ...withActivePage(state, (p) => ({ + ...p, + widgets: p.widgets.map((w) => + w.id === widgetId ? { ...w, ...updates } : w, + ), + })), + _dirty: true, + })), updateGridLayout: (gridLayout) => - set((state) => { - const idx = state.activePageIndex; - return { - layout: { - ...state.layout, - pages: updatePage(state.layout.pages, idx, (p) => ({ - ...p, - gridLayout, - })), - }, - }; - }), + set((state) => ({ + ...withActivePage(state, (p) => ({ + ...p, + gridLayout, + })), + _dirty: true, + })), duplicateWidget: (widgetId) => set((state) => { - const idx = state.activePageIndex; - const page = state.layout.pages[idx]; + const page = state.layout.pages[state.activePageIndex]; const source = page.widgets.find((w) => w.id === widgetId); const sourceGrid = page.gridLayout.find((g) => g.i === widgetId); if (!source || !sourceGrid) return state; @@ -223,24 +242,20 @@ export const useDashboardStore = create((set) => ({ : undefined, }, }; - // Place the clone at the next available slot using grid gravity - // (same strategy as addWidget) instead of x+1/y+1 which causes overlap. const clonedGrid: GridLayoutItem = { ...sourceGrid, i: newId, x: (page.gridLayout.length * sourceGrid.w) % 12, - y: Infinity, // react-grid-layout compacts to the first available slot + y: Infinity, }; return { - layout: { - ...state.layout, - pages: updatePage(state.layout.pages, idx, (p) => ({ - ...p, - widgets: [...p.widgets, clonedWidget], - gridLayout: [...p.gridLayout, clonedGrid], - })), - }, + ...withActivePage(state, (p) => ({ + ...p, + widgets: [...p.widgets, clonedWidget], + gridLayout: [...p.gridLayout, clonedGrid], + })), + _dirty: true, }; }), })); diff --git a/app/src/stores/parameter-store.ts b/app/src/stores/parameter-store.ts index 45b7ad74..fe0a50ba 100644 --- a/app/src/stores/parameter-store.ts +++ b/app/src/stores/parameter-store.ts @@ -95,11 +95,17 @@ export const useParameterStore = create((set, get) => ({ saveToDashboard: (dashboardId) => { const { parameters } = get(); - if (Object.keys(parameters).length > 0) { - localStorage.setItem( - `${STORAGE_PREFIX}${dashboardId}`, - JSON.stringify(parameters) - ); + const key = `${STORAGE_PREFIX}${dashboardId}`; + try { + if (Object.keys(parameters).length > 0) { + localStorage.setItem(key, JSON.stringify(parameters)); + } else { + localStorage.removeItem(key); + } + } catch { + // localStorage may throw on quota exceeded (e.g. Safari Private Mode). + // Silently degrade — parameters will not persist across navigation. + console.warn("[parameter-store] Failed to save parameters to localStorage"); } }, @@ -118,12 +124,10 @@ export const useParameterStore = create((set, get) => ({ /** Returns just name→value for query substitution. */ export function useParameterValues(): Record { return useParameterStore( - useShallow((s) => { - const result: Record = {}; - for (const [name, entry] of Object.entries(s.parameters)) { - result[name] = entry.value; - } - return result; - }) + useShallow((s) => + Object.fromEntries( + Object.entries(s.parameters).map(([k, e]) => [k, e.value]), + ), + ), ); } diff --git a/app/src/stores/schema-store.ts b/app/src/stores/schema-store.ts index e42301a8..e89853e3 100644 --- a/app/src/stores/schema-store.ts +++ b/app/src/stores/schema-store.ts @@ -1,15 +1,11 @@ import { create } from "zustand"; - -// DatabaseSchema is intentionally typed as unknown here since the schema -// type is defined in the connection package and importing it would create -// a cross-package dependency. The hook layer handles the typed form. -// eslint-disable-next-line @typescript-eslint/no-explicit-any -type DatabaseSchema = Record; +import type { DatabaseSchema } from "@/lib/schema-types"; interface SchemaState { schemas: Record; // connectionId → schema setSchema: (connectionId: string, schema: DatabaseSchema) => void; getSchema: (connectionId: string) => DatabaseSchema | undefined; + clearSchema: (connectionId: string) => void; } export const useSchemaStore = create((set, get) => ({ @@ -21,4 +17,11 @@ export const useSchemaStore = create((set, get) => ({ })), getSchema: (connectionId) => get().schemas[connectionId], + + clearSchema: (connectionId) => + set((state) => { + const next = { ...state.schemas }; + delete next[connectionId]; + return { schemas: next }; + }), })); diff --git a/app/tsconfig.tsbuildinfo b/app/tsconfig.tsbuildinfo index 56d7e124..b6891c75 100644 --- a/app/tsconfig.tsbuildinfo +++ b/app/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./.next/types/routes.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/build/webpack/plugins/app-build-manifest-plugin.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/prefetch-rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/shared/lib/runtime-config.external.d.ts","./node_modules/next/config.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/root-params.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/drizzle-kit/index-baurj6ib.d.mts","./node_modules/drizzle-kit/index.d.mts","./drizzle.config.ts","./next.config.ts","./node_modules/playwright-core/types/protocol.d.ts","./node_modules/playwright-core/types/structs.d.ts","./node_modules/playwright-core/types/types.d.ts","./node_modules/playwright-core/index.d.ts","./node_modules/playwright/types/test.d.ts","./node_modules/playwright/test.d.ts","./node_modules/@playwright/test/index.d.ts","./node_modules/nextcov/dist/index.d.ts","./playwright.config.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/tailwindcss/types/generated/corepluginlist.d.ts","./node_modules/tailwindcss/types/generated/colors.d.ts","./node_modules/tailwindcss/types/config.d.ts","./node_modules/tailwindcss/types/index.d.ts","./node_modules/tailwindcss-animate/index.d.ts","./tailwind.config.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/display.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/@vitest/utils/dist/timers.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/runner/dist/tasks.d-c7uxawj9.d.ts","./node_modules/@vitest/utils/dist/types.d-bcelap-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/runner/dist/types.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/tinyrainbow/dist/index.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/vite/types/hmrpayload.d.ts","./node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","./node_modules/vite/types/customevent.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/rollup/dist/rollup.d.ts","./node_modules/rollup/dist/parseast.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/vite/node_modules/esbuild/lib/main.d.ts","./node_modules/vite/types/internal/terseroptions.d.ts","./node_modules/vite/types/internal/csspreprocessoroptions.d.ts","./node_modules/vite/types/internal/lightningcssoptions.d.ts","./node_modules/vite/types/importglob.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-dhdq1csl.d.ts","./node_modules/@vitest/snapshot/dist/rawsnapshot.d-lfsmjfud.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/vitest/dist/chunks/traces.d.402v_yfi.d.ts","./node_modules/vitest/dist/chunks/rpc.d.rh3apgef.d.ts","./node_modules/vitest/dist/chunks/config.d.cy95hicx.d.ts","./node_modules/vitest/dist/chunks/environment.d.crsxczp1.d.ts","./node_modules/vitest/dist/chunks/worker.d.dyxm8del.d.ts","./node_modules/vitest/dist/chunks/browser.d.chkacdzh.d.ts","./node_modules/@vitest/mocker/dist/types.d-b8cckmht.d.ts","./node_modules/@vitest/mocker/dist/index.d-c-slyzi-.d.ts","./node_modules/@vitest/mocker/dist/index.d.ts","./node_modules/@vitest/utils/dist/source-map.d.ts","./node_modules/vitest/dist/chunks/coverage.d.bztk59wp.d.ts","./node_modules/@vitest/utils/dist/serialize.d.ts","./node_modules/@vitest/utils/dist/error.d.ts","./node_modules/vitest/dist/browser.d.ts","./node_modules/vitest/browser/context.d.ts","./node_modules/vitest/optional-types.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.daahlpsq.d.ts","./node_modules/@vitest/snapshot/dist/manager.d.ts","./node_modules/vitest/dist/chunks/reporters.d.cwxni2jg.d.ts","./node_modules/vitest/dist/chunks/plugin.d.ctqpeehp.d.ts","./node_modules/vitest/dist/config.d.ts","./node_modules/vitest/config.d.ts","./node_modules/vite-tsconfig-paths/dist/index.d.ts","./vitest.config.ts","./node_modules/nextcov/dist/playwright/index.d.ts","./node_modules/dotenv/lib/main.d.ts","./e2e/pages/auth.ts","./e2e/pages/sidebar.ts","./e2e/fixtures.ts","./e2e/api-docs.spec.ts","./e2e/auth-states.spec.ts","./e2e/auth.spec.ts","./e2e/auto-refresh.spec.ts","./e2e/charts.spec.ts","./e2e/connections.spec.ts","./e2e/dashboard-portability.spec.ts","./e2e/dashboard-states.spec.ts","./e2e/dashboard-visibility.spec.ts","./e2e/dashboards.spec.ts","./e2e/empty-states.spec.ts","./e2e/form-widget.spec.ts","./node_modules/testcontainers/build/common/file-lock.d.ts","./node_modules/testcontainers/build/common/hash.d.ts","./node_modules/testcontainers/build/common/logger.d.ts","./node_modules/testcontainers/build/common/clock.d.ts","./node_modules/testcontainers/build/common/retry.d.ts","./node_modules/testcontainers/build/common/streams.d.ts","./node_modules/testcontainers/build/common/time.d.ts","./node_modules/testcontainers/build/common/type-guards.d.ts","./node_modules/testcontainers/build/common/uuid.d.ts","./node_modules/testcontainers/build/common/index.d.ts","./node_modules/testcontainers/build/container-runtime/auth/types.d.ts","./node_modules/testcontainers/build/container-runtime/auth/get-auth-config.d.ts","./node_modules/testcontainers/build/container-runtime/clients/compose/types.d.ts","./node_modules/testcontainers/build/container-runtime/clients/compose/compose-client.d.ts","./node_modules/@types/ssh2/index.d.ts","./node_modules/@types/docker-modem/index.d.ts","./node_modules/@types/dockerode/index.d.ts","./node_modules/testcontainers/build/container-runtime/clients/container/types.d.ts","./node_modules/testcontainers/build/types.d.ts","./node_modules/testcontainers/build/container-runtime/clients/container/container-client.d.ts","./node_modules/testcontainers/build/container-runtime/image-name.d.ts","./node_modules/testcontainers/build/container-runtime/clients/image/image-client.d.ts","./node_modules/testcontainers/build/container-runtime/clients/network/network-client.d.ts","./node_modules/testcontainers/build/container-runtime/clients/types.d.ts","./node_modules/testcontainers/build/container-runtime/clients/client.d.ts","./node_modules/testcontainers/build/container-runtime/clients/compose/parse-compose-container-name.d.ts","./node_modules/testcontainers/build/container-runtime/index.d.ts","./node_modules/testcontainers/build/utils/pull-policy.d.ts","./node_modules/testcontainers/build/utils/port.d.ts","./node_modules/testcontainers/build/utils/bound-ports.d.ts","./node_modules/testcontainers/build/wait-strategies/wait-strategy.d.ts","./node_modules/testcontainers/build/network/network.d.ts","./node_modules/testcontainers/build/test-container.d.ts","./node_modules/testcontainers/build/generic-container/started-generic-container.d.ts","./node_modules/testcontainers/build/docker-compose-environment/downed-docker-compose-environment.d.ts","./node_modules/testcontainers/build/docker-compose-environment/stopped-docker-compose-environment.d.ts","./node_modules/testcontainers/build/docker-compose-environment/started-docker-compose-environment.d.ts","./node_modules/testcontainers/build/docker-compose-environment/docker-compose-environment.d.ts","./node_modules/testcontainers/build/generic-container/abstract-started-container.d.ts","./node_modules/testcontainers/build/generic-container/abstract-stopped-container.d.ts","./node_modules/testcontainers/build/generic-container/generic-container-builder.d.ts","./node_modules/testcontainers/build/generic-container/generic-container.d.ts","./node_modules/testcontainers/build/reaper/reaper.d.ts","./node_modules/testcontainers/build/socat/socat-container.d.ts","./node_modules/testcontainers/build/test-containers.d.ts","./node_modules/testcontainers/build/utils/labels.d.ts","./node_modules/testcontainers/build/utils/port-generator.d.ts","./node_modules/testcontainers/build/wait-strategies/http-wait-strategy.d.ts","./node_modules/testcontainers/build/wait-strategies/startup-check-strategy.d.ts","./node_modules/testcontainers/build/wait-strategies/composite-wait-strategy.d.ts","./node_modules/testcontainers/build/wait-strategies/log-wait-strategy.d.ts","./node_modules/testcontainers/build/wait-strategies/shell-wait-strategy.d.ts","./node_modules/testcontainers/build/wait-strategies/wait.d.ts","./node_modules/testcontainers/build/wait-strategies/wait-for-container.d.ts","./node_modules/testcontainers/build/index.d.ts","./node_modules/postgres/types/index.d.ts","./node_modules/drizzle-orm/entity.d.ts","./node_modules/drizzle-orm/migrator.d.ts","./node_modules/drizzle-orm/logger.d.ts","./node_modules/drizzle-orm/operations.d.ts","./node_modules/drizzle-orm/table.d.ts","./node_modules/drizzle-orm/utils.d.ts","./node_modules/drizzle-orm/casing.d.ts","./node_modules/drizzle-orm/subquery.d.ts","./node_modules/drizzle-orm/query-builders/select.types.d.ts","./node_modules/drizzle-orm/sql/sql.d.ts","./node_modules/drizzle-orm/column.d.ts","./node_modules/drizzle-orm/mysql-core/checks.d.ts","./node_modules/drizzle-orm/mysql-core/columns/binary.d.ts","./node_modules/drizzle-orm/mysql-core/columns/boolean.d.ts","./node_modules/drizzle-orm/mysql-core/columns/char.d.ts","./node_modules/drizzle-orm/mysql-core/columns/custom.d.ts","./node_modules/drizzle-orm/mysql-core/columns/date.d.ts","./node_modules/drizzle-orm/mysql-core/columns/datetime.d.ts","./node_modules/drizzle-orm/mysql-core/columns/decimal.d.ts","./node_modules/drizzle-orm/mysql-core/columns/double.d.ts","./node_modules/drizzle-orm/mysql-core/columns/enum.d.ts","./node_modules/drizzle-orm/mysql-core/columns/float.d.ts","./node_modules/drizzle-orm/mysql-core/columns/int.d.ts","./node_modules/drizzle-orm/mysql-core/columns/json.d.ts","./node_modules/drizzle-orm/mysql-core/columns/mediumint.d.ts","./node_modules/drizzle-orm/mysql-core/columns/real.d.ts","./node_modules/drizzle-orm/mysql-core/columns/serial.d.ts","./node_modules/drizzle-orm/mysql-core/columns/smallint.d.ts","./node_modules/drizzle-orm/mysql-core/columns/text.d.ts","./node_modules/drizzle-orm/mysql-core/columns/time.d.ts","./node_modules/drizzle-orm/mysql-core/columns/date.common.d.ts","./node_modules/drizzle-orm/mysql-core/columns/timestamp.d.ts","./node_modules/drizzle-orm/mysql-core/columns/tinyint.d.ts","./node_modules/drizzle-orm/mysql-core/columns/varbinary.d.ts","./node_modules/drizzle-orm/mysql-core/columns/varchar.d.ts","./node_modules/drizzle-orm/mysql-core/columns/year.d.ts","./node_modules/drizzle-orm/mysql-core/columns/all.d.ts","./node_modules/drizzle-orm/mysql-core/indexes.d.ts","./node_modules/drizzle-orm/mysql-core/primary-keys.d.ts","./node_modules/drizzle-orm/mysql-core/unique-constraint.d.ts","./node_modules/drizzle-orm/mysql-core/table.d.ts","./node_modules/drizzle-orm/mysql-core/foreign-keys.d.ts","./node_modules/drizzle-orm/mysql-core/columns/common.d.ts","./node_modules/drizzle-orm/mysql-core/columns/bigint.d.ts","./node_modules/drizzle-orm/mysql-core/columns/index.d.ts","./node_modules/drizzle-orm/sql/expressions/conditions.d.ts","./node_modules/drizzle-orm/sql/expressions/select.d.ts","./node_modules/drizzle-orm/sql/expressions/index.d.ts","./node_modules/drizzle-orm/sql/functions/aggregate.d.ts","./node_modules/drizzle-orm/sql/functions/vector.d.ts","./node_modules/drizzle-orm/sql/functions/index.d.ts","./node_modules/drizzle-orm/sql/index.d.ts","./node_modules/drizzle-orm/query-builders/query-builder.d.ts","./node_modules/drizzle-orm/expressions.d.ts","./node_modules/drizzle-orm/relations.d.ts","./node_modules/drizzle-orm/query-promise.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/delete.d.ts","./node_modules/drizzle-orm/runnable-query.d.ts","./node_modules/drizzle-orm/mysql-core/subquery.d.ts","./node_modules/drizzle-orm/mysql-core/view-base.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/select.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/query-builder.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/update.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/insert.d.ts","./node_modules/drizzle-orm/mysql-core/dialect.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/count.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/index.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/query.d.ts","./node_modules/drizzle-orm/mysql-core/db.d.ts","./node_modules/drizzle-orm/mysql-core/session.d.ts","./node_modules/drizzle-orm/mysql-core/view-common.d.ts","./node_modules/drizzle-orm/mysql-core/view.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/select.types.d.ts","./node_modules/drizzle-orm/mysql-core/alias.d.ts","./node_modules/drizzle-orm/mysql-core/schema.d.ts","./node_modules/drizzle-orm/alias.d.ts","./node_modules/drizzle-orm/errors.d.ts","./node_modules/drizzle-orm/view-common.d.ts","./node_modules/drizzle-orm/index.d.ts","./node_modules/drizzle-orm/mysql-core/utils.d.ts","./node_modules/drizzle-orm/mysql-core/index.d.ts","./node_modules/drizzle-orm/pg-core/checks.d.ts","./node_modules/drizzle-orm/pg-core/foreign-keys.d.ts","./node_modules/drizzle-orm/pg-core/indexes.d.ts","./node_modules/drizzle-orm/pg-core/columns/common.d.ts","./node_modules/drizzle-orm/pg-core/columns/bigserial.d.ts","./node_modules/drizzle-orm/pg-core/columns/boolean.d.ts","./node_modules/drizzle-orm/pg-core/columns/char.d.ts","./node_modules/drizzle-orm/pg-core/columns/cidr.d.ts","./node_modules/drizzle-orm/pg-core/columns/custom.d.ts","./node_modules/drizzle-orm/pg-core/columns/date.common.d.ts","./node_modules/drizzle-orm/pg-core/columns/date.d.ts","./node_modules/drizzle-orm/pg-core/columns/double-precision.d.ts","./node_modules/drizzle-orm/pg-core/columns/inet.d.ts","./node_modules/drizzle-orm/pg-core/sequence.d.ts","./node_modules/drizzle-orm/pg-core/columns/int.common.d.ts","./node_modules/drizzle-orm/pg-core/columns/integer.d.ts","./node_modules/drizzle-orm/pg-core/columns/timestamp.d.ts","./node_modules/drizzle-orm/pg-core/columns/interval.d.ts","./node_modules/drizzle-orm/pg-core/columns/json.d.ts","./node_modules/drizzle-orm/pg-core/columns/jsonb.d.ts","./node_modules/drizzle-orm/pg-core/columns/line.d.ts","./node_modules/drizzle-orm/pg-core/columns/macaddr.d.ts","./node_modules/drizzle-orm/pg-core/columns/macaddr8.d.ts","./node_modules/drizzle-orm/pg-core/columns/numeric.d.ts","./node_modules/drizzle-orm/pg-core/columns/point.d.ts","./node_modules/drizzle-orm/pg-core/columns/postgis_extension/geometry.d.ts","./node_modules/drizzle-orm/pg-core/columns/real.d.ts","./node_modules/drizzle-orm/pg-core/columns/serial.d.ts","./node_modules/drizzle-orm/pg-core/columns/smallint.d.ts","./node_modules/drizzle-orm/pg-core/columns/smallserial.d.ts","./node_modules/drizzle-orm/pg-core/columns/text.d.ts","./node_modules/drizzle-orm/pg-core/columns/time.d.ts","./node_modules/drizzle-orm/pg-core/columns/uuid.d.ts","./node_modules/drizzle-orm/pg-core/columns/varchar.d.ts","./node_modules/drizzle-orm/pg-core/columns/vector_extension/bit.d.ts","./node_modules/drizzle-orm/pg-core/columns/vector_extension/halfvec.d.ts","./node_modules/drizzle-orm/pg-core/columns/vector_extension/sparsevec.d.ts","./node_modules/drizzle-orm/pg-core/columns/vector_extension/vector.d.ts","./node_modules/drizzle-orm/pg-core/columns/all.d.ts","./node_modules/drizzle-orm/pg-core/roles.d.ts","./node_modules/drizzle-orm/pg-core/policies.d.ts","./node_modules/drizzle-orm/pg-core/primary-keys.d.ts","./node_modules/drizzle-orm/pg-core/unique-constraint.d.ts","./node_modules/drizzle-orm/pg-core/table.d.ts","./node_modules/drizzle-orm/pg-core/view-base.d.ts","./node_modules/drizzle-orm/pg-core/subquery.d.ts","./node_modules/drizzle-orm/session.d.ts","./node_modules/drizzle-orm/pg-core/session.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/select.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/query-builder.d.ts","./node_modules/drizzle-orm/pg-core/view-common.d.ts","./node_modules/drizzle-orm/pg-core/view.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/select.types.d.ts","./node_modules/drizzle-orm/pg-core/alias.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/delete.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/update.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/insert.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/refresh-materialized-view.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/index.d.ts","./node_modules/drizzle-orm/pg-core/columns/enum.d.ts","./node_modules/drizzle-orm/pg-core/schema.d.ts","./node_modules/drizzle-orm/pg-core/utils.d.ts","./node_modules/drizzle-orm/pg-core/utils/array.d.ts","./node_modules/drizzle-orm/pg-core/utils/index.d.ts","./node_modules/drizzle-orm/pg-core/index.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/binary.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/boolean.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/char.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/custom.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/date.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/datetime.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/decimal.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/double.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/enum.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/float.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/int.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/json.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/mediumint.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/real.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/serial.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/smallint.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/text.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/time.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/date.common.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/timestamp.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/tinyint.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/varbinary.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/varchar.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/vector.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/year.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/all.d.ts","./node_modules/drizzle-orm/singlestore-core/indexes.d.ts","./node_modules/drizzle-orm/singlestore-core/primary-keys.d.ts","./node_modules/drizzle-orm/singlestore-core/unique-constraint.d.ts","./node_modules/drizzle-orm/singlestore-core/table.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/common.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/bigint.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/index.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/delete.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/update.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/insert.d.ts","./node_modules/drizzle-orm/singlestore-core/dialect.d.ts","./node_modules/drizzle-orm/singlestore/session.d.ts","./node_modules/drizzle-orm/singlestore/driver.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/count.d.ts","./node_modules/drizzle-orm/singlestore-core/subquery.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/select.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/query-builder.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/index.d.ts","./node_modules/drizzle-orm/singlestore-core/db.d.ts","./node_modules/drizzle-orm/singlestore-core/session.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/select.types.d.ts","./node_modules/drizzle-orm/singlestore-core/alias.d.ts","./node_modules/drizzle-orm/singlestore-core/schema.d.ts","./node_modules/drizzle-orm/singlestore-core/utils.d.ts","./node_modules/drizzle-orm/singlestore-core/index.d.ts","./node_modules/drizzle-orm/sqlite-core/checks.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/custom.d.ts","./node_modules/drizzle-orm/sqlite-core/indexes.d.ts","./node_modules/drizzle-orm/sqlite-core/primary-keys.d.ts","./node_modules/drizzle-orm/sqlite-core/unique-constraint.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/count.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/query.d.ts","./node_modules/drizzle-orm/sqlite-core/subquery.d.ts","./node_modules/drizzle-orm/sqlite-core/view-base.d.ts","./node_modules/drizzle-orm/sqlite-core/db.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/raw.d.ts","./node_modules/drizzle-orm/sqlite-core/session.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/delete.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/update.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/insert.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/select.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/index.d.ts","./node_modules/drizzle-orm/sqlite-core/dialect.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.d.ts","./node_modules/drizzle-orm/sqlite-core/view.d.ts","./node_modules/drizzle-orm/sqlite-core/utils.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/integer.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/numeric.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/real.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/text.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/all.d.ts","./node_modules/drizzle-orm/sqlite-core/table.d.ts","./node_modules/drizzle-orm/sqlite-core/foreign-keys.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/common.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/blob.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/index.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/select.types.d.ts","./node_modules/drizzle-orm/sqlite-core/alias.d.ts","./node_modules/drizzle-orm/sqlite-core/index.d.ts","./node_modules/drizzle-orm/column-builder.d.ts","./node_modules/drizzle-orm/pg-core/columns/bigint.d.ts","./node_modules/drizzle-orm/pg-core/columns/index.d.ts","./node_modules/drizzle-orm/pg-core/dialect.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/count.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/query.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/raw.d.ts","./node_modules/drizzle-orm/pg-core/db.d.ts","./node_modules/drizzle-orm/postgres-js/session.d.ts","./node_modules/drizzle-orm/postgres-js/driver.d.ts","./node_modules/drizzle-orm/postgres-js/index.d.ts","./node_modules/drizzle-orm/postgres-js/migrator.d.ts","./e2e/global-setup.ts","./e2e/global-teardown.ts","./e2e/grid.spec.ts","./e2e/navigation.spec.ts","./e2e/parameters.spec.ts","./e2e/performance.spec.ts","./e2e/responsive.spec.ts","./e2e/sidebar-states.spec.ts","./e2e/styling-rules.spec.ts","./e2e/users.spec.ts","./e2e/widget-lab.spec.ts","./e2e/widget-states.spec.ts","./e2e/widgets.spec.ts","./node_modules/bcryptjs/types.d.ts","./node_modules/bcryptjs/index.d.ts","./node_modules/@auth/core/lib/vendored/cookie.d.ts","./node_modules/oauth4webapi/build/index.d.ts","./node_modules/@auth/core/lib/utils/cookie.d.ts","./node_modules/@auth/core/warnings.d.ts","./node_modules/@auth/core/lib/symbols.d.ts","./node_modules/@auth/core/lib/index.d.ts","./node_modules/@auth/core/lib/utils/env.d.ts","./node_modules/@auth/core/jwt.d.ts","./node_modules/@auth/core/lib/utils/actions.d.ts","./node_modules/@auth/core/index.d.ts","./node_modules/@auth/core/lib/utils/logger.d.ts","./node_modules/@auth/core/providers/webauthn.d.ts","./node_modules/@auth/core/lib/utils/webauthn-utils.d.ts","./node_modules/@auth/core/types.d.ts","./node_modules/preact/src/jsx.d.ts","./node_modules/preact/src/index.d.ts","./node_modules/@auth/core/providers/credentials.d.ts","./node_modules/@auth/core/providers/provider-types.d.ts","./node_modules/@auth/core/providers/nodemailer.d.ts","./node_modules/@auth/core/providers/email.d.ts","./node_modules/@auth/core/providers/oauth.d.ts","./node_modules/@auth/core/providers/index.d.ts","./node_modules/@auth/core/adapters.d.ts","./src/lib/db/schema.ts","./src/lib/db/index.ts","./src/lib/bootstrap.ts","./src/instrumentation.ts","./node_modules/next-auth/node_modules/@auth/core/lib/vendored/cookie.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/utils/cookie.d.ts","./node_modules/next-auth/node_modules/@auth/core/warnings.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/symbols.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/index.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/utils/env.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/credentials.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/provider-types.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/nodemailer.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/email.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/oauth.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/webauthn.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/index.d.ts","./node_modules/next-auth/node_modules/@auth/core/adapters.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/utils/actions.d.ts","./node_modules/next-auth/node_modules/@auth/core/index.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/utils/logger.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/utils/webauthn-utils.d.ts","./node_modules/next-auth/node_modules/@auth/core/types.d.ts","./node_modules/next-auth/node_modules/@auth/core/jwt.d.ts","./node_modules/next-auth/jwt.d.ts","./src/middleware.ts","./node_modules/vitest/dist/chunks/global.d.b15mdlcr.d.ts","./node_modules/vitest/dist/chunks/suite.d.bjwk38hb.d.ts","./node_modules/vitest/dist/chunks/evaluatedmodules.d.bxj5omdx.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./src/__tests__/instrumentation.test.ts","./src/__tests__/helpers/drizzle-mocks.ts","./src/__tests__/helpers/next-mocks.ts","./src/__tests__/helpers/request-helpers.ts","./node_modules/next-auth/lib/types.d.ts","./node_modules/next-auth/lib/index.d.ts","./node_modules/next-auth/node_modules/@auth/core/errors.d.ts","./node_modules/next-auth/index.d.ts","./node_modules/next-auth/providers/credentials.d.ts","./node_modules/@auth/drizzle-adapter/lib/mysql.d.ts","./node_modules/@auth/drizzle-adapter/lib/pg.d.ts","./node_modules/@auth/drizzle-adapter/lib/sqlite.d.ts","./node_modules/@auth/drizzle-adapter/lib/utils.d.ts","./node_modules/@auth/drizzle-adapter/index.d.ts","./node_modules/zod/v3/helpers/typealiases.d.cts","./node_modules/zod/v3/helpers/util.d.cts","./node_modules/zod/v3/index.d.cts","./node_modules/zod/v3/zoderror.d.cts","./node_modules/zod/v3/locales/en.d.cts","./node_modules/zod/v3/errors.d.cts","./node_modules/zod/v3/helpers/parseutil.d.cts","./node_modules/zod/v3/helpers/enumutil.d.cts","./node_modules/zod/v3/helpers/errorutil.d.cts","./node_modules/zod/v3/helpers/partialutil.d.cts","./node_modules/zod/v3/standard-schema.d.cts","./node_modules/zod/v3/types.d.cts","./node_modules/zod/v3/external.d.cts","./node_modules/zod/index.d.cts","./src/lib/auth/config.ts","./src/app/api/auth/[...nextauth]/route.ts","./src/lib/auth/signup.ts","./src/app/api/auth/bootstrap-status/route.ts","./src/app/api/auth/bootstrap-status/__tests__/route.test.ts","./src/lib/auth/session.ts","./src/lib/crypto.ts","./src/lib/query-params.ts","./src/lib/query-executor.ts","./src/lib/schema-prefetch.ts","./src/lib/schemas.ts","./src/lib/api-utils.ts","./src/app/api/connections/route.ts","./src/app/api/connections/[id]/route.ts","./src/app/api/connections/[id]/__tests__/route.test.ts","./src/app/api/connections/[id]/schema/route.ts","./src/app/api/connections/[id]/schema/__tests__/route.test.ts","./src/app/api/connections/[id]/test/route.ts","./src/app/api/connections/[id]/test/__tests__/route.test.ts","./src/app/api/connections/__tests__/route.test.ts","./src/app/api/connections/test-inline/route.ts","./src/app/api/connections/test-inline/__tests__/route.test.ts","./src/app/api/dashboards/route.ts","./src/app/api/dashboards/[id]/route.ts","./src/app/api/dashboards/[id]/__tests__/route.test.ts","./src/app/api/dashboards/[id]/duplicate/route.ts","./src/app/api/dashboards/[id]/duplicate/__tests__/route.test.ts","./src/lib/dashboard-export.ts","./src/app/api/dashboards/[id]/export/route.ts","./src/app/api/dashboards/[id]/export/__tests__/route.test.ts","./src/app/api/dashboards/[id]/share/route.ts","./src/app/api/dashboards/[id]/share/__tests__/route.test.ts","./src/app/api/dashboards/__tests__/route.test.ts","./src/lib/dashboard-import.ts","./src/lib/neodash-converter.ts","./src/app/api/dashboards/import/route.ts","./src/app/api/dashboards/import/__tests__/route.test.ts","./src/app/api/docs/route.ts","./src/app/api/docs/__tests__/route.test.ts","./src/lib/openapi-spec.ts","./src/app/api/openapi.json/route.ts","./src/app/api/openapi.json/__tests__/route.test.ts","./src/lib/query-hash.ts","./src/app/api/query/route.ts","./src/app/api/query/__tests__/route.test.ts","./src/app/api/query/write/route.ts","./src/app/api/query/write/__tests__/route.test.ts","./src/app/api/users/route.ts","./src/app/api/users/[id]/route.ts","./src/app/api/users/[id]/__tests__/route.test.ts","./src/app/api/users/__tests__/route.test.ts","./src/app/api/widget-templates/shared.ts","./src/app/api/widget-templates/route.ts","./src/app/api/widget-templates/[id]/route.ts","./src/app/api/widget-templates/[id]/__tests__/route.test.ts","./src/app/api/widget-templates/__tests__/route.test.ts","../component/node_modules/@types/react/global.d.ts","../component/node_modules/csstype/index.d.ts","../component/node_modules/@types/react/index.d.ts","../component/node_modules/@radix-ui/react-slot/dist/index.d.mts","../component/node_modules/clsx/clsx.d.mts","../component/node_modules/class-variance-authority/dist/types.d.ts","../component/node_modules/class-variance-authority/dist/index.d.ts","../component/node_modules/tailwind-merge/dist/types.d.ts","../component/src/lib/utils.ts","../component/src/components/ui/button.tsx","../component/src/components/ui/input.tsx","../component/node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive/dist/index.d.mts","../component/node_modules/@radix-ui/react-label/dist/index.d.mts","../component/src/components/ui/label.tsx","../component/src/components/ui/card.tsx","../component/src/components/ui/badge.tsx","../component/node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context/dist/index.d.mts","../component/node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive/dist/index.d.mts","../component/node_modules/@radix-ui/react-avatar/dist/index.d.mts","../component/src/components/ui/avatar.tsx","../component/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.mts","../component/node_modules/@radix-ui/react-separator/dist/index.d.mts","../component/src/components/ui/separator.tsx","../component/src/components/ui/skeleton.tsx","../component/node_modules/react-hook-form/dist/constants.d.ts","../component/node_modules/react-hook-form/dist/utils/createsubject.d.ts","../component/node_modules/react-hook-form/dist/types/events.d.ts","../component/node_modules/react-hook-form/dist/types/path/common.d.ts","../component/node_modules/react-hook-form/dist/types/path/eager.d.ts","../component/node_modules/react-hook-form/dist/types/path/index.d.ts","../component/node_modules/react-hook-form/dist/types/fieldarray.d.ts","../component/node_modules/react-hook-form/dist/types/resolvers.d.ts","../component/node_modules/react-hook-form/dist/types/form.d.ts","../component/node_modules/react-hook-form/dist/types/utils.d.ts","../component/node_modules/react-hook-form/dist/types/fields.d.ts","../component/node_modules/react-hook-form/dist/types/errors.d.ts","../component/node_modules/react-hook-form/dist/types/validator.d.ts","../component/node_modules/react-hook-form/dist/types/controller.d.ts","../component/node_modules/react-hook-form/dist/types/watch.d.ts","../component/node_modules/react-hook-form/dist/types/index.d.ts","../component/node_modules/react-hook-form/dist/controller.d.ts","../component/node_modules/react-hook-form/dist/form.d.ts","../component/node_modules/react-hook-form/dist/formstatesubscribe.d.ts","../component/node_modules/react-hook-form/dist/logic/appenderrors.d.ts","../component/node_modules/react-hook-form/dist/logic/createformcontrol.d.ts","../component/node_modules/react-hook-form/dist/logic/index.d.ts","../component/node_modules/react-hook-form/dist/usecontroller.d.ts","../component/node_modules/react-hook-form/dist/usefieldarray.d.ts","../component/node_modules/react-hook-form/dist/useform.d.ts","../component/node_modules/react-hook-form/dist/useformcontext.d.ts","../component/node_modules/react-hook-form/dist/useformstate.d.ts","../component/node_modules/react-hook-form/dist/usewatch.d.ts","../component/node_modules/react-hook-form/dist/utils/get.d.ts","../component/node_modules/react-hook-form/dist/utils/set.d.ts","../component/node_modules/react-hook-form/dist/utils/index.d.ts","../component/node_modules/react-hook-form/dist/watch.d.ts","../component/node_modules/react-hook-form/dist/index.d.ts","../component/src/components/ui/form.tsx","../component/node_modules/@radix-ui/react-context/dist/index.d.mts","../component/node_modules/@radix-ui/react-primitive/dist/index.d.mts","../component/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts","../component/node_modules/@radix-ui/react-focus-scope/dist/index.d.mts","../component/node_modules/@radix-ui/react-arrow/dist/index.d.mts","../component/node_modules/@radix-ui/rect/dist/index.d.mts","../component/node_modules/@radix-ui/react-popper/dist/index.d.mts","../component/node_modules/@radix-ui/react-portal/dist/index.d.mts","../component/node_modules/@radix-ui/react-select/dist/index.d.mts","../component/node_modules/lucide-react/dist/lucide-react.d.ts","../component/src/components/ui/select.tsx","../component/node_modules/@types/react/jsx-runtime.d.ts","../component/node_modules/@radix-ui/react-checkbox/dist/index.d.mts","../component/src/components/ui/checkbox.tsx","../component/node_modules/@radix-ui/react-roving-focus/dist/index.d.mts","../component/node_modules/@radix-ui/react-radio-group/dist/index.d.mts","../component/src/components/ui/radio-group.tsx","../component/node_modules/@radix-ui/react-switch/dist/index.d.mts","../component/src/components/ui/switch.tsx","../component/src/components/ui/textarea.tsx","../component/node_modules/@radix-ui/react-slider/dist/index.d.mts","../component/src/components/ui/slider.tsx","../component/node_modules/@radix-ui/react-dialog/dist/index.d.mts","../component/src/components/ui/dialog.tsx","../component/node_modules/@radix-ui/react-alert-dialog/dist/index.d.mts","../component/src/components/ui/alert-dialog.tsx","../component/node_modules/@radix-ui/react-menu/dist/index.d.mts","../component/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.mts","../component/src/components/ui/dropdown-menu.tsx","../component/node_modules/@radix-ui/react-popover/dist/index.d.mts","../component/src/components/ui/popover.tsx","../component/node_modules/@radix-ui/react-tooltip/dist/index.d.mts","../component/src/components/ui/tooltip.tsx","../component/node_modules/@radix-ui/react-toast/dist/index.d.mts","../component/src/components/ui/toast.tsx","../component/src/hooks/use-toast.ts","../component/src/components/ui/toaster.tsx","../component/src/components/ui/alert.tsx","../component/node_modules/@radix-ui/react-tabs/dist/index.d.mts","../component/src/components/ui/tabs.tsx","../component/node_modules/@radix-ui/react-collapsible/dist/index.d.mts","../component/node_modules/@radix-ui/react-accordion/dist/index.d.mts","../component/src/components/ui/accordion.tsx","../component/node_modules/@radix-ui/react-visually-hidden/dist/index.d.mts","../component/node_modules/@radix-ui/react-navigation-menu/dist/index.d.mts","../component/src/components/ui/navigation-menu.tsx","../component/src/components/ui/breadcrumb.tsx","../component/src/components/ui/pagination.tsx","../component/src/components/ui/sheet.tsx","../component/src/components/ui/table.tsx","../component/node_modules/@date-fns/tz/constants/index.d.ts","../component/node_modules/@date-fns/tz/date/index.d.ts","../component/node_modules/@date-fns/tz/date/mini.d.ts","../component/node_modules/@date-fns/tz/tz/index.d.ts","../component/node_modules/@date-fns/tz/tzoffset/index.d.ts","../component/node_modules/@date-fns/tz/tzscan/index.d.ts","../component/node_modules/@date-fns/tz/tzname/index.d.ts","../component/node_modules/@date-fns/tz/index.d.ts","../component/node_modules/date-fns/constants.d.ts","../component/node_modules/date-fns/locale/types.d.ts","../component/node_modules/date-fns/fp/types.d.ts","../component/node_modules/date-fns/types.d.ts","../component/node_modules/date-fns/add.d.ts","../component/node_modules/date-fns/addbusinessdays.d.ts","../component/node_modules/date-fns/adddays.d.ts","../component/node_modules/date-fns/addhours.d.ts","../component/node_modules/date-fns/addisoweekyears.d.ts","../component/node_modules/date-fns/addmilliseconds.d.ts","../component/node_modules/date-fns/addminutes.d.ts","../component/node_modules/date-fns/addmonths.d.ts","../component/node_modules/date-fns/addquarters.d.ts","../component/node_modules/date-fns/addseconds.d.ts","../component/node_modules/date-fns/addweeks.d.ts","../component/node_modules/date-fns/addyears.d.ts","../component/node_modules/date-fns/areintervalsoverlapping.d.ts","../component/node_modules/date-fns/clamp.d.ts","../component/node_modules/date-fns/closestindexto.d.ts","../component/node_modules/date-fns/closestto.d.ts","../component/node_modules/date-fns/compareasc.d.ts","../component/node_modules/date-fns/comparedesc.d.ts","../component/node_modules/date-fns/constructfrom.d.ts","../component/node_modules/date-fns/constructnow.d.ts","../component/node_modules/date-fns/daystoweeks.d.ts","../component/node_modules/date-fns/differenceinbusinessdays.d.ts","../component/node_modules/date-fns/differenceincalendardays.d.ts","../component/node_modules/date-fns/differenceincalendarisoweekyears.d.ts","../component/node_modules/date-fns/differenceincalendarisoweeks.d.ts","../component/node_modules/date-fns/differenceincalendarmonths.d.ts","../component/node_modules/date-fns/differenceincalendarquarters.d.ts","../component/node_modules/date-fns/differenceincalendarweeks.d.ts","../component/node_modules/date-fns/differenceincalendaryears.d.ts","../component/node_modules/date-fns/differenceindays.d.ts","../component/node_modules/date-fns/differenceinhours.d.ts","../component/node_modules/date-fns/differenceinisoweekyears.d.ts","../component/node_modules/date-fns/differenceinmilliseconds.d.ts","../component/node_modules/date-fns/differenceinminutes.d.ts","../component/node_modules/date-fns/differenceinmonths.d.ts","../component/node_modules/date-fns/differenceinquarters.d.ts","../component/node_modules/date-fns/differenceinseconds.d.ts","../component/node_modules/date-fns/differenceinweeks.d.ts","../component/node_modules/date-fns/differenceinyears.d.ts","../component/node_modules/date-fns/eachdayofinterval.d.ts","../component/node_modules/date-fns/eachhourofinterval.d.ts","../component/node_modules/date-fns/eachminuteofinterval.d.ts","../component/node_modules/date-fns/eachmonthofinterval.d.ts","../component/node_modules/date-fns/eachquarterofinterval.d.ts","../component/node_modules/date-fns/eachweekofinterval.d.ts","../component/node_modules/date-fns/eachweekendofinterval.d.ts","../component/node_modules/date-fns/eachweekendofmonth.d.ts","../component/node_modules/date-fns/eachweekendofyear.d.ts","../component/node_modules/date-fns/eachyearofinterval.d.ts","../component/node_modules/date-fns/endofday.d.ts","../component/node_modules/date-fns/endofdecade.d.ts","../component/node_modules/date-fns/endofhour.d.ts","../component/node_modules/date-fns/endofisoweek.d.ts","../component/node_modules/date-fns/endofisoweekyear.d.ts","../component/node_modules/date-fns/endofminute.d.ts","../component/node_modules/date-fns/endofmonth.d.ts","../component/node_modules/date-fns/endofquarter.d.ts","../component/node_modules/date-fns/endofsecond.d.ts","../component/node_modules/date-fns/endoftoday.d.ts","../component/node_modules/date-fns/endoftomorrow.d.ts","../component/node_modules/date-fns/endofweek.d.ts","../component/node_modules/date-fns/endofyear.d.ts","../component/node_modules/date-fns/endofyesterday.d.ts","../component/node_modules/date-fns/_lib/format/formatters.d.ts","../component/node_modules/date-fns/_lib/format/longformatters.d.ts","../component/node_modules/date-fns/format.d.ts","../component/node_modules/date-fns/formatdistance.d.ts","../component/node_modules/date-fns/formatdistancestrict.d.ts","../component/node_modules/date-fns/formatdistancetonow.d.ts","../component/node_modules/date-fns/formatdistancetonowstrict.d.ts","../component/node_modules/date-fns/formatduration.d.ts","../component/node_modules/date-fns/formatiso.d.ts","../component/node_modules/date-fns/formatiso9075.d.ts","../component/node_modules/date-fns/formatisoduration.d.ts","../component/node_modules/date-fns/formatrfc3339.d.ts","../component/node_modules/date-fns/formatrfc7231.d.ts","../component/node_modules/date-fns/formatrelative.d.ts","../component/node_modules/date-fns/fromunixtime.d.ts","../component/node_modules/date-fns/getdate.d.ts","../component/node_modules/date-fns/getday.d.ts","../component/node_modules/date-fns/getdayofyear.d.ts","../component/node_modules/date-fns/getdaysinmonth.d.ts","../component/node_modules/date-fns/getdaysinyear.d.ts","../component/node_modules/date-fns/getdecade.d.ts","../component/node_modules/date-fns/_lib/defaultoptions.d.ts","../component/node_modules/date-fns/getdefaultoptions.d.ts","../component/node_modules/date-fns/gethours.d.ts","../component/node_modules/date-fns/getisoday.d.ts","../component/node_modules/date-fns/getisoweek.d.ts","../component/node_modules/date-fns/getisoweekyear.d.ts","../component/node_modules/date-fns/getisoweeksinyear.d.ts","../component/node_modules/date-fns/getmilliseconds.d.ts","../component/node_modules/date-fns/getminutes.d.ts","../component/node_modules/date-fns/getmonth.d.ts","../component/node_modules/date-fns/getoverlappingdaysinintervals.d.ts","../component/node_modules/date-fns/getquarter.d.ts","../component/node_modules/date-fns/getseconds.d.ts","../component/node_modules/date-fns/gettime.d.ts","../component/node_modules/date-fns/getunixtime.d.ts","../component/node_modules/date-fns/getweek.d.ts","../component/node_modules/date-fns/getweekofmonth.d.ts","../component/node_modules/date-fns/getweekyear.d.ts","../component/node_modules/date-fns/getweeksinmonth.d.ts","../component/node_modules/date-fns/getyear.d.ts","../component/node_modules/date-fns/hourstomilliseconds.d.ts","../component/node_modules/date-fns/hourstominutes.d.ts","../component/node_modules/date-fns/hourstoseconds.d.ts","../component/node_modules/date-fns/interval.d.ts","../component/node_modules/date-fns/intervaltoduration.d.ts","../component/node_modules/date-fns/intlformat.d.ts","../component/node_modules/date-fns/intlformatdistance.d.ts","../component/node_modules/date-fns/isafter.d.ts","../component/node_modules/date-fns/isbefore.d.ts","../component/node_modules/date-fns/isdate.d.ts","../component/node_modules/date-fns/isequal.d.ts","../component/node_modules/date-fns/isexists.d.ts","../component/node_modules/date-fns/isfirstdayofmonth.d.ts","../component/node_modules/date-fns/isfriday.d.ts","../component/node_modules/date-fns/isfuture.d.ts","../component/node_modules/date-fns/islastdayofmonth.d.ts","../component/node_modules/date-fns/isleapyear.d.ts","../component/node_modules/date-fns/ismatch.d.ts","../component/node_modules/date-fns/ismonday.d.ts","../component/node_modules/date-fns/ispast.d.ts","../component/node_modules/date-fns/issameday.d.ts","../component/node_modules/date-fns/issamehour.d.ts","../component/node_modules/date-fns/issameisoweek.d.ts","../component/node_modules/date-fns/issameisoweekyear.d.ts","../component/node_modules/date-fns/issameminute.d.ts","../component/node_modules/date-fns/issamemonth.d.ts","../component/node_modules/date-fns/issamequarter.d.ts","../component/node_modules/date-fns/issamesecond.d.ts","../component/node_modules/date-fns/issameweek.d.ts","../component/node_modules/date-fns/issameyear.d.ts","../component/node_modules/date-fns/issaturday.d.ts","../component/node_modules/date-fns/issunday.d.ts","../component/node_modules/date-fns/isthishour.d.ts","../component/node_modules/date-fns/isthisisoweek.d.ts","../component/node_modules/date-fns/isthisminute.d.ts","../component/node_modules/date-fns/isthismonth.d.ts","../component/node_modules/date-fns/isthisquarter.d.ts","../component/node_modules/date-fns/isthissecond.d.ts","../component/node_modules/date-fns/isthisweek.d.ts","../component/node_modules/date-fns/isthisyear.d.ts","../component/node_modules/date-fns/isthursday.d.ts","../component/node_modules/date-fns/istoday.d.ts","../component/node_modules/date-fns/istomorrow.d.ts","../component/node_modules/date-fns/istuesday.d.ts","../component/node_modules/date-fns/isvalid.d.ts","../component/node_modules/date-fns/iswednesday.d.ts","../component/node_modules/date-fns/isweekend.d.ts","../component/node_modules/date-fns/iswithininterval.d.ts","../component/node_modules/date-fns/isyesterday.d.ts","../component/node_modules/date-fns/lastdayofdecade.d.ts","../component/node_modules/date-fns/lastdayofisoweek.d.ts","../component/node_modules/date-fns/lastdayofisoweekyear.d.ts","../component/node_modules/date-fns/lastdayofmonth.d.ts","../component/node_modules/date-fns/lastdayofquarter.d.ts","../component/node_modules/date-fns/lastdayofweek.d.ts","../component/node_modules/date-fns/lastdayofyear.d.ts","../component/node_modules/date-fns/_lib/format/lightformatters.d.ts","../component/node_modules/date-fns/lightformat.d.ts","../component/node_modules/date-fns/max.d.ts","../component/node_modules/date-fns/milliseconds.d.ts","../component/node_modules/date-fns/millisecondstohours.d.ts","../component/node_modules/date-fns/millisecondstominutes.d.ts","../component/node_modules/date-fns/millisecondstoseconds.d.ts","../component/node_modules/date-fns/min.d.ts","../component/node_modules/date-fns/minutestohours.d.ts","../component/node_modules/date-fns/minutestomilliseconds.d.ts","../component/node_modules/date-fns/minutestoseconds.d.ts","../component/node_modules/date-fns/monthstoquarters.d.ts","../component/node_modules/date-fns/monthstoyears.d.ts","../component/node_modules/date-fns/nextday.d.ts","../component/node_modules/date-fns/nextfriday.d.ts","../component/node_modules/date-fns/nextmonday.d.ts","../component/node_modules/date-fns/nextsaturday.d.ts","../component/node_modules/date-fns/nextsunday.d.ts","../component/node_modules/date-fns/nextthursday.d.ts","../component/node_modules/date-fns/nexttuesday.d.ts","../component/node_modules/date-fns/nextwednesday.d.ts","../component/node_modules/date-fns/parse/_lib/types.d.ts","../component/node_modules/date-fns/parse/_lib/setter.d.ts","../component/node_modules/date-fns/parse/_lib/parser.d.ts","../component/node_modules/date-fns/parse/_lib/parsers.d.ts","../component/node_modules/date-fns/parse.d.ts","../component/node_modules/date-fns/parseiso.d.ts","../component/node_modules/date-fns/parsejson.d.ts","../component/node_modules/date-fns/previousday.d.ts","../component/node_modules/date-fns/previousfriday.d.ts","../component/node_modules/date-fns/previousmonday.d.ts","../component/node_modules/date-fns/previoussaturday.d.ts","../component/node_modules/date-fns/previoussunday.d.ts","../component/node_modules/date-fns/previousthursday.d.ts","../component/node_modules/date-fns/previoustuesday.d.ts","../component/node_modules/date-fns/previouswednesday.d.ts","../component/node_modules/date-fns/quarterstomonths.d.ts","../component/node_modules/date-fns/quarterstoyears.d.ts","../component/node_modules/date-fns/roundtonearesthours.d.ts","../component/node_modules/date-fns/roundtonearestminutes.d.ts","../component/node_modules/date-fns/secondstohours.d.ts","../component/node_modules/date-fns/secondstomilliseconds.d.ts","../component/node_modules/date-fns/secondstominutes.d.ts","../component/node_modules/date-fns/set.d.ts","../component/node_modules/date-fns/setdate.d.ts","../component/node_modules/date-fns/setday.d.ts","../component/node_modules/date-fns/setdayofyear.d.ts","../component/node_modules/date-fns/setdefaultoptions.d.ts","../component/node_modules/date-fns/sethours.d.ts","../component/node_modules/date-fns/setisoday.d.ts","../component/node_modules/date-fns/setisoweek.d.ts","../component/node_modules/date-fns/setisoweekyear.d.ts","../component/node_modules/date-fns/setmilliseconds.d.ts","../component/node_modules/date-fns/setminutes.d.ts","../component/node_modules/date-fns/setmonth.d.ts","../component/node_modules/date-fns/setquarter.d.ts","../component/node_modules/date-fns/setseconds.d.ts","../component/node_modules/date-fns/setweek.d.ts","../component/node_modules/date-fns/setweekyear.d.ts","../component/node_modules/date-fns/setyear.d.ts","../component/node_modules/date-fns/startofday.d.ts","../component/node_modules/date-fns/startofdecade.d.ts","../component/node_modules/date-fns/startofhour.d.ts","../component/node_modules/date-fns/startofisoweek.d.ts","../component/node_modules/date-fns/startofisoweekyear.d.ts","../component/node_modules/date-fns/startofminute.d.ts","../component/node_modules/date-fns/startofmonth.d.ts","../component/node_modules/date-fns/startofquarter.d.ts","../component/node_modules/date-fns/startofsecond.d.ts","../component/node_modules/date-fns/startoftoday.d.ts","../component/node_modules/date-fns/startoftomorrow.d.ts","../component/node_modules/date-fns/startofweek.d.ts","../component/node_modules/date-fns/startofweekyear.d.ts","../component/node_modules/date-fns/startofyear.d.ts","../component/node_modules/date-fns/startofyesterday.d.ts","../component/node_modules/date-fns/sub.d.ts","../component/node_modules/date-fns/subbusinessdays.d.ts","../component/node_modules/date-fns/subdays.d.ts","../component/node_modules/date-fns/subhours.d.ts","../component/node_modules/date-fns/subisoweekyears.d.ts","../component/node_modules/date-fns/submilliseconds.d.ts","../component/node_modules/date-fns/subminutes.d.ts","../component/node_modules/date-fns/submonths.d.ts","../component/node_modules/date-fns/subquarters.d.ts","../component/node_modules/date-fns/subseconds.d.ts","../component/node_modules/date-fns/subweeks.d.ts","../component/node_modules/date-fns/subyears.d.ts","../component/node_modules/date-fns/todate.d.ts","../component/node_modules/date-fns/transpose.d.ts","../component/node_modules/date-fns/weekstodays.d.ts","../component/node_modules/date-fns/yearstodays.d.ts","../component/node_modules/date-fns/yearstomonths.d.ts","../component/node_modules/date-fns/yearstoquarters.d.ts","../component/node_modules/date-fns/index.d.ts","../component/node_modules/date-fns/locale/af.d.ts","../component/node_modules/date-fns/locale/ar.d.ts","../component/node_modules/date-fns/locale/ar-dz.d.ts","../component/node_modules/date-fns/locale/ar-eg.d.ts","../component/node_modules/date-fns/locale/ar-ma.d.ts","../component/node_modules/date-fns/locale/ar-sa.d.ts","../component/node_modules/date-fns/locale/ar-tn.d.ts","../component/node_modules/date-fns/locale/az.d.ts","../component/node_modules/date-fns/locale/be.d.ts","../component/node_modules/date-fns/locale/be-tarask.d.ts","../component/node_modules/date-fns/locale/bg.d.ts","../component/node_modules/date-fns/locale/bn.d.ts","../component/node_modules/date-fns/locale/bs.d.ts","../component/node_modules/date-fns/locale/ca.d.ts","../component/node_modules/date-fns/locale/ckb.d.ts","../component/node_modules/date-fns/locale/cs.d.ts","../component/node_modules/date-fns/locale/cy.d.ts","../component/node_modules/date-fns/locale/da.d.ts","../component/node_modules/date-fns/locale/de.d.ts","../component/node_modules/date-fns/locale/de-at.d.ts","../component/node_modules/date-fns/locale/el.d.ts","../component/node_modules/date-fns/locale/en-au.d.ts","../component/node_modules/date-fns/locale/en-ca.d.ts","../component/node_modules/date-fns/locale/en-gb.d.ts","../component/node_modules/date-fns/locale/en-ie.d.ts","../component/node_modules/date-fns/locale/en-in.d.ts","../component/node_modules/date-fns/locale/en-nz.d.ts","../component/node_modules/date-fns/locale/en-us.d.ts","../component/node_modules/date-fns/locale/en-za.d.ts","../component/node_modules/date-fns/locale/eo.d.ts","../component/node_modules/date-fns/locale/es.d.ts","../component/node_modules/date-fns/locale/et.d.ts","../component/node_modules/date-fns/locale/eu.d.ts","../component/node_modules/date-fns/locale/fa-ir.d.ts","../component/node_modules/date-fns/locale/fi.d.ts","../component/node_modules/date-fns/locale/fr.d.ts","../component/node_modules/date-fns/locale/fr-ca.d.ts","../component/node_modules/date-fns/locale/fr-ch.d.ts","../component/node_modules/date-fns/locale/fy.d.ts","../component/node_modules/date-fns/locale/gd.d.ts","../component/node_modules/date-fns/locale/gl.d.ts","../component/node_modules/date-fns/locale/gu.d.ts","../component/node_modules/date-fns/locale/he.d.ts","../component/node_modules/date-fns/locale/hi.d.ts","../component/node_modules/date-fns/locale/hr.d.ts","../component/node_modules/date-fns/locale/ht.d.ts","../component/node_modules/date-fns/locale/hu.d.ts","../component/node_modules/date-fns/locale/hy.d.ts","../component/node_modules/date-fns/locale/id.d.ts","../component/node_modules/date-fns/locale/is.d.ts","../component/node_modules/date-fns/locale/it.d.ts","../component/node_modules/date-fns/locale/it-ch.d.ts","../component/node_modules/date-fns/locale/ja.d.ts","../component/node_modules/date-fns/locale/ja-hira.d.ts","../component/node_modules/date-fns/locale/ka.d.ts","../component/node_modules/date-fns/locale/kk.d.ts","../component/node_modules/date-fns/locale/km.d.ts","../component/node_modules/date-fns/locale/kn.d.ts","../component/node_modules/date-fns/locale/ko.d.ts","../component/node_modules/date-fns/locale/lb.d.ts","../component/node_modules/date-fns/locale/lt.d.ts","../component/node_modules/date-fns/locale/lv.d.ts","../component/node_modules/date-fns/locale/mk.d.ts","../component/node_modules/date-fns/locale/mn.d.ts","../component/node_modules/date-fns/locale/ms.d.ts","../component/node_modules/date-fns/locale/mt.d.ts","../component/node_modules/date-fns/locale/nb.d.ts","../component/node_modules/date-fns/locale/nl.d.ts","../component/node_modules/date-fns/locale/nl-be.d.ts","../component/node_modules/date-fns/locale/nn.d.ts","../component/node_modules/date-fns/locale/oc.d.ts","../component/node_modules/date-fns/locale/pl.d.ts","../component/node_modules/date-fns/locale/pt.d.ts","../component/node_modules/date-fns/locale/pt-br.d.ts","../component/node_modules/date-fns/locale/ro.d.ts","../component/node_modules/date-fns/locale/ru.d.ts","../component/node_modules/date-fns/locale/se.d.ts","../component/node_modules/date-fns/locale/sk.d.ts","../component/node_modules/date-fns/locale/sl.d.ts","../component/node_modules/date-fns/locale/sq.d.ts","../component/node_modules/date-fns/locale/sr.d.ts","../component/node_modules/date-fns/locale/sr-latn.d.ts","../component/node_modules/date-fns/locale/sv.d.ts","../component/node_modules/date-fns/locale/ta.d.ts","../component/node_modules/date-fns/locale/te.d.ts","../component/node_modules/date-fns/locale/th.d.ts","../component/node_modules/date-fns/locale/tr.d.ts","../component/node_modules/date-fns/locale/ug.d.ts","../component/node_modules/date-fns/locale/uk.d.ts","../component/node_modules/date-fns/locale/uz.d.ts","../component/node_modules/date-fns/locale/uz-cyrl.d.ts","../component/node_modules/date-fns/locale/vi.d.ts","../component/node_modules/date-fns/locale/zh-cn.d.ts","../component/node_modules/date-fns/locale/zh-hk.d.ts","../component/node_modules/date-fns/locale/zh-tw.d.ts","../component/node_modules/date-fns/locale.d.ts","../component/node_modules/react-day-picker/dist/esm/components/button.d.ts","../component/node_modules/react-day-picker/dist/esm/components/captionlabel.d.ts","../component/node_modules/react-day-picker/dist/esm/components/chevron.d.ts","../component/node_modules/react-day-picker/dist/esm/components/monthcaption.d.ts","../component/node_modules/react-day-picker/dist/esm/components/week.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labeldaybutton.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelgrid.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelgridcell.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelmonthdropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelnav.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelnext.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelprevious.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelweekday.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelweeknumber.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelweeknumberheader.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelyeardropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/index.d.ts","../component/node_modules/react-day-picker/dist/esm/ui.d.ts","../component/node_modules/react-day-picker/dist/esm/classes/calendarweek.d.ts","../component/node_modules/react-day-picker/dist/esm/classes/calendarmonth.d.ts","../component/node_modules/react-day-picker/dist/esm/types/props.d.ts","../component/node_modules/react-day-picker/dist/esm/types/selection.d.ts","../component/node_modules/react-day-picker/dist/esm/usedaypicker.d.ts","../component/node_modules/react-day-picker/dist/esm/types/deprecated.d.ts","../component/node_modules/react-day-picker/dist/esm/types/index.d.ts","../component/node_modules/react-day-picker/dist/esm/components/day.d.ts","../component/node_modules/react-day-picker/dist/esm/components/daybutton.d.ts","../component/node_modules/react-day-picker/dist/esm/components/dropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/components/dropdownnav.d.ts","../component/node_modules/react-day-picker/dist/esm/components/footer.d.ts","../component/node_modules/react-day-picker/dist/esm/components/month.d.ts","../component/node_modules/react-day-picker/dist/esm/components/monthgrid.d.ts","../component/node_modules/react-day-picker/dist/esm/components/months.d.ts","../component/node_modules/react-day-picker/dist/esm/components/monthsdropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/components/nav.d.ts","../component/node_modules/react-day-picker/dist/esm/components/nextmonthbutton.d.ts","../component/node_modules/react-day-picker/dist/esm/components/option.d.ts","../component/node_modules/react-day-picker/dist/esm/components/previousmonthbutton.d.ts","../component/node_modules/react-day-picker/dist/esm/components/root.d.ts","../component/node_modules/react-day-picker/dist/esm/components/select.d.ts","../component/node_modules/react-day-picker/dist/esm/components/weekday.d.ts","../component/node_modules/react-day-picker/dist/esm/components/weekdays.d.ts","../component/node_modules/react-day-picker/dist/esm/components/weeknumber.d.ts","../component/node_modules/react-day-picker/dist/esm/components/weeknumberheader.d.ts","../component/node_modules/react-day-picker/dist/esm/components/weeks.d.ts","../component/node_modules/react-day-picker/dist/esm/components/yearsdropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/components/custom-components.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatcaption.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatday.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatmonthdropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatweekdayname.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatweeknumber.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatweeknumberheader.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatyeardropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/index.d.ts","../component/node_modules/react-day-picker/dist/esm/types/shared.d.ts","../component/node_modules/react-day-picker/dist/esm/locale/en-us.d.ts","../component/node_modules/react-day-picker/dist/esm/classes/datelib.d.ts","../component/node_modules/react-day-picker/dist/esm/classes/calendarday.d.ts","../component/node_modules/react-day-picker/dist/esm/classes/index.d.ts","../component/node_modules/react-day-picker/dist/esm/daypicker.d.ts","../component/node_modules/react-day-picker/dist/esm/helpers/getdefaultclassnames.d.ts","../component/node_modules/react-day-picker/dist/esm/helpers/index.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/addtorange.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/datematchmodifiers.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/rangecontainsdayofweek.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/rangecontainsmodifiers.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/rangeincludesdate.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/rangeoverlaps.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/typeguards.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/index.d.ts","../component/node_modules/react-day-picker/dist/esm/index.d.ts","../component/src/components/ui/calendar.tsx","../component/node_modules/cmdk/dist/index.d.ts","../component/src/components/ui/command.tsx","../component/src/components/ui/index.ts","../component/src/components/composed/loading-button.tsx","../component/src/components/composed/password-input.tsx","../component/src/components/composed/combobox.tsx","../component/src/components/composed/creatable-combobox.tsx","../component/src/components/composed/multi-select.tsx","../component/src/components/composed/date-range-picker.tsx","../component/src/components/composed/confirm-dialog.tsx","../component/src/components/composed/empty-state.tsx","../component/src/components/composed/loading-overlay.tsx","../component/src/components/composed/time-ago.tsx","../component/src/components/composed/json-viewer.tsx","../component/src/components/composed/property-panel.tsx","../component/src/components/composed/page-header.tsx","../component/src/components/composed/widget-card.tsx","../component/src/components/composed/app-shell.tsx","../component/src/components/composed/sidebar.tsx","../component/src/components/composed/sidebar-item.tsx","../component/src/components/composed/toolbar.tsx","../component/node_modules/react-grid-layout/dist/types-bixsdxr7.d.mts","../component/node_modules/react-grid-layout/dist/responsivegridlayout-dqk__izz.d.mts","../component/node_modules/react-grid-layout/dist/position-cetgohhd.d.mts","../component/node_modules/react-grid-layout/dist/calculate-fbcwy8x1.d.mts","../component/node_modules/react-grid-layout/dist/react.d.mts","../component/node_modules/react-grid-layout/dist/responsive-t0n0gmbb.d.mts","../component/node_modules/react-grid-layout/dist/index.d.mts","../component/src/components/composed/dashboard-grid.tsx","../component/src/components/composed/dashboard-mini-preview.tsx","../component/node_modules/@tanstack/table-core/build/lib/utils.d.ts","../component/node_modules/@tanstack/table-core/build/lib/core/table.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnvisibility.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnordering.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnpinning.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/rowpinning.d.ts","../component/node_modules/@tanstack/table-core/build/lib/core/headers.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnfaceting.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/globalfaceting.d.ts","../component/node_modules/@tanstack/table-core/build/lib/filterfns.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnfiltering.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/globalfiltering.d.ts","../component/node_modules/@tanstack/table-core/build/lib/sortingfns.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/rowsorting.d.ts","../component/node_modules/@tanstack/table-core/build/lib/aggregationfns.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columngrouping.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/rowexpanding.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnsizing.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/rowpagination.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/rowselection.d.ts","../component/node_modules/@tanstack/table-core/build/lib/core/row.d.ts","../component/node_modules/@tanstack/table-core/build/lib/core/cell.d.ts","../component/node_modules/@tanstack/table-core/build/lib/core/column.d.ts","../component/node_modules/@tanstack/table-core/build/lib/types.d.ts","../component/node_modules/@tanstack/table-core/build/lib/columnhelper.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getcorerowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getexpandedrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getfacetedminmaxvalues.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getfacetedrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getfaceteduniquevalues.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getfilteredrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getgroupedrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getpaginationrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getsortedrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/index.d.ts","../component/node_modules/@tanstack/react-table/build/lib/index.d.ts","../component/src/components/composed/data-grid.tsx","../component/src/components/composed/data-grid-column-header.tsx","../component/src/components/composed/data-grid-pagination.tsx","../component/src/components/composed/data-grid-faceted-filter.tsx","../component/src/components/composed/data-grid-view-options.tsx","../component/src/components/composed/chart-type-picker.tsx","../component/src/components/composed/field-picker.tsx","../component/src/components/composed/chart-settings-panel.tsx","../component/src/components/composed/chart-options-schema.ts","../component/src/components/composed/chart-options-panel.tsx","../component/src/components/composed/connection-status.tsx","../component/src/components/composed/connection-form.tsx","../component/src/components/composed/connection-card.tsx","../component/src/components/composed/parameter-bar.tsx","../component/src/components/composed/cross-filter-tag.tsx","../component/src/components/composed/parameter-widgets/text-input.tsx","../component/src/components/composed/parameter-widgets/param-selector.tsx","../component/src/components/composed/parameter-widgets/param-multi-selector.tsx","../component/src/components/composed/parameter-widgets/date-picker.tsx","../component/src/components/composed/parameter-widgets/date-range-picker.tsx","../component/src/components/composed/parameter-widgets/date-relative-picker.tsx","../component/src/components/composed/parameter-widgets/number-range-slider.tsx","../component/src/components/composed/parameter-widgets/cascading-selector.tsx","../component/src/components/composed/form-widget.tsx","../component/node_modules/@lezer/common/dist/index.d.ts","../component/node_modules/@lezer/lr/dist/index.d.ts","../component/node_modules/@codemirror/state/dist/index.d.ts","../component/node_modules/style-mod/src/style-mod.d.ts","../component/node_modules/@codemirror/view/dist/index.d.ts","../component/node_modules/@lezer/highlight/dist/index.d.ts","../component/node_modules/@codemirror/language/dist/index.d.ts","../component/node_modules/@codemirror/autocomplete/dist/index.d.ts","../component/node_modules/@codemirror/lang-sql/dist/index.d.ts","../component/node_modules/@codemirror/commands/dist/index.d.ts","../component/node_modules/@codemirror/theme-one-dark/dist/index.d.ts","../component/src/components/composed/query-editor.tsx","../component/src/components/composed/code-preview.tsx","../component/src/components/composed/column-mapping-overlay.tsx","../component/src/components/composed/index.ts","../component/node_modules/echarts/types/dist/shared.d.ts","../component/node_modules/echarts/types/dist/core.d.ts","../component/node_modules/echarts/core.d.ts","../component/node_modules/echarts/types/dist/charts.d.ts","../component/node_modules/echarts/charts.d.ts","../component/node_modules/echarts/types/dist/components.d.ts","../component/node_modules/echarts/components.d.ts","../component/node_modules/echarts/types/dist/renderers.d.ts","../component/node_modules/echarts/renderers.d.ts","../component/node_modules/echarts/types/dist/echarts.d.ts","../component/node_modules/echarts/index.d.ts","../component/src/charts/types.ts","../component/src/charts/base-chart.tsx","../component/src/charts/color-threshold.ts","../component/src/charts/styling-rule.ts","../component/src/hooks/usecontainersize.ts","../component/src/charts/chart-utils.ts","../component/src/charts/line-chart.tsx","../component/src/charts/bar-chart.tsx","../component/src/charts/pie-chart.tsx","../component/src/charts/single-value-chart.tsx","../component/node_modules/@neo4j-nvl/base/dist/types/utils/geometry.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/renderers/domrenderer/shared/types.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/types/graph-element.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/modules/externalcallbackhandler.d.ts","../component/node_modules/loglevel/index.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/modules/dataset.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/modules/state/types.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/renderers/domrenderer/canvasrenderer/canvasutils.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/utils/errors.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/utils/hittest.d.ts","../component/node_modules/neo4j-driver-core/types/integer.d.ts","../component/node_modules/neo4j-driver-core/types/mapping.highlevel.d.ts","../component/node_modules/neo4j-driver-core/types/graph-types.d.ts","../component/node_modules/neo4j-driver-core/types/gql-constants.d.ts","../component/node_modules/neo4j-driver-core/types/error.d.ts","../component/node_modules/neo4j-driver-core/types/temporal-types.d.ts","../component/node_modules/neo4j-driver-core/types/record.d.ts","../component/node_modules/neo4j-driver-core/types/spatial-types.d.ts","../component/node_modules/neo4j-driver-core/types/notification.d.ts","../component/node_modules/neo4j-driver-core/types/protocol-version.d.ts","../component/node_modules/neo4j-driver-core/types/result-summary.d.ts","../component/node_modules/neo4j-driver-core/types/notification-filter.d.ts","../component/node_modules/neo4j-driver-core/types/client-certificate.d.ts","../component/node_modules/neo4j-driver-core/types/types.d.ts","../component/node_modules/neo4j-driver-core/types/internal/util.d.ts","../component/node_modules/neo4j-driver-core/types/internal/temporal-util.d.ts","../component/node_modules/neo4j-driver-core/types/internal/observers.d.ts","../component/node_modules/neo4j-driver-core/types/internal/bookmarks.d.ts","../component/node_modules/neo4j-driver-core/types/internal/constants.d.ts","../component/node_modules/neo4j-driver-core/types/internal/logger.d.ts","../component/node_modules/neo4j-driver-core/types/internal/tx-config.d.ts","../component/node_modules/neo4j-driver-core/types/connection.d.ts","../component/node_modules/neo4j-driver-core/types/connection-provider.d.ts","../component/node_modules/neo4j-driver-core/types/internal/connection-holder.d.ts","../component/node_modules/neo4j-driver-core/types/transaction.d.ts","../component/node_modules/neo4j-driver-core/types/transaction-promise.d.ts","../component/node_modules/neo4j-driver-core/types/internal/transaction-executor.d.ts","../component/node_modules/neo4j-driver-core/types/internal/url-util.d.ts","../component/node_modules/neo4j-driver-core/types/internal/server-address.d.ts","../component/node_modules/neo4j-driver-core/types/internal/resolver/base-host-name-resolver.d.ts","../component/node_modules/neo4j-driver-core/types/internal/resolver/configured-custom-resolver.d.ts","../component/node_modules/neo4j-driver-core/types/internal/resolver/index.d.ts","../component/node_modules/neo4j-driver-core/types/internal/object-util.d.ts","../component/node_modules/neo4j-driver-core/types/internal/bolt-agent/node/bolt-agent.d.ts","../component/node_modules/neo4j-driver-core/types/internal/bolt-agent/node/index.d.ts","../component/node_modules/neo4j-driver-core/types/internal/bolt-agent/index.d.ts","../component/node_modules/neo4j-driver-core/types/internal/pool/pool-config.d.ts","../component/node_modules/neo4j-driver-core/types/internal/pool/pool.d.ts","../component/node_modules/neo4j-driver-core/types/internal/pool/index.d.ts","../component/node_modules/neo4j-driver-core/types/internal/index.d.ts","../component/node_modules/neo4j-driver-core/types/result.d.ts","../component/node_modules/neo4j-driver-core/types/result-eager.d.ts","../component/node_modules/neo4j-driver-core/types/transaction-managed.d.ts","../component/node_modules/neo4j-driver-core/types/bookmark-manager.d.ts","../component/node_modules/neo4j-driver-core/types/session.d.ts","../component/node_modules/neo4j-driver-core/types/result-transformers.d.ts","../component/node_modules/neo4j-driver-core/types/internal/query-executor.d.ts","../component/node_modules/neo4j-driver-core/types/driver.d.ts","../component/node_modules/neo4j-driver-core/types/auth.d.ts","../component/node_modules/neo4j-driver-core/types/auth-token-manager.d.ts","../component/node_modules/neo4j-driver-core/types/json.d.ts","../component/node_modules/neo4j-driver-core/types/vector.d.ts","../component/node_modules/neo4j-driver-core/types/mapping.nameconventions.d.ts","../component/node_modules/neo4j-driver-core/types/mapping.rulesfactories.d.ts","../component/node_modules/neo4j-driver-core/types/mapping.decorators.d.ts","../component/node_modules/neo4j-driver-core/types/unsupported-type.d.ts","../component/node_modules/neo4j-driver-core/types/index.d.ts","../component/node_modules/rxjs/dist/types/internal/subscription.d.ts","../component/node_modules/rxjs/dist/types/internal/subscriber.d.ts","../component/node_modules/rxjs/dist/types/internal/operator.d.ts","../component/node_modules/rxjs/dist/types/internal/observable.d.ts","../component/node_modules/rxjs/dist/types/internal/types.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/audittime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/buffercount.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/buffertime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/buffertoggle.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/bufferwhen.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/catcherror.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/combinelatestall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/combineall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/combinelatest.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/combinelatestwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/concatall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/concatmap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/concatmapto.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/concatwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/count.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/debouncetime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/defaultifempty.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/delaywhen.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/distinctuntilchanged.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/distinctuntilkeychanged.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/elementat.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/endwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/every.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/exhaustall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/exhaustmap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/find.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/findindex.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/first.d.ts","../component/node_modules/rxjs/dist/types/internal/subject.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/groupby.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/ignoreelements.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/isempty.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/last.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/map.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mapto.d.ts","../component/node_modules/rxjs/dist/types/internal/notification.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/max.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mergeall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mergemap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/flatmap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mergemapto.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mergescan.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mergewith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/min.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/connectableobservable.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/observeon.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/onerrorresumenextwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/publishbehavior.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/publishlast.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/publishreplay.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/race.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/racewith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/repeatwhen.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/retrywhen.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/refcount.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/sampletime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/sequenceequal.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/share.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/sharereplay.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/single.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/skiplast.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/skipuntil.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/skipwhile.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/startwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/subscribeon.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/switchall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/switchmap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/switchmapto.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/switchscan.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/take.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/takelast.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/takeuntil.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/takewhile.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/throttletime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/throwifempty.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/timeinterval.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/timeoutwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/toarray.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/window.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/windowcount.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/windowtime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/windowtoggle.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/windowwhen.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/withlatestfrom.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/zipall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/zipwith.d.ts","../component/node_modules/rxjs/dist/types/operators/index.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/action.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/testmessage.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/subscriptionlog.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/subscriptionloggable.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/coldobservable.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/hotobservable.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/asyncscheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/timerhandle.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/asyncaction.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/virtualtimescheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/testscheduler.d.ts","../component/node_modules/rxjs/dist/types/testing/index.d.ts","../component/node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/dom/animationframes.d.ts","../component/node_modules/rxjs/dist/types/internal/behaviorsubject.d.ts","../component/node_modules/rxjs/dist/types/internal/replaysubject.d.ts","../component/node_modules/rxjs/dist/types/internal/asyncsubject.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/asapscheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/queuescheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/animationframescheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/animationframe.d.ts","../component/node_modules/rxjs/dist/types/internal/util/identity.d.ts","../component/node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../component/node_modules/rxjs/dist/types/internal/util/noop.d.ts","../component/node_modules/rxjs/dist/types/internal/util/isobservable.d.ts","../component/node_modules/rxjs/dist/types/internal/lastvaluefrom.d.ts","../component/node_modules/rxjs/dist/types/internal/firstvaluefrom.d.ts","../component/node_modules/rxjs/dist/types/internal/util/argumentoutofrangeerror.d.ts","../component/node_modules/rxjs/dist/types/internal/util/emptyerror.d.ts","../component/node_modules/rxjs/dist/types/internal/util/notfounderror.d.ts","../component/node_modules/rxjs/dist/types/internal/util/objectunsubscribederror.d.ts","../component/node_modules/rxjs/dist/types/internal/util/sequenceerror.d.ts","../component/node_modules/rxjs/dist/types/internal/util/unsubscriptionerror.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/bindcallback.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/bindnodecallback.d.ts","../component/node_modules/rxjs/dist/types/internal/anycatcher.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/combinelatest.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/forkjoin.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/from.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/fromevent.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/fromeventpattern.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/never.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/of.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/onerrorresumenext.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/race.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/range.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/throwerror.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/using.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../component/node_modules/rxjs/dist/types/internal/config.d.ts","../component/node_modules/rxjs/dist/types/index.d.ts","../component/node_modules/neo4j-driver/types/result-rx.d.ts","../component/node_modules/neo4j-driver/types/query-runner.d.ts","../component/node_modules/neo4j-driver/types/transaction-rx.d.ts","../component/node_modules/neo4j-driver/types/session-rx.d.ts","../component/node_modules/neo4j-driver/types/driver.d.ts","../component/node_modules/neo4j-driver/types/transaction-managed-rx.d.ts","../component/node_modules/neo4j-driver/types/index.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/utils/jsdriverresulttransformer.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/utils/zoomfunctions.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/index.d.ts","../component/node_modules/@neo4j-nvl/react/lib/basic-wrapper/basicnvlwrapper.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/base.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/box-select-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/click-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/drag-node-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/draw-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/hover-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/lasso-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/pan-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/zoom-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/index.d.ts","../component/node_modules/@neo4j-nvl/react/lib/interactive-nvl-wrapper/types.d.ts","../component/node_modules/@neo4j-nvl/react/lib/interactive-nvl-wrapper/interactivenvlwrapper.d.ts","../component/node_modules/@neo4j-nvl/react/lib/static-picture-wrapper/staticpicturewrapper.d.ts","../component/node_modules/@neo4j-nvl/react/lib/index.d.ts","../component/src/charts/graph-chart.tsx","../component/node_modules/@types/geojson/index.d.ts","../component/node_modules/@types/leaflet/index.d.ts","../component/src/charts/map-chart.tsx","../component/src/charts/index.ts","../component/src/hooks/usewidgetsize.tsx","../component/src/hooks/usegraphexploration.ts","../component/src/hooks/index.ts","../component/src/utils/index.ts","../component/src/index.ts","./src/lib/derive-form-fields.ts","./src/components/__tests__/form-widget-renderer.test.ts","./node_modules/zustand/esm/vanilla.d.mts","./node_modules/zustand/esm/react.d.mts","./node_modules/zustand/esm/index.d.mts","./node_modules/zustand/esm/react/shallow.d.mts","./src/stores/parameter-store.ts","./src/lib/format-parameter-value.ts","./src/components/__tests__/format-parameter-value.test.ts","./src/components/__tests__/widget-outdated.test.ts","./src/components/widget-editor/use-accordion-crud.ts","./src/components/widget-editor/__tests__/use-accordion-crud.test.ts","./node_modules/@tanstack/query-core/build/modern/subscribable.d.ts","./node_modules/@tanstack/query-core/build/modern/focusmanager.d.ts","./node_modules/@tanstack/query-core/build/modern/removable.d.ts","./node_modules/@tanstack/query-core/build/modern/hydration-blevg2lp.d.ts","./node_modules/@tanstack/query-core/build/modern/infinitequeryobserver.d.ts","./node_modules/@tanstack/query-core/build/modern/notifymanager.d.ts","./node_modules/@tanstack/query-core/build/modern/onlinemanager.d.ts","./node_modules/@tanstack/query-core/build/modern/queriesobserver.d.ts","./node_modules/@tanstack/query-core/build/modern/timeoutmanager.d.ts","./node_modules/@tanstack/query-core/build/modern/streamedquery.d.ts","./node_modules/@tanstack/query-core/build/modern/index.d.ts","./node_modules/@tanstack/react-query/build/modern/types.d.ts","./node_modules/@tanstack/react-query/build/modern/usequeries.d.ts","./node_modules/@tanstack/react-query/build/modern/queryoptions.d.ts","./node_modules/@tanstack/react-query/build/modern/usequery.d.ts","./node_modules/@tanstack/react-query/build/modern/usesuspensequery.d.ts","./node_modules/@tanstack/react-query/build/modern/usesuspenseinfinitequery.d.ts","./node_modules/@tanstack/react-query/build/modern/usesuspensequeries.d.ts","./node_modules/@tanstack/react-query/build/modern/useprefetchquery.d.ts","./node_modules/@tanstack/react-query/build/modern/useprefetchinfinitequery.d.ts","./node_modules/@tanstack/react-query/build/modern/infinitequeryoptions.d.ts","./node_modules/@tanstack/react-query/build/modern/queryclientprovider.d.ts","./node_modules/@tanstack/react-query/build/modern/queryerrorresetboundary.d.ts","./node_modules/@tanstack/react-query/build/modern/hydrationboundary.d.ts","./node_modules/@tanstack/react-query/build/modern/useisfetching.d.ts","./node_modules/@tanstack/react-query/build/modern/usemutationstate.d.ts","./node_modules/@tanstack/react-query/build/modern/usemutation.d.ts","./node_modules/@tanstack/react-query/build/modern/mutationoptions.d.ts","./node_modules/@tanstack/react-query/build/modern/useinfinitequery.d.ts","./node_modules/@tanstack/react-query/build/modern/isrestoringprovider.d.ts","./node_modules/@tanstack/react-query/build/modern/index.d.ts","./src/hooks/use-connections.ts","./src/hooks/use-countdown.ts","./src/hooks/use-dashboards.ts","./src/hooks/use-query-execution.ts","./src/stores/schema-store.ts","./src/hooks/use-schema.ts","./src/hooks/use-seed-query.ts","./src/hooks/use-users.ts","./src/lib/date-utils.ts","./src/hooks/use-widget-query.ts","./src/hooks/use-widget-templates.ts","./src/hooks/use-write-query-execution.ts","./src/hooks/__tests__/use-countdown.test.ts","./src/hooks/__tests__/use-widget-query.test.ts","./src/lib/capture-preview.ts","./src/lib/capture-dashboard-thumbnails.ts","./src/lib/normalize-value.ts","./src/lib/chart-registry.ts","./src/lib/collect-parameter-names.ts","./src/lib/dashboard-settings.ts","./src/lib/form-field-def.ts","./src/lib/interpolate-title.ts","./src/lib/migrate-color-thresholds.ts","./src/lib/migrate-layout.ts","./src/lib/resolve-cache-options.ts","./src/lib/resolve-click-action.ts","./src/lib/wrap-with-preview-limit.ts","./src/lib/__tests__/bootstrap.test.ts","./src/lib/__tests__/capture-preview.test.ts","./src/lib/__tests__/chart-registry-mapping.test.ts","./src/lib/__tests__/chart-registry.test.ts","./src/lib/__tests__/collect-parameter-names.test.ts","./src/lib/__tests__/crypto.test.ts","./src/lib/__tests__/dashboard-export.test.ts","./src/lib/__tests__/dashboard-import.test.ts","./src/lib/__tests__/dashboard-settings.test.ts","./src/lib/__tests__/date-utils.test.ts","./src/lib/__tests__/form-field-def.test.ts","./src/lib/__tests__/interpolate-title.test.ts","./src/lib/__tests__/migrate-color-thresholds.test.ts","./src/lib/__tests__/migrate-layout.test.ts","./src/lib/__tests__/neodash-converter.test.ts","./src/lib/__tests__/normalize-value.test.ts","./src/lib/__tests__/query-executor.test.ts","./src/lib/__tests__/query-hash.test.ts","./src/lib/__tests__/resolve-cache-options.test.ts","./src/lib/__tests__/resolve-click-action.test.ts","./src/lib/__tests__/wrap-with-preview-limit.test.ts","./src/lib/auth/__tests__/session.test.ts","./src/lib/auth/__tests__/signup.test.ts","./node_modules/@testcontainers/postgresql/build/postgresql-container.d.ts","./node_modules/@testcontainers/postgresql/build/index.d.ts","./src/lib/db/__tests__/migrations.test.ts","./src/stores/connection-store.ts","./src/stores/dashboard-store.ts","./src/stores/graph-widget-store.ts","./src/stores/__tests__/connection-store.test.ts","./src/stores/__tests__/dashboard-store.test.ts","./src/stores/__tests__/graph-widget-store.test.ts","./src/stores/__tests__/parameter-store.test.ts","./src/stores/__tests__/schema-store.test.ts","./src/types/next-auth.d.ts","./src/types/__tests__/next-auth-types.test.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./node_modules/next-auth/lib/client.d.ts","./node_modules/next-auth/react.d.ts","./src/components/providers.tsx","./src/app/layout.tsx","./src/app/(auth)/login/page.tsx","./src/app/(auth)/signup/page.tsx","./node_modules/lucide-react/dist/lucide-react.d.ts","./src/app/(dashboard)/layout.tsx","./src/app/(dashboard)/page.tsx","./src/components/debounced-text-input.tsx","./src/components/parameter-widget-renderer.tsx","./src/components/graph-exploration-wrapper.tsx","./node_modules/@tanstack/react-table/build/lib/index.d.ts","./src/components/table-renderer.tsx","./src/components/form-widget-renderer.tsx","./src/components/chart-renderer.tsx","./src/components/card-container.tsx","./src/components/dashboard-container.tsx","./src/components/page-tabs.tsx","./src/app/(dashboard)/[id]/page.tsx","./src/components/widget-editor/chart-type-selector.tsx","./src/components/widget-editor/query-editor-panel.tsx","./node_modules/@dnd-kit/utilities/dist/hooks/usecombinedrefs.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useevent.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useisomorphiclayouteffect.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useinterval.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/uselatestvalue.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/uselazymemo.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/usenoderef.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useprevious.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useuniqueid.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/index.d.ts","./node_modules/@dnd-kit/utilities/dist/adjustment.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/types.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/geteventcoordinates.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/index.d.ts","./node_modules/@dnd-kit/utilities/dist/css.d.ts","./node_modules/@dnd-kit/utilities/dist/event/hasviewportrelativecoordinates.d.ts","./node_modules/@dnd-kit/utilities/dist/event/iskeyboardevent.d.ts","./node_modules/@dnd-kit/utilities/dist/event/istouchevent.d.ts","./node_modules/@dnd-kit/utilities/dist/event/index.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/canusedom.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/getownerdocument.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/getwindow.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/index.d.ts","./node_modules/@dnd-kit/utilities/dist/focus/findfirstfocusablenode.d.ts","./node_modules/@dnd-kit/utilities/dist/focus/index.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/isdocument.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/ishtmlelement.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/isnode.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/issvgelement.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/iswindow.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/index.d.ts","./node_modules/@dnd-kit/utilities/dist/types.d.ts","./node_modules/@dnd-kit/utilities/dist/index.d.ts","./node_modules/@dnd-kit/core/dist/types/coordinates.d.ts","./node_modules/@dnd-kit/core/dist/types/direction.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/types.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/closestcenter.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/closestcorners.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/rectintersection.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/pointerwithin.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/helpers.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/abstractpointersensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/pointersensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/types.d.ts","./node_modules/@dnd-kit/core/dist/sensors/usesensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/usesensors.d.ts","./node_modules/@dnd-kit/core/dist/sensors/mouse/mousesensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/mouse/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/touch/touchsensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/touch/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/types.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/keyboardsensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/defaults.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/index.d.ts","./node_modules/@dnd-kit/core/dist/types/events.d.ts","./node_modules/@dnd-kit/core/dist/types/other.d.ts","./node_modules/@dnd-kit/core/dist/types/react.d.ts","./node_modules/@dnd-kit/core/dist/types/rect.d.ts","./node_modules/@dnd-kit/core/dist/types/index.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useautoscroller.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usecachednode.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usesyntheticlisteners.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usecombineactivators.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usedroppablemeasuring.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useinitialvalue.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useinitialrect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userectdelta.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useresizeobserver.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrollableancestors.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrollintoviewifneeded.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrolloffsets.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrolloffsetsdelta.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usesensorsetup.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userects.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usewindowrect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usedragoverlaymeasuring.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/index.d.ts","./node_modules/@dnd-kit/core/dist/store/constructors.d.ts","./node_modules/@dnd-kit/core/dist/store/types.d.ts","./node_modules/@dnd-kit/core/dist/store/actions.d.ts","./node_modules/@dnd-kit/core/dist/store/context.d.ts","./node_modules/@dnd-kit/core/dist/store/reducer.d.ts","./node_modules/@dnd-kit/core/dist/store/index.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/types.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/accessibility.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/components/restorefocus.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/components/index.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/defaults.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/constants.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/distancebetweenpoints.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/getrelativetransformorigin.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/adjustscale.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getrectdelta.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/rectadjustment.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getwindowclientrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/rect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/other/noop.d.ts","./node_modules/@dnd-kit/core/dist/utilities/other/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollableancestors.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollableelement.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollcoordinates.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrolldirectionandspeed.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollelementrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrolloffsets.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollposition.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/documentscrollingelement.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/isscrollable.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/scrollintoviewifneeded.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/index.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/types.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/applymodifiers.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/types.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/dndcontext.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/types.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/context.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/usedndmonitor.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/usedndmonitorprovider.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/animationmanager/animationmanager.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/animationmanager/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/nullifiedcontextprovider/nullifiedcontextprovider.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/nullifiedcontextprovider/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/positionedoverlay/positionedoverlay.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/positionedoverlay/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/usedropanimation.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/usekey.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/dragoverlay.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/index.d.ts","./node_modules/@dnd-kit/core/dist/components/index.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedraggable.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedndcontext.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedroppable.d.ts","./node_modules/@dnd-kit/core/dist/hooks/index.d.ts","./node_modules/@dnd-kit/core/dist/index.d.ts","./node_modules/@dnd-kit/sortable/dist/types/disabled.d.ts","./node_modules/@dnd-kit/sortable/dist/types/data.d.ts","./node_modules/@dnd-kit/sortable/dist/types/strategies.d.ts","./node_modules/@dnd-kit/sortable/dist/types/type-guard.d.ts","./node_modules/@dnd-kit/sortable/dist/types/index.d.ts","./node_modules/@dnd-kit/sortable/dist/components/sortablecontext.d.ts","./node_modules/@dnd-kit/sortable/dist/components/index.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/types.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/usesortable.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/defaults.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/index.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/horizontallistsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/rectsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/rectswapping.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/verticallistsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/index.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/keyboard/sortablekeyboardcoordinates.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/keyboard/index.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/index.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/arraymove.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/arrayswap.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/getsortedrects.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/isvalidindex.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/itemsequal.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/normalizedisabled.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/index.d.ts","./node_modules/@dnd-kit/sortable/dist/index.d.ts","./src/components/widget-editor/form-fields-editor.tsx","./src/components/widget-editor/parameter-config-section.tsx","./src/components/widget-editor/parameter-preview.tsx","./src/components/widget-editor/field-selector-input.tsx","./src/components/widget-editor/action-rules-editor.tsx","./src/components/widget-editor/value-or-param-input.tsx","./src/components/widget-editor/styling-rules-editor.tsx","./src/components/widget-editor-modal.tsx","./src/components/dashboard-assign-panel.tsx","./src/components/save-template-dialog.tsx","./src/app/(dashboard)/[id]/edit/page.tsx","./src/components/db-logos.tsx","./src/app/(dashboard)/connections/page.tsx","./src/app/(dashboard)/users/page.tsx","./src/components/dashboard-picker-dialog.tsx","./src/app/(dashboard)/widget-lab/page.tsx","./src/components/__tests__/parameter-widget-renderer.test.tsx","./.next/types/cache-life.d.ts","./.next/types/validator.ts","./.next/types/app/layout.ts","./.next/types/app/(auth)/login/page.ts","./.next/types/app/(auth)/signup/page.ts","./.next/types/app/(dashboard)/layout.ts","./.next/types/app/(dashboard)/page.ts","./.next/types/app/(dashboard)/[id]/page.ts","./.next/types/app/(dashboard)/[id]/edit/page.ts","./.next/types/app/(dashboard)/connections/page.ts","./.next/types/app/(dashboard)/users/page.ts","./.next/types/app/(dashboard)/widget-lab/page.ts","./.next/types/app/api/auth/[...nextauth]/route.ts","./.next/types/app/api/auth/bootstrap-status/route.ts","./.next/types/app/api/connections/route.ts","./.next/types/app/api/connections/[id]/route.ts","./.next/types/app/api/connections/[id]/schema/route.ts","./.next/types/app/api/connections/[id]/test/route.ts","./.next/types/app/api/connections/test-inline/route.ts","./.next/types/app/api/dashboards/route.ts","./.next/types/app/api/dashboards/[id]/route.ts","./.next/types/app/api/dashboards/[id]/duplicate/route.ts","./.next/types/app/api/dashboards/[id]/export/route.ts","./.next/types/app/api/dashboards/[id]/share/route.ts","./.next/types/app/api/dashboards/import/route.ts","./.next/types/app/api/query/route.ts","./.next/types/app/api/query/write/route.ts","./.next/types/app/api/users/route.ts","./.next/types/app/api/users/[id]/route.ts","./.next/types/app/api/widget-templates/route.ts","./.next/types/app/api/widget-templates/[id]/route.ts","./node_modules/@types/aria-query/index.d.ts","./node_modules/@types/ssh2-streams/index.d.ts","../node_modules/@types/json-schema/index.d.ts"],"fileIdsList":[[77,126,143,144,319,2127],[77,126,143,144,319,2128],[77,126,143,144,319,2329],[77,126,143,144,319,2142],[77,126,143,144,319,2331],[77,126,143,144,319,2130],[77,126,143,144,319,2131],[77,126,143,144,319,2332],[77,126,143,144,319,2334],[77,126,143,144,473,999],[77,126,143,144,473,1001],[77,126,143,144,473,1011],[77,126,143,144,473,1013],[77,126,143,144,473,1015],[77,126,143,144,473,1010],[77,126,143,144,473,1018],[77,126,143,144,473,1023],[77,126,143,144,473,1026],[77,126,143,144,473,1021],[77,126,143,144,473,1028],[77,126,143,144,473,1033],[77,126,143,144,473,1020],[77,126,143,144,473,1041],[77,126,143,144,473,1043],[77,126,143,144,473,1046],[77,126,143,144,473,1045],[77,126,143,144,473,1051],[77,126,143,144,473,1050],[77,126,143,144,319,2126],[77,126,143,144,426,427,428,429],[77,126,143,144],[60,77,126,143,144,473,476,999,1001,1010,1011,1013,1015,1018,1020,1021,1023,1026,1028,1033,1041,1043,1045,1046,1050,1051,2126,2127,2128,2130,2131,2142,2329,2331,2332,2334],[77,126,143,144,481],[77,126,143,144,585],[77,126,143,144,490,585],[77,126,138,143,144,147,148,585],[77,126,143,144,148,490,492,581,582,583,584],[77,126,127,131,138,140,143,144,148,581,652,653,895,896],[77,126,127,138,143,144,148,581],[77,126,143,144,490],[60,77,126,143,144,477,478],[77,126,143,144,148,477],[77,126,143,144,925,933],[77,126,143,144,916,917,918,919,920,922,925,933,934],[77,126,143,144,922,925],[77,126,143,144,916],[77,126,143,144,925],[77,126,143,144,921,925],[77,126,143,144,915,921],[77,126,143,144,914,923,925,934],[77,126,143,144,925,927,933],[77,126,143,144,925,929,930,933],[77,126,143,144,923,925,928,931,932],[77,126,143,144,925,931],[77,126,143,144,913,916,921,925,929,933],[77,126,143,144,912,913,914,915,921,922,924,933],[77,126,143,144,934,982],[77,126,143,144,732,734,934],[77,126,143,144,732,799,934],[77,126,143,144,732,884,934],[77,126,143,144,734,799,884,979,980,981],[63,77,126,143,144,2232],[77,126,143,144,2234],[77,126,143,144,2232],[77,126,143,144,2232,2233,2235,2236],[77,126,143,144,2231],[63,77,126,143,144,2177,2201,2206,2225,2237,2262,2265,2266],[77,126,143,144,2266,2267],[77,126,143,144,2206,2225],[63,77,126,143,144,2269],[77,126,143,144,2269,2270,2271,2272],[77,126,143,144,2206],[77,126,143,144,2269],[63,77,126,143,144,2206],[77,126,143,144,2274],[77,126,143,144,2275,2277,2279],[77,126,143,144,2276],[63,77,126,143,144],[77,126,143,144,2278],[63,77,126,143,144,2177,2206],[63,77,126,143,144,2265,2280,2283],[77,126,143,144,2281,2282],[77,126,143,144,2177,2206,2231,2268],[77,126,143,144,2283,2284],[77,126,143,144,2237,2268,2273,2285],[77,126,143,144,2225,2287,2288,2289],[63,77,126,143,144,2231],[63,77,126,143,144,2177,2206,2225,2231],[63,77,126,143,144,2206,2231],[77,126,143,144,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224],[77,126,143,144,2206,2231],[77,126,143,144,2201,2209],[77,126,143,144,2206,2227],[77,126,143,144,2156,2206],[77,126,143,144,2177],[77,126,143,144,2201],[77,126,143,144,2291],[77,126,143,144,2201,2206,2231,2262,2265,2286,2290],[77,126,143,144,2177,2263],[77,126,143,144,2263,2264],[77,126,143,144,2177,2206,2231],[77,126,143,144,2189,2190,2191,2192,2194,2196,2200],[77,126,143,144,2197],[77,126,143,144,2197,2198,2199],[77,126,143,144,2190,2197],[77,126,143,144,2190,2206],[77,126,143,144,2193],[63,77,126,143,144,2189,2190],[77,126,143,144,2187,2188],[63,77,126,143,144,2187,2190],[77,126,143,144,2195],[63,77,126,143,144,2186,2189,2206,2231],[77,126,143,144,2190],[63,77,126,143,144,2227],[77,126,143,144,2227,2228,2229,2230],[77,126,143,144,2227,2228],[63,77,126,143,144,2177,2186,2206,2225,2226,2228,2286],[77,126,143,144,2178,2186,2201,2206,2231],[77,126,143,144,2178,2179,2202,2203,2204,2205],[63,77,126,143,144,2177],[77,126,143,144,2180],[77,126,143,144,2180,2206],[77,126,143,144,2180,2181,2182,2183,2184,2185],[77,126,143,144,2238,2239,2240],[77,126,143,144,2186,2241,2248,2250,2261],[77,126,143,144,2249],[77,126,143,144,2177,2206],[77,126,143,144,2242,2243,2244,2245,2246,2247],[77,126,143,144,2205],[77,126,143,144,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260],[77,126,143,144,2297],[63,77,126,143,144,2291,2296],[77,126,143,144,2299],[77,126,143,144,2299,2300,2301],[77,126,143,144,2177,2291],[63,77,126,143,144,2177,2225,2291,2296,2299],[77,126,143,144,2296,2298,2302,2307,2310,2317],[77,126,143,144,2309],[77,126,143,144,2308],[77,126,143,144,2296],[77,126,143,144,2303,2304,2305,2306],[77,126,143,144,2292,2293,2294,2295],[77,126,143,144,2291,2293],[77,126,143,144,2311,2312,2313,2314,2315,2316],[77,126,143,144,2156],[77,126,143,144,2156,2157],[77,126,143,144,2160,2161,2162],[77,126,143,144,2164,2165,2166],[77,126,143,144,2168],[77,126,143,144,2145,2146,2147,2148,2149,2150,2151,2152,2153],[77,126,143,144,2154,2155,2158,2159,2163,2167,2169,2175,2176],[77,126,143,144,2170,2171,2172,2173,2174],[77,126,143,144,489],[77,126,143,144,2026],[77,126,143,144,2026,2028],[77,126,143,144,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035],[77,126,143,144,2026,2028,2029],[63,77,126,143,144,2036],[63,77,126,143,144,244,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055],[77,126,143,144,2036,2037],[63,77,126,143,144,244],[77,126,143,144,2036],[77,126,143,144,2036,2037,2046],[77,126,143,144,2036,2037,2039],[77,126,143,144,1056,1661],[77,126,143,144,2107],[77,126,143,144,652],[77,126,143,144,533,534],[77,126,140,143,144,146,158,176,612],[77,126,137,143,144,158,176,612,613],[77,123,124,126,143,144],[77,125,126,143,144],[126,143,144],[77,126,131,143,144,161],[77,126,127,132,137,143,144,146,158,169],[77,126,127,128,137,143,144,146],[72,73,74,77,126,143,144],[77,126,129,143,144,170],[77,126,130,131,138,143,144,147],[77,126,131,143,144,158,166],[77,126,132,134,137,143,144,146],[77,125,126,133,143,144],[77,126,134,135,143,144],[77,126,136,137,143,144],[77,125,126,137,143,144],[77,126,137,138,139,143,144,158,169],[77,126,137,138,139,143,144,153,158,161],[77,119,126,134,137,140,143,144,146,158,169],[77,126,137,138,140,141,143,144,146,158,166,169],[77,126,140,142,143,144,158,166,169],[75,76,77,78,79,80,81,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175],[77,126,137,143,144],[77,126,143,144,145,169],[77,126,134,137,143,144,146,158],[77,126,143,144,147],[77,126,143,144,148],[77,125,126,143,144,149],[77,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175],[77,126,143,144,151],[77,126,143,144,152],[77,126,137,143,144,153,154],[77,126,143,144,153,155,170,172],[77,126,138,143,144],[77,126,137,143,144,158,159,161],[77,126,143,144,160,161],[77,126,143,144,158,159],[77,126,143,144,161],[77,126,143,144,162],[77,123,126,143,144,158,163,169],[77,126,137,143,144,164,165],[77,126,143,144,164,165],[77,126,131,143,144,146,158,166],[77,126,143,144,167],[77,126,143,144,146,168],[77,126,140,143,144,152,169],[77,126,131,143,144,170],[77,126,143,144,158,171],[77,126,143,144,145,172],[77,126,143,144,173],[77,119,126,143,144],[77,119,126,137,139,143,144,149,158,161,169,171,172,174],[77,126,143,144,158,175],[63,67,77,126,143,144,177,178,179,181,421,469],[63,67,77,126,143,144,177,178,179,180,336,421,469],[63,67,77,126,143,144,177,178,180,181,421,469],[63,77,126,143,144,181,336,337],[63,77,126,143,144,181,336],[63,67,77,126,143,144,178,179,180,181,421,469],[63,67,77,126,143,144,177,179,180,181,421,469],[61,62,77,126,143,144],[77,126,143,144,158,176],[77,126,137,140,142,143,144,146,158,176],[77,126,143,144,520,524,527,529,530,531,532,535,961],[77,126,143,144,561],[77,126,143,144,561,562],[77,126,143,144,524,525,527,528],[77,126,143,144,524],[77,126,143,144,524,525,527],[77,126,143,144,524,525],[77,126,143,144,519,552,553],[77,126,143,144,519,552],[77,126,143,144,519,526],[77,126,143,144,519],[77,126,143,144,519,526,566],[77,126,143,144,521],[77,126,143,144,519,520,521,522,523],[77,126,143,144,910],[77,126,143,144,169,176],[77,126,143,144,166],[77,126,143,144,166,480],[77,126,143,144,654,658,663,664,708],[77,126,143,144,654,659,664],[77,126,143,144,654,659,663,664,734,799,850,884],[77,126,143,144,654,658,659,663,885],[77,126,143,144,654],[77,126,143,144,701],[77,126,143,144,654,656,657,658,659,661,664,705,707,708,709,729,730,731,885],[77,126,143,144,694,713,726],[77,126,143,144,654,663,694],[77,126,143,144,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,685,686,687,688,689,697],[77,126,143,144,654,664,696,885],[77,126,143,144,654,659,664,696,885],[77,126,143,144,654,659,663,664,694,695,885],[77,126,143,144,654,659,663,664,694,696,885],[77,126,143,144,654,659,664,694,696,885],[77,126,143,144,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,685,686,687,688,689,696,697],[77,126,143,144,654,664,676,696,885],[77,126,143,144,654,659,664,684,885],[77,126,143,144,654,659,661,663,694,708,712,713,718,719,720,721,723,726],[77,126,143,144,654,655,659,663,694,696,708,710,716,717,723,726],[77,126,143,144,654,694,698],[77,126,143,144,665,691,692,693,694,695,698,712,718,720,722,723,724,725,727,728,733],[77,126,143,144,654,663,694,698],[77,126,143,144,654,663,694,713,723],[77,126,143,144,654,659,661,663,694,696,709,718,723,726],[77,126,143,144,710,714,715,716,717,726],[77,126,143,144,654,658,663,694,696,706,709,711,715,716,718,723,726],[77,126,143,144,654,661,712,714,718,726],[77,126,143,144,654,659,663,694,708,709,718,723],[77,126,143,144,654,659,661,662,663,691,694,698,706,709,712,713,718,723,726],[77,126,143,144,657,658,659,661,662,663,694,698,706,713,714,723,725],[77,126,143,144,654,659,661,663,664,694,696,709,718,723,726],[77,126,143,144,654,694,725],[77,126,143,144,654,659,663,708,718,722,726],[77,126,143,144,661,662,663,706,715],[77,126,143,144,654,658,665,690,691,692,693,695,696,885],[77,126,143,144,664,665,691,692,693,694,695,714,725,732,734,885],[77,126,143,144,654,663],[77,126,143,144,654,662,663,698,706,713,715,724,885],[77,126,143,144,658,663,664],[77,126,143,144,778,779,787],[77,126,143,144,654,705,778],[77,126,143,144,739,740,741,742,743,745,746,747,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,886],[77,126,143,144,654,664,738,749,885],[77,126,143,144,654,664,738,885],[77,126,143,144,654,659,664,738,885],[77,126,143,144,654,659,663,664,736,737,778,885],[77,126,143,144,654,659,663,664,738,778,885],[77,126,143,144,654,738,885],[77,126,143,144,654,659,664,738,744,885],[77,126,143,144,654,659,664,738,778,885],[77,126,143,144,738,739,740,741,742,743,745,746,747,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,794,886],[77,126,143,144,654,738,748,885],[77,126,143,144,654,664,738,751,885],[77,126,143,144,654,664,738,778,885],[77,126,143,144,654,664,738,744,751,778,885],[77,126,143,144,654,659,664,738,744,778,885],[77,126,143,144,654,659,661,663,708,778,779,780,782,786,787,792,793,887,888,889,890,891],[77,126,143,144,654,655,659,663,708,778,782,786,787,793,887],[77,126,143,144,654,778,887],[77,126,143,144,735,736,737,748,774,775,776,777,778,780,782,785,786,788,793,795,796,798,887,888,892],[77,126,143,144,654,663,778,887],[77,126,143,144,654,663,774,778],[77,126,143,144,654,659,663,778,782],[77,126,143,144,654,661,662,663,706,709,711,778,782,787,888],[77,126,143,144,783,784,787,789,790,791,792],[77,126,143,144,654,658,661,662,663,706,709,711,737,738,778,782,784,787,790,888],[77,126,143,144,654,661,663,780,783,787,887,888],[77,126,143,144,654,659,663,708,709,711,778,782,888],[77,126,143,144,654,663,709,711,781],[77,126,143,144,654,663,709,711,782,786,888],[77,126,143,144,654,659,661,662,663,706,709,711,778,779,780,782,787,887,888],[77,126,143,144,657,658,659,661,662,663,706,778,779,782,783,786,887],[77,126,143,144,654,658,659,661,662,663,664,706,709,711,738,778,779,782,787,888],[77,126,143,144,654,663,748,778,786,794],[77,126,143,144,654,659,705,708,781,787,888,892],[77,126,143,144,661,662,663,706,784],[77,126,143,144,654,658,735,736,737,738,773,775,776,777,885],[77,126,143,144,664,732,735,736,737,775,776,777,778,786,799,885,887],[77,126,143,144,797],[77,126,143,144,654,659,662,663,706,738,779,784,785,885],[77,126,143,144,653,654,659,892,893],[77,126,143,144,893,894],[77,126,143,144,655,894],[77,126,143,144,653,654,656,659,663,708,782,787,799,888],[77,126,143,144,654,705],[77,126,143,144,657,658,659,661,663,664,885],[77,126,143,144,654,658,659,663,664,701,707],[77,126,143,144,885],[77,126,143,144,732],[77,126,143,144,829,846],[77,126,143,144,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,819,820,821,822,823,824,831],[77,126,143,144,654,664,830,885],[77,126,143,144,654,659,664,830,885],[77,126,143,144,654,659,664,829,885],[77,126,143,144,654,659,663,664,829,830,885],[77,126,143,144,654,659,664,829,830,885],[77,126,143,144,654,659,664,705,830,885],[77,126,143,144,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,819,820,821,822,823,824,830,831],[77,126,143,144,654,664,810,830,885],[77,126,143,144,654,659,664,818,885],[77,126,143,144,654,661,663,708,829,836,838,839,840,843,845,846],[77,126,143,144,654,655,659,663,708,829,830,833,834,835,845,846],[77,126,143,144,826,827,828,829,832,836,840,843,844,845,847,848,849],[77,126,143,144,654,663,829,832],[77,126,143,144,654,829,832],[77,126,143,144,654,663,829,845],[77,126,143,144,654,659,661,663,709,829,830,836,845,846],[77,126,143,144,833,834,835,841,842,846],[77,126,143,144,654,658,663,709,711,829,830,834,836,845,846],[77,126,143,144,654,661,836,840,841,846],[77,126,143,144,654,659,661,662,663,706,709,829,832,836,840,845,846],[77,126,143,144,657,658,659,661,662,663,706,829,832,841,845],[77,126,143,144,654,659,661,663,664,709,829,830,836,845,846],[77,126,143,144,654,829],[77,126,143,144,654,659,663,708,836,844,846],[77,126,143,144,661,662,663,706,842],[77,126,143,144,654,658,825,826,827,828,830,885],[77,126,143,144,664,826,827,828,829,850,885],[77,126,143,144,654,656,659,708,836,837,844],[77,126,143,144,654,656,659,663,708,836,845,846],[77,126,143,144,663,664],[77,126,143,144,699,700],[77,126,143,144,702,703],[77,126,143,144,663,664,706],[77,126,143,144,663,701,704],[77,126,143,144,654,658,659,660,661,662,664],[77,126,143,144,859,877,882],[77,126,143,144,654,663,877],[77,126,143,144,852,872,873,874,875,880],[77,126,143,144,654,659,664,879,885],[77,126,143,144,654,659,663,664,877,878,885],[77,126,143,144,654,659,663,664,877,879,885],[77,126,143,144,852,872,873,874,875,879,880],[77,126,143,144,654,659,664,871,877,879,885],[77,126,143,144,654,664,879,885],[77,126,143,144,654,659,664,877,879,885],[77,126,143,144,654,659,661,663,708,856,857,858,859,862,867,868,877,882],[77,126,143,144,654,655,659,663,708,862,867,877,881,882],[77,126,143,144,654,877,881],[77,126,143,144,851,853,854,855,858,860,862,867,868,870,871,877,878,881,883],[77,126,143,144,654,663,877,881],[77,126,143,144,654,663,862,870,877],[77,126,143,144,654,659,661,662,663,709,711,862,868,877,879,882],[77,126,143,144,863,864,865,866,869,882],[77,126,143,144,654,659,661,662,663,706,709,711,853,862,864,868,869,877,879,882],[77,126,143,144,654,661,858,866,868,882],[77,126,143,144,654,659,663,708,709,711,862,868,877],[77,126,143,144,654,663,709,711,781,868],[77,126,143,144,654,659,661,662,663,706,709,711,858,859,862,868,877,881,882],[77,126,143,144,657,658,659,661,662,663,706,859,862,866,870,877,881],[77,126,143,144,654,659,661,662,663,664,709,711,859,862,868,877,879,882],[77,126,143,144,654,663,708,709,781,860,861,868,882],[77,126,143,144,661,662,663,706,869],[77,126,143,144,654,658,851,853,854,855,876,878,879,885],[77,126,143,144,654,877,879],[77,126,143,144,732,851,853,854,855,870,877,878,884],[77,126,143,144,654,662,663,706,859,869,879,885],[77,126,143,144,654,657,659,663,664],[77,126,143,144,656,658,663,664],[77,126,143,144,964,965],[77,126,143,144,964,965,966,967],[77,126,143,144,964,966],[77,126,143,144,964],[77,126,143,144,473,477,951,954,957,974,975,976],[77,126,143,144,958],[63,77,126,143,144,951,957,976],[77,126,143,144,473,477,954,957,974],[77,126,143,144,473],[77,126,143,144,951,957],[77,126,143,144,942,943,944,951,952,953,955,957,958],[77,126,143,144,955,957],[77,126,143,144,942],[77,126,143,144,957],[77,126,143,144,954,957],[77,126,143,144,941,954],[77,126,143,144,940,950,952,957],[77,126,143,144,927,951,957],[77,126,143,144,946,947,951,957],[77,126,143,144,945,948,949,950,957],[77,126,143,144,948,957],[77,126,143,144,913,942,946,951,954,957],[77,126,143,144,913,939,940,941,951,954,955,956],[77,126,143,144,945],[63,77,126,143,144,951,957,2123],[69,77,126,143,144],[77,126,143,144,424],[77,126,143,144,431],[77,126,143,144,185,199,200,201,203,418],[77,126,143,144,185,224,226,228,229,232,418,420],[77,126,143,144,185,189,191,192,193,194,195,407,418,420],[77,126,143,144,418],[77,126,143,144,200,302,388,397,414],[77,126,143,144,185],[77,126,143,144,182,414],[77,126,143,144,236],[77,126,143,144,235,418,420],[77,126,140,143,144,284,302,331,475],[77,126,140,143,144,295,311,397,413],[77,126,140,143,144,349],[77,126,143,144,401],[77,126,143,144,400,401,402],[77,126,143,144,400],[71,77,126,140,143,144,182,185,189,192,196,197,198,200,204,212,213,342,367,398,418,421],[77,126,143,144,185,202,220,224,225,230,231,418,475],[77,126,143,144,202,475],[77,126,143,144,213,220,282,418,475],[77,126,143,144,475],[77,126,143,144,185,202,203,475],[77,126,143,144,227,475],[77,126,143,144,196,399,406],[77,126,143,144,152,244,414],[77,126,143,144,244,414],[63,77,126,143,144,303],[77,126,143,144,299,347,414,457,458],[77,126,143,144,394,451,452,453,454,456],[77,126,143,144,393],[77,126,143,144,393,394],[77,126,143,144,193,343,344,345],[77,126,143,144,343,346,347],[77,126,143,144,455],[77,126,143,144,343,347],[63,77,126,143,144,186,445],[63,77,126,143,144,169],[63,77,126,143,144,202,272],[63,77,126,143,144,202],[77,126,143,144,270,274],[63,77,126,143,144,271,423],[77,126,143,144,2120],[63,67,77,126,140,143,144,176,177,178,179,180,181,421,467,468],[77,126,140,143,144],[77,126,140,143,144,189,251,343,353,368,388,403,404,418,419,475],[77,126,143,144,212,405],[77,126,143,144,421],[77,126,143,144,184],[63,77,126,143,144,284,298,310,320,322,413],[77,126,143,144,152,284,298,319,320,321,413,474],[77,126,143,144,313,314,315,316,317,318],[77,126,143,144,315],[77,126,143,144,319],[77,126,143,144,242,243,244,246],[63,77,126,143,144,237,238,239,245],[77,126,143,144,242,245],[77,126,143,144,240],[77,126,143,144,241],[63,77,126,143,144,244,271,423],[63,77,126,143,144,244,422,423],[63,77,126,143,144,244,423],[77,126,143,144,368,410],[77,126,143,144,410],[77,126,140,143,144,419,423],[77,126,143,144,307],[77,125,126,143,144,306],[77,126,143,144,214,252,290,292,294,295,296,297,340,343,413,416,419],[77,126,143,144,214,328,343,347],[77,126,143,144,295,413],[63,77,126,143,144,295,304,305,307,308,309,310,311,312,323,324,325,326,327,329,330,413,414,475],[77,126,143,144,289],[77,126,140,143,144,152,214,215,251,266,296,340,341,342,347,368,388,409,418,419,420,421,475],[77,126,143,144,413],[77,125,126,143,144,200,293,296,342,409,411,412,419],[77,126,143,144,295],[77,125,126,143,144,251,256,285,286,287,288,289,290,291,292,294,413,414],[77,126,140,143,144,256,257,285,419,420],[77,126,143,144,200,342,343,368,409,413,419],[77,126,140,143,144,418,420],[77,126,140,143,144,158,416,419,420],[77,126,140,143,144,152,169,182,189,202,214,215,217,252,253,258,263,266,292,296,343,353,355,358,360,363,364,365,366,367,388,408,409,414,416,418,419,420],[77,126,140,143,144,158],[77,126,143,144,185,186,187,189,194,197,202,220,408,416,417,421,423,475],[77,126,140,143,144,158,169,232,234,236,237,238,239,246,475],[77,126,143,144,152,169,182,224,234,262,263,264,265,292,343,358,367,368,374,377,378,388,409,414,416],[77,126,143,144,196,197,212,342,367,409,418],[77,126,140,143,144,169,186,189,292,372,416,418],[77,126,143,144,283],[77,126,140,143,144,375,376,385],[77,126,143,144,416,418],[77,126,143,144,290,293],[77,126,143,144,292,296,408,423],[77,126,140,143,144,152,218,224,265,358,368,374,377,380,416],[77,126,140,143,144,196,212,224,381],[77,126,143,144,185,217,383,408,418],[77,126,140,143,144,169,418],[77,126,140,143,144,202,216,217,218,229,247,382,384,408,418],[71,77,126,143,144,214,296,387,421,423],[77,126,140,143,144,152,169,189,196,204,212,215,252,258,262,263,264,265,266,292,343,355,368,369,371,373,388,408,409,414,415,416,423],[77,126,140,143,144,158,196,374,379,385,416],[77,126,143,144,207,208,209,210,211],[77,126,143,144,253,359],[77,126,143,144,361],[77,126,143,144,359],[77,126,143,144,361,362],[77,126,140,143,144,189,192,193,251,419],[77,126,140,143,144,152,184,186,214,252,266,296,351,352,388,416,420,421,423],[77,126,140,143,144,152,169,188,193,292,352,415,419],[77,126,143,144,285],[77,126,143,144,286],[77,126,143,144,287],[77,126,143,144,414],[77,126,143,144,233,249],[77,126,140,143,144,189,233,252],[77,126,143,144,248,249],[77,126,143,144,250],[77,126,143,144,233,234],[77,126,143,144,233,267],[77,126,143,144,233],[77,126,143,144,253,357,415],[77,126,143,144,356],[77,126,143,144,234,414,415],[77,126,143,144,354,415],[77,126,143,144,234,414],[77,126,143,144,340],[77,126,143,144,189,194,252,281,284,290,292,296,298,301,332,335,339,343,387,408,416,419],[77,126,143,144,275,278,279,280,299,300,347],[63,77,126,143,144,179,181,244,333,334],[63,77,126,143,144,179,181,244,333,334,338],[77,126,143,144,396],[77,126,143,144,200,257,295,296,307,311,343,387,389,390,391,392,394,395,398,408,413,418],[77,126,143,144,347],[77,126,143,144,351],[77,126,140,143,144,252,268,348,350,353,387,416,421,423],[77,126,143,144,275,276,277,278,279,280,299,300,347,422],[71,77,126,140,143,144,152,169,215,233,234,266,292,296,385,386,388,408,409,418,419,421],[77,126,143,144,257,259,262,409],[77,126,140,143,144,253,418],[77,126,143,144,256,295],[77,126,143,144,255],[77,126,143,144,257,258],[77,126,143,144,254,256,418],[77,126,140,143,144,188,257,259,260,261,418,419],[63,77,126,143,144,343,344,346],[77,126,143,144,219],[63,77,126,143,144,186],[63,77,126,143,144,414],[63,71,77,126,143,144,266,296,421,423],[77,126,143,144,186,445,446],[63,77,126,143,144,274],[63,77,126,143,144,152,169,184,231,269,271,273,423],[77,126,143,144,202,414,419],[77,126,143,144,370,414],[77,126,143,144,343],[63,77,126,138,140,143,144,152,184,220,226,274,421,422],[63,77,126,143,144,177,178,179,180,181,421,469],[63,64,65,66,67,77,126,143,144],[77,126,131,143,144],[77,126,143,144,221,222,223],[77,126,143,144,221],[63,67,77,126,140,142,143,144,152,176,177,178,179,180,181,182,184,215,319,380,418,420,423,469],[77,126,143,144,433],[77,126,143,144,435],[77,126,143,144,437],[77,126,143,144,2121],[77,126,143,144,439],[77,126,143,144,441,442,443],[77,126,143,144,447],[68,70,77,126,143,144,425,430,432,434,436,438,440,444,448,450,460,461,463,473,474,475,476],[77,126,143,144,449],[77,126,143,144,459],[77,126,143,144,271],[77,126,143,144,462],[77,125,126,143,144,257,259,260,262,310,414,464,465,466,469,470,471,472],[77,126,143,144,176],[77,126,143,144,486],[77,126,127,138,143,144,158,484,485],[77,126,143,144,488],[77,126,143,144,487],[77,126,143,144,508],[77,126,143,144,506,508],[77,126,143,144,497,505,506,507,509,511],[77,126,143,144,495],[77,126,143,144,498,503,508,511],[77,126,143,144,494,511],[77,126,143,144,498,499,502,503,504,511],[77,126,143,144,498,499,500,502,503,511],[77,126,143,144,495,496,497,498,499,503,504,505,507,508,509,511],[77,126,143,144,511],[77,126,143,144,493,495,496,497,498,499,500,502,503,504,505,506,507,508,509,510],[77,126,143,144,493,511],[77,126,143,144,498,500,501,503,504,511],[77,126,143,144,502,511],[77,126,143,144,503,504,508,511],[77,126,143,144,496,506],[77,126,143,144,158],[77,126,143,144,926],[77,126,143,144,927],[77,126,143,144,541,550,551],[77,126,143,144,540,541],[77,126,143,144,513,514],[77,126,143,144,512,515],[77,126,143,144,598,599,600,602,603,604,605,606],[77,126,143,144,601],[77,126,143,144,608],[77,126,143,144,611,617,619,620,621],[77,126,143,144,610],[77,126,143,144,607],[77,126,143,144,158,614,615,616],[77,126,143,144,614,618],[77,126,143,144,614],[77,126,143,144,609,610,618,621,622,623],[77,126,143,144,607,616,624,625,628,634],[77,126,143,144,624,631,632,633],[77,126,143,144,624,632],[77,126,143,144,158,616,630],[77,126,143,144,630],[77,126,143,144,607,616,625,639],[77,126,143,144,158,614,616,624,625,626,628,629,630,638],[77,126,143,144,158,614,616,627,628,630],[77,126,143,144,607,616,624,625,626,627,628,629,630,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,650,651],[77,126,143,144,607,614,624],[77,126,143,144,624],[77,126,143,144,630,636,639],[77,126,143,144,158,616,625,626,628,629],[77,126,143,144,158,608,615],[77,126,143,144,616,624,626],[77,126,143,144,614,627,628],[77,126,143,144,614,628],[77,126,143,144,614,624,627,628],[77,126,143,144,614,627],[77,126,143,144,628,645,647,648,649],[77,91,95,126,143,144,169],[77,91,126,143,144,158,169],[77,86,126,143,144],[77,88,91,126,143,144,166,169],[77,126,143,144,146,166],[77,86,126,143,144,176],[77,88,91,126,143,144,146,169],[77,83,84,87,90,126,137,143,144,158,169],[77,91,98,126,143,144],[77,83,89,126,143,144],[77,91,112,113,126,143,144],[77,87,91,126,143,144,161,169,176],[77,112,126,143,144,176],[77,85,86,126,143,144,176],[77,91,126,143,144],[77,85,86,87,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,115,116,117,118,126,143,144],[77,91,106,126,143,144],[77,91,98,99,126,143,144],[77,89,91,99,100,126,143,144],[77,90,126,143,144],[77,83,86,91,126,143,144],[77,91,95,99,100,126,143,144],[77,95,126,143,144],[77,89,91,94,126,143,144,169],[77,83,88,91,98,126,143,144],[77,86,91,112,126,143,144,174,176],[77,126,143,144,551,577],[77,126,143,144,537],[77,126,137,138,140,141,142,143,144,146,158,166,169,175,176,512,537,538,539,541,542,544,545,546,547,548,549,550,551],[77,126,143,144,537,538,539,543],[77,126,143,144,539],[77,126,143,144,541,551],[77,126,143,144,568],[77,126,143,144,536,577,961],[77,126,143,144,519,520,522,523,524,527,529,530,554,555,557,564,565,567,961],[77,126,143,144,529,571,572,961],[77,126,143,144,529,555,559,961],[77,126,143,144,519,527,529,554,961],[77,126,143,144,544],[77,126,143,144,519,529,536,554,556,573,961],[77,126,143,144,551,575,577],[77,126,129,138,143,144,158,519,524,527,529,536,551,554,555,556,557,559,560,563,564,565,569,570,573,574,577,961],[77,126,143,144,529,544,554,555,961],[77,126,143,144,529,571,572,573,961],[77,126,143,144,529,544,556,557,558,961],[77,126,129,138,143,144,158,519,524,527,529,536,544,551,554,555,556,557,558,559,560,563,564,565,569,570,571,572,573,574,575,576,577,961],[77,126,143,144,519,524,527,529,530,536,544,554,555,556,557,558,559,560,571,572,573,961,962,963,968],[77,126,143,144,996],[77,126,143,144,987,988],[77,126,143,144,984,985,987,989,990,995],[77,126,143,144,985,987],[77,126,143,144,995],[77,126,143,144,987],[77,126,143,144,984,985,987,990,991,992,993,994],[77,126,143,144,984,985,986],[77,126,143,144,2016,2017],[77,126,143,144,2016],[77,126,143,144,490,491],[77,126,143,144,938,969],[63,77,126,143,144,450,460,2013,2124],[63,77,126,143,144,450,460,1000,2013,2124],[63,77,126,143,144,460,935,2013,2020,2021,2056,2057,2059,2067,2072,2080,2111,2124,2129,2140,2141,2326,2327,2328],[63,77,126,143,144,460,935,2013,2020,2021,2058,2059,2076,2080,2129,2140,2141],[63,77,126,143,144,2013,2057,2129,2330],[63,77,126,143,144,460,2013,2124,2129],[63,77,126,143,144,460,1032,2013,2057,2059,2124,2129],[63,77,126,143,144,935,977,1662,2013,2064,2118,2124,2129],[63,77,126,143,144,460,935,2013,2057,2067,2074,2124,2129,2326,2333],[77,126,143,144,998],[77,126,143,144,969,1001],[77,126,143,144,473,1000],[77,126,143,144,969,971,972,973,1011],[77,126,143,144,473,732,935,936,1003,1004,1007,1008,1009],[77,126,143,144,969,972,973,1013],[77,126,143,144,473,732,935,936,1003,1004,1006,1007],[77,126,143,144,969,972,973,1015],[77,126,143,144,473,732,935,936,1003,1004,1006],[77,126,143,144,969,971,972,973,1010],[77,126,143,144,969,972,973,1018],[77,126,143,144,473,1003,1006,1008],[77,126,143,144,969,971,972,973,1021],[77,126,143,144,969,972,973,1023],[77,126,143,144,473,732,935,936,1003],[77,126,143,144,969,971,1026],[77,126,143,144,473,732,935,936,1003,1025],[77,126,143,144,473,732,935,936,997,1003,1009],[77,126,143,144,969,971,972,973,1028],[77,126,143,144,969,971,972,973,1020],[77,126,143,144,969,971,972,973,1033],[77,126,143,144,473,732,935,936,997,1003,1031,1032],[77,126,143,144,969,1035],[77,126,143,144,969,1038],[77,126,143,144,473,1037],[77,126,143,144,969,972,973,1040,1041],[77,126,143,144,473,732,935,936,997,1003,1004,1006,1009,1040],[77,126,143,144,969,972,973,1043],[77,126,143,144,473,732,935,936,997,1003,1004,1006,1009],[77,126,143,144,969,971,972,973,1046],[77,126,143,144,969,971,972,973,1045],[77,126,143,144,473,732,911,935,936,997,1003,1009],[77,126,143,144,969,1051],[77,126,143,144,473,732,935,936,997,1003,1049],[77,126,143,144,969,1050],[77,126,143,144,473,997],[77,126,143,144,477,2122,2125],[77,126,143,144,969,2014],[77,126,143,144,969,2020,2021],[77,126,143,144,969,2020],[77,126,143,144,935,969],[63,77,126,143,144,935,2013,2020,2066,2074,2079,2081,2082,2129,2138],[63,77,126,143,144,436,2013,2020,2073,2074,2129,2133,2134,2136,2137],[63,77,126,143,144,2013,2059,2129],[63,77,126,143,144,935,2013,2020,2021,2056,2074,2078,2081,2129,2139],[63,77,126,143,144,2013],[63,77,126,143,144,2013,2056,2063,2068,2077,2124,2132],[63,77,126,143,144,179,181,2013,2073,2074,2112],[63,77,126,143,144,935,2013,2129],[63,77,126,143,144,2013,2020,2063,2124,2132],[63,77,126,143,144,2013,2056,2124],[63,77,126,143,144,935,2013,2067,2074],[63,77,126,143,144,1662,2013],[63,77,126,143,144,935,2013,2020,2057,2060,2066,2067,2074,2075,2077,2079,2083,2129,2139,2143,2144,2319,2320,2321,2323,2325],[77,126,143,144,969,2024],[63,77,126,143,144,935,2013,2024,2129,2322],[77,126,143,144,2013,2074,2129],[77,126,143,144,2013],[63,77,126,143,144,2013,2020,2024,2077,2129,2177,2291,2318],[63,77,126,143,144,2013,2129],[77,126,143,144,2013,2320],[77,126,143,144,436,2013,2074,2129],[63,77,126,143,144,935,2013,2024,2129,2177,2291,2318,2322,2324],[77,126,143,144,969,2058],[77,126,143,144,969,2065,2066],[77,126,143,144,2056],[77,126,143,144,935,2056],[77,126,143,144,2056,2061],[63,77,126,143,144,2013,2056],[63,77,126,143,144,2013,2020,2056,2065],[77,126,143,144,937],[77,126,143,144,937,969],[77,126,143,144,969,2071],[77,126,143,144,969,2074],[77,126,143,144,935,969,2075],[77,126,143,144,969,1004],[77,126,143,144,935,969,1025],[77,126,143,144,935,969,1031],[77,126,143,144,969,2076],[77,126,143,144,969,2065],[77,126,143,144,969,2077],[77,126,143,144,969,2020,2078],[77,126,143,144,969,2079],[77,126,143,144,935,969,2080],[77,126,143,144,969,1032],[77,126,143,144,969,2073],[77,126,143,144,969,1005],[77,126,143,144,969,1040],[77,126,143,144,969,2081],[77,126,143,144,935,969,2082],[77,126,143,144,969,2083],[77,126,143,144,969,1003],[77,126,143,144,969,1000],[77,126,143,144,732,911,935,936,977,978,983,997,2118],[77,126,143,144,935,998],[77,126,131,143,144,732,911,935,936,997],[77,126,143,144,911,935,936],[77,126,143,144,2071],[77,126,143,144,2013,2073],[77,126,143,144,935],[77,126,143,144,935,997],[77,126,143,144,148,653,895,896,969,2108],[77,126,143,144,653,895,935],[77,126,143,144,799,934],[77,126,143,144,2020],[77,126,143,144,2020,2021],[77,126,143,144,935,1025],[77,126,143,144,1005],[77,126,143,144,1006],[77,126,143,144,997],[77,126,143,144,473,959,2118],[77,126,143,144,969,2110],[77,126,143,144,969,2111],[77,126,143,144,969,2112],[77,126,143,144,969,2061],[77,126,143,144,2018],[77,126,143,144,935,2018],[77,126,143,144,2013,2018],[77,126,143,144,2018,2019],[77,126,143,144,935,959,969,977,2118],[77,126,143,144,935,959,977],[77,126,143,144,516,517],[77,126,143,144,578,579],[77,126,143,144,1687,1689,1691],[77,126,143,144,1689,1691],[77,126,143,144,1688,1689,1693,1694],[77,126,143,144,1687,1688,1689,1690,1691,1692],[77,126,143,144,1689,1693],[77,126,143,144,1689,1690],[77,126,143,144,1162],[77,126,143,144,1163],[77,126,143,144,1162,1163,1164,1165,1166,1167,1168],[77,126,143,144,1687],[77,126,143,144,1723,1724,1725,1726,1729,1730,1731,1732,1986,1987],[77,126,143,144,1723,1725],[77,126,143,144,1725],[77,126,143,144,1724,1725,1726,1727,1728],[77,126,143,144,1723,1724],[77,126,143,144,1724],[77,126,143,144,1723,1725,1729],[77,126,143,144,1725,1789,1985],[77,126,143,144,1723,1988],[77,126,143,144,1991,1992,1993,1994,1995,1996,1997,1998],[77,126,143,144,1988],[77,126,143,144,1988,1990],[77,126,143,144,1056,1988],[77,126,143,144,1989,2000,2001,2002],[77,126,143,144,1056,1988,2000],[77,126,143,144,1989,1999],[77,126,143,144,1123,1988],[77,126,143,144,1056,1112,1113,1152],[77,126,143,144,1056,1112,1134],[77,126,143,144,1056,1113],[77,126,143,144,1056,1065,1070],[77,126,143,144,1056],[77,126,143,144,1056,1112,1113,1123],[77,126,143,144,1056,1112,1113],[77,126,143,144,1056,1112,1113,1114,1115,1119],[77,126,143,144,1056,1112,1113,1138],[77,126,143,144,1056,1065],[77,126,143,144,1056,1112,1113,1114,1115,1118,1119,1126],[77,126,143,144,1056,1112,1113,1114,1155],[77,126,143,144,1056,1112,1113,1114,1115,1118,1119],[77,126,143,144,1056,1112,1113,1116,1117],[77,126,143,144,1056,1112,1113,1126],[77,126,143,144,1056,1112,1113,1114],[77,126,143,144,1056,1112,1113,1114,1118,1119],[77,126,143,144,1642],[77,126,143,144,1627,1650],[77,126,143,144,1650],[77,126,143,144,1650,1661],[77,126,143,144,1636,1650,1661],[77,126,143,144,1641,1650,1661],[77,126,143,144,1631,1650],[77,126,143,144,1639,1650,1661],[77,126,143,144,1637],[77,126,143,144,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660],[77,126,143,144,1640],[77,126,143,144,1627,1628,1629,1630,1631,1632,1633,1634,1635,1637,1638,1640,1642,1643,1644,1645,1646,1647,1648,1649],[77,126,143,144,2005],[62,77,126,143,144,1054],[77,126,143,144,1058,1059],[77,126,143,144,1058],[77,126,143,144,1056,1134],[77,126,143,144,1173],[77,126,143,144,1171,1173],[77,126,143,144,1171],[77,126,143,144,1173,1237,1238],[77,126,143,144,1173,1240],[77,126,143,144,1173,1241],[77,126,143,144,1258],[77,126,143,144,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426],[77,126,143,144,1173,1334],[77,126,143,144,1171,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522],[77,126,143,144,1173,1238,1358],[77,126,143,144,1171,1355,1356],[77,126,143,144,1357],[77,126,143,144,1173,1355],[77,126,143,144,1170,1171,1172],[77,126,143,144,1705],[77,126,143,144,1707],[77,126,143,144,1703],[77,126,143,144,1711],[77,126,143,144,1709],[77,126,143,144,1702],[77,126,143,144,1746],[77,126,143,144,1742,1743,1746,1754,1772],[77,126,143,144,1742,1744,1749,1750,1751,1753],[77,126,143,144,1742,1743,1744,1746,1750,1752,1755,1761,1763,1774,1776,1777,1778,1779],[77,126,143,144,1736],[77,126,143,144,1735],[77,126,143,144,1733,1734],[77,126,143,144,1733,1734,1735,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1754,1755,1757,1758,1772,1773,1774,1775,1776,1777,1778,1780,1781,1782,1783,1784,1785,1786,1787,1788],[77,126,143,144,1767],[77,126,143,144,1766],[77,126,143,144,1746,1750,1751,1752,1754,1755],[77,126,143,144,1742],[77,126,143,144,1747,1748,1749,1750,1751,1752,1753,1756,1759,1760,1761,1764,1765,1768,1771],[77,126,143,144,1739,1743,1773],[77,126,143,144,1769,1770],[77,126,143,144,1737,1752,1761,1769],[77,126,143,144,1746,1773,1776,1777],[77,126,143,144,1761],[77,126,143,144,1762,1763],[77,126,143,144,1733,1735],[77,126,143,144,1757,1758],[77,126,143,144,1733,1752],[77,126,143,144,1735,1746],[77,126,143,144,1734],[77,126,143,144,1741],[77,126,143,144,1739,1743],[77,126,143,144,1733,1735,1741,1742],[77,126,143,144,1733,1734,1735,1739,1743,1773,1774],[77,126,143,144,1733,1734,1735,1739,1743,1746,1772],[77,126,143,144,1735,1739,1744,1746,1749,1750,1752,1753,1754,1755,1756,1757,1758,1773,1775,1776],[77,126,143,144,1739,1746,1757,1773],[77,126,143,144,1744,1750,1753,1756,1757],[77,126,143,144,1739,1744,1746,1750,1751,1753,1754,1756,1773],[77,126,143,144,1744,1745],[77,126,143,144,1789,1982],[77,126,143,144,1789,1979,1980,1981,1982,1983,1984],[77,126,143,144,1789],[77,126,143,144,1789,1978],[77,126,143,144,1789,1978,1979,1980,1981],[77,126,143,144,1979,1980],[77,126,143,144,1978,1979,1980],[77,126,143,144,1581],[77,126,143,144,1542],[77,126,143,144,1582],[77,126,143,144,1427,1523,1579,1580],[77,126,143,144,1542,1543,1581,1582],[77,126,143,144,1524,1525,1526,1527,1528,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569],[77,126,143,144,1056,1548,1583],[77,126,143,144,1056,1548],[77,126,143,144,1056,1543],[77,126,143,144,1056,1583],[77,126,143,144,1056,1551],[77,126,143,144,1571,1572,1573,1574,1575,1576,1577],[77,126,143,144,1548],[77,126,143,144,1585],[77,126,143,144,1169,1540,1541,1546,1548,1570,1578,1583,1584,1586,1594],[77,126,143,144,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539],[77,126,143,144,1548,1581],[77,126,143,144,1527,1528,1540,1541,1544,1546,1579],[77,126,143,144,1544,1545,1547,1579],[77,126,143,144,1056,1541,1579,1581],[77,126,143,144,1544,1579],[77,126,143,144,1056,1540,1541,1570,1578],[77,126,143,144,1056,1543,1544,1545,1579,1582],[77,126,143,144,1587,1588,1589,1590,1591,1592,1593],[77,126,143,144,1618],[77,126,143,144,1056,1618,1619,1620,1621,1622,1623],[77,126,143,144,1056,1618,1619,1620,1621],[77,126,143,144,1056,1618],[77,126,143,144,1056,1093],[77,126,143,144,1093,1094,1095,1096,1099,1100,1101,1102,1103,1104,1105,1108,1109],[77,126,143,144,1093],[77,126,143,144,1097,1098],[77,126,143,144,1056,1090,1093],[77,126,143,144,1087,1088,1090],[77,126,143,144,1083,1086,1088,1090],[77,126,143,144,1087,1090],[77,126,143,144,1056,1078,1079,1080,1083,1084,1085,1087,1088,1089,1090],[77,126,143,144,1080,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092],[77,126,143,144,1087],[77,126,143,144,1081,1087,1088],[77,126,143,144,1081,1082],[77,126,143,144,1086,1088,1089],[77,126,143,144,1086],[77,126,143,144,1078,1083,1088,1089],[77,126,143,144,1056,1083,1086,1087,1088],[77,126,143,144,1106,1107],[77,126,143,144,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1806,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1859,1860,1861,1862,1863,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1909,1910,1911,1913,1922,1924,1925,1926,1927,1928,1929,1931,1932,1934,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977],[77,126,143,144,1835],[77,126,143,144,1791,1794],[77,126,143,144,1793],[77,126,143,144,1793,1794],[77,126,143,144,1790,1791,1792,1794],[77,126,143,144,1791,1793,1794,1951],[77,126,143,144,1794],[77,126,143,144,1790,1793,1835],[77,126,143,144,1793,1794,1951],[77,126,143,144,1793,1959],[77,126,143,144,1791,1793,1794],[77,126,143,144,1803],[77,126,143,144,1826],[77,126,143,144,1847],[77,126,143,144,1793,1794,1835],[77,126,143,144,1794,1842],[77,126,143,144,1793,1794,1835,1853],[77,126,143,144,1793,1794,1853],[77,126,143,144,1794,1894],[77,126,143,144,1794,1835],[77,126,143,144,1790,1794,1912],[77,126,143,144,1790,1794,1913],[77,126,143,144,1935],[77,126,143,144,1919,1921],[77,126,143,144,1930],[77,126,143,144,1919],[77,126,143,144,1790,1794,1912,1919,1920],[77,126,143,144,1912,1913,1921],[77,126,143,144,1933],[77,126,143,144,1790,1794,1919,1920,1921],[77,126,143,144,1792,1793,1794],[77,126,143,144,1790,1794],[77,126,143,144,1791,1793,1913,1914,1915,1916],[77,126,143,144,1835,1913,1914,1915,1916],[77,126,143,144,1913,1915],[77,126,143,144,1793,1914,1915,1917,1918,1922],[77,126,143,144,1790,1793],[77,126,143,144,1794,1937],[77,126,143,144,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1836,1837,1838,1839,1840,1841,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910],[77,126,143,144,1923],[77,126,143,144,1056,1712,1713,1714,1715,1716,1717,1718],[77,126,143,144,1056,1062,1704,1706,1708,1710,1712,1713],[77,126,143,144,1712,1715,1716],[77,126,143,144,1056,1067,1142,1713,1988,2003],[77,126,143,144,1713,1714,1715,1716,1719,1720,1721,1722,2004,2007],[77,126,143,144,1056,1062,2006],[77,126,143,144,1062,1068,1715,1716],[77,126,143,144,1712],[77,126,143,144,1056,1062],[77,126,143,144,1056,1062,1064,1067,1121,1122,1130,1144,1671],[77,126,143,144,1056,1062,1151],[77,126,143,144,1056,1062,1121],[77,126,143,144,1062,1122],[77,126,143,144,1056,1062,1063,1121,1142,1598],[77,126,143,144,1062,1063,1137],[77,126,143,144,1062,1063,1068,1121,1140,1673],[77,126,143,144,1056,1062,1064,1067,1122,1600],[77,126,143,144,1062,1069,1144],[77,126,143,144,1062,1069,1121],[77,126,143,144,1056,1062,1624],[77,126,143,144,1062],[77,126,143,144,1062,1063,1121,1140,1662],[77,126,143,144,1056,1062,1063,1069,1076,1121,1142,1598,1662],[77,126,143,144,1063,1121,1122,1662],[77,126,143,144,1063,1121,1140,1662],[77,126,143,144,1056,1062,1125,1161,1662],[77,126,143,144,1056,1062,1063,1121,1142,1427,1595,1596],[77,126,143,144,1056,1063,1064,1067],[77,126,143,144,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1625,1626,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1698,1699,1700],[77,126,143,144,1056,1062,1063,1121],[77,126,143,144,1056,1062,1063,1069,1121,1142,1598],[77,126,143,144,1056,1062,1063],[77,126,143,144,1062,1063,1067,1077,1121,1122],[77,126,143,144,1056,1062,1063,1067,1121,1142,1427,1596],[77,126,143,144,1056,1062,1063,1067,1121,1142,1427,1595,1596],[77,126,143,144,1062,1063,1067],[77,126,143,144,1062,1063,1064,1067,1121,1133],[77,126,143,144,1056,1062,1063,1067,1069,1077,1121,1142,1598],[77,126,143,144,1056,1062,1063,1067,1077,1121,1122,1142,1598],[77,126,143,144,1062,1063,1064,1067,1121],[77,126,143,144,1056,1062,1063,1064,1121],[77,126,143,144,1056,1062,1063,1064,1121,1154],[77,126,143,144,1056,1062,1063,1121,1122,1689,1691,1694,1695,1696,1697],[77,126,143,144,1056,1062,1069,1144],[77,126,143,144,1056,1062,1144],[77,126,143,144,1056,1062,1076],[77,126,143,144,1056,1062,1063,1068,1121,1140],[77,126,143,144,1056,1062,1121,1153],[77,126,143,144,1056,1062,1063,1136],[77,126,143,144,1056,1060,1062],[77,126,143,144,1056,1062,1072],[77,126,143,144,1056,1057,1062,1121],[77,126,143,144,1056,1057,1060,1062],[77,126,143,144,1056,1062,1063,1121,1595],[77,126,143,144,1056,1062,1121,1124],[77,126,143,144,1056,1062,1121,1134,1135,1597],[77,126,143,144,1056,1060,1062,1121,1134],[77,126,143,144,1056,1062,1121,1139],[77,126,143,144,1056,1057,1062,1066,1067,1110],[77,126,143,144,1063,1064,1067,1068,1069,1073,1076,1077,1111,1122,1125,1128,1130,1131,1133,1135,1137,1140,1142,1144,1146,1148,1149,1151,1154,1157,1158,1159,1160,1161,1596,1598],[77,126,143,144,1056,1060,1062,1066],[77,126,143,144,1056,1060,1062,1121,1156],[77,126,143,144,1056,1062,1141],[77,126,143,144,1056,1062,1121,1127],[77,126,143,144,1056,1062,1120,1121],[77,126,143,144,1056,1062,1075],[77,126,143,144,1056,1062,1132],[77,126,143,144,1056,1062,1129],[77,126,143,144,1056,1062,1150],[77,126,143,144,1056,1060,1062,1121,1145],[77,126,143,144,1146,1147],[77,126,143,144,1056,1062,1143],[77,126,143,144,1147,1717,2009,2010],[77,126,143,144,1056,1146],[77,126,143,144,1056,1713],[77,126,143,144,1599,1701,2008,2011,2012],[77,126,143,144,1058,1061]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"c755148d399ea1b6f5ba316df464a49f0462c8b51d3673dfe64d47d0588748bc","affectsGlobalScope":true},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"631eff75b0e35d1b1b31081d55209abc43e16b49426546ab5a9b40bdd40b1f60","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"f949f7f6c7802a338039cfc2156d1fe285cdd1e092c64437ebe15ae8edc854e0","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2bc7425ef40526650d6db7e072c1ff4a51101c3ac2cc4b666623b19496a6e27","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b039f55681caaf111d5eb84d292b9bee9e0131d0db1ad0871eef0964f533c73","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"0dba70b3fb0dcd713fda33c2df64fa6751fff6460e536971cee917260fb17882","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f663c2f91127ef7024e8ca4b3b4383ff2770e5f826696005de382282794b127","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"829b9e6028b29e6a8b1c01ddb713efe59da04d857089298fa79acbdb3cfcfdef","impliedFormat":1},{"version":"24f8562308dd8ba6013120557fa7b44950b619610b2c6cb8784c79f11e3c4f90","impliedFormat":1},{"version":"5d8717b437b9d6afeb4da84b9082db35cafce3dfd025bc7c9ad7abbe50fa2778","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"496bbf339f3838c41f164238543e9fe5f1f10659cb30b68903851618464b98ba","impliedFormat":1},{"version":"5178eb4415a172c287c711dc60a619e110c3fd0b7de01ed0627e51a5336aa09c","impliedFormat":1},{"version":"ca6e5264278b53345bc1ce95f42fb0a8b733a09e3d6479c6ccfca55cdc45038c","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"fb1d8e814a3eeb5101ca13515e0548e112bd1ff3fb358ece535b93e94adf5a3a","impliedFormat":1},{"version":"ffa495b17a5ef1d0399586b590bd281056cee6ce3583e34f39926f8dcc6ecdb5","impliedFormat":1},{"version":"98b18458acb46072947aabeeeab1e410f047e0cacc972943059ca5500b0a5e95","impliedFormat":1},{"version":"361e2b13c6765d7f85bb7600b48fde782b90c7c41105b7dab1f6e7871071ba20","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"b6db56e4903e9c32e533b78ac85522de734b3d3a8541bf24d256058d464bf04b","impliedFormat":1},{"version":"24daa0366f837d22c94a5c0bad5bf1fd0f6b29e1fae92dc47c3072c3fdb2fbd5","impliedFormat":1},{"version":"570bb5a00836ffad3e4127f6adf581bfc4535737d8ff763a4d6f4cc877e60d98","impliedFormat":1},{"version":"889c00f3d32091841268f0b994beba4dceaa5df7573be12c2c829d7c5fbc232c","impliedFormat":1},{"version":"65f43099ded6073336e697512d9b80f2d4fec3182b7b2316abf712e84104db00","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"27ab780875bcbb65e09da7496f2ca36288b0c541abaa75c311450a077d54ec15","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"380647d8f3b7f852cca6d154a376dbf8ac620a2f12b936594504a8a852e71d2f","impliedFormat":1},{"version":"208c9af9429dd3c76f5927b971263174aaa4bc7621ddec63f163640cbd3c473c","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"a23185bc5ef590c287c28a91baf280367b50ae4ea40327366ad01f6f4a8edbc5","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"002eae065e6960458bda3cf695e578b0d1e2785523476f8a9170b103c709cd4f","impliedFormat":1},{"version":"c83bb0c9c5645a46c68356c2f73fdc9de339ce77f7f45a954f560c7e0b8d5ebb","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"72179f9dd22a86deaad4cc3490eb0fe69ee084d503b686985965654013f1391b","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"6a148329edecbda07c21098639ef4254ef7869fb25a69f58e5d6a8b7b69d4236","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"f63ab283a1c8f5c79fabe7ca4ef85f9633339c4f0e822fce6a767f9d59282af2","impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a54c996c8870ef1728a2c1fa9b8eaec0bf4a8001cd2583c02dd5869289465b10","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"3754982006a3b32c502cff0867ca83584f7a43b1035989ca73603f400de13c96","impliedFormat":1},{"version":"a30ae9bb8a8fa7b90f24b8a0496702063ae4fe75deb27da731ed4a03b2eb6631","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"50b5bc34ce6b12eccb76214b51aadfa56572aa6cc79c2b9455cdbb3d6c76af1d","impliedFormat":1},{"version":"b7e16ef7f646a50991119b205794ebfd3a4d8f8e0f314981ebbe991639023d0e","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"e9dd71cf12123419c60dab867d44fbee5c358169f99529121eaef277f5c83531","impliedFormat":1},{"version":"5b6a189ba3a0befa1f5d9cb028eb9eec2af2089c32f04ff50e2411f63d70f25d","impliedFormat":1},{"version":"d6e73f8010935b7b4c7487b6fb13ea197cc610f0965b759bec03a561ccf8423a","impliedFormat":1},{"version":"174f3864e398f3f33f9a446a4f403d55a892aa55328cf6686135dfaf9e171657","impliedFormat":1},{"version":"824c76aec8d8c7e65769688cbee102238c0ef421ed6686f41b2a7d8e7e78a931","impliedFormat":1},{"version":"75b868be3463d5a8cfc0d9396f0a3d973b8c297401d00bfb008a42ab16643f13","impliedFormat":1},{"version":"15a234e5031b19c48a69ccc1607522d6e4b50f57d308ecb7fe863d44cd9f9eb3","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"6dcf60530c25194a9ee0962230e874ff29d34c59605d8e069a49928759a17e0a","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"1a42d2ec31a1fe62fdc51591768695ed4a2dc64c01be113e7ff22890bebb5e3f","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"0c7c947ff881c4274c0800deaa0086971e0bfe51f89a33bd3048eaa3792d4876","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"15b36126e0089bfef173ab61329e8286ce74af5e809d8a72edcafd0cc049057f","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"ad10d4f0517599cdeca7755b930f148804e3e0e5b5a3847adce0f1f71bbccd74","impliedFormat":1},{"version":"1042064ece5bb47d6aba91648fbe0635c17c600ebdf567588b4ca715602f0a9d","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"72d63643a657c02d3e51cd99a08b47c9b020a565c55f246907050d3c8a5e77fb","impliedFormat":1},{"version":"1d415445ea58f8033ba199703e55ff7483c52ac6742075b803bd3e7bbe9f5d61","impliedFormat":1},{"version":"d6406c629bb3efc31aedb2de809bef471e475c86c7e67f3ef9b676b5d7e0d6b2","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"71d8ba39a9e024d9e4bb922464d18542ed8d2c25ee78efa7890c27213cc6e5d3","impliedFormat":1},{"version":"8c030e515014c10a2b98f9f48408e3ba18023dfd3f56e3312c6c2f3ae1f55a16","impliedFormat":1},{"version":"dafc31e9e8751f437122eb8582b93d477e002839864410ff782504a12f2a550c","impliedFormat":1},{"version":"754498c5208ce3c5134f6eabd49b25cf5e1a042373515718953581636491f3c3","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"f56bdc6884648806d34bc66d31cdb787c4718d04105ce2cd88535db214631f82","impliedFormat":1},{"version":"633d58a237f4bb25ec7d565e4ffa32cecdcee8660ac12189c4351c52557cee9e","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"ce791f6ea807560f08065d1af6014581eeb54a05abd73294777a281b6dfd73c2","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"49f95e989b4632c6c2a578cc0078ee19a5831832d79cc59abecf5160ea71abad","impliedFormat":1},{"version":"9666533332f26e8995e4d6fe472bdeec9f15d405693723e6497bf94120c566c8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"e17cd049a1448de4944800399daa4a64c5db8657cc9be7ef46be66e2a2cd0e7c","impliedFormat":1},{"version":"43fa6ea8714e18adc312b30450b13562949ba2f205a1972a459180fa54471018","impliedFormat":1},{"version":"6e89c2c177347d90916bad67714d0fb473f7e37fb3ce912f4ed521fe2892cd0d","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"4d4927cbee21750904af7acf940c5e3c491b4d5ebc676530211e389dd375607a","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"8a97e578a9bc40eb4f1b0ca78f476f2e9154ecbbfd5567ee72943bab37fc156a","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"2d7db1d73456e8c5075387d4240c29a2a900847f9c1bff106a2e490da8fbd457","impliedFormat":1},{"version":"2b15c805f48e4e970f8ec0b1915f22d13ca6212375e8987663e2ef5f0205e832","impliedFormat":1},{"version":"f22d05663d873ee7a600faf78abb67f3f719d32266803440cf11d5db7ac0cab2","impliedFormat":1},{"version":"d93c544ad20197b3976b0716c6d5cd5994e71165985d31dcab6e1f77feb4b8f2","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"a8b1c79a833ee148251e88a2553d02ce1641d71d2921cce28e79678f3d8b96aa","impliedFormat":1},{"version":"126d4f950d2bba0bd45b3a86c76554d4126c16339e257e6d2fabf8b6bf1ce00c","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"2d3cc2211f352f46ea6b7cf2c751c141ffcdf514d6e7ae7ee20b7b6742da313f","impliedFormat":1},{"version":"c75445151ff8b77d9923191efed7203985b1a9e09eccf4b054e7be864e27923d","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"fa8a8fbf91ee2a4779496225f0312aac6635b0f21aa09cdafa4283fe32d519c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e8aef93d79b000deb6ec336b5645c87de167168e184e84521886f9ecc69a4b5","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"de7052bfee2981443498239a90c04ea5cc07065d5b9bb61b12cb6c84313ad4ef","impliedFormat":1},{"version":"a3e7d932dc9c09daa99141a8e4800fc6c58c625af0d4bbb017773dc36da75426","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"4a2edd238d9104eac35b60d727f1123de5062f452b70ed8e0366cb36387dfdfd","impliedFormat":1},{"version":"ca921bf56756cb6fe957f6af693a35251b134fb932dc13f3dfff0bb7106f80b4","impliedFormat":1},{"version":"fee92c97f1aa59eb7098a0cc34ff4df7e6b11bae71526aca84359a2575f313d8","impliedFormat":1},{"version":"0bd0297484aacea217d0b76e55452862da3c5d9e33b24430e0719d1161657225","impliedFormat":1},{"version":"2ab6d334bcbf2aff3acfc4fd8c73ecd82b981d3c3aa47b3f3b89281772286904","impliedFormat":1},{"version":"d07cbc787a997d83f7bde3877fec5fb5b12ce8c1b7047eb792996ed9726b4dde","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"4805f6161c2c8cefb8d3b8bd96a080c0fe8dbc9315f6ad2e53238f9a79e528a6","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"49179c6a23701c642bd99abe30d996919748014848b738d8e85181fc159685ff","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"45490817629431853543adcb91c0673c25af52a456479588b6486daba34f68bb","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"8514c62ce38e58457d967e9e73f128eedc1378115f712b9eef7127f7c88f82ae","impliedFormat":1},{"version":"f1289e05358c546a5b664fbb35a27738954ec2cc6eb4137350353099d154fc62","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"1d17ba45cfbe77a9c7e0df92f7d95f3eefd49ee23d1104d0548b215be56945ad","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"e16344db9b8ee59d41abdb3a61e4470955b5712c0ee869fb47112e152aabe142","impliedFormat":1},{"version":"46273e8c29816125d0d0b56ce9a849cc77f60f9a5ba627447501d214466f0ff3","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"144bc326e90b894d1ec78a2af3ffb2eb3733f4d96761db0ca0b6239a8285f972","impliedFormat":1},{"version":"3af3584f79c57853028ef9421ec172539e1fe01853296dc05a9d615ade4ffaf6","impliedFormat":1},{"version":"f82579d87701d639ff4e3930a9b24f4ee13ca74221a9a3a792feb47f01881a9c","impliedFormat":1},{"version":"d7e5d5245a8ba34a274717d085174b2c9827722778129b0081fefd341cca8f55","impliedFormat":1},{"version":"d9d32f94056181c31f553b32ce41d0ef75004912e27450738d57efcd2409c324","impliedFormat":1},{"version":"752513f35f6cff294ffe02d6027c41373adf7bfa35e593dbfd53d95c203635ee","impliedFormat":1},{"version":"6c800b281b9e89e69165fd11536195488de3ff53004e55905e6c0059a2d8591e","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"1a7e2ea171726446850ec72f4d1525d547ff7e86724cc9e7eec509725752a758","impliedFormat":1},{"version":"8c901126d73f09ecdea4785e9a187d1ac4e793e07da308009db04a7283ec2f37","impliedFormat":1},{"version":"db97922b767bd2675fdfa71e08b49c38b7d2c847a1cc4a7274cb77be23b026f1","impliedFormat":1},{"version":"aab290b8e4b7c399f2c09b957666fc95335eb4522b2dd9ead1bf0cb64da6d6ee","impliedFormat":1},{"version":"94fe3281392e1015b22f39535878610b4fa6f1388dc8d78746be3bc4e4bb8950","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"06c25ddfc2242bd06c19f66c9eae4c46d937349a267810f89783680a1d7b5259","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"bd4131091b773973ca5d2326c60b789ab1f5e02d8843b3587effe6e1ea7c9d86","impliedFormat":1},{"version":"c7f6485931085bf010fbaf46880a9b9ec1a285ad9dc8c695a9e936f5a48f34b4","impliedFormat":1},{"version":"14f6b927888a1112d662877a5966b05ac1bf7ed25d6c84386db4c23c95a5363b","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"0427df5c06fafc5fe126d14b9becd24160a288deff40e838bfbd92a35f8d0d00","impliedFormat":1},{"version":"90c54a02432d04e4246c87736e53a6a83084357acfeeba7a489c5422b22f5c7a","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"83fe880c090afe485a5c02262c0b7cdd76a299a50c48d9bde02be8e908fb4ae6","impliedFormat":1},{"version":"0a372c2d12a259da78e21b25974d2878502f14d89c6d16b97bd9c5017ab1bc12","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"6511e4503cf74c469c60aafd6589e4d14d5eb0a25f9bf043dcbecdf65f261972","impliedFormat":1},{"version":"ec1ca97598eda26b7a5e6c8053623acbd88e43be7c4d29c77ccd57abc4c43999","impliedFormat":1},{"version":"6e2261cd9836b2c25eecb13940d92c024ebed7f8efe23c4b084145cd3a13b8a6","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"a47e6d954d22dd9ebb802e7e431b560ed7c581e79fb885e44dc92ed4f60d4c07","impliedFormat":1},{"version":"f019e57d2491c159d47a107fd90219a1734bdd2e25cd8d1db3c8fae5c6b414c4","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"d1c9bf292a54312888a77bb19dba5e2503ad803f5393beafd45d78d2f4fe9b48","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"cb8d8ef7b9ce8ed3e6f1c814fcbf3f90dab0cb8863079236784fc350746e27c4","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"3be035da7bee86b4c3abf392e0edaa44fc6e45092995eefe36b39118c8a84068","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f828825d077c2fa0ea606649faeb122749273a353daab23924fe674e98ba44c","impliedFormat":1},{"version":"2896c2e673a5d3bd9b4246811f79486a073cbb03950c3d252fba10003c57411a","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"407a06ba04eede4074eec470ecba2784cbb3bf4e7de56833b097dd90a2aa0651","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"5c96bad5f78466785cdad664c056e9e2802d5482ca5f862ed19ba34ffbb7b3a4","impliedFormat":1},{"version":"81d8603ac527e75cfec72bb9391228b58f161c2b33514a9d814c7f3ebd3ef466","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"bb0cd7862b72f5eba39909c9889d566e198fcaddf7207c16737d0c2246112678","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"bad68fd0401eb90fe7da408565c8aee9c7a7021c2577aec92fa1382e8876071a","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"fec01479923e169fb52bd4f668dbeef1d7a7ea6e6d491e15617b46f2cacfa37d","impliedFormat":1},{"version":"8a8fb3097ba52f0ae6530ec6ab34e43e316506eb1d9aa29420a4b1e92a81442d","impliedFormat":1},{"version":"44e09c831fefb6fe59b8e65ad8f68a7ecc0e708d152cfcbe7ba6d6080c31c61e","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"4655709c9cb3fd6db2b866cab7c418c40ed9533ce8ea4b66b5f17ec2feea46a9","impliedFormat":1},{"version":"87affad8e2243635d3a191fa72ef896842748d812e973b7510a55c6200b3c2a4","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"3eecb25bb467a948c04874d70452b14ae7edb707660aac17dc053e42f2088b00","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"330896c1a2b9693edd617be24fbf9e5895d6e18c7955d6c08f028f272b37314d","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"5f0292a40df210ab94b9fb44c8b775c51e96777e14e073900e392b295ca1061b","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"8627ad129bcf56e82adff0ab5951627c993937aa99f5949c33240d690088b803","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"a68d4b3182e8d776cdede7ac9630c209a7bfbb59191f99a52479151816ef9f9e","impliedFormat":99},{"version":"39644b343e4e3d748344af8182111e3bbc594930fff0170256567e13bbdbebb0","impliedFormat":99},{"version":"ed7fd5160b47b0de3b1571c5c5578e8e7e3314e33ae0b8ea85a895774ee64749","impliedFormat":99},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"ecbaf0da125974be39c0aac869e403f72f033a4e7fd0d8cd821a8349b4159628","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"ceec3c81b2d81f5e3b855d9367c1d4c664ab5046dff8fd56552df015b7ccbe8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"8fac4a15690b27612d8474fb2fc7cc00388df52d169791b78d1a3645d60b4c8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"1d63055b690a582006435ddd3aa9c03aac16a696fac77ce2ed808f3e5a06efab","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"85ae5aee75f011967cf2d25cbc342f62d69314e9d925f7f4aa3456fc2cffcca6",{"version":"92d5369f7f9480aac66bbcd295c0b2d82077295c8bf0f0fe08fa3c3321225e49","impliedFormat":99},{"version":"878390f2f3d349610300c7603fb9dff16cfb92fcc6f5fc1f9b262e5bbd6479e5","impliedFormat":99},{"version":"4619213479ced58d78ec8b392a3d18868853b18d38f8eaece2d6fdf93b54fe59","signature":"7d35d1a0606d8bef01f74bcc9b550636bb9b3be02ed5a8f4ed39615ed3f98413"},{"version":"f8734234ef76a28319168f07c8ece98cdbf310d5525fbccd1673d4f791eacff3","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"99a323dc5a6e506c78b69913b32beba93453bcd87aae8b507520234f387a4c30","impliedFormat":1},{"version":"32727845ab5bd8a9ef3e4844c567c09f6d418fcf0f90d381c00652a6f23e7f6e","impliedFormat":1},{"version":"af3c4dcb64b945e01285bc0494e1cfa384fac43b08713a56fc3043c8f861553a","impliedFormat":1},{"version":"7a8ec10b0834eb7183e4bfcd929838ac77583828e343211bb73676d1e47f6f01","impliedFormat":1},{"version":"b05adc58d29cc06ef2cac72df7539527ed2b5af140cfded332f0ba2351731cb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f00324f263189b385c3a9383b1f4dae6237697bcf0801f96aa35c340512d79c","impliedFormat":1},{"version":"ec8997c2e5cea26befc76e7bf990750e96babb16977673a9ff3b5c0575d01e48","impliedFormat":1},{"version":"b16ff2e928d0ee39fa05981f80cf196e4b172115abf36406460a41cdc383749d","impliedFormat":99},{"version":"581fa0c84e5c88af760195c032eab705f2d5b66c9b65584b75315b3a32694d64","signature":"7bca91d9d0ff422e49c9e6ecf5c37910c79c3eb17601d6bf0c13949d53887bd7"},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"8885cf05f3e2abf117590bbb951dcf6359e3e5ac462af1c901cfd24c6a6472e2","impliedFormat":1},{"version":"333caa2bfff7f06017f114de738050dd99a765c7eb16571c6d25a38c0d5365dc","impliedFormat":1},{"version":"e61df3640a38d535fd4bc9f4a53aef17c296b58dc4b6394fd576b808dd2fe5e6","impliedFormat":1},{"version":"459920181700cec8cbdf2a5faca127f3f17fd8dd9d9e577ed3f5f3af5d12a2e4","impliedFormat":1},{"version":"4719c209b9c00b579553859407a7e5dcfaa1c472994bd62aa5dd3cc0757eb077","impliedFormat":1},{"version":"7ec359bbc29b69d4063fe7dad0baaf35f1856f914db16b3f4f6e3e1bca4099fa","impliedFormat":1},{"version":"70790a7f0040993ca66ab8a07a059a0f8256e7bb57d968ae945f696cbff4ac7a","impliedFormat":1},{"version":"d1b9a81e99a0050ca7f2d98d7eedc6cda768f0eb9fa90b602e7107433e64c04c","impliedFormat":1},{"version":"a022503e75d6953d0e82c2c564508a5c7f8556fad5d7f971372d2d40479e4034","impliedFormat":1},{"version":"b215c4f0096f108020f666ffcc1f072c81e9f2f95464e894a5d5f34c5ea2a8b1","impliedFormat":1},{"version":"644491cde678bd462bb922c1d0cfab8f17d626b195ccb7f008612dc31f445d2d","impliedFormat":1},{"version":"dfe54dab1fa4961a6bcfba68c4ca955f8b5bbeb5f2ab3c915aa7adaa2eabc03a","impliedFormat":1},{"version":"1251d53755b03cde02466064260bb88fd83c30006a46395b7d9167340bc59b73","impliedFormat":1},{"version":"47865c5e695a382a916b1eedda1b6523145426e48a2eae4647e96b3b5e52024f","impliedFormat":1},{"version":"4cdf27e29feae6c7826cdd5c91751cc35559125e8304f9e7aed8faef97dcf572","impliedFormat":1},{"version":"331b8f71bfae1df25d564f5ea9ee65a0d847c4a94baa45925b6f38c55c7039bf","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"b558c9a18ea4e6e4157124465c3ef1063e64640da139e67be5edb22f534f2f08","impliedFormat":1},{"version":"01374379f82be05d25c08d2f30779fa4a4c41895a18b93b33f14aeef51768692","impliedFormat":1},{"version":"b0dee183d4e65cf938242efaf3d833c6b645afb35039d058496965014f158141","impliedFormat":1},{"version":"c0bbbf84d3fbd85dd60d040c81e8964cc00e38124a52e9c5dcdedf45fea3f213","impliedFormat":1},{"version":"9688c89e52b4dc1fb91afed9017d78610f3363bef61904c6c17e49afb969fe7a","impliedFormat":1},{"version":"f7923637499df34509b2466baa9132fa80b5f68634f24ecc4447cfe0bd5b9481","signature":"f65ce75c9085571e6321abf2bf9833709f4897e381f89e9925521833dbb7ab16"},{"version":"acfb723d81eda39156251aed414c553294870bf53062429ebfcfba8a68cb4753","impliedFormat":99},{"version":"fa69a90381c2f85889722a911a732a5ee3596dc3acecda8a9aa2fa89b9615d8d","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"57e9e1b0911874c62d743af24b5d56032759846533641d550b12a45ff404bf07","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"854cd3a3375ffc4e7a92b2168dd065d7ff2614b43341038a65cca865a44c00c5","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"2f863ee9b873a65d9c3338ea7aaddbdb41a9673f062f06983d712bd01c25dc6b","impliedFormat":99},{"version":"67aa128c2bc170b93794f191feffc65a4b33e878db211cfcb7658c4b72f7a1f5","impliedFormat":99},{"version":"31fd7c12f6e27154efb52a916b872509a771880f3b20f2dfd045785c13aa813f","impliedFormat":99},{"version":"b481de4ab5379bd481ca12fc0b255cdc47341629a22c240a89cdb4e209522be2","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"4e258d11c899cb9ff36b4b5c53df59cf4a5ccae9a9931529686e77431e0a3518","affectsGlobalScope":true,"impliedFormat":99},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"10073cdcf56982064c5337787cc59b79586131e1b28c106ede5bff362f912b70","impliedFormat":99},{"version":"72950913f4900b680f44d8cab6dd1ea0311698fc1eefb014eb9cdfc37ac4a734","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"ee70b8037ecdf0de6c04f35277f253663a536d7e38f1539d270e4e916d225a3f","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"ff0a83c9a0489a627e264ffcb63f2264b935b20a502afa3a018848139e3d8575","impliedFormat":99},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":1},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":1},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e4af494f7a14b226bbe732e9c130d8811f8c7025911d7c58dd97121a85519715","impliedFormat":1},{"version":"47416e41b1af81e53e8c3cc5bf909d47ff632a7b6eddfe7ff43d187b4dcca047","impliedFormat":99},{"version":"324ac98294dab54fbd580c7d0e707d94506d7b2c3d5efe981a8495f02cf9ad96","impliedFormat":99},{"version":"9ec72eb493ff209b470467e24264116b6a8616484bca438091433a545dfba17e","impliedFormat":99},{"version":"c35b8117804c639c53c87f2c23e0c786df61d552e513bd5179f5b88e29964838","impliedFormat":99},{"version":"ac3d263474022e9a14c43f588f485d549641d839b159ecc971978b90f34bdf6b","impliedFormat":99},{"version":"67acaedb46832d66c15f1b09fb7b6a0b7f41bdbf8eaa586ec70459b3e8896eb9","impliedFormat":99},{"version":"c609331c6ed4ad4af54e101088c6a4dcb48f8db7b0b97e44a6efeb130f4331bd","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"4535ab977ee871e956eb7bebe2db5de79f5d5ec7dfbbf1d35e08f4a2d6630dac","impliedFormat":99},{"version":"b79b5ed99f26ffb2f8ae4bdcc4b34a9542197dc3fa96cfb425c2a81e618cff28","impliedFormat":99},{"version":"213a00d511892898e9dad3c98efe3b1de230f171b9e91496faca3e40e27ef6a7","impliedFormat":99},{"version":"62486ec77ac020b82d5a65a270096bb7f2a1fd0627a89f29c5a5d3cbd6bd1f59","impliedFormat":99},{"version":"c637a793905f02d354b640fae41a6ae79395ed0d77fbb87c36d9664ecbd95ac1","impliedFormat":99},{"version":"437b7613a30a2fcde463f7b707c6d5567a8823fbc51de50b8641bf5b1d126fad","impliedFormat":99},{"version":"63ea959e28c110923f495576e614fb8b36c09b6828b467b2c7cd7f03b03ccf9f","impliedFormat":99},{"version":"1601a95dbb33059fc3d12638ed2a9aecff899e339c5c0f3a0b28768866d385b4","impliedFormat":99},{"version":"a8dd232837b1d83f76a47a5193c1afd9e17b9bf352cb84345f86f7759ee346d0","impliedFormat":99},{"version":"be5fc0dd37f64420b0423059370b8319521e0b58060d7b07b8f62fe1c145b02e","impliedFormat":99},{"version":"45f770f2ae71acc1cacfac137f50911e1a004ccba52b2b55c4432c0d4bd97814","impliedFormat":99},{"version":"8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","impliedFormat":99},{"version":"a5ae67a67f786ffe92d34b55467a40fb50fb0093e92388cadce6168fa42690fd","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"b62006bbc815fe8190c7aee262aad6bff993e3f9ade70d7057dfceab6de79d2f","impliedFormat":99},{"version":"a20c4976da01d1c823b165275cef98a896d4758388c6409bc4ce24f0a5b49900","impliedFormat":99},{"version":"dffffa77f7716aa110e4253c6cd73a067e4729d95c97a538dbb20e58f0eb3e1d","impliedFormat":99},{"version":"0daddd6f389da2b55770e95c9ef8831bf2520aab44fb941bae38bb7ddfe1d6b6","impliedFormat":99},{"version":"7bbff6783e96c691a41a7cf12dd5486b8166a01b0c57d071dbcfca55c9525ec4","impliedFormat":99},{"version":"307f6461299ec378c95c31ec85012b9f613fb21f8376eddc42f6edddadbd0df9","impliedFormat":99},{"version":"a7e29fbd667968e5c6bf6af2ffbe482ef65d10b060a1e70daa5a830525809af5","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},{"version":"f97404f9caeb7c72d2962cb3758462704f1323a2d599a112b7ba4e6b820abc7a","impliedFormat":99},{"version":"a1936fd7bdd911dc2fea8bb2edf2e1eb8765c657a9c0a50de2a7cf4e2fa0ca8d","impliedFormat":1},{"version":"c8422d6032abbd7568d12949846d6e66bdf1f14ec0f9e415ff8ff5597da2857e","signature":"2f6fc229df35f47ef0803fc76a1fdaf24852a4bbf37b205857274a86c5316793"},{"version":"2dea0af9471d1fa4b40b3c1625b50142ae87e6b8936da3e7a1a5ba1b9b698a56","signature":"9213a2a96e9c0016787c6ffcf92ff6f83feb8e9cc00cbdb761ed185a4c02e45b"},{"version":"fe3e42ffddd3cf81f1b16b82c11615af6f6f6e2341f8ca650575d4e867ef3994","signature":"e3dd0830824d49cd87a3f0d1de738657f403b495fbc4767b82f9f2e010679840"},{"version":"68ca3440d7eedc326e8579b5a99dd3c9108f878279bc3f27de088550672650ef","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1d4699f59b1d63c5872e279396e4a8b60ff8d7ada41adc7480f6f7336be734dd","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6d50e68aa1c8e95d8ebe7d949469ba8df796f6dc732eded9a1ec0d7e5930eeb5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e2b22e0d42c47a8af20196712d94899a58a8b8b12d953b40104da39f15f3cd7a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"32b4962531b5a5126e598c9abc2150cadc0d49588bbeb178141186369fca8aac","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1e440652e2b5da8eecf37cdfdebd3bb4e1e84778ed46b2e7665e37c45ea954e2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"0544ff551c2494ff5b48de666b8a67912192918b3d1946a6731af556563ce497","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"95869cf45ef0a72343af4c0bf5dc8c60581d117003bfc0c0368344be2f7e64d3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"562c64dc9a7e6562d2d785e5cda18bf4361b78ec3c20771df0d89504b6efa135","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"212495a0a442be23757abdb29117ee6071d229cff5863619470df87a9b154a48","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c9ce9c8e444eff6c660abe5b3a068ce09092d8e45af40886dd23a71fe0ede779","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"b4357ce801a66aa51425ff88bcd15948865c7541a08dbcd819d1f6ae75521d9d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"06fdbe25e9708ee8c154147d4130547116feb7538905e4a0ddd3897747f00c7a","impliedFormat":1},{"version":"4722fd74708636c5ccae96096d2e8105481d8054b1e9f2ba586380d8beae46e9","impliedFormat":1},{"version":"165b1e657a2e782586d02365c6e647625d1f83b0f86434e223e5ae79c961c413","impliedFormat":1},{"version":"6c92284a2b4829e9ae995011130e1577d383073220af9b1b3b10a875e6dc476c","impliedFormat":1},{"version":"7cc5cca50c261857fe6d0a8e16583c25bbe9b7f3edbb31df83cf7e8f0ac25907","impliedFormat":1},{"version":"5c356da2c84f4878800c653c500dd9532330f0759cc47f8ff3f4371c27598073","impliedFormat":1},{"version":"49598095930a8dadf9c462bf2a408f1aad78146409f223b9ee0a5f89a4e382cd","impliedFormat":1},{"version":"45b3baf59d4817d5691ecd36268fd65154edabfb07befd66e24875b59d0fb4b5","impliedFormat":1},{"version":"01f77442e53ce5e94687cf71eb41da6d9bfc38c8559f96cc08b85d5074fe964f","impliedFormat":1},{"version":"85affae5f55f168321490535b401fd910702cd8903f4d40a3c65942ce6482a5d","impliedFormat":1},{"version":"823fe7c69f291da9622f0775cc5630efbedc75fc079c502c7ba38c816c066858","impliedFormat":1},{"version":"6146c6200c43a0eca96e4c65fc666b37f4db80846217701c8e855217ff924ed7","impliedFormat":1},{"version":"afb5d4e43959a9e5bd99903a6e55db6e33b58570cd33bb46574fa7c64f252ea0","impliedFormat":1},{"version":"abdf8aa11c0105e515fbe6049a8cbe96d58873b1577aa4a7f4c8cb59d9f69486","impliedFormat":1},{"version":"4371055bb001f40596e2e236b27583e13bf11e75d937962f8947d56519237fb8","impliedFormat":1},{"version":"89189df027e8910200a4b65af1e29a996225cf25975f5c438fbe9361c008fc6b","impliedFormat":1},{"version":"4555baaea5dfc93e0c0ba3fc326b0ba3ad50bb2ab887fa2dff49c7da7bd3bcaa","impliedFormat":1},{"version":"0b000f734fad76dcc87c70c90158d691ee409680eceb20e531a133de740f2324","impliedFormat":1},{"version":"bf3d905e4e6459cc1d8e3d7d8f62bc11c8ec8497068720f658c3b03618116ecd","impliedFormat":1},{"version":"0f2267d6bd1f5a43718fb292535aa7586503ea542d67bd9ee0600a36ec8a83ea","impliedFormat":1},{"version":"900c6d7b342ed29604a346d6f680a912f7ef60ba97f44e8cb8d5205041969dec","impliedFormat":1},{"version":"8cae686f3bf9ffdc5fad65592f348a37e2ed743a632a1b605000a2431bc7eaf8","impliedFormat":1},{"version":"8d6b7b77814d3beda2224c9d32ab4e77d373a5225f15573b77eae05f03926ed0","impliedFormat":1},{"version":"1c3a0e3abac99928fb5dec8f42d23b8ad1ebd5f26df08cd0a8dcb0c9d43a503d","impliedFormat":1},{"version":"2cb76131ee7c1b849d730d266f49ad5617a285d7b8ad7ebc1ac2749ae454e222","impliedFormat":1},{"version":"34bf6d81c6b9e84f1d53c2465d521277bea994f8612a0d80417fcdaad37cfbcd","impliedFormat":1},{"version":"f489d5e1bd45c038e9355267b9fa20b2298a372c2a4efcfd5cbf9f0fd7e40627","impliedFormat":1},{"version":"2e59c8382b469370e5c7f60648be896285300a54e25acfb75007422c805c1cc6","impliedFormat":1},{"version":"1729f008e7761ea42cb17aee825ab171ec515cf564ace589685f56114d68f2ab","impliedFormat":1},{"version":"85f7a89a18d98bd7c68cda1289a19a3f7bce2166f0f7c2b9030d8a3eb4f427fb","impliedFormat":1},{"version":"a87fa100939aa190bc186945ab7293b5434e91fe3b137d43f5011adc47ecebf9","impliedFormat":1},{"version":"e560695e9bd123be74cd97ea2070204e15bf437dc7e38277f62e9013f09d0314","impliedFormat":1},{"version":"db86b7554668c4a5ccc4468e2ced875e9aa9b6289d11df31daf8e98d68d1e687","impliedFormat":1},{"version":"0d0d7f5ab1a8a0874ebc447216aaaf3a763d01a7b1dd450e0e6335a99dbe372f","impliedFormat":1},{"version":"c7798f43272b09de550520ead6df45f0ddf81bd97000784351d764df923e08d8","impliedFormat":1},{"version":"bb7973ee7b12dc2d956a74a68d589d2ec72209266509f88edabdfaddfb7ab712","impliedFormat":1},{"version":"fb47996d1fde69f078a79dda6a61c025dad9123d5fe1fdfc6bc2681fed5b9ae6","impliedFormat":1},{"version":"cd334950c884229ac8ab64b6b7ac646a4ca36cd8e894772cfcfbb79f2fb577ad","impliedFormat":1},{"version":"11fe56fbe44194784599e6368d155a9905d657d8b7c4fa0218daeeda194da13b","impliedFormat":1},{"version":"f065153d3b9e0f22d4a4dcddfd6fd902c73af666fd7350979525788e15590533","impliedFormat":1},{"version":"fec5c915e8a25765edc8fbc6f19a57da5bc4809b9191b79ce467fe84b1c43511","impliedFormat":1},{"version":"102ceddeca43cd886fdf6d01c1725fbbffd48bac0ed3b3d5b1eb927e38b07195","impliedFormat":1},{"version":"876112a26ad2bb14c5ecf0ef16e3ae963397c771a2e293173b5704c8aee4441e","impliedFormat":1},{"version":"21136f25b4d5a59b94bbb519552a7114f055dcf5736db41c20967dedce6768e1","impliedFormat":1},{"version":"1bdf93cfb8b270ca905a8dfd106ff88277aef6c70cb72077db4faf75b30b94e3","impliedFormat":1},{"version":"c30b233f5f9c1caf20b0e34e90aba73a631e0ed49cdb1f4f93b6a9fc52ea700d","impliedFormat":1},{"version":"6ac9e5eeb91f4e33a6c9440fad06b6ec59a3b9089f69e192eb3702daf92a41cb","impliedFormat":1},{"version":"c449c814cf771b723f4d747f27e4bebe1ffdf236e86fa2812e781753c39452fa","impliedFormat":1},{"version":"31813f5d800846efe3400b7bdeb442fcaee27915efea787d1f50b8edecca34a5","impliedFormat":1},{"version":"b0d558b2e806df3758ee259b14d9b247c967fb7950b598d19459ab5dce263e54","impliedFormat":1},{"version":"244f1dfd6f31217ab2bf572c8c1083c5c20ae1c7252276649b0104288bd6d053","impliedFormat":1},{"version":"82af965d0bbe372b7cea4ee17c2a96ecbbfe0eecca081c4aeaf63e102affcd88","impliedFormat":1},{"version":"af763fbd7007bf8ea62e6ef71a47ea19ebacf8561f1321b7d53347fb2afbaefd","impliedFormat":1},{"version":"dd54b0c1cc6cbe7b8d11e1802bc8cf7b9fda48a46a11ad20b09304b7f2c7321c","impliedFormat":1},{"version":"24e6cde1a508cca4c07ba5aa2bb0675d9e68e7946e4f424452f8fc0b842c2ae9","impliedFormat":1},{"version":"5ec6ba1674cf73d6a2d42e8ec00ded92f0211a92ae1bf5b1af1dbd1eb84e6ffe","impliedFormat":1},{"version":"c6fe327c538417b8dd5b9bb32abcd7911534b10da3a4514f3445cdb28cf3abf2","impliedFormat":99},{"version":"bb0519ff5ef245bbf829d51ad1f90002de702b536691f25334136864be259ec5","impliedFormat":99},{"version":"0065cdb7ac9f5b19921632de63f888ec2cc11ad57f7fc868f44bf0faad2fce3e","impliedFormat":99},{"version":"1921b8b1513bb282e741587ec802ef76a643a3a56b9ee07f549911eab532ee2e","impliedFormat":99},{"version":"16de02d4e7ae55933e1e310af296e8802753f2f9c60bf7436413b51cae0a451c","impliedFormat":99},{"version":"03200d03f2b750f0bc64cbbeac20d5bacb986dc6b2de4e464b47589ad9c6b740","impliedFormat":99},{"version":"8c1adc3171d0287f3a26f4891a7d1834c89999573a9b444aa5ff519dcc43a2b7","impliedFormat":99},{"version":"a16b99c0d3511955f5abc6c01590b01b062e8375f43816e831cb402c03a09400","impliedFormat":99},{"version":"d03f3549a814f5c5d1a62950349aad23dcf9f830873b78ac59ab7266e5b4a14a","impliedFormat":99},{"version":"5a2cf4cd852a58131b320da62269b2143850920ce27e8fdec41fed5c2c54ec95","impliedFormat":99},{"version":"49fcfda71ea42a9475b530479a547f93d4e88c2deb0c713845243f5c08af8d76","impliedFormat":99},{"version":"4f97089fe15655ae448c9d005bb9a87cc4e599b155edc9e115738c87aa788464","impliedFormat":99},{"version":"2fff037c771e3fe6108b14137e56827197944b855aa2df40f21fa2d8a2758e1e","impliedFormat":99},{"version":"22929f9874783b059156ee3cfa864d6f718e1abf9c139f298a037ae0274186f6","impliedFormat":99},{"version":"c72a7c316459b2e872ca4a9aca36cc05d1354798cee10077c57ff34a34440ac2","impliedFormat":99},{"version":"3e5bbf8893b975875f5325ebf790ab1ab38a4173f295ffea2ed1f108d9b1512c","impliedFormat":99},{"version":"9e4a38448c1d26d4503cf408cc96f81b7440a3f0a95d2741df2459fe29807f67","impliedFormat":99},{"version":"84124d21216da35986f92d4d7d1192ca54620baeca32b267d6d7f08b5db00df9","impliedFormat":99},{"version":"c08976f55a00ddbb3b13a68a9a0d418117f35c6e2d40f1f6f55468fc180a01f0","impliedFormat":99},{"version":"25f5bf39f0785a2976d0af5ac02f5c18ca759cde62bc48dd1d0d99871d9ad86f","impliedFormat":99},{"version":"877c73fdbe90937b3c16b5827526a428bf053957a202ac8c2fd88d6eab437764","impliedFormat":99},{"version":"e324b2143fa6e32fac37ed9021b88815e181b045a9f17dbb555b72d55e47cdc1","impliedFormat":99},{"version":"3e90ea83e3803a3da248229e3027a01428c3b3de0f3029f86c121dc76c5cdcc2","impliedFormat":99},{"version":"9368c3e26559a30ad3431d461f3e1b9060ab1d59413f9576e37e19aaf2458041","impliedFormat":99},{"version":"915e5bb8e0e5e65f1dc5f5f36b53872ffcdcaef53903e1c5db7338ea0d57587a","impliedFormat":99},{"version":"92cf986f065f18496f7fcb4f135bff8692588c5973e6c270d523191ef13525ad","impliedFormat":99},{"version":"652f2bd447e7135918bc14c74b964e5fe48f0ba10ff05e96ed325c45ac2e65fb","impliedFormat":99},{"version":"cc2156d0ec0f00ff121ce1a91e23bd2f35b5ab310129ad9f920ddaf1a18c2a4d","impliedFormat":99},{"version":"7b371e5d6e44e49b5c4ff88312ae00e11ab798cfcdd629dee13edc97f32133d8","impliedFormat":99},{"version":"e9166dab89930e97bb2ce6fc18bcc328de1287b1d6e42c2349a0f136fc1f73e6","impliedFormat":99},{"version":"6dc0813d9091dfaed7d19df0c5a079ee72e0248ce5e412562c5633913900be25","impliedFormat":99},{"version":"e704c601079399b3f2ec4acdfc4c761f5fe42f533feaaab7d2c1c1528248ca3e","impliedFormat":99},{"version":"49104d28daa32b15716179e61d76b343635c40763d75fe11369f681a8346b976","impliedFormat":99},{"version":"6d414a0690dd5e23448958babe29b6aeb984faf8ff79248310f6c9718a9196ad","impliedFormat":99},{"version":"0bfdb8230777769f3953fd41cf29c3cb61262a0be678dd5c899e859c0d159efe","impliedFormat":99},{"version":"97e685ac984fc93dcdae6c24f733a7a466274c103fdcf5d3b028eaa9245f59d6","impliedFormat":99},{"version":"68526ea8f3bbf75a95f63a3629bebe3eb8a8d2f81af790ce40bc6aad352a0c12","impliedFormat":99},{"version":"bcab57f5fe8791f2576249dfcc21a688ecf2a5929348cfe94bf3eb152cff8205","impliedFormat":99},{"version":"b5428f35f4ebf7ea46652b0158181d9c709e40a0182e93034b291a9dc53718d8","impliedFormat":99},{"version":"0afcd28553038bca2db622646c1e7fcf3fb6a1c4d3b919ef205a6014edeeae0f","impliedFormat":99},{"version":"ee016606dd83ceedc6340f36c9873fbc319a864948bc88837e71bd3b99fdb4f6","impliedFormat":99},{"version":"0e09ffe659fdd2e452e1cbe4159a51059ae4b2de7c9a02227553f69b82303234","impliedFormat":99},{"version":"4126cb6e6864f09ca50c23a6986f74e8744e6216f08c0e1fe91ab16260dab248","impliedFormat":99},{"version":"4927dba9193c224e56aa3e71474d17623d78a236d58711d8f517322bd752b320","impliedFormat":99},{"version":"3d3f189177511d1452e7095471e3e7854b8c44d94443485dc21f6599c2161921","impliedFormat":99},{"version":"99f169da66be3a487ce1fe30b11f33ed2bdf57893729caaea453517d9a7fa523","impliedFormat":99},{"version":"043195af0b52aadd10713870dd60369df0377ed153104b26e6bac1213b19f63e","impliedFormat":99},{"version":"ad17a36132569045ab97c8e5badf8febb556011a8ed7b2776ff823967d6d5aca","impliedFormat":99},{"version":"698d2b22251dbbfc0735e2d6ed350addead9ad031fac48b8bb316e0103d865db","impliedFormat":99},{"version":"ff10facf373a13d2864ff4de38c4892d74be27d9c6468dac49c08adabbf9b0eb","impliedFormat":99},{"version":"97b1cf4599cc3bc2e84b997aa1af60d91ca489d96bea0e20aaff0e52a5504b29","impliedFormat":99},{"version":"853dfbcd0999d3edc6be547d83dc0e0d75bf44530365b9583e75519d35984c35","impliedFormat":99},{"version":"abbb31e3da98902306359386224021bfb6cfa2496c89bbbde7ee2065cf58297c","impliedFormat":99},{"version":"6139824680a34eba08979f2e21785a761870384a4df16c143b19288aced9c346","impliedFormat":99},{"version":"c7d89156a4f0313c66377afd14063a9e5be3f8e01a7b5fae4723ef07a2628e55","impliedFormat":99},{"version":"e2381c64702025b4d57b005e94ed0b994b5592488d76f1e5f67f59d1860ebb70","impliedFormat":99},{"version":"a64e28f2333ea0324632cf81fd73dc0f7090525547a76308cb1dfe5dab96596a","impliedFormat":99},{"version":"d7dfcb039ff9cff38ccd48d2cc1ba95ca45c316670eddbcf81784e21b7128692","impliedFormat":99},{"version":"883f9faa0229f5d114f8c89dadd186d0bdf60bdafe94d67d886e0e3b81a3372e","impliedFormat":99},{"version":"d204b9ae964f73721d593e97c54fc55f7fd67de826ce9e9f14b1e762190f23d1","impliedFormat":99},{"version":"c010c1317efa90a9b10d67f0ad6b96bde45818b6cdca32afababcf7a2dd7ecc3","impliedFormat":99},{"version":"68115cdc58303bad32e2b6d59e821ccaada2c3fb63f964df7bd4b2ebd6735e80","impliedFormat":99},{"version":"7db31e5afa6ffa20d6e65505d1af449415e8a489d628f93a9a1f487d89a218c6","impliedFormat":99},{"version":"db5968a602bb6c07ab2d608e3035489d443f3556209ded7c0679e0c9c7b671ed","impliedFormat":99},{"version":"d010efe139c8bb78497dc7185dddbbcefc84d3059b5d8549c26221257818a961","impliedFormat":99},{"version":"85059ed9b6605d92c753daf3a534855ba944be69ff1a12ab4eca28cefbabd07a","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"ea68a96f4e2ba9ca97d557b7080fbdb7f6e6cf781bb6d2e084e54da2ac2bb36c","impliedFormat":99},{"version":"00173ffba39168fe3027099da73666fbedfb305284b64eaaee25bb0037e354b2","impliedFormat":99},{"version":"f3ed9a4ec3123351b2a8cba473e9a6f173eab5458309f380fe0039642f70bcae","impliedFormat":99},{"version":"21f96085ed19d415725c5a7d665de964f8283cacef43957de10bdd0333721cc4","impliedFormat":99},{"version":"e8d4da9e0859c6d41c4f1c3f4d0e70446554ba6a6ab91e470f01af6a2dcac9bf","impliedFormat":99},{"version":"39defc828dbdf47affd1e83ae63798fbb0224e158549db98e632742ab5ddaebd","impliedFormat":99},{"version":"a10fd5d76a2aaba572bec4143a35ff58912e81f107aa9e6d97f0cd11e4f12483","impliedFormat":99},{"version":"1215f54401c4af167783d0f88f5bfb2dcb6f0dacf48495607920229a84005538","impliedFormat":99},{"version":"6d640d840f53fb5f1613829a7627096717b9b0d98356fb86bb771b6168299e2e","impliedFormat":99},{"version":"07603bb68d27ff41499e4ed871cde4f6b4bb519c389dcf25d7f0256dfaa56554","impliedFormat":99},{"version":"6bd4aa523d61e94da44cee0ee0f3b6c8d5f1a91ef0bd9e8a8cf14530b0a1a6df","impliedFormat":99},{"version":"6b6e2508f79513e01386273e63d0fc3617613d80a5aca950a2b0fc33d90ad0b4","impliedFormat":99},{"version":"52869a2597d5c33241d1debc4dfb0c1c0a5a05b8a7b5f85de5cfe0e553e86f47","impliedFormat":99},{"version":"2fe93aef0ee58eaa1b22a9b93c8d8279fe94490160703e1aabeff026591f8300","impliedFormat":99},{"version":"bbb02e695c037f84947e56da3485bb0d0da9493ed005fa59e4b3c5bc6d448529","impliedFormat":99},{"version":"d388e0c1c9a42d59ce88412d3f6ce111f63ce2ff558e0a3f84510092431dfee0","impliedFormat":99},{"version":"326a980e72f7b9426be0805774c04838e95195b467bea2072189cefe708e9be7","impliedFormat":99},{"version":"35ea0a1e995aef5ae19b1553548a793c76eb31bdf7fef30bc74656660c3a09c3","impliedFormat":99},{"version":"ba666b3ab51c8bc916c0cebc11a23f4afec6c504c767fd5f0228358f7d285322","impliedFormat":99},{"version":"c10972922d1887fe48ed1722e04ab963e85e1ac12263a167edef9b804a2af097","impliedFormat":99},{"version":"6efeacbd1759ea57a4c7264eb766c531ae0ab2c00385294be58bc5031ef43ad1","impliedFormat":99},{"version":"1c261f5504d0175be4f1b6b99f101f4c3a129a5a29fc768e65c52d6861ca5784","impliedFormat":99},{"version":"f0e69b5877b378d47cbac219992b851e2bbc0f7e3a3d3579d67496dabd341ec4","impliedFormat":99},{"version":"b5ea27f19a54feca5621f5ba36a51026128ea98e7777e5d47f08b79637527cf5","impliedFormat":99},{"version":"b54890769fa3c34ab3eb7e315b474f52d5237c86c35f17d59eb21541e7078f11","impliedFormat":99},{"version":"c133db4b6c17a96db7fa36607c59151dec1e5364d9444cbe15e8c0ea4943861e","impliedFormat":99},{"version":"3a0514f77606d399838431166a0da6dbd9f3c7914eae5bbfbd603e3b6a552959","impliedFormat":99},{"version":"fa568f8d605595e1cffbfca3e8c8c492cf88ae2c6ed151f6c64acf0f9e8c25d8","impliedFormat":99},{"version":"c76fb65cb2eb09a0ee91f02ff5b43a607b94a12c34d16d005b2c0afc62870766","impliedFormat":99},{"version":"cf7af60a0d4308a150df0ab01985aabb1128638df2c22dd81a2f5b74495a3e45","impliedFormat":99},{"version":"913bbf31f6b3a7388b0c92c39aec4e2b5dba6711bf3b04d065bd80c85b6da007","impliedFormat":99},{"version":"42d8c168ca861f0a5b3c4c1a91ff299f07e07c2dd31532cd586fd1ee7b5e3ae6","impliedFormat":99},{"version":"a29faa7cb35193109ec1777562ca52c72e7382ffe9916b26859b5874ad61ff29","impliedFormat":99},{"version":"15bdf2eeef95500ba9f1602896e288cb425e50462b77a07fa4ca23f1068abb21","impliedFormat":99},{"version":"452db58fd828ab87401f6cecc9a44e75fa40716cc4be80a6f66cf0a43c5a60cc","impliedFormat":99},{"version":"54592d0215a3fd239a6aa773b1e1a448dc598b7be6ce9554629cd006ee63a9d6","impliedFormat":99},{"version":"9ee28966bb038151e21e240234f81c6ba5be6fde90b07a9e57d4d84ae8bc030c","impliedFormat":99},{"version":"ad639ad2ec93535c23cfa42fbd23d0d44be0fb50668dd57ee9b38b913e912430","impliedFormat":99},{"version":"956e43b28b5244b27fdb431a1737a90f68c042e162673769330947a8d727d399","impliedFormat":99},{"version":"92a2034da56c329a965c55fd7cffb31ccb293627c7295a114a2ccd19ab558d28","impliedFormat":99},{"version":"c1b7957cd42a98ab392ef9027565404e5826d290a2b3239a81fbac51970b2e63","impliedFormat":99},{"version":"4861ee34a633706bcbba4ea64216f52c82c0b972f3e790b14cf02202994d87c5","impliedFormat":99},{"version":"7af4e33f8b95528de005282d6cca852c48d293655dd7118ad3ce3d4e2790146f","impliedFormat":99},{"version":"df345b8d5bf736526fb45ae28992d043b2716838a128d73a47b18efffe90ffa7","impliedFormat":99},{"version":"a6e18a521af3c12bb42bf2da73d0ef1a82420425726c662d068d8d4d813b16c5","impliedFormat":99},{"version":"dcc38f415a89780b34d827b45493d6dbadb05447d194feb4498172e508c416ac","impliedFormat":99},{"version":"7e917e3b599572a2dd9cfa58ff1f68fda9e659537c077a2c08380b2f2b14f523","impliedFormat":99},{"version":"20b108e922abd1c1966c3f7eb79e530d9ac2140e5f51bfa90f299ad5a3180cf9","impliedFormat":99},{"version":"2bc82315d4e4ed88dc470778e2351a11bc32d57e5141807e4cdb612727848740","impliedFormat":99},{"version":"e2dd1e90801b6cd63705f8e641e41efd1e65abd5fce082ef66d472ba1e7b531b","impliedFormat":99},{"version":"a3cb22545f99760ba147eec92816f8a96222fbb95d62e00706a4c0637176df28","impliedFormat":99},{"version":"287671a0fe52f3e017a58a7395fd8e00f1d7cd9af974a8c4b2baf35cfda63cfa","impliedFormat":99},{"version":"e2cdad7543a43a2fb6ed9b5928821558a03665d3632c95e3212094358ae5896b","impliedFormat":99},{"version":"e3588e9db86c6eaa572c313a23bf10f7f2f8370e62972996ac79b99da065acaa","impliedFormat":99},{"version":"1f4700278d1383d6b53ef1f5aecd88e84d1b7e77578761838ffac8e305655c29","impliedFormat":99},{"version":"6362a4854c52419f71f14d3fee88b3b434d1e89dcd58a970e9a82602c0fd707a","impliedFormat":99},{"version":"fb1cc1e09d57dfeb315875453a228948b904cbe1450aaf8fda396ff58364a740","impliedFormat":99},{"version":"50652ed03ea16011bb20e5fa5251301bb7e88c80a6bf0c2ea7ed469be353923b","impliedFormat":99},{"version":"4a6c2ac831cff2d8fa846dfb010ee5f7afce3f1b9bd294298ee54fdc555f1161","impliedFormat":99},{"version":"ec359d001e98bf56b0e06b4882bd1421fd088d4d181dff3138f52175c0582a51","impliedFormat":99},{"version":"730cb342a128f5a8a036ffbd6dbc1135b623ce2100cefe1e1817bb8845bc7100","impliedFormat":99},{"version":"73468feda625fe017c2904c4d753e8e4e2e292502af8bcd4db59ff56a762692a","impliedFormat":99},{"version":"d8cf10c52fcfed3459ed885435124dfa75b7536c6dc7d56970e2a7c2015533a6","impliedFormat":99},{"version":"0abb1feddc76a0283c7e8e8910c28b366612a71f8bfdd5ca42271d7ad96e50b2","impliedFormat":99},{"version":"ac56b2f316b70d6a727fdbbcfa8d124bcd1798c293487acb2b27a43b5c886bb0","impliedFormat":99},{"version":"d849376baf73ec0b17ffd29de702a2fdbbe0c0390ec91bebf12b6732bf430d29","impliedFormat":99},{"version":"70de5b72bc833ab9ee7430534435d10e8edb218d06fdf781e0cae39a7b96067b","impliedFormat":99},{"version":"0f9c9f7d13a5cf1c63eb56318b6ae4dfa2accef1122b2e88b5ed1c22a4f24e3b","impliedFormat":99},{"version":"a85b5df75328fb3857cb558055d78d9aeb437214a766af0ad309ea1bfe943e6e","impliedFormat":99},{"version":"f80561a76c0187c98313433339bb44818fd98dc10f31c0574b0e9e5ba2912700","impliedFormat":99},{"version":"45c293919f535342cd0fcfe2da1a8d346014f7a368e4ec401ebdde80293eef96","impliedFormat":99},{"version":"2d4530d6228c27906cb4351f0b6af52ff761a7fab728622c5f67e946f55f7f00","impliedFormat":99},{"version":"77dabe31d44c48782c529d5c9acddc41f799bf9b424b259596131efc77355478","impliedFormat":99},{"version":"88ca3a19c8b99e409299e1173d2fe1b79c5960e966f2f3a7db6788969414f546","impliedFormat":99},{"version":"c693f9c0fda89d41e7670429d30ddcda570f9ad63a7301379695916524eb6d2e","impliedFormat":99},{"version":"66a83abc49216ddee4049056ee2b345c08c912529e93aa725d6cae384561de83","impliedFormat":99},{"version":"6b514d5159d0d189675a1d5a707ba068a6da6bc097afb2828aae0c98d8b32f08","impliedFormat":99},{"version":"39d7dbcfec85393fedc8c7cf62ee93f7e97c67605279492b085723b54ccaca8e","impliedFormat":99},{"version":"81882f1fa8d1e43debb7fa1c71f50aa14b81de8c94a7a75db803bb714a9d4e27","impliedFormat":99},{"version":"d2c74e0608352d6eb35b35633cdbce7ed49c3c4498720c9dd8053fdc47a9db8a","impliedFormat":99},{"version":"bca335fd821572e3f8f1522f6c3999b0bc1fe3782b4d443c317df57c925543ed","impliedFormat":99},{"version":"73332a05f142e33969f9a9b4fb9c12b08b57f09ada25eb3bb94194ca035dc83d","impliedFormat":99},{"version":"c366621e6a8febe9bbca8c26275a1272d99a45440156ca11c860df7aa9d97e6d","impliedFormat":99},{"version":"d9397a54c21d12091a2c9f1d6e40d23baa327ae0b5989462a7a4c6e88e360781","impliedFormat":99},{"version":"dc0e2f7f4d1f850eb20e226de8e751d29d35254b36aa34412509e74d79348b75","impliedFormat":99},{"version":"c7bc760336ac14f9423c83ca2eec570a2be6f73d2ce7f890c6cce76c931c8e15","impliedFormat":99},{"version":"dea1773a15722931fbfe48c14a2a1e1ad4b06a9d9f315b6323ee112c0522c814","impliedFormat":99},{"version":"b26e3175cf5cee8367964e73647d215d1bf38be594ac5362a096c611c0e2eea8","impliedFormat":99},{"version":"4280093ace6386de2a0d941b04cff77dda252f59a0c08282bd3d41ccc79f1a50","impliedFormat":99},{"version":"fe17427083904947a4125a325d5e2afa3a3d34adaedf6630170886a74803f4a2","impliedFormat":99},{"version":"0246f9f332b3c3171dcdd10edafab6eccb918c04b2509a74e251f82e8d423fb7","impliedFormat":99},{"version":"f6ef33c2ff6bbdf1654609a6ca52e74600d16d933fda1893f969fc922160d4d7","impliedFormat":99},{"version":"1abd22816a0d992fd33b3465bf17a5c8066bf13a8c6ca4fc0cd28884b495762d","impliedFormat":99},{"version":"82032a08169ea01cf01aa5fd3f7a02f1f417697df5e42fc27d811d23450bc28d","impliedFormat":99},{"version":"9c8cbd1871126e98602502444cffb28997e6aa9fbc62d85a844d9fd142e9ae1b","impliedFormat":99},{"version":"b0e20abc4a73df8f97b3f1223cc330e9ba3b2062db1908aa2a97754a792139ac","impliedFormat":99},{"version":"bc1f2428d738ab789339030078adf313100471c37d8d69f6cf512a5715333afc","impliedFormat":99},{"version":"dc500c6a23c9432849c82478bdab762fa7bdf9245298c2279a7063dd05ae9f9a","impliedFormat":99},{"version":"cd1b6a2503fc554dcab602e053565c4696e4262b641b897664d840a61f519229","impliedFormat":99},{"version":"af1580cd202df0e33fc592fe1d75d720c15930a4127a87633542b33811316724","impliedFormat":99},{"version":"af6106fc6900a51b49a8e6f4c5a8f18295eb9ae34efbea3c2b7db45e42b41b5e","impliedFormat":99},{"version":"cd090c8806133525e1085f6b820618194d0133e6fc328d03956969d211a9c885","impliedFormat":99},{"version":"9ea6fea875302b2bb3976f7431680affc45a4319499d057ce12be04e4f487bf9","impliedFormat":99},{"version":"66e0c3f9875da7be383d0c78c8b8940b6ebae3c6a0fbfd7e77698b5e8ade3b05","impliedFormat":99},{"version":"da38d326fe6a72491cad23ea22c4c94dfc244363b6a3ec8a03b5ad5f4ee6337b","impliedFormat":99},{"version":"da587bf084b08ea4e36a134ec5fb19ae71a0f32ec3ec2a22158029cb2b671e28","impliedFormat":99},{"version":"517a31c520e08c51cfe6d372bc0f5a6bf7bd6287b670bcaa180a1e05c6d4c4da","impliedFormat":99},{"version":"0263d94b7d33716a01d3e3a348b56c2c59e6d897d89b4210bdbf27311127223c","impliedFormat":99},{"version":"d0120e583750834bf1951c8b9936781a98426fe8d3ad3d951f96e12f43090469","impliedFormat":99},{"version":"a2e6a99c0fb4257e9301d592da0834a2cb321b9b1e0a81498424036109295f8b","impliedFormat":99},{"version":"c6b5ae9f99f1fccadc23d56307a28c8490c48e687678f2cafa006b3b9b8e73e4","impliedFormat":99},{"version":"eae178ee8d7292bcd23be2b773dda60b055bc008a0ddce2acc1bfe30cc36cf04","impliedFormat":99},{"version":"e0b5f197fb47b39a4689ad356b8488e335bbf399b283492c0ffae0cfda88837b","impliedFormat":99},{"version":"adb7aa4b8d8b423d0d7e78b6a8affb88c3a32a98e21cd54fcafd570ad8588d0c","impliedFormat":99},{"version":"643e22362c15304f344868ec0e7c0b4a1bc2b56c8b81d5b9f0ee0a6f3c690fff","impliedFormat":99},{"version":"f89e713e33bfcc7cc1d505a1e76f260b7aae72f8ba83f800ab47b5db2fed8653","impliedFormat":99},{"version":"4c3be904cab639b22989d13a9c4ea1184388af2ff27c4f5b39960628a76629db","impliedFormat":99},{"version":"307009cbc7927f6c2e7b482db913589f8093108b8bd4a450cfe749b80476aea0","impliedFormat":99},{"version":"a5bf6d947ce6a4f1935e692c376058493dbfbd9f69d9b60bbaf43fd5d22c324b","impliedFormat":99},{"version":"4927ef881b202105603e8416d63f317a1f1ea47d321e32826b9b20a44caa55e2","impliedFormat":99},{"version":"7deb9fb41fbf45e79da80de7e0eb10437cd81a36024edff239aa59228849b2d3","impliedFormat":99},{"version":"f9fdd2efc37eefc321338d39b5bd341b2aa82292b72610cb900f205f6803ff66","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"7139f89a25baa378770397bf9efd6e15061eb63d42df3591e946a87ef2197fea","impliedFormat":99},{"version":"956aeea3c94b894b3ae95a9691c1a8fa6f9eae47d30817a59c14908113322caa","impliedFormat":99},{"version":"87cbb57d0f80470800378bff30f8bc7e2c99a7b30a818bf7ccbf049407714a10","impliedFormat":99},{"version":"cc411cd97607f993efb008c8b8a67207e50fdd927b7e33657e8e332c2326c9f3","impliedFormat":99},{"version":"b144c6cdf6525af185cd417dc85fd680a386f0840d7135932a8b6839fdee4da6","impliedFormat":99},{"version":"2125e8c5695ddfded3b93c3537b379df2b4dcd3cdad97fa6ec87d51beda0bef1","impliedFormat":99},{"version":"572ee8f367fe4068ccb83f44028ddb124c93e3b2dcc20d65e27544d77a0b84d3","impliedFormat":99},{"version":"7d604c1d876ef8b7fec441cf799296fd0d8f66844cf2232d82cf36eb2ddff8fe","impliedFormat":99},{"version":"7b86b536d3e8ca578f8fbc7e48500f89510925aeda67ed82d5b5a3213baf5685","impliedFormat":99},{"version":"861596a3b58ade9e9733374bd6b45e5833b8b80fd2eb9fe504368fc8f73ae257","impliedFormat":99},{"version":"a3da7cf20826f3344ad9a8a56da040186a1531cace94e2788a2db795f277df94","impliedFormat":99},{"version":"900a9da363740d29e4df6298e09fad18ae01771d4639b4024aa73841c6a725da","impliedFormat":99},{"version":"4e979a85e80e332414f45089ff02f396683c0b5919598032a491eb7b981fedfd","impliedFormat":99},{"version":"6d3496cac1c65b8a645ecbb3e45ec678dd4d39ce360eecbcb6806a33e3d9a7ae","impliedFormat":99},{"version":"9909129eb7301f470e49bbf19f62a6e7dcdfe9c39fdc3f5030fd1578565c1d28","impliedFormat":99},{"version":"442f6a9e83bb7d79ff61877dc5f221eea37f1d8609d8848dfbc6228ebc7a8e90","impliedFormat":99},{"version":"10c21d52b988b30fcd2ee3ef277a15c7e5913e14da0641f8d50db18a3c4e6bef","impliedFormat":99},{"version":"7e4fc245cc369ba9c1a39df427563e008b8bfe5bf73c6c3f5d3a928d926a8708","impliedFormat":99},{"version":"2dd4989deea8669628ef01af137d9494c12bbfc5ff2bbe033369631932c558cb","impliedFormat":99},{"version":"d39330cb139d83d5fa5071995bb615ea48aa093018646d4985acd3c04b4e443d","impliedFormat":99},{"version":"663800dc36a836040573a5bb161d044da01e1eaf827ccc71a40721c532125a80","impliedFormat":99},{"version":"f28691d933673efd0f69ac7eae66dea47f44d8aa29ec3f9e8b3210f3337d34df","impliedFormat":99},{"version":"fa9c4f35c92322c61ec9a7f90dd2a290c35723348891f1459946186b189a129a","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"f716500cce26a598e550ac0908723b9c452e0929738c55a3c7fe3c348416c3d0","impliedFormat":99},{"version":"6b7c511d20403a5a1e3f5099056bc55973479960ceff56c066ff0dd14174c53c","impliedFormat":99},{"version":"48b83bd0962dac0e99040e91a49f794d341c7271e1744d84e1077e43ecda9e04","impliedFormat":99},{"version":"d7c98c7c260b3f68f766ec9bbd19d354db2254c190c5c6258ae6147283d308f0","impliedFormat":99},{"version":"ffa53626a9de934a9447b4152579a54a61b2ea103dbbf02b0f65519bfef98cdd","impliedFormat":99},{"version":"c427b591bfddecf5501efa905b408291a189ae579a06e4794407c8e94c8709fc","impliedFormat":99},{"version":"b6e9b15869788861fff21ec7f371bda9a2e1a1b15040cc005db4d2e792ece5ca","impliedFormat":99},{"version":"22c844fbe7c52ee4e27da1e33993c3bbb60f378fa27bb8348f32841baecb9086","impliedFormat":99},{"version":"dee6934166088b55fe84eae24de63d2e7aae9bfe918dfe635b252f682ceca95a","impliedFormat":99},{"version":"c39b9c4f5cc37a8ed51bef12075f5d023135e11a9b215739fd0dd87ee8da804a","impliedFormat":99},{"version":"db027bc9edef650cff3cbe542959f0d4ef8532073308c04a5217af25fc4f5860","impliedFormat":99},{"version":"a4e026fe4d88d36f577fbd38a390bd846a698206b6d0ca669a70c226e444af1b","impliedFormat":99},{"version":"165f3c6426e7dfff8fb0c34952d11d3b8528cb18502a7350d2eeb967177b2eb7","impliedFormat":99},{"version":"fa910f88f55844718a277ee9519206abce66629de2692676c3e2ad1c9278bdfd","impliedFormat":99},{"version":"9a7914a6000dbd6feaea9bc51065664d0fef0b5c608b7f66a7b229213e4805ef","impliedFormat":99},{"version":"9ae87bd743e93b6384efbfa306bde1fa70b6ff27533983e1e1fe08a4ef7037b8","impliedFormat":99},{"version":"5f7c0a4aad7a3406db65d674a5de9e36e0d08773f638b0f49d70e441de7127c0","impliedFormat":99},{"version":"4a43776782d9bce9cc167e176b4a4bb46e542619502ce1848d6f15946d54eaf7","impliedFormat":99},{"version":"56f4ae4e34cbff1e4158ccada4feea68a357bae86adb3bedaa65260d0af579df","impliedFormat":99},{"version":"a4f90a12cbfac13b45d256697ce70a6b4227790ca2bf3898ffd2359c19eab4eb","impliedFormat":99},{"version":"6801ebe0b7ab3b24832bc352e939302f481496b5d90b3bc128c00823990d7c7d","impliedFormat":99},{"version":"8395cc6350a8233a4da1c471bdac6b63d5ed0a0605da9f1e0c50818212145b5b","impliedFormat":99},{"version":"b58dda762d6bd8608d50e1a9cc4b4a1663a9d4aa50a9476d592a6ecdc6194af4","impliedFormat":99},{"version":"bc14cb4f3868dab2a0293f54a8fe10aa23c0428f37aece586270e35631dd6b67","impliedFormat":99},{"version":"ed88c3365f1ed406cd592ab4c69c9e31aedbaabaf5450cc93e0f0bd576a48180","impliedFormat":99},{"version":"99b6b07b5b54123e22e01e721a4d27eabecb7714060ec8ab60b79db5224cfcc0","impliedFormat":99},{"version":"b478cef88033c3b939a6b8a9076af57fc7030e7fd957557f82f2f57eddfc2b51","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},{"version":"a03b097607908fed59d8c33333707b2a5303d685fcb68a4f3a818c0cf7b178bc","impliedFormat":99},{"version":"00eb4f20a5caf11d7d41eeae15e95ff974be147229c8c1da80cb5e73d4988d34","signature":"ca7fc49c423b4f471691a59fffb551d8409f0d013f898c84f929e046315a31c8"},{"version":"c85d2a0601a6701862cd97e451211d5f193240d4fef2b41b3e7015fd05a06a92","signature":"7778690faccc7e92f8d9c44b653f1dc6c8e9aee886850bc739ccd6d318c96f69"},{"version":"595bbf59efb3a5c3e97c8eff2b195c368d1b8cf803ed4a9fa834d7e2cab5c9ed","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"8698b230c61a64b99b1f50029d0ff706c04f562c7599f56a6cdccf0ecdf1b49b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"35fdef631a7079ebb26e3b9439bdcfa29ef6f12209be6ca2f437c084897f7f0e","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"bf5570aed501b77eee7ac90440098f04e046be3cad1e7999be8b7b1a050662ff","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"26cb495f55f78a38582a602e122416f0aa2cbe72347bfd52922deab51b4fd82c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a9f197afdc34064f31749c3cefb25bb8c30de7e82fea6c91de1c092fdf121b7f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"777fedfa6acf980d1380b8f0e48210d24ac8b411830c58811e9cd0e74abe4e4d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"29c1a34a0d8d971ac3ac210ea7138f21cd7d718a29673156dd2252acbdbb1604","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ff8f97f65c1c91497122e87cf2307eb2cb2e61052dd849bfb81ff0feddaf4750","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"9b9cfc3b73c51ddaed7708869e7c05080069cbd40bdeffa8c30a064e9718c136","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fcc045116cfa4a9a52871adf45630a9eba1d8acab11619da963acc4212bc42f9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"07fcc9be98e12bd2f0f71a501a9bfbe2e53d38c50e8a5e84223fdd05bd8749c5","impliedFormat":99},{"version":"b887a4575db46263f82d7bde681bdc14526e4a2618a1172fef4206c467752d8f","impliedFormat":99},{"version":"fa2c48fd724dd8f0e11dfb04f20d727a2595890bfa95419c83b21ed575ed77d1","impliedFormat":99},{"version":"6d23ffe7f1b73f16b08f5baeca430e6655b46fdc5862fd7bff1483b71fc6b28d","impliedFormat":99},{"version":"20be44c04e883d5fe7840d630a8d0656e95b00c2d6eebab9ab253275e7170534","impliedFormat":99},{"version":"3b674288fbdc0ff0ed2b7fc2839014c2ff209c84999fd06b6339347d0f976a85","impliedFormat":99},{"version":"cc2958d8abd86edcdf05542bb1b40ba659db5bc5a2560720cde08e8950e63bc1","impliedFormat":99},{"version":"e44e0ea195d68c0aea951809bda325322085008c0622fc4ee44db5359f37b747","impliedFormat":99},{"version":"21053659ad72fe51b9dfbde4fa14dbbac0912359fa37c9a5aa75f188782b2ee8","impliedFormat":99},{"version":"e297bdcb7db008d8d7d0481f2c935a9f7f0a338f41b7e5d1cec6a7744140a4ff","impliedFormat":99},{"version":"ef816ad6735a271c4c8035a1914c3a9beaaa90b3c174da312d26bce8736e56ec","impliedFormat":99},{"version":"7202026e24c5e5b7b6e5fe6b99455a91058ef82e74a5cdf6a3a4136b7ae9c080","impliedFormat":99},{"version":"87561cc8a2d7444adf4eed4b3f15bef8c6098cceb0e7617fba1cc45d187ac8c8","impliedFormat":99},{"version":"b52f7568bb9b00bcee6c4929938226541c09d86b849b8ba8db2fe2a8bba46f49","impliedFormat":99},{"version":"d42e1872d53ebb213e7bbe15e5fecdcaa9a490d2f2a2b035ee9cf4a6d3f1e44e","impliedFormat":99},{"version":"2262d96c02073dcb17a31ae8c738651ebff75f102522eae686f5462658b687a8","impliedFormat":99},{"version":"fd40c454d56e1d14e60ce13f3bc60c7fdb9bc70c6ef9c7bfafec1f0eb5d8075b","impliedFormat":1},{"version":"155ced96d70533d95c481061e2691802fae7cfb96869d7c85ac8622f53b51cb7","impliedFormat":1},{"version":"3689b6f599705380d2ceaccb4e58eec5c9439a7a5635d6e37c1ba66ed7c34b35","impliedFormat":99},{"version":"6cf0d3cc668cdbb01358ef7c2e41bbcc14d8d8e4ca424a1b6d2838d9a1cae8ce","impliedFormat":99},{"version":"b7bd70307671536c735389e0a1748555c438c392dfceb6f2ac3aa0a50ca82530","impliedFormat":99},{"version":"661c403f4c5bbf259e03f4fdc3a9e3f51ad562684f702e1b842e6c5336de0752","impliedFormat":99},{"version":"415dd92247ca21db682f75ba7e6289ab2d093cd34c6f471c6c789afd047ad4f3","impliedFormat":99},{"version":"4fc633107330ab389f07f86af80192ac697a68a586ad76dcf43304410e7cfb6a","impliedFormat":99},{"version":"828f8b38dff4e5c47b0112cb437da379c720f0360d40d392457c9775f30c8ae8","impliedFormat":99},{"version":"9cc8bd5b4e98dfc139e94e60439644c8252ad143dca417d5512b5a7ab981748c","signature":"7ff16555c83c3f0fb4b9b6ce10bc5c319cce40a3047f6baea6182c531d35258d"},{"version":"ba10a313e4440bd980505cacb2c920e02d36dcb956763882e83715e4db88288d","signature":"684ee491b675e6b23b4a5ce57e90601b47b323d745cace07a9184ca285606dd5"},{"version":"2cba9cf54756b50009318570ed1a17b993d719d08d666a9223fdf8800488414a","signature":"9e901df45cd8bf96734e5ff217655167e923ea32600e4a05e853b791f139a96c"},{"version":"d49d82e859843352bd1fac242f835782ace8cbbe8c11cabe62cac514382b4ce9","signature":"f6aebd7cfce94a41ef8325969db3e4bb6aab3abbbb0e1697af8b3b97ef2bc6be"},{"version":"fa2c48fd724dd8f0e11dfb04f20d727a2595890bfa95419c83b21ed575ed77d1","impliedFormat":99},{"version":"20be44c04e883d5fe7840d630a8d0656e95b00c2d6eebab9ab253275e7170534","impliedFormat":99},{"version":"3b674288fbdc0ff0ed2b7fc2839014c2ff209c84999fd06b6339347d0f976a85","impliedFormat":99},{"version":"cc2958d8abd86edcdf05542bb1b40ba659db5bc5a2560720cde08e8950e63bc1","impliedFormat":99},{"version":"e44e0ea195d68c0aea951809bda325322085008c0622fc4ee44db5359f37b747","impliedFormat":99},{"version":"21053659ad72fe51b9dfbde4fa14dbbac0912359fa37c9a5aa75f188782b2ee8","impliedFormat":99},{"version":"3689b6f599705380d2ceaccb4e58eec5c9439a7a5635d6e37c1ba66ed7c34b35","impliedFormat":99},{"version":"6cf0d3cc668cdbb01358ef7c2e41bbcc14d8d8e4ca424a1b6d2838d9a1cae8ce","impliedFormat":99},{"version":"b7bd70307671536c735389e0a1748555c438c392dfceb6f2ac3aa0a50ca82530","impliedFormat":99},{"version":"661c403f4c5bbf259e03f4fdc3a9e3f51ad562684f702e1b842e6c5336de0752","impliedFormat":99},{"version":"415dd92247ca21db682f75ba7e6289ab2d093cd34c6f471c6c789afd047ad4f3","impliedFormat":99},{"version":"b52f7568bb9b00bcee6c4929938226541c09d86b849b8ba8db2fe2a8bba46f49","impliedFormat":99},{"version":"39d80ec3c018d7ffe7c99ddd3a7b6844b3376c15e52937a7687d2c2828830fd0","impliedFormat":99},{"version":"828f8b38dff4e5c47b0112cb437da379c720f0360d40d392457c9775f30c8ae8","impliedFormat":99},{"version":"ef816ad6735a271c4c8035a1914c3a9beaaa90b3c174da312d26bce8736e56ec","impliedFormat":99},{"version":"7202026e24c5e5b7b6e5fe6b99455a91058ef82e74a5cdf6a3a4136b7ae9c080","impliedFormat":99},{"version":"87561cc8a2d7444adf4eed4b3f15bef8c6098cceb0e7617fba1cc45d187ac8c8","impliedFormat":99},{"version":"d42e1872d53ebb213e7bbe15e5fecdcaa9a490d2f2a2b035ee9cf4a6d3f1e44e","impliedFormat":99},{"version":"2262d96c02073dcb17a31ae8c738651ebff75f102522eae686f5462658b687a8","impliedFormat":99},{"version":"e297bdcb7db008d8d7d0481f2c935a9f7f0a338f41b7e5d1cec6a7744140a4ff","impliedFormat":99},{"version":"568c26e04942bc025342240f0fadc1463ce47171909302d05024a7f77a31a7c2","impliedFormat":99},{"version":"02e405115dfa8eb1d0051403d9e7372e87e6d7e3e2be7b46e3479b8d82ac9d27","signature":"1728a581f19c741e1d0deb106f81952bc82bbbe714aa3eeb12d768fe37c4511b"},{"version":"a534e61c2f06a147d97aebad720db97dffd8066b7142212e46bcbcdcb640b81a","impliedFormat":99},{"version":"ddf569d04470a4d629090d43a16735185001f3fcf0ae036ead99f2ceab62be48","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"53c448183c7177c83d3eb0b40824cf8952721a6584cf22052adc24f778986732","impliedFormat":99},{"version":"ff128381c9aee8ec304e33e1db75a0eb00557ea3a935319ddc5849447d5c2a6e","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4c3037022bad86517948ea3b03a6726bf956388f914432e3ecbc0d6f5e8e1f39","signature":"1c3176702dd4aef379e0437658f8760c942d52a171c96905202d29bdb8d8b043"},{"version":"90d096e4d43d420b5a27197227906393b7ff579609ce316ee8288c581c6cff9f","signature":"e827030f3e4a94583b4d7956ab86454b4958d4a582e8f4eeea711068900fb8f6"},{"version":"cc562e355340f742084220abe01feb01f77ea3b997ae9c540eff648bf37f03eb","signature":"ed42e7ba0422f9c3a1e645604844e13d91c2d7092fab357d39ae5999b6c9f14d"},{"version":"69dbe5d61d2f298046513598f55bd1e719c50dfd6af2f9feea6fc84f8aa3c4bf","impliedFormat":99},{"version":"6a78643fbbf1b0bd954a53d4edfa217b6a5f92d357fa9cdf8d2ee430f96b9472","impliedFormat":99},{"version":"2ebe2f0255b6f301ba7bc0e10c3dda289c6cf1876f289f7a8f6444613d988e5e","impliedFormat":99},{"version":"012b5083a47ccbe050763f8df2be89daa50c1606e9a0bb31f64276d508c02d78","impliedFormat":99},{"version":"fc7c3943608aec142abb8c28f5892a1faaf255d48e1137ff2b2e0be0afdd479e","impliedFormat":99},{"version":"e8fc8d807069e0f94d481106510fae66792e6a66f330c45fd3c769053cfa5608","impliedFormat":99},{"version":"4c57148a2cb7736c37a7ca128fc8adec5a683413663c17604a28da143ca1a65b","impliedFormat":99},{"version":"37a5b233da6141bd6cd4e78dd8bcd9c0dd29e33ec10707cb57c66304cf743e46","impliedFormat":99},{"version":"c8e1a516135ad6fd057ddc5a01036067ff3b43b3277d18f1eb4c5df22630b50b","impliedFormat":99},{"version":"7d8b55f6b9e7a7a003063ecd596c72c23fe6d8225d6cf3e00e8b375059123513","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"5780b706cece027f0d4444fbb4e1af62dc51e19da7c3d3719f67b22b033859b9","impliedFormat":1},{"version":"a70c4aeb18ed04d567de33ef6e7c1006fc3b14bbfcd78a0edab8fa8987df0644","signature":"5d73eea4701fc18da77393109dc6e8fb324a524eaf754a6fa30850d7efca1f10"},"2cd8ceb9d78233669aced348f594372ec4da99a31e7611b01c419d7e3c090cf8",{"version":"6dbeba835d9d13b69733b8478a01a6fc5b2e6f59335bb818749fbc4808e30150","signature":"22d30ddaf61da806ca602b1d7ef42dbdd17ec9091030e097f5055b9c450305c8"},{"version":"b6eac32b4cc33851b3b99148f736d2d944a393d396e4a114bd2c2d7ddee915aa","signature":"0c64090017d1b4fdbfbaecf541370ee7dc5d7bb5630ed5efed3e18455076e723"},{"version":"37ee11e824a4760f20f5fee4f6dbebd49e060b8fe6dbd8e941bd71e05f60f953","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c0c96df0120269b5d307d92195500bb4aa1f78c656d232d1b9fddd6c2dc21fd9","signature":"463102e53b5a2471016536918cab01e06dc7074fdf36949ad17a0c3a4d08bdc9"},{"version":"271818adce738ea6ecc503c5617c3e6443ac441531843d8ab803f3adf7b98caf","signature":"b1d411fe11459f332e68f1698d0419812a853c0e272211ac8da8f15a5945abf0"},{"version":"341cf4f57f305dc092896ae8e8594411247fffd486f5576ba0f7581d05d73fc6","signature":"77552bbebbb26f74d48d45eb8008b75b2642088b47bb10ca566fab2fe3b430bd"},{"version":"309ca732cd39b9102c0d05d2b05434fb5f2b6ba47285b8a0df46413d60b71d2c","signature":"66120b70454c70b854edf6e3c694cb02f0ea9dd41867541a02b2b6c085575842"},{"version":"3d5f34de0608b41fcea5d97ada18a0c74abec6738f62d6fc8aaea69750621f5d","signature":"4d2d9f075d1df6083052ea76f613c2bf40666d8d6e03993b04748584ec50a9c1"},{"version":"6f4db7d4157ff53ada514ec4fdfb3982039b1d9cd47d3ec45475e3c1e8a61c19","signature":"f07ae58ea4b86e67d2f26fa87ea2648536d5e3511b82b6c760a78104b0675575"},{"version":"c66279d169c01c02f606294701fd64294ab17af4df7690a41de5bcc7a8973d99","signature":"d1ee46f4e6185eea6041409ca76fece69a9603f6d514ddf93b9b5a10afb7ae5b"},{"version":"a7ae9f2e2214f9b89c6615d3b864f8443addc4cc78bc955657473a2cf2de60a6","signature":"c0e736d664d59a067a20ce66e5cdfc976cfdbad267e88a563d52b5ee946cb243"},{"version":"c41d253d6dba9ab7d4cac9bc1b8f630d774b04631d8d10749078bf9f9e47527d","signature":"20d5c937ec9ab05dcfd605a778a8907ec4cb16b4654d29077781d34cf25548c7"},{"version":"a7a00836bd4ed5d30ec9248689df181ca412795d31590da4f1493a4142a9f47c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe37458cbcd4f262017eb8feb99aaceeb74a10330efdf4ba0161084a12e6e8f8","signature":"f7f6f7910e82f97a35529b766bead1324693cf5d9e78ddc2fb532ff2706504d5"},{"version":"fcde510bb6c84d2299b82fd8f99459a0624284d9fbe57d97e815bdb8e98acacc","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a9151032dc81d1e6d4e4af3f17461e63669d0f8d2b306d7142a4ddedfd29b24d","signature":"2de4016a4f65c467e9513bf7a9e3bd767678241d8d55d2e7efbaa85c77e1ffd2"},{"version":"b0abbd948090a73e0bd02a32af8f3e350ffbdf80eece494596d602b0fc567c0f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a4ed45cb9b2218237ae0145549b764d8d9c6b8f33ec15d6bfcbb03b6f56657e2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"5c17fe0573a9876e3d00d9b57d32c8fe70af54c10a42959e88ac7e3dc29c8e92","signature":"6d31ff70bb89be7066ed526da00cda56309b9293b32812c8f63f942e7edfb111"},{"version":"1e71abf90b500eca17e761e4694f4f11079714fee34f2f1b0fefe825692eaa48","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4d81cc203c2a0b978612d68a6666287da487b825a554c9fdf6db9edb39450c02","signature":"c0e736d664d59a067a20ce66e5cdfc976cfdbad267e88a563d52b5ee946cb243"},{"version":"d4251d5897d9f2c29eb60727397f89f65539db009cf62c63d94b00c6a19f6901","signature":"b601f2dce0fa64e0df671c11486131042095b75597c647144b0734c18aca8e8e"},{"version":"31d85cbcef2ca9173a6ed6cec7afe1d8d97e9580c1033e091a03879ba9c2fb04","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"80721ddae78e78ad450205102844f97fbfce56640edc80f6635c3f43192bca88","signature":"4e27ba46ef2d07a97560bf915f0a9a5e45e1beda354fb22a2d1d0469c6dae776"},{"version":"341b6a3663c7821335cc80dbb3cc6c7db5523fd2c674c0157a902edb9d016ca3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"090daf26112fa2445fe107d95ec578af4e5911a7068c9ab706d879ac019a3d3e","signature":"e01086a749c2360bfd713aeff3f2876664f14db15b167270cf6e8b76230e5328"},{"version":"f8cc0068547066a2703249452734e9e27d496c19544897f15fcd61b8c59eee5a","signature":"81921905af55f744ebf75c837c253a189c14d11f9e97db771917ab3416e21e93"},{"version":"0163083635fe2d4a078e7a8c71f67ccad45a6778695088aa685e69d13050a9b2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"25303eec965d84398a8514ad7d3d33ed769aee25735656d5c2fa0c85c38a3ec4","signature":"acadb10eaf51c62205ea96e87ed72a6c444139dcc66a76af3768714530a05295"},{"version":"cf73b12847e8c70c3f2e6bdd7828cccf6d9aa60e67b545351d26701979bdd048","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"74c52350e75e298772e8ed437c2a74eee930f2b79eb5716c4e24231028f6a341","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e231b1f3bd383553738a4f9d1c37fb38a6ec1a61d29908e2f858ab728fa99340","signature":"a5444f8249c073edf9937a03893f496cf74a6d8f691bac0ce17c7565f0c5a3c5"},{"version":"13fa7357dc3b7abcf08a437c46fb5a444d99a779942c6afc2a6303dc2b7257fe","signature":"48be45ecf1ad85e94f806efa606cc2991c02cca46895696cba5e9f058f3d1cd5"},{"version":"84e41c24348913697f9deac713f23f142dfbc4eb4169d652c9c168543733fa41","signature":"6b0214bfe5c163db62071bf8c2e5a8eee71ce77b7200b6654524538ab8dad798"},{"version":"203302143d8053f7143e75f81157d2c94e8d537f1e86c0aae3e3fea1dcaeab02","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe3776209eeb9972e5f9f450cbcd0c452c576173b96d834735e64d9c6468c0e9","signature":"4f8a91b5e8be0d4560eff5eccccf7d8d798e5cb4eb643ffa6ada14bc2e436b44"},{"version":"ed9d0e5d83217df43ff976e26293330e3416b8d06e5b76fe0908260970de2893","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e1c4ab7fac150f2ec5bab09514f17903f8499b4dce81a4afd1a53fa108f77a4c","signature":"95342456a2528e79e342d4673e89992d36c83031aed802b5700d9bc17cd97b7b"},{"version":"9dca669d1fd58e76dc9e78585da98ce21478d24484868077e80e4f9807c35c8f","signature":"57b0b61b3dc0afa371946ad39627e8bde74fdd71ec37868b08a459fba4a93806"},{"version":"2777b65f59b3218c4cb8209d83d4ef371ed35d7ab56fd7ec3dc9108688c0d887","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7cfee12174fab88d0701cf65ccc5bbb7de677641f9d0bc521b7bec9a16d31db3","signature":"21e37be884f8363a08685b18be7592e606e157cf606b15a55214cc145cdef69f"},{"version":"8678489220fa0042af2ac7ed748288dfc4495b1d38e13d59a49863fdeb66d442","signature":"637359a3d5dd761b30682c5ee386d320d5ac6327c9b03e408cd63e14837db390"},{"version":"a224c63f7f3b5fbd4a31c87583c20b7e8a32488d16188ba06cfeb8957c2b3c2f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"b69f3f5a262190f47fc87bec7bfc7aebf23f01811b9ea1ddfd38e4169a192a7f","signature":"637359a3d5dd761b30682c5ee386d320d5ac6327c9b03e408cd63e14837db390"},{"version":"752502a43dbe2f472159460737d734b9638ea42fa2453bbe0cd5136f262a91fd","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"624e4e2f244f418365ccae9e3acf57432e2461e47aa942b5e59ca4ea9f2759c6","signature":"c0e736d664d59a067a20ce66e5cdfc976cfdbad267e88a563d52b5ee946cb243"},{"version":"057fe935fe56b8f82aea52683e9daf1781813d147d4aff81b0a3469be4dbfc0e","signature":"20d5c937ec9ab05dcfd605a778a8907ec4cb16b4654d29077781d34cf25548c7"},{"version":"c624fa5e5d970a56b050cc06cafe78391b1be52965d0b82bfcd7964719ce75ee","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"24559cb09fe3ec109c91d42ecb116fd6fb1c33bdfd8b7918c50269d3312f7a02","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"aee8f99029b18ddb9ed00c0017564066fe961fdaf9c1221c3de9bdaeb7f12bd0","signature":"72171d7ad15a6c92f718191a596da84fd9d36860405e0e21735a573518d31951"},{"version":"9027b919385172575cf16c059bddf90f930e049da672abbb171544fd069d484e","signature":"f08c896f44b89c7370f5449ac46c72762eada6827410e1c079ec78266537c2dd"},{"version":"d7f156e662fc007c0954e04a83a05ab8df061605a908c4c6eb4c40ee82686c4b","signature":"5157a6f82e81776664a87b8483700459e1815c24a4e125dbc760c24567fb0f08"},{"version":"51c40d4499842b0c848e942358dbbd62b4f31fb3d4bc9a7f99f365768836a467","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4cb087bc5941c81db9b41b03360222a82b2506e2001590dc24283173e81a7608","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"f123246a7b6c04d80b9b57fadfc6c90959ec6d5c0d4c8e620e06e2811ae3a052","impliedFormat":1},{"version":"a346701ad6dcdaa58e388fe0995fc5304c09c395b8cba68ed872780f8c102004","impliedFormat":99},{"version":"c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","impliedFormat":99},{"version":"2fbe402f0ee5aa8ab55367f88030f79d46211c0a0f342becaa9f648bf8534e9d","impliedFormat":1},{"version":"b94258ef37e67474ac5522e9c519489a55dcb3d4a8f645e335fc68ea2215fe88","impliedFormat":1},{"version":"26c57c9f839e6d2048d6c25e81f805ba0ca32a28fd4d824399fd5456c9b0575b","impliedFormat":1},"7c8c3dfc0cdd370d44932828eb067ef771c8fe7996693221d5d4b90af6d54f2d","c2b999a96781e6c932632bd089095368e973bf5602e1b1a62156b7d2b43f1e84","6299a6a387dc55e528aec4342deaea0b83f1ea3a365c135a31a18ee55334f441",{"version":"caf4af98bf464ad3e10c46cf7d340556f89197aab0f87f032c7b84eb8ddb24d9","impliedFormat":99},{"version":"71acd198e19fa38447a3cbc5c33f2f5a719d933fccf314aaff0e8b0593271324","impliedFormat":99},"e69cfc27d78c9ef31b248ab8ea4fa54327c1038843f70efb5cd85d54c0bf1e0e","525c4bb2c051987be64df0e92e1d90174912b219bf541e24ffbc4a3406de49e8","dab689d836ad3292b41e7f4986b4e68e5d45c6903e4aeaae8972a82d4aebec29",{"version":"a9373d52584b48809ffd61d74f5b3dfd127da846e3c4ee3c415560386df3994b","impliedFormat":99},{"version":"caf4af98bf464ad3e10c46cf7d340556f89197aab0f87f032c7b84eb8ddb24d9","impliedFormat":99},{"version":"8085954ba165e611c6230596078063627f3656fed3fb68ad1e36a414c4d7599a","impliedFormat":99},"fb33bc4865b74d1f0239b1782dbdc4cc2d38690ba6e245e9e3b024c256b14c2b",{"version":"caf4af98bf464ad3e10c46cf7d340556f89197aab0f87f032c7b84eb8ddb24d9","impliedFormat":99},{"version":"9c580c6eae94f8c9a38373566e59d5c3282dc194aa266b23a50686fe10560159","impliedFormat":99},"995c54f1c5c688f712a675fe35d55bcada2b31dba561dcc71553a1ad601e59ec","87608e7cc815ad3d88e0b9de6c402bb37b58ea1b38636cf69709da1baff6e334",{"version":"91b4ce96f6ad631a0a6920eb0ab928159ff01a439ae0e266ecdc9ea83126a195","impliedFormat":1},{"version":"88efe27bebddb62da9655a9f093e0c27719647e96747f16650489dc9671075d6","impliedFormat":1},{"version":"e348f128032c4807ad9359a1fff29fcbc5f551c81be807bfa86db5a45649b7ba","impliedFormat":1},{"version":"8ee6b07974528da39b7835556e12dd3198c0a13e4a9de321217cd2044f3de22e","impliedFormat":1},{"version":"deefd8c43b40f9797c3921d78d3f9243959621a17b817be7f5d95c149f23a9dd","impliedFormat":1},{"version":"5f12132800d430adbe59b49c2c0354d85a71ada7d756e34250a655baa8ad4ae5","impliedFormat":1},{"version":"1996d1cd7d585a8359a35878f67abdd73cc35b1f675c9c6b147b202fdd8dfc3f","impliedFormat":1},{"version":"b16e757e4c35434065120a2b3bf13a518fc9e621dc9c2ed668f91635a9dc4e75","impliedFormat":1},{"version":"7c18088ccbca1cfe297c22f4cf598a3a36e798efe63f572e39442e9b6af7ccf9","impliedFormat":1},{"version":"d02ced7accb512e6198b796b8d284e7979abde0f089b0a77969747a5f27bfb23","impliedFormat":1},{"version":"4374cefdde5c6e9bad52b0436e887b8325b8f407c12035194ad02c28f1553a3a","impliedFormat":1},{"version":"9b70cad270593f676aecfe4d1611dc766464f0b8138527b0ebbf1ff773578d69","impliedFormat":1},{"version":"b4f85bfb7e831703ac81737361842f1ae4d924b42c5d1af2bff93cca521de4d1","impliedFormat":1},{"version":"ee933420aacba1f60aa70fb8ba47c5e69001b005073b71973114587089a13c7f","impliedFormat":1},{"version":"0a0714999d0a5bdfacd15c7b34cffbcc6f263f6cb0ccb42076cdc541c6987797","impliedFormat":1},{"version":"56584bfc655f9df64afc0f22f7d1122c29e5b74b342c203b891e19de9fa37de8","impliedFormat":1},{"version":"40ec58f0fadd0b3981b3d383e1c12fa0680115ae9f018387fc2cfc0bbcf23204","impliedFormat":1},{"version":"849b9e7283b7309a4556c9b90bb8e2dfc27751f157798065bbc513dcddb09a8c","impliedFormat":1},{"version":"76bba0c97594248c1be19af32d5799f7eff51cec2926d8e4dd59267d7636a0b4","impliedFormat":1},{"version":"10e109212c7be8a9f66e988e5d6c2a8900c9d14bf6beadf5fa70d32ada3425cf","impliedFormat":1},{"version":"2b821aeb31e690092f8eae671dd961a9d0fd598ff4883ce0a600c90e9e8fa716","impliedFormat":1},{"version":"26602933b613e4df3868a6c82e14fffa2393a08531cb333ed27b151923462981","impliedFormat":1},{"version":"f57a588d8f6b3ce5c8b494f2dc759a8885eaee18e80a4952df47de45403fedbe","impliedFormat":1},{"version":"34735727b3fe7a0ed0651a0f88d06449163d1989a2b2de7f047473adc7c1c383","impliedFormat":1},{"version":"a5b13abc88ab3186e713c445e59e2f6eee20c6167943517bc2f56985d89b8c55","impliedFormat":1},{"version":"c8a206a6ba4e32710ebb4a389187772423de0f4f6180b95a7ef1a5a1934c1be6","impliedFormat":1},{"version":"7ae65fe95b18205e241e6695cb2c61c0828d660aca7d08f68781b439a800e6b8","impliedFormat":1},{"version":"c2c8c166199d3a7bd093152437d1f6399d05e458a9ca9364456feecba920cda4","impliedFormat":1},{"version":"369b7270eeeb37982203b2cb18c7302947b89bf5818c1d3d2e95a0418f02b74e","impliedFormat":1},{"version":"94f95d223e2783b0aef4d15d7f6990a6a550fe17d099c501395f690337f7105e","impliedFormat":1},{"version":"039bd8d1e0d151570b66e75ee152877fb0e2f42eca43718632ac195e6884be34","impliedFormat":1},{"version":"d565d66b38d54de037c9d46dede1f12630010d9b45fd9c6b432c7a40b2e30502","impliedFormat":1},{"version":"d7386a1ebe9a3eae227a5561c898c10cacb61a49f941c5a18cdf593f979c693c","impliedFormat":1},"7514a59057759a26fb9ad5d3ff76cdcd83b9eb87e66218c88ecf36967f3e9ece",{"version":"a9373d52584b48809ffd61d74f5b3dfd127da846e3c4ee3c415560386df3994b","impliedFormat":99},{"version":"caf4af98bf464ad3e10c46cf7d340556f89197aab0f87f032c7b84eb8ddb24d9","impliedFormat":99},{"version":"7ec047b73f621c526468517fea779fec2007dd05baa880989def59126c98ef79","impliedFormat":99},{"version":"8dd450de6d756cee0761f277c6dc58b0b5a66b8c274b980949318b8cad26d712","impliedFormat":99},{"version":"6b5f886fe41e2e767168e491fe6048398ed6439d44e006d9f51cc31265f08978","impliedFormat":99},{"version":"56a87e37f91f5625eb7d5f8394904f3f1e2a90fb08f347161dc94f1ae586bdd0","impliedFormat":99},{"version":"6b863463764ae572b9ada405bf77aac37b5e5089a3ab420d0862e4471051393b","impliedFormat":99},{"version":"904d6ad970b6bd825449480488a73d9b98432357ab38cf8d31ffd651ae376ff5","impliedFormat":99},{"version":"1179ef8174e0e4a09d35576199df04803b1db17c0fb35b9326442884bc0b0cce","impliedFormat":99},{"version":"3cdb61f1d741264a9d27bbd3e88a9e1ad614ee6ff042df983f99de3a034d5ba4","impliedFormat":1},"b8936f21d1af9539d43453a96ac1b65cb188f5d2f8d52e05d6eaaded282b794b",{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"2c57db2bf2dbd9e8ef4853be7257d62a1cb72845f7b976bb4ee827d362675f96","impliedFormat":99},"c9e19d480a43172f9504ac9b22f4a9c149de1d916162f24c62395533b7be19f6",{"version":"68b6a7501a56babd7bcd840e0d638ee7ec582f1e70b3c36ebf32e5e5836913c8","impliedFormat":99},{"version":"9f7a3c434912fd3feb87af4aabdf0d1b614152ecb5e7b2aa1fff3429879cdd51","impliedFormat":99},"9ba7808b7404cdf2159c81883a39290033bc4308f2978eb80797c92b87421301",{"version":"4a5aa16151dbec524bb043a5cbce2c3fec75957d175475c115a953aca53999a9","impliedFormat":99},"ab2d009e0fa7366f47ae1a6e0ca35d0aac55c6264c5f61718e12366c196163b4","ec7c92aaed80f6923a7caa4bfe4eead395b50a7001504fd7fbb0b9381804dae9",{"version":"cc3738ba01d9af5ba1206a313896837ff8779791afcd9869e582783550f17f38","impliedFormat":99},"234e38fef59169bd02d8f5b56ca02e5ec13a0bd6846c328927b924e1299f7fb0",{"version":"dfcf16e716338e9fe8cf790ac7756f61c85b83b699861df970661e97bf482692","impliedFormat":99},"cbcb138217c5bc95c400201059163ad42d7238de8f7864e0323f1420400ccb05",{"version":"31c30cc54e8c3da37c8e2e40e5658471f65915df22d348990d1601901e8c9ff3","impliedFormat":99},"311bede35f785d7b1ecd7398986757e26409d1049352a94ccf83586b8603c92d",{"version":"89783bd45ab35df55203b522f8271500189c3526976af533a599a86caaf31362","impliedFormat":99},{"version":"26e6c521a290630ea31f0205a46a87cab35faac96e2b30606f37bae7bcda4f9d","impliedFormat":99},"dc109123ecd59af01d07aa9f3a8e8a7085bd3f337388c5369799ab1ce6c2d45f",{"version":"2535fc1a5fe64892783ff8f61321b181c24f824e688a4a05ae738da33466605b","impliedFormat":99},"04cf38bf94abd3fe1b51e90227e6e235ca74776f6fc6af718bfc149e7424f582",{"version":"233267a4a036c64aee95f66a0d31e3e0ef048cccc57dd66f9cf87582b38691e4","impliedFormat":99},"ce6afa34fb9dae51053a863b4c3f7c6e55f3da23b00149f31a8e4402bc963be0",{"version":"c5013d60cbff572255ccc87c314c39e198c8cc6c5aa7855db7a21b79e06a510f","impliedFormat":99},"d3c7ad5738d28011b414c43fd3a1bb6b5d4d96036967285cfac496f5bcb79b07","03e892344ad170438ccfc156b4ee7ff0be4e535a2939e038f64556ce03b934ed","1348f1a1f9820e2f1394b93cecc156a7e22f03636ab9270753985549aae2be74","5950ac01377e7eedc94b00eb3fee678745e4cc1a72b5343867f0733d07db6660",{"version":"7a14bf21ae8a29d64c42173c08f026928daf418bed1b97b37ac4bb2aa197b89b","impliedFormat":99},"6f74706bc6b53f9e4bcebb5e7ab8743b616aef181edc7758b8ee905f9b2fdcd7",{"version":"0943a6e4e026d0de8a4969ee975a7283e0627bf41aa4635d8502f6f24365ac9b","impliedFormat":99},{"version":"1461efc4aefd3e999244f238f59c9b9753a7e3dfede923ebe2b4a11d6e13a0d0","impliedFormat":99},"00dd6eef660f08ce85154106fa0fa4d943ed699c5ca7b06bb08732978bcebb49",{"version":"2a00cea77767cb26393ee6f972fd32941249a0d65b246bfcb20a780a2b919a21","impliedFormat":99},{"version":"440cb5b34e06fabe3dcb13a3f77b98d771bf696857c8e97ce170b4f345f8a26b","impliedFormat":99},"a06d96a582ac207ffcd38445d773c05e841d646efb185b5e9b65f73e5bd388c7","c3d3dcb0d82fc5e91d8830bac7fead905686fe876f1f42c3ed872bb0a6b6584e","0d59f0ca0526d6100430c807c59dc2004728b8d38804b278fa0ab3cc7e3a9cf0","4d3ecfe7df96f773dc0e1c0fb18d6d72db9f38d1b41f34a4fa1a427a6f4bd9d6","a4a6972c2d47d465d7f02c1dc4a6cbfeda7a97e46479c1b0cebdaf26bf9b497a",{"version":"57ae71d27ee71b7d1f2c6d867ddafbbfbaa629ad75565e63a508dbaa3ef9f859","impliedFormat":99},{"version":"60924ca0c60f0674f208bfa1eaaa54e6973ced7650df7c7a81ae069730ef665a","impliedFormat":99},{"version":"e3181c7595a89dd03ba9a20eb5065fa37e0b0a514261bed774f6ae2241634470","impliedFormat":99},{"version":"c42d5cbf94816659c01f7c2298d0370247f1a981f8ca6370301b7a03b3ced950","impliedFormat":99},{"version":"18c18ab0341fd5fdfefb5d992c365be1696bfe000c7081c964582b315e33f8f2","impliedFormat":99},{"version":"dafbd4199902d904e3d4a233b5faf5dc4c98847fcd8c0ddd7617b2aed50e90d8","impliedFormat":99},{"version":"9fc866f9783d12d0412ed8d68af5e4c9e44f0072d442b0c33c3bda0a5c8cae15","impliedFormat":99},{"version":"5fc13d24a2d0328eac00c4e73cc052a987fbced2151bc0d3b7eb8f3ba4d0f4e2","impliedFormat":99},{"version":"2cef84bf00cbdb452fdc5d8ecfe7b8c0aa3fa788bdc4ad8961e2e636530dbb60","impliedFormat":99},{"version":"24104650185414f379d5cc35c0e2c19f06684a73de5b472bae79e0d855771ecf","impliedFormat":99},{"version":"799003c0ab928582fca04977f47b8d85b43a8de610f4eef0ad2d069fbb9f9399","impliedFormat":99},{"version":"b13dd41c344a23e085f81b2f5cd96792e6b35ae814f32b25e39d9841844ad240","impliedFormat":99},{"version":"17d8b4e6416e48b6e23b73d05fd2fde407e2af8fddbe9da2a98ede14949c3489","impliedFormat":99},{"version":"6d17b2b41f874ab4369b8e04bdbe660163ea5c8239785c850f767370604959e3","impliedFormat":99},{"version":"04b4c044c8fe6af77b6c196a16c41e0f7d76b285d036d79dcaa6d92e24b4982b","impliedFormat":99},{"version":"30bdeead5293c1ddfaea4097d3e9dd5a6b0bc59a1e07ff4714ea1bbe7c5b2318","impliedFormat":99},{"version":"e7df226dcc1b0ce76b32f160556f3d1550124c894aae2d5f73cefaaf28df7779","impliedFormat":99},{"version":"f2b7eef5c46c61e6e72fba9afd7cc612a08c0c48ed44c3c5518559d8508146a2","impliedFormat":99},{"version":"00f0ba57e829398d10168b7db1e16217f87933e61bd8612b53a894bd7d6371da","impliedFormat":99},{"version":"126b20947d9fa74a88bb4e9281462bda05e529f90e22d08ee9f116a224291e84","impliedFormat":99},{"version":"40d9e43acee39702745eb5c641993978ac40f227475eacc99a83ba893ad995db","impliedFormat":99},{"version":"8a66b69b21c8de9cb88b4b6d12f655d5b7636e692a014c5aa1bd81745c8c51d5","impliedFormat":99},{"version":"ebbb846bdd5a78fdacff59ae04cea7a097912aeb1a2b34f8d88f4ebb84643069","impliedFormat":99},{"version":"7321adb29ffd637acb33ee67ea035f1a97d0aa0b14173291cc2fd58e93296e04","impliedFormat":99},{"version":"320816f1a4211188f07a782bdb6c1a44555b3e716ce13018f528ad7387108d5f","impliedFormat":99},{"version":"b2cc8a474b7657f4a03c67baf6bff75e26635fd4b5850675e8cad524a09ddd0c","impliedFormat":99},{"version":"0d081e9dc251063cc69611041c17d25847e8bdbe18164baaa89b7f1f1633c0ab","impliedFormat":99},{"version":"a64c25d8f4ec16339db49867ea2324e77060782993432a875d6e5e8608b0de1e","impliedFormat":99},{"version":"0739310b6b777f3e2baaf908c0fbc622c71160e6310eb93e0d820d86a52e2e23","impliedFormat":99},{"version":"37b32e4eadd8cd3c263e7ac1681c58b2ac54f3f77bb34c5e4326cc78516d55a9","impliedFormat":99},{"version":"9b7a8974e028c4ed6f7f9abb969e3eb224c069fd7f226e26fcc3a5b0e2a1eba8","impliedFormat":99},{"version":"e8100b569926a5592146ed68a0418109d625a045a94ed878a8c5152b1379237c","impliedFormat":99},{"version":"594201c616c318b7f3149a912abd8d6bdf338d765b7bcbde86bca2e66b144606","impliedFormat":99},{"version":"03e380975e047c5c6ded532cf8589e6cc85abb7be3629e1e4b0c9e703f2fd36f","impliedFormat":99},{"version":"fae14b53b7f52a8eb3274c67c11f261a58530969885599efe3df0277b48909e1","impliedFormat":99},{"version":"c41206757c428186f2e0d1fd373915c823504c249336bdc9a9c9bbdf9da95fef","impliedFormat":99},{"version":"e961f853b7b0111c42b763a6aa46fc70d06a697db3d8ed69b38f7ba0ae42a62b","impliedFormat":99},{"version":"3db90f79e36bcb60b3f8de1bc60321026800979c150e5615047d598c787a64b7","impliedFormat":99},{"version":"639b6fb3afbb8f6067c1564af2bd284c3e883f0f1556d59bd5eb87cdbbdd8486","impliedFormat":99},{"version":"49795f5478cb607fd5965aa337135a8e7fd1c58bc40c0b6db726adf186dd403f","impliedFormat":99},{"version":"7d8890e6e2e4e215959e71d5b5bd49482cf7a23be68d48ea446601a4c99bd511","impliedFormat":99},{"version":"d56f72c4bb518de5702b8b6ae3d3c3045c99e0fd48b3d3b54c653693a8378017","impliedFormat":99},{"version":"4c9ac40163e4265b5750510d6d2933fb7b39023eed69f7b7c68b540ad960826e","impliedFormat":99},{"version":"8dfab17cf48e7be6e023c438a9cdf6d15a9b4d2fa976c26e223ba40c53eb8da8","impliedFormat":99},{"version":"38bdf7ccacfd8e418de3a7b1e3cecc29b5625f90abc2fa4ac7843a290f3bf555","impliedFormat":99},{"version":"9819e46a914735211fbc04b8dc6ba65152c62e3a329ca0601a46ba6e05b2c897","impliedFormat":99},{"version":"50f0dc9a42931fb5d65cdd64ba0f7b378aedd36e0cfca988aa4109aad5e714cb","impliedFormat":99},{"version":"894f23066f9fafccc6e2dd006ed5bd85f3b913de90f17cf1fe15a2eb677fd603","impliedFormat":99},{"version":"abdf39173867e6c2d6045f120a316de451bbb6351a6929546b8470ddf2e4b3b9","impliedFormat":99},{"version":"aa2cb4053f948fbd606228195bbe44d78733861b6f7204558bbee603202ee440","impliedFormat":99},{"version":"6911b41bfe9942ac59c2da1bbcbe5c3c1f4e510bf65cae89ed00f434cc588860","impliedFormat":99},{"version":"7b81bc4d4e2c764e85d869a8dd9fe3652b34b45c065482ac94ffaacc642b2507","impliedFormat":99},{"version":"895df4edb46ccdcbce2ec982f5eed292cf7ea3f7168f1efea738ee346feab273","impliedFormat":99},{"version":"8692bb1a4799eda7b2e3288a6646519d4cebb9a0bddf800085fc1bd8076997a0","impliedFormat":99},{"version":"239c9e98547fe99711b01a0293f8a1a776fc10330094aa261f3970aaba957c82","impliedFormat":99},{"version":"34833ec50360a32efdc12780ae624e9a710dd1fd7013b58c540abf856b54285a","impliedFormat":99},{"version":"647538e4007dcc351a8882067310a0835b5bb8559d1cfa5f378e929bceb2e64d","impliedFormat":99},{"version":"992d6b1abcc9b6092e5a574d51d441238566b6461ade5de53cb9718e4f27da46","impliedFormat":99},{"version":"938702305649bf1050bd79f3803cf5cc2904596fc1edd4e3b91033184eae5c54","impliedFormat":99},{"version":"1e931d3c367d4b96fe043e792196d9c2cf74f672ff9c0b894be54e000280a79d","impliedFormat":99},{"version":"05bec322ea9f6eb9efcd6458bb47087e55bd688afdd232b78379eb5d526816ed","impliedFormat":99},{"version":"4c449a874c2d2e5e5bc508e6aa98f3140218e78c585597a21a508a647acd780a","impliedFormat":99},{"version":"dae15e326140a633d7693e92b1af63274f7295ea94fb7c322d5cbe3f5e48be88","impliedFormat":99},{"version":"c2b0a869713bca307e58d81d1d1f4b99ebfc7ec8b8f17e80dde40739aa8a2bc6","impliedFormat":99},{"version":"6e4b4ff6c7c54fa9c6022e88f2f3e675eac3c6923143eb8b9139150f09074049","impliedFormat":99},{"version":"69559172a9a97bbe34a32bff8c24ef1d8c8063feb5f16a6d3407833b7ee504cf","impliedFormat":99},{"version":"86b94a2a3edcb78d9bfcdb3b382547d47cb017e71abe770c9ee8721e9c84857f","impliedFormat":99},{"version":"e3fafafda82853c45c0afc075fea1eaf0df373a06daf6e6c7f382f9f61b2deb3","impliedFormat":99},{"version":"a4ba4b31de9e9140bc49c0addddbfaf96b943a7956a46d45f894822e12bf5560","impliedFormat":99},{"version":"d8a7926fc75f2ed887f17bae732ee31a4064b8a95a406c87e430c58578ee1f67","impliedFormat":99},{"version":"9886ffbb134b0a0059fd82219eba2a75f8af341d98bc6331b6ef8a921e10ec68","impliedFormat":99},{"version":"c2ead057b70d0ae7b87a771461a6222ebdb187ba6f300c974768b0ae5966d10e","impliedFormat":99},{"version":"46687d985aed8485ab2c71085f82fafb11e69e82e8552cf5d3849c00e64a00a5","impliedFormat":99},{"version":"999ca66d4b5e2790b656e0a7ce42267737577fc7a52b891e97644ec418eff7ec","impliedFormat":99},{"version":"ec948ee7e92d0888f92d4a490fdd0afb27fbf6d7aabebe2347a3e8ac82c36db9","impliedFormat":99},{"version":"03ef2386c683707ce741a1c30cb126e8c51a908aa0acc01c3471fafb9baaacd5","impliedFormat":99},{"version":"66a372e03c41d2d5e920df5282dadcec2acae4c629cb51cab850825d2a144cea","impliedFormat":99},{"version":"ddf9b157bd4c06c2e4646c9f034f36267a0fbd028bd4738214709de7ea7c548b","impliedFormat":99},{"version":"3e795aac9be23d4ad9781c00b153e7603be580602e40e5228e2dafe8a8e3aba1","impliedFormat":99},{"version":"98c461ec5953dfb1b5d5bca5fee0833c8a932383b9e651ca6548e55f1e2c71c3","impliedFormat":99},{"version":"5c42107b46cb1d36b6f1dee268df125e930b81f9b47b5fa0b7a5f2a42d556c10","impliedFormat":99},{"version":"7e32f1251d1e986e9dd98b6ff25f62c06445301b94aeebdf1f4296dbd2b8652f","impliedFormat":99},{"version":"2f7e328dda700dcb2b72db0f58c652ae926913de27391bd11505fc5e9aae6c33","impliedFormat":99},{"version":"3de7190e4d37da0c316db53a8a60096dbcd06d1a50677ccf11d182fa26882080","impliedFormat":99},{"version":"a9d6f87e59b32b02c861aade3f4477d7277c30d43939462b93f48644fa548c58","impliedFormat":99},{"version":"2bce8fd2d16a9432110bbe0ba1e663fd02f7d8b8968cd10178ea7bc306c4a5df","impliedFormat":99},{"version":"798bedbf45a8f1e55594e6879cd46023e8767757ecce1d3feaa78d16ad728703","impliedFormat":99},{"version":"62723d5ac66f7ed6885a3931dd5cfa017797e73000d590492988a944832e8bc2","impliedFormat":99},{"version":"03db8e7df7514bf17fc729c87fff56ca99567b9aa50821f544587a666537c233","impliedFormat":99},{"version":"9b1f311ba4409968b68bf20b5d892dbd3c5b1d65c673d5841c7dbde351bc0d0b","impliedFormat":99},{"version":"2d1e8b5431502739fe335ceec0aaded030b0f918e758a5d76f61effa0965b189","impliedFormat":99},{"version":"e725839b8f884dab141b42e9d7ff5659212f6e1d7b4054caa23bc719a4629071","impliedFormat":99},{"version":"4fa38a0b8ae02507f966675d0a7d230ed67c92ab8b5736d99a16c5fbe2b42036","impliedFormat":99},{"version":"50ec1e8c23bad160ddedf8debeebc722becbddda127b8fdce06c23eacd3fe689","impliedFormat":99},{"version":"9a0aea3a113064fd607f41375ade308c035911d3c8af5ae9db89593b5ca9f1f9","impliedFormat":99},{"version":"8d643903b58a0bf739ce4e6a8b0e5fb3fbdfaacbae50581b90803934b27d5b89","impliedFormat":99},{"version":"19de2915ccebc0a1482c2337b34cb178d446def2493bf775c4018a4ea355adb8","impliedFormat":99},{"version":"9be8fc03c8b5392cd17d40fd61063d73f08d0ee3457ecf075dcb3768ae1427bd","impliedFormat":99},{"version":"a2d89a8dc5a993514ca79585039eea083a56822b1d9b9d9d85b14232e4782cbe","impliedFormat":99},{"version":"f526f20cae73f17e8f38905de4c3765287575c9c4d9ecacee41cfda8c887da5b","impliedFormat":99},{"version":"d9ec0978b7023612b9b83a71fee8972e290d02f8ff894e95cdd732cd0213b070","impliedFormat":99},{"version":"7ab10c473a058ec8ac4790b05cae6f3a86c56be9b0c0a897771d428a2a48a9f9","impliedFormat":99},{"version":"451d7a93f8249d2e1453b495b13805e58f47784ef2131061821b0e456a9fd0e1","impliedFormat":99},{"version":"21c56fe515d227ed4943f275a8b242d884046001722a4ba81f342a08dbe74ae2","impliedFormat":99},{"version":"d8311f0c39381aa1825081c921efde36e618c5cf46258c351633342a11601208","impliedFormat":99},{"version":"6b50c3bcc92dc417047740810596fcb2df2502aa3f280c9e7827e87896da168a","impliedFormat":99},{"version":"18a6b318d1e7b31e5749a52be0cf9bbce1b275f63190ef32e2c79db0579328ca","impliedFormat":99},{"version":"6a2d0af2c27b993aa85414f3759898502aa198301bc58b0d410948fe908b07b0","impliedFormat":99},{"version":"2da11b6f5c374300e5e66a6b01c3c78ec21b5d3fec0748a28cc28e00be73e006","impliedFormat":99},{"version":"0729691b39c24d222f0b854776b00530877217bfc30aac1dc7fa2f4b1795c536","impliedFormat":99},{"version":"ca45bb5c98c474d669f0e47615e4a5ae65d90a2e78531fda7862ee43e687a059","impliedFormat":99},{"version":"c1c058b91d5b9a24c95a51aea814b0ad4185f411c38ac1d5eef0bf3cebec17dc","impliedFormat":99},{"version":"3ab0ed4060b8e5b5e594138aab3e7f0262d68ad671d6678bcda51568d4fc4ccc","impliedFormat":99},{"version":"e2bf1faba4ff10a6020c41df276411f641d3fdce5c6bae1db0ec84a0bf042106","impliedFormat":99},{"version":"80b0a8fe14d47a71e23d7c3d4dcee9584d4282ef1d843b70cab1a42a4ea1588c","impliedFormat":99},{"version":"a0f02a73f6e3de48168d14abe33bf5970fdacdb52d7c574e908e75ad571e78f7","impliedFormat":99},{"version":"c728002a759d8ec6bccb10eed56184e86aeff0a762c1555b62b5d0fa9d1f7d64","impliedFormat":99},{"version":"586f94e07a295f3d02f847f9e0e47dbf14c16e04ccc172b011b3f4774a28aaea","impliedFormat":99},{"version":"cfe1a0f4ed2df36a2c65ea6bc235dbb8cf6e6c25feb6629989f1fa51210b32e7","impliedFormat":99},{"version":"8ba69c9bf6de79c177329451ffde48ddab7ec495410b86972ded226552f664df","impliedFormat":99},{"version":"15111cbe020f8802ad1d150524f974a5251f53d2fe10eb55675f9df1e82dbb62","impliedFormat":99},{"version":"782dc153c56a99c9ed07b2f6f497d8ad2747764966876dbfef32f3e27ce11421","impliedFormat":99},{"version":"cc2db30c3d8bb7feb53a9c9ff9b0b859dd5e04c83d678680930b5594b2bf99cb","impliedFormat":99},{"version":"46909b8c85a6fd52e0807d18045da0991e3bdc7373435794a6ba425bc23cc6be","impliedFormat":99},{"version":"e4e511ff63bb6bd69a2a51e472c6044298bca2c27835a34a20827bc3ef9b7d13","impliedFormat":99},{"version":"2c86f279d7db3c024de0f21cd9c8c2c972972f842357016bfbbd86955723b223","impliedFormat":99},{"version":"112c895cff9554cf754f928477c7d58a21191c8089bffbf6905c87fe2dc6054f","impliedFormat":99},{"version":"8cfc293b33082003cacbf7856b8b5e2d6dd3bde46abbd575b0c935dc83af4844","impliedFormat":99},{"version":"d2c5c53f85ce0474b3a876d76c4fc44ff7bb766b14ed1bf495f9abac181d7f5f","impliedFormat":99},{"version":"3c523f27926905fcbe20b8301a0cc2da317f3f9aea2273f8fc8d9ae88b524819","impliedFormat":99},{"version":"9ca0d706f6b039cc52552323aeccb4db72e600b67ddc7a54cebc095fc6f35539","impliedFormat":99},{"version":"a64909a9f75081342ddd061f8c6b49decf0d28051bc78e698d347bdcb9746577","impliedFormat":99},{"version":"7d8d55ae58766d0d52033eae73084c4db6a93c4630a3e17f419dd8a0b2a4dcd8","impliedFormat":99},{"version":"b8b5c8ba972d9ffff313b3c8a3321e7c14523fc58173862187e8d1cb814168ac","impliedFormat":99},{"version":"9c42c0fa76ee36cf9cc7cc34b1389fbb4bd49033ec124b93674ec635fabf7ffe","impliedFormat":99},{"version":"6184c8da9d8107e3e67c0b99dedb5d2dfe5ccf6dfea55c2a71d4037caf8ca196","impliedFormat":99},{"version":"4030ceea7bf41449c1b86478b786e3b7eadd13dfe5a4f8f5fe2eb359260e08b3","impliedFormat":99},{"version":"7bf516ec5dfc60e97a5bde32a6b73d772bd9de24a2e0ec91d83138d39ac83d04","impliedFormat":99},{"version":"e6a6fb3e6525f84edf42ba92e261240d4efead3093aca3d6eb1799d5942ba393","impliedFormat":99},{"version":"45df74648934f97d26800262e9b2af2f77ef7191d4a5c2eb1df0062f55e77891","impliedFormat":99},{"version":"3fe361e4e567f32a53af1f2c67ad62d958e3d264e974b0a8763d174102fe3b29","impliedFormat":99},{"version":"28b520acee4bc6911bfe458d1ad3ebc455fa23678463f59946ad97a327c9ab2b","impliedFormat":99},{"version":"121b39b1a9ad5d23ed1076b0db2fe326025150ef476dccb8bf87778fcc4f6dd7","impliedFormat":99},{"version":"f791f92a060b52aa043dde44eb60307938f18d4c7ac13df1b52c82a1e658953f","impliedFormat":99},{"version":"df09443e7743fd6adc7eb108e760084bacdf5914403b7aac5fbd4dc4e24e0c2c","impliedFormat":99},{"version":"eeb4ff4aa06956083eaa2aad59070361c20254b865d986bc997ee345dbd44cbb","impliedFormat":99},{"version":"ed84d5043444d51e1e5908f664addc4472c227b9da8401f13daa565f23624b6e","impliedFormat":99},{"version":"146bf888b703d8baa825f3f2fb1b7b31bda5dff803e15973d9636cdda33f4af3","impliedFormat":99},{"version":"b4ec8b7a8d23bdf7e1c31e43e5beac3209deb7571d2ccf2a9572865bf242da7c","impliedFormat":99},{"version":"3fba0d61d172091638e56fba651aa1f8a8500aac02147d29bd5a9cc0bc8f9ec2","impliedFormat":99},{"version":"a5a57deb0351b03041e0a1448d3a0cc5558c48e0ed9b79b69c99163cdca64ad8","impliedFormat":99},{"version":"9bcecf0cbc2bfc17e33199864c19549905309a0f9ecc37871146107aac6e05ae","impliedFormat":99},{"version":"d6a211db4b4a821e93c978add57e484f2a003142a6aef9dbfa1fe990c66f337b","impliedFormat":99},{"version":"bd4d10bd44ce3f630dd9ce44f102422cb2814ead5711955aa537a52c8d2cae14","impliedFormat":99},{"version":"08e4c39ab1e52eea1e528ee597170480405716bae92ebe7a7c529f490afff1e0","impliedFormat":99},{"version":"625bb2bc3867557ea7912bd4581288a9fca4f3423b8dffa1d9ed57fafc8610e3","impliedFormat":99},{"version":"d1992164ecc334257e0bef56b1fd7e3e1cea649c70c64ffc39999bb480c0ecdf","impliedFormat":99},{"version":"a53ff2c4037481eb357e33b85e0d78e8236e285b6428b93aa286ceea1db2f5dc","impliedFormat":99},{"version":"4fe608d524954b6857d78857efce623852fcb0c155f010710656f9db86e973a5","impliedFormat":99},{"version":"b53b62a9838d3f57b70cc456093662302abb9962e5555f5def046172a4fe0d4e","impliedFormat":99},{"version":"9866369eb72b6e77be2a92589c9df9be1232a1a66e96736170819e8a1297b61f","impliedFormat":99},{"version":"43abfbdf4e297868d780b8f4cfdd8b781b90ecd9f588b05e845192146a86df34","impliedFormat":99},{"version":"582419791241fb851403ae4a08d0712a63d4c94787524a7419c2bc8e0eb1b031","impliedFormat":99},{"version":"18437eeb932fe48590b15f404090db0ab3b32d58f831d5ffc157f63b04885ee5","impliedFormat":99},{"version":"0c5eaedf622d7a8150f5c2ec1f79ac3d51eea1966b0b3e61bfdea35e8ca213a7","impliedFormat":99},{"version":"fac39fc7a9367c0246de3543a6ee866a0cf2e4c3a8f64641461c9f2dac0d8aae","impliedFormat":99},{"version":"3b9f559d0200134f3c196168630997caedeadc6733523c8b6076a09615d5dec8","impliedFormat":99},{"version":"932af64286d9723da5ef7b77a0c4229829ce8e085e6bcc5f874cb0b83e8310d4","impliedFormat":99},{"version":"adeb9278f11f5561157feee565171c72fd48f5fe34ed06f71abf24e561fcaa1e","impliedFormat":99},{"version":"2269fef79b4900fc6b08c840260622ca33524771ff24fda5b9101ad98ea551f3","impliedFormat":99},{"version":"73d47498a1b73d5392d40fb42a3e7b009ae900c8423f4088c4faa663cc508886","impliedFormat":99},{"version":"7efc34cdc4da0968c3ba687bc780d5cacde561915577d8d1c1e46c7ac931d023","impliedFormat":99},{"version":"3c20a3bb0c50c819419f44aa55acc58476dad4754a16884cef06012d02b0722f","impliedFormat":99},{"version":"4569abf6bc7d51a455503670f3f1c0e9b4f8632a3b030e0794c61bfbba2d13be","impliedFormat":99},{"version":"98b2297b4dc1404078a54b61758d8643e4c1d7830af724f3ed2445d77a7a2d57","impliedFormat":99},{"version":"952ba89d75f1b589e07070fea2d8174332e3028752e76fd46e1c16cc51e6e2af","impliedFormat":99},{"version":"b6c9a2deefb6a57ff68d2a38d33c34407b9939487fc9ee9f32ba3ecf2987a88a","impliedFormat":99},{"version":"f6b371377bab3018dac2bca63e27502ecbd5d06f708ad7e312658d3b5315d948","impliedFormat":99},{"version":"31947dd8f1c8eeb7841e1f139a493a73bd520f90e59a6415375d0d8e6a031f01","impliedFormat":99},{"version":"95cd83b807e10b1af408e62caf5fea98562221e8ddca9d7ccc053d482283ddda","impliedFormat":99},{"version":"19287d6b76288c2814f1633bdd68d2b76748757ffd355e73e41151644e4773d6","impliedFormat":99},{"version":"fc4e6ec7dade5f9d422b153c5d8f6ad074bd9cc4e280415b7dc58fb5c52b5df1","impliedFormat":99},{"version":"3aea973106e1184db82d8880f0ca134388b6cbc420f7309d1c8947b842886349","impliedFormat":99},{"version":"765e278c464923da94dda7c2b281ece92f58981642421ae097862effe2bd30fa","impliedFormat":99},{"version":"de260bed7f7d25593f59e859bd7c7f8c6e6bb87e8686a0fcafa3774cb5ca02d8","impliedFormat":99},{"version":"b5c341ce978f5777fbe05bc86f65e9906a492fa6b327bda3c6aae900c22e76c6","impliedFormat":99},{"version":"686ddbfaf88f06b02c6324005042f85317187866ca0f8f4c9584dd9479653344","impliedFormat":99},{"version":"7f789c0c1db29dd3aab6e159d1ba82894a046bf8df595ac48385931ae6ad83e0","impliedFormat":99},{"version":"8eb3057d4fe9b59b2492921b73a795a2455ebe94ccb3d01027a7866612ead137","impliedFormat":99},{"version":"1e43c5d7aee1c5ec20611e28b5417f5840c75d048de9d7f1800d6808499236f8","impliedFormat":99},{"version":"d42610a5a2bee4b71769968a24878885c9910cd049569daa2d2ee94208b3a7a5","impliedFormat":99},{"version":"f6ed95506a6ed2d40ed5425747529befaa4c35fcbbc1e0d793813f6d725690fa","impliedFormat":99},{"version":"a6fcc1cd6583939506c906dff1276e7ebdc38fbe12d3e108ba38ad231bd18d97","impliedFormat":99},{"version":"ed13354f0d96fb6d5878655b1fead51722b54875e91d5e53ef16de5b71a0e278","impliedFormat":99},{"version":"1193b4872c1fb65769d8b164ca48124c7ebacc33eae03abf52087c2b29e8c46c","impliedFormat":99},{"version":"af682dfabe85688289b420d939020a10eb61f0120e393d53c127f1968b3e9f66","impliedFormat":99},{"version":"0dca04006bf13f72240c6a6a502df9c0b49c41c3cab2be75e81e9b592dcd4ea8","impliedFormat":99},{"version":"79d6ac4a2a229047259116688f9cd62fda25422dee3ad304f77d7e9af53a41ef","impliedFormat":99},{"version":"64534c17173990dc4c3d9388d16675a059aac407031cfce8f7fdffa4ee2de988","impliedFormat":99},{"version":"ba46d160a192639f3ca9e5b640b870b1263f24ac77b6895ab42960937b42dcbb","impliedFormat":99},{"version":"5e5ddd6fc5b590190dde881974ab969455e7fad61012e32423415ae3d085b037","impliedFormat":99},{"version":"1c16fd00c42b60b96fe0fa62113a953af58ddf0d93b0a49cb4919cf5644616f0","impliedFormat":99},{"version":"eb240c0e6b412c57f7d9a9f1c6cd933642a929837c807b179a818f6e8d3a4e44","impliedFormat":99},{"version":"4a7bde5a1155107fc7d9483b8830099f1a6072b6afda5b78d91eb5d6549b3956","impliedFormat":99},{"version":"3c1baaffa9a24cc7ef9eea6b64742394498e0616b127ca630aca0e11e3298006","impliedFormat":99},{"version":"87ca1c31a326c898fa3feb99ec10750d775e1c84dbb7c4b37252bcf3742c7b21","impliedFormat":99},{"version":"d7bd26af1f5457f037225602035c2d7e876b80d02663ab4ca644099ad3a55888","impliedFormat":99},{"version":"2ad0a6b93e84a56b64f92f36a07de7ebcb910822f9a72ad22df5f5d642aff6f3","impliedFormat":99},{"version":"523d1775135260f53f672264937ee0f3dc42a92a39de8bee6c48c7ea60b50b5a","impliedFormat":99},{"version":"e441b9eebbc1284e5d995d99b53ed520b76a87cab512286651c4612d86cd408e","impliedFormat":99},{"version":"76f853ee21425c339a79d28e0859d74f2e53dee2e4919edafff6883dd7b7a80f","impliedFormat":99},{"version":"00cf042cd6ba1915648c8d6d2aa00e63bbbc300ea54d28ed087185f0f662e080","impliedFormat":99},{"version":"f57e6707d035ab89a03797d34faef37deefd3dd90aa17d90de2f33dce46a2c56","impliedFormat":99},{"version":"cc8b559b2cf9380ca72922c64576a43f000275c72042b2af2415ce0fb88d7077","impliedFormat":99},{"version":"1a337ca294c428ba8f2eb01e887b28d080ee4a4307ae87e02e468b1d26af4a74","impliedFormat":99},{"version":"5a15362fc2e72765a908c0d4dd89e3ab3b763e8bc8c23f19234a709ecfd202fe","impliedFormat":99},{"version":"2dffdfe62ac8af0943853234519616db6fd8958fc7ff631149fd8364e663f361","impliedFormat":99},{"version":"5dbdb2b2229b5547d8177c34705272da5a10b8d0033c49efbc9f6efba5e617f2","impliedFormat":99},{"version":"6fc0498cd8823d139004baff830343c9a0d210c687b2402c1384fb40f0aa461c","impliedFormat":99},{"version":"8492306a4864a1dc6fc7e0cc0de0ae9279cbd37f3aae3e9dc1065afcdc83dddc","impliedFormat":99},{"version":"c011b378127497d6337a93f020a05f726db2c30d55dc56d20e6a5090f05919a6","impliedFormat":99},{"version":"f4556979e95a274687ae206bbab2bb9a71c3ad923b92df241d9ab88c184b3f40","impliedFormat":99},{"version":"50e82bb6e238db008b5beba16d733b77e8b2a933c9152d1019cf8096845171a4","impliedFormat":99},{"version":"d6011f8b8bbf5163ef1e73588e64a53e8bf1f13533c375ec53e631aad95f1375","impliedFormat":99},{"version":"693cd7936ac7acfa026d4bcb5801fce71cec49835ba45c67af1ef90dbfd30af7","impliedFormat":99},{"version":"195e2cf684ecddfc1f6420564535d7c469f9611ce7a380d6e191811f84556cd2","impliedFormat":99},{"version":"1dc6b6e7b2a7f2962f31c77f4713f3a5a132bbe14c00db75d557568fe82e4311","impliedFormat":99},{"version":"add93b1180e9aaac2dae4ef3b16f7655893e2ecbe62bd9e48366c305f0063d89","impliedFormat":99},{"version":"594bd896fe37c970aafb7a376ebeec4c0d636b62a5f611e2e27d30fb839ad8a5","impliedFormat":99},{"version":"b1c6a6faf60542ba4b4271db045d7faea56e143b326ef507d2797815250f3afc","impliedFormat":99},{"version":"8c8b165beb794260f462679329b131419e9f5f35212de11c4d53e6d4d9cbedf6","impliedFormat":99},{"version":"ee5a4cf57d49fcf977249ab73c690a59995997c4672bb73fcaaf2eed65dbd1b2","impliedFormat":99},{"version":"f9f36051f138ab1c40b76b230c2a12b3ce6e1271179f4508da06a959f8bee4c1","impliedFormat":99},{"version":"9dc2011a3573d271a45c12656326530c0930f92539accbec3531d65131a14a14","impliedFormat":99},{"version":"091521ce3ede6747f784ae6f68ad2ea86bbda76b59d2bf678bcad2f9d141f629","impliedFormat":99},{"version":"202c2be951f53bafe943fb2c8d1245e35ed0e4dfed89f48c9a948e4d186dd6d4","impliedFormat":99},{"version":"c618aead1d799dbf4f5b28df5a6b9ce13d72722000a0ec3fe90a8115b1ea9226","impliedFormat":99},{"version":"9b0bf59708549c3e77fddd36530b95b55419414f88bbe5893f7bc8b534617973","impliedFormat":99},{"version":"7e216f67c4886f1bde564fb4eebdd6b185f262fe85ad1d6128cad9b229b10354","impliedFormat":99},{"version":"cd51e60b96b4d43698df74a665aa7a16604488193de86aa60ec0c44d9f114951","impliedFormat":99},{"version":"b63341fb6c7ba6f2aeabd9fc46b43e6cc2d2b9eec06534cfd583d9709f310ec2","impliedFormat":99},{"version":"be2af50c81b15bcfe54ad60f53eb1c72dae681c72d0a9dce1967825e1b5830a3","impliedFormat":99},{"version":"be5366845dfb9726f05005331b9b9645f237f1ddc594c0def851208e8b7d297b","impliedFormat":99},{"version":"5ddd536aaeadd4bf0f020492b3788ed209a7050ce27abec4e01c7563ff65da81","impliedFormat":99},{"version":"e243b24da119c1ef0d79af2a45217e50682b139cb48e7607efd66cc01bd9dcda","impliedFormat":99},{"version":"5b1398c8257fd180d0bf62e999fe0a89751c641e87089a83b24392efda720476","impliedFormat":99},{"version":"1588b1359f8507a16dbef67cd2759965fc2e8d305e5b3eb71be5aa9506277dff","impliedFormat":99},{"version":"4c99f2524eee1ec81356e2b4f67047a4b7efaf145f1c4eb530cd358c36784423","impliedFormat":99},{"version":"b30c6b9f6f30c35d6ef84daed1c3781e367f4360171b90598c02468b0db2fc3d","impliedFormat":99},{"version":"79c0d32274ccfd45fae74ac61d17a2be27aea74c70806d22c43fc625b7e9f12a","impliedFormat":99},{"version":"1b7e3958f668063c9d24ac75279f3e610755b0f49b1c02bb3b1c232deb958f54","impliedFormat":99},{"version":"779d4022c3d0a4df070f94858a33d9ebf54af3664754536c4ce9fd37c6f4a8db","impliedFormat":99},{"version":"e662f063d46aa8c088edffdf1d96cb13d9a2cbf06bc38dc6fc62b4d125fb7b49","impliedFormat":99},{"version":"d1d612df1e41c90d9678b07740d13d4f8e6acec2f17390d4ff4be5c889a6d37d","impliedFormat":99},{"version":"c95933fe140918892d569186f17b70ef6b1162f851a0f13f6a89e8f4d599c5a1","impliedFormat":99},{"version":"1d8d30677f87c13c2786980a80750ac1e281bdb65aa013ea193766fe9f0edd74","impliedFormat":99},{"version":"4661673cbc984b8a6ee5e14875a71ed529b64e7f8e347e12c0db4cecc25ad67d","impliedFormat":99},{"version":"7f980a414274f0f23658baa9a16e21d828535f9eac538e2eab2bb965325841db","impliedFormat":99},{"version":"20fb747a339d3c1d4a032a31881d0c65695f8167575e01f222df98791a65da9b","impliedFormat":99},{"version":"dd4e7ebd3f205a11becf1157422f98db675a626243d2fbd123b8b93efe5fb505","impliedFormat":99},{"version":"43ec6b74c8d31e88bb6947bb256ad78e5c6c435cbbbad991c3ff39315b1a3dba","impliedFormat":99},{"version":"b27242dd3af2a5548d0c7231db7da63d6373636d6c4e72d9b616adaa2acef7e1","impliedFormat":99},{"version":"e0ee7ba0571b83c53a3d6ec761cf391e7128d8f8f590f8832c28661b73c21b68","impliedFormat":99},{"version":"072bfd97fc61c894ef260723f43a416d49ebd8b703696f647c8322671c598873","impliedFormat":99},{"version":"e70875232f5d5528f1650dd6f5c94a5bed344ecf04bdbb998f7f78a3c1317d02","impliedFormat":99},{"version":"8e495129cb6cd8008de6f4ff8ce34fe1302a9e0dcff8d13714bd5593be3f7898","impliedFormat":99},{"version":"0345bc0b1067588c4ea4c48e34425d3284498c629bc6788ebc481c59949c9037","impliedFormat":99},{"version":"e30f5b5d77c891bc16bd65a2e46cd5384ea57ab3d216c377f482f535db48fc8f","impliedFormat":99},{"version":"f113afe92ee919df8fc29bca91cab6b2ffbdd12e4ac441d2bb56121eb5e7dbe3","impliedFormat":99},{"version":"49d567cc002efb337f437675717c04f207033f7067825b42bb59c9c269313d83","impliedFormat":99},{"version":"1d248f707d02dc76555298a934fba0f337f5028bb1163ce59cd7afb831c9070f","impliedFormat":99},{"version":"5d8debffc9e7b842dc0f17b111673fe0fc0cca65e67655a2b543db2150743385","impliedFormat":99},{"version":"5fccbedc3eb3b23bc6a3a1e44ceb110a1f1a70fa8e76941dce3ae25752caa7a9","impliedFormat":99},{"version":"f4031b95f3bab2b40e1616bd973880fb2f1a97c730bac5491d28d6484fac9560","impliedFormat":99},{"version":"dbe75b3c5ed547812656e7945628f023c4cd0bc1879db0db3f43a57fb8ec0e2b","impliedFormat":99},{"version":"b754718a546a1939399a6d2a99f9022d8a515f2db646bab09f7d2b5bff3cbb82","impliedFormat":99},{"version":"2eef10fb18ed0b4be450accf7a6d5bcce7b7f98e02cac4e6e793b7ad04fc0d79","impliedFormat":99},{"version":"c46f471e172c3be12c0d85d24876fedcc0c334b0dab48060cdb1f0f605f09fed","impliedFormat":99},{"version":"7d6ddeead1d208588586c58c26e4a23f0a826b7a143fb93de62ed094d0056a33","impliedFormat":99},{"version":"7c5782291ff6e7f2a3593295681b9a411c126e3736b83b37848032834832e6b9","impliedFormat":99},{"version":"3a3f09df6258a657dd909d06d4067ee360cd2dccc5f5d41533ae397944a11828","impliedFormat":99},{"version":"ea54615be964503fec7bce04336111a6fa455d3e8d93d44da37b02c863b93eb8","impliedFormat":99},{"version":"2a83694bc3541791b64b0e57766228ea23d92834df5bf0b0fcb93c5bb418069c","impliedFormat":99},{"version":"b5913641d6830e7de0c02366c08b1d26063b5758132d8464c938e78a45355979","impliedFormat":99},{"version":"46c095d39c1887979d9494a824eda7857ec13fb5c20a6d4f7d02c2975309bf45","impliedFormat":99},{"version":"f6e02ca076dc8e624aa38038e3488ebd0091e2faea419082ed764187ba8a6500","impliedFormat":99},{"version":"4d49e8a78aba1d4e0ad32289bf8727ae53bc2def9285dff56151a91e7d770c3e","impliedFormat":99},{"version":"63315cf08117cc728eab8f3eec8801a91d2cd86f91d0ae895d7fd928ab54596d","impliedFormat":99},{"version":"a14a6f3a5636bcaebfe9ec2ccfa9b07dc94deb1f6c30358e9d8ea800a1190d5e","impliedFormat":99},{"version":"21206e7e81876dabf2a7af7aa403f343af1c205bdcf7eff24d9d7f4eee6214c4","impliedFormat":99},{"version":"cd0a9f0ffec2486cad86b7ef1e4da42953ffeb0eb9f79f536e16ff933ec28698","impliedFormat":99},{"version":"f609a6ec6f1ab04dba769e14d6b55411262fd4627a099e333aa8876ea125b822","impliedFormat":99},{"version":"6d8052bb814be030c64cb22ca0e041fe036ad3fc8d66208170f4e90d0167d354","impliedFormat":99},{"version":"851f72a5d3e8a2bf7eeb84a3544da82628f74515c92bdf23c4a40af26dcc1d16","impliedFormat":99},{"version":"59692a7938aab65ea812a8339bbc63c160d64097fe5a457906ea734d6f36bcd4","impliedFormat":99},{"version":"8cb3b95e610c44a9986a7eab94d7b8f8462e5de457d5d10a0b9c6dd16bde563b","impliedFormat":99},{"version":"f571713abd9a676da6237fe1e624d2c6b88c0ca271c9f1acc1b4d8efeea60b66","impliedFormat":99},{"version":"16c5d3637d1517a3d17ed5ebcfbb0524f8a9997a7b60f6100f7c5309b3bb5ac8","impliedFormat":99},{"version":"ca1ec669726352c8e9d897f24899abf27ad15018a6b6bcf9168d5cd1242058ab","impliedFormat":99},{"version":"bffb1b39484facf6d0c5d5feefe6c0736d06b73540b9ce0cf0f12da2edfd8e1d","impliedFormat":99},{"version":"f1663c030754f6171b8bb429096c7d2743282de7733bccd6f67f84a4c588d96e","impliedFormat":99},{"version":"dd09693285e58504057413c3adc84943f52b07d2d2fd455917f50fa2a63c9d69","impliedFormat":99},{"version":"d94c94593d03d44a03810a85186ae6d61ebeb3a17a9b210a995d85f4b584f23d","impliedFormat":99},{"version":"c7c3bf625a8cb5a04b1c0a2fbe8066ecdbb1f383d574ca3ffdabe7571589a935","impliedFormat":99},{"version":"7a2f39a4467b819e873cd672c184f45f548511b18f6a408fe4e826136d0193bb","impliedFormat":99},{"version":"f8a0ae0d3d4993616196619da15da60a6ec5a7dfaf294fe877d274385eb07433","impliedFormat":99},{"version":"2cca80de38c80ef6c26deb4e403ca1ff4efbe3cf12451e26adae5e165421b58d","impliedFormat":99},{"version":"0070d3e17aa5ad697538bf865faaff94c41f064db9304b2b949eb8bcccb62d34","impliedFormat":99},{"version":"53df93f2db5b7eb8415e98242c1c60f6afcac2db44bce4a8830c8f21eee6b1dd","impliedFormat":99},{"version":"d67bf28dc9e6691d165357424c8729c5443290367344263146d99b2f02a72584","impliedFormat":99},{"version":"932557e93fbdf0c36cc29b9e35950f6875425b3ac917fa0d3c7c2a6b4f550078","impliedFormat":99},{"version":"e3dc7ec1597fb61de7959335fb7f8340c17bebf2feb1852ed8167a552d9a4a25","impliedFormat":99},{"version":"b64e15030511c5049542c2e0300f1fe096f926cf612662884f40227267f5cd9f","impliedFormat":99},{"version":"1932796f09c193783801972a05d8fb1bfef941bb46ac76fbe1abb0b3bfb674fa","impliedFormat":99},{"version":"d9575d5787311ee7d61ad503f5061ebcfaf76b531cfecce3dc12afb72bb2d105","impliedFormat":99},{"version":"5b41d96c9a4c2c2d83f1200949f795c3b6a4d2be432b357ad1ab687e0f0de07c","impliedFormat":99},{"version":"38ec829a548e869de4c5e51671245a909644c8fb8e7953259ebb028d36b4dd06","impliedFormat":99},{"version":"20c2c5e44d37dac953b516620b5dba60c9abd062235cdf2c3bfbf722d877a96b","impliedFormat":99},{"version":"875fe6f7103cf87c1b741a0895fda9240fed6353d5e7941c8c8cbfb686f072b4","impliedFormat":99},{"version":"c0ccccf8fbcf5d95f88ed151d0d8ce3015aa88cf98d4fd5e8f75e5f1534ee7ae","impliedFormat":99},{"version":"1b1f4aba21fd956269ced249b00b0e5bfdbd5ebd9e628a2877ab1a2cf493c919","impliedFormat":99},{"version":"939e3299952dff0869330e3324ba16efe42d2cf25456d7721d7f01a43c1b0b34","impliedFormat":99},{"version":"f0a9b52faec508ba22053dedfa4013a61c0425c8b96598cef3dea9e4a22637c6","impliedFormat":99},{"version":"d5b302f50db61181adc6e209af46ae1f27d7ef3d822de5ea808c9f44d7d219fd","impliedFormat":99},{"version":"19131632ba492c83e8eeadf91a481def0e0b39ffc3f155bc20a7f640e0570335","impliedFormat":99},{"version":"4581c03abea21396c3e1bb119e2fd785a4d91408756209cbeed0de7070f0ab5b","impliedFormat":99},{"version":"ebcd3b99e17329e9d542ef2ccdd64fddab7f39bc958ee99bbdb09056c02d6e64","impliedFormat":99},{"version":"4b148999deb1d95b8aedd1a810473a41d9794655af52b40e4894b51a8a4e6a6d","impliedFormat":99},{"version":"1781cc99a0f3b4f11668bb37cca7b8d71f136911e87269e032f15cf5baa339bf","impliedFormat":99},{"version":"33f1b7fa96117d690035a235b60ecd3cd979fb670f5f77b08206e4d8eb2eb521","impliedFormat":99},{"version":"01429b306b94ff0f1f5548ce5331344e4e0f5872b97a4776bd38fd2035ad4764","impliedFormat":99},{"version":"c1bc4f2136de7044943d784e7a18cb8411c558dbb7be4e4b4876d273cbd952af","impliedFormat":99},{"version":"5470f84a69b94643697f0d7ec2c8a54a4bea78838aaa9170189b9e0a6e75d2cf","impliedFormat":99},{"version":"36aaa44ee26b2508e9a6e93cd567e20ec700940b62595caf962249035e95b5e3","impliedFormat":99},{"version":"f8343562f283b7f701f86ad3732d0c7fd000c20fe5dc47fa4ed0073614202b4d","impliedFormat":99},{"version":"a53c572630a78cd99a25b529069c1e1370f8a5d8586d98e798875f9052ad7ad1","impliedFormat":99},{"version":"4ad3451d066711dde1430c544e30e123f39e23c744341b2dfd3859431c186c53","impliedFormat":99},{"version":"8069cbef9efa7445b2f09957ffbc27b5f8946fdbade4358fb68019e23df4c462","impliedFormat":99},{"version":"cd8b4e7ad04ba9d54eb5b28ac088315c07335b837ee6908765436a78d382b4c3","impliedFormat":99},{"version":"d533d8f8e5c80a30c51f0cbfe067b60b89b620f2321d3a581b5ba9ac8ffd7c3a","impliedFormat":99},{"version":"33f49f22fdda67e1ddbacdcba39e62924793937ea7f71f4948ed36e237555de3","impliedFormat":99},{"version":"710c31d7c30437e2b8795854d1aca43b540cb37cefd5900f09cfcd9e5b8540c4","impliedFormat":99},{"version":"b2c03a0e9628273bc26a1a58112c311ffbc7a0d39938f3878837ab14acf3bc41","impliedFormat":99},{"version":"a93beb0aa992c9b6408e355ea3f850c6f41e20328186a8e064173106375876c2","impliedFormat":99},{"version":"efdcba88fcd5421867898b5c0e8ea6331752492bd3547942dea96c7ebcb65194","impliedFormat":99},{"version":"a98e777e7a6c2c32336a017b011ba1419e327320c3556b9139413e48a8460b9a","impliedFormat":99},{"version":"ea44f7f8e1fe490516803c06636c1b33a6b82314366be1bd6ffa4ba89bc09f86","impliedFormat":99},{"version":"c25f22d78cc7f46226179c33bef0e4b29c54912bde47b62e5fdaf9312f22ffcb","impliedFormat":99},{"version":"d57579cfedc5a60fda79be303080e47dfe0c721185a5d95276523612228fcefc","impliedFormat":99},{"version":"a41630012afe0d4a9ff14707f96a7e26e1154266c008ddbd229e3f614e4d1cf7","impliedFormat":99},{"version":"298a858633dfa361bb8306bbd4cfd74f25ab7cc20631997dd9f57164bc2116d1","impliedFormat":99},{"version":"921782c45e09940feb232d8626a0b8edb881be2956520c42c44141d9b1ddb779","impliedFormat":99},{"version":"06117e4cc7399ce1c2b512aa070043464e0561f956bda39ef8971a2fcbcdbf2e","impliedFormat":99},{"version":"daccf332594b304566c7677c2732fed6e8d356da5faac8c5f09e38c2f607a4ab","impliedFormat":99},{"version":"4386051a0b6b072f35a2fc0695fecbe4a7a8a469a1d28c73be514548e95cd558","impliedFormat":99},{"version":"78e41de491fe25947a7fd8eeef7ebc8f1c28c1849a90705d6e33f34b1a083b90","impliedFormat":99},{"version":"3ccd198e0a693dd293ed22e527c8537c76b8fe188e1ebf20923589c7cfb2c270","impliedFormat":99},{"version":"2ebf2ee015d5c8008428493d4987e2af9815a76e4598025dd8c2f138edc1dcae","impliedFormat":99},{"version":"0dcc8f61382c9fcdafd48acc54b6ffda69ca4bb7e872f8ad12fb011672e8b20c","impliedFormat":99},{"version":"9db563287eb527ead0bcb9eb26fbec32f662f225869101af3cabcb6aee9259cf","impliedFormat":99},{"version":"068489bec523be43f12d8e4c5c337be4ff6a7efb4fe8658283673ae5aae14b85","impliedFormat":99},{"version":"838212d0dc5b97f7c5b5e29a89953de3906f72fce13c5ae3c5ade346f561d226","impliedFormat":99},{"version":"ddc78d29af824ad7587152ea523ed5d60f2bc0148d8741c5dacf9b5b44587b1b","impliedFormat":99},{"version":"019b522e3783e5519966927ceeb570eefcc64aba3f9545828a5fb4ae1fde53c6","impliedFormat":99},{"version":"b34623cc86497a5123de522afba770390009a56eebddba38d2aa5798b70b0a87","impliedFormat":99},{"version":"d2a8cbeb0c0caaf531342062b4b5c227118862879f6a25033e31fad00797b7eb","impliedFormat":99},{"version":"14891c20f15be1d0d42ecbbd63de1c56a4d745e3ea2b4c56775a4d5d36855630","impliedFormat":99},{"version":"e55a1f6b198a39e38a3cea3ffe916aab6fde7965c827db3b8a1cacf144a67cd9","impliedFormat":99},{"version":"f7910ccfe56131e99d52099d24f3585570dc9df9c85dd599a387b4499596dd4d","impliedFormat":99},{"version":"9409ac347c5779f339112000d7627f17ede6e39b0b6900679ce5454d3ad2e3c9","impliedFormat":99},{"version":"22dfe27b0aa1c669ce2891f5c89ece9be18074a867fe5dd8b8eb7c46be295ca1","impliedFormat":99},{"version":"684a5c26ce2bb7956ef6b21e7f2d1c584172cd120709e5764bc8b89bac1a10eb","impliedFormat":99},{"version":"93761e39ce9d3f8dd58c4327e615483f0713428fa1a230883eb812292d47bbe8","impliedFormat":99},{"version":"c66be51e3d121c163a4e140b6b520a92e1a6a8a8862d44337be682e6f5ec290a","impliedFormat":99},{"version":"66e486a9c9a86154dc9780f04325e61741f677713b7e78e515938bf54364fee2","impliedFormat":99},{"version":"d211bc80b6b6e98445df46fe9dd3091944825dd924986a1c15f9c66d7659c495","impliedFormat":99},{"version":"8dd2b72f5e9bf88939d066d965144d07518e180efec3e2b6d06ae5e725d84c7d","impliedFormat":99},{"version":"949cb88e315ab1a098c3aa4a8b02496a32b79c7ef6d189eee381b96471a7f609","impliedFormat":99},{"version":"bc43af2a5fa30a36be4a3ed195ff29ffb8067bf4925aa350ace9d9f18f380cc2","impliedFormat":99},{"version":"b9beb5d678e6cf67901f1154f91dff455378e6aa89b20da56ed1400f3fb1f3cf","impliedFormat":99},{"version":"8428e71f6d1b63acf55ceb56244aad9cf07678cf9626166e4aded15e3d252f8a","impliedFormat":99},{"version":"11505212ab24aa0f06d719a09add4be866e26f0fc15e96a1a2a8522c0c6a73a8","impliedFormat":99},{"version":"8228186214a5d7da60bd1dd91387a725e19c6c31a7ed4e114cf68d5ce6629c52","impliedFormat":99},{"version":"c44bb0071cededc08236d57d1131c44339c1add98b029a95584dfe1462533575","impliedFormat":99},{"version":"7a4935af71877da3bbc53938af00e5d4f6d445ef850e1573a240447dcb137b5c","impliedFormat":99},{"version":"4e313033202712168ecc70a6d830964ad05c9c93f81d806d7a25d344f6352565","impliedFormat":99},{"version":"8a1fc69eaf8fc8d447e6f776fbfa0c1b12245d7f35f1dbfb18fbc2d941f5edd8","impliedFormat":99},{"version":"afb9b4c8bd38fb43d38a674de56e6f940698f91114fded0aa119de99c6cd049a","impliedFormat":99},{"version":"1d277860f19b8825d027947fca9928ee1f3bfaa0095e85a97dd7a681b0698dfc","impliedFormat":99},{"version":"6d32122bb1e7c0b38b6f126d166dff1f74c8020f8ba050248d182dcafc835d08","impliedFormat":99},{"version":"cfac5627d337b82d2fbeff5f0f638b48a370a8d72d653327529868a70c5bc0f8","impliedFormat":99},{"version":"8a826bc18afa4c5ed096ceb5d923e2791a5bae802219e588a999f535b1c80492","impliedFormat":99},{"version":"73e94021c55ab908a1b8c53792e03bf7e0d195fee223bdc5567791b2ccbfcdec","impliedFormat":99},{"version":"5f73eb47b37f3a957fe2ac6fe654648d60185908cab930fc01c31832a5cb4b10","impliedFormat":99},{"version":"cb6372a2460010a342ba39e06e1dcfd722e696c9d63b4a71577f9a3c72d09e0a","impliedFormat":99},{"version":"1e289698069f553f36bbf12ee0084c492245004a69409066faceb173d2304ec4","impliedFormat":99},{"version":"f1ca71145e5c3bba4d7f731db295d593c3353e9a618b40c4af0a4e9a814bb290","impliedFormat":99},{"version":"ac12a6010ff501e641f5a8334b8eaf521d0e0739a7e254451b6eea924c3035c7","impliedFormat":99},{"version":"97395d1e03af4928f3496cc3b118c0468b560765ab896ce811acb86f6b902b5c","impliedFormat":99},{"version":"7dcfbd6a9f1ce1ddf3050bd469aa680e5259973b4522694dc6291afe20a2ae28","impliedFormat":99},{"version":"6e545419ad200ae4614f8e14d32b7e67e039c26a872c0f93437b0713f54cde53","impliedFormat":99},{"version":"efc225581aae9bb47d421a1b9f278db0238bc617b257ce6447943e59a2d1621e","impliedFormat":99},{"version":"8833b88e26156b685bc6f3d6a014c2014a878ffbd240a01a8aee8a9091014e9c","impliedFormat":99},{"version":"7a2a42a1ac642a9c28646731bd77d9849cb1a05aa1b7a8e648f19ab7d72dd7dc","impliedFormat":99},{"version":"4d371c53067a3cc1a882ff16432b03291a016f4834875b77169a2d10bb1b023e","impliedFormat":99},{"version":"99b38f72e30976fd1946d7b4efe91aa227ecf0c9180e1dd6502c1d39f37445b4","impliedFormat":99},{"version":"df1bcf0b1c413e2945ce63a67a1c5a7b21dbbec156a97d55e9ea0eed90d2c604","impliedFormat":99},{"version":"6e2011a859fa435b1196da1720be944ed59c668bb42d2f2711b49a506b3e4e90","impliedFormat":99},{"version":"b4bfa90fac90c6e0d0185d2fe22f059fec67587cc34281f62294f9c4615a8082","impliedFormat":99},{"version":"036d363e409ebe316a6366aff5207380846f8f82e100c2e3db4af5fe0ad0c378","impliedFormat":99},{"version":"5ae6642588e4a72e5a62f6111cb750820034a7fbe56b5d8ec2bcb29df806ce52","impliedFormat":99},{"version":"6fca09e1abc83168caf36b751dec4ddda308b5714ec841c3ff0f3dc07b93c1b8","impliedFormat":99},{"version":"2f7268e6ac610c7122b6b416e34415ce42b51c56d080bef41786d2365f06772d","impliedFormat":99},{"version":"9a07957f75128ed0be5fc8a692a14da900878d5d5c21880f7c08f89688354aa4","impliedFormat":99},{"version":"8b6f3ae84eab35c50cf0f1b608c143fe95f1f765df6f753cd5855ae61b3efbe2","impliedFormat":99},{"version":"992491d83ff2d1e7f64a8b9117daee73724af13161f1b03171f0fa3ffe9b4e3e","impliedFormat":99},{"version":"12bcf6af851be8dd5f3e66c152bb77a83829a6a8ba8c5acc267e7b15e11aa9ab","impliedFormat":99},{"version":"e2704efc7423b077d7d9a21ddb42f640af1565e668d5ec85f0c08550eff8b833","impliedFormat":99},{"version":"e0513c71fd562f859a98940633830a7e5bcd7316b990310e8bb68b1d41d676a3","impliedFormat":99},{"version":"712071b9066a2d8f4e11c3b8b3d5ada6253f211a90f06c6e131cff413312e26d","impliedFormat":99},{"version":"5a187a7bc1e7514ef1c3d6eaafa470fc45541674d8fca0f9898238728d62666a","impliedFormat":99},{"version":"0c06897f7ab3830cef0701e0e083b2c684ed783ae820b306aedd501f32e9562d","impliedFormat":99},{"version":"56cc6eae48fd08fa709cf9163d01649f8d24d3fea5806f488d2b1b53d25e1d6c","impliedFormat":99},{"version":"57a925b13947b38c34277d93fb1e85d6f03f47be18ca5293b14082a1bd4a48f5","impliedFormat":99},{"version":"9d9d64c1fa76211dd529b6a24061b8d724e2110ee55d3829131bca47f3fe4838","impliedFormat":99},{"version":"c13042e244bb8cf65586e4131ef7aed9ca33bf1e029a43ed0ebab338b4465553","impliedFormat":99},{"version":"54be9b9c71a17cb2519b841fad294fa9dc6e0796ed86c8ac8dd9d8c0d1c3a631","impliedFormat":99},{"version":"10881be85efd595bef1d74dfa7b9a76a5ab1bfed9fb4a4ca7f73396b72d25b90","impliedFormat":99},{"version":"925e71eaa87021d9a1215b5cf5c5933f85fe2371ddc81c32d1191d7842565302","impliedFormat":99},{"version":"faed0b3f8979bfbfb54babcff9d91bd51fda90931c7716effa686b4f30a09575","impliedFormat":99},{"version":"53c72d68328780f711dbd39de7af674287d57e387ddc5a7d94f0ffd53d8d3564","impliedFormat":99},{"version":"51129924d359cdebdccbf20dbabc98c381b58bfebe2457a7defed57002a61316","impliedFormat":99},{"version":"7270a757071e3bc7b5e7a6175f1ac9a4ddf4de09f3664d80cb8805138f7d365b","impliedFormat":99},{"version":"ea7b5c6a79a6511cdeeedc47610370be1b0e932e93297404ef75c90f05fc1b61","impliedFormat":99},"787a19c855cf2b826942d25440b63150c45094154c6a40e95abdb4109298b8b4",{"version":"bb703864a1bc9ca5ac3589ffd83785f6dc86f7f6c485c97d7ffd53438777cb9e","impliedFormat":1},"13dc2d1e35226de85458034417bfc0e781211044fad520bac53b7858a290d004","622f95b2d77382fec591bd2c01f60d36c7868edc636d8da291387633ed96ec52","378bedf0c1f287aad6dccfd17135502cc771e6a38fdfd3981030ada1e5a47f7b","7a29ecaed92b8c39d1e11fd11a73a204e3badb7ef48bfd817fb963d66bc01446","abb7dce8e50a2ec4a168ba511d8f98f9519c8b5870c6e4f84c7934f43b4d9597","bc609bfde2b132508718aafd010975dbffcdb93f372457c21231d983d6bfb9da","aab05ca0acd4a51c37a8154cce2b75479d3d62f90341823905631f0a726baa22","79ed3ad7f3ffce96118b23245b494e4779095c248ea6a35565f28fbbc2ec9284","4b9a81535d7d2901fc91f32a2ef52f7d89fb28854a9f242a58e220083d50bdc2","4d6cdb41f5e5eda58fcd4fa2cfe08e057023cec21583202bcb828e5b98a5bcd4","d379b551673ab2ec8ff77f14be81964b9528ead97601978f4333f6a1a777b8fd","ed06668f35fda8824685dafae8b372a34b26e165d96a7c10453992029e0ca4ee","e99dde146350573cb8bedf360690f1e1c0e111500765faa884849af30511cf91","e8288f355bb77b1ecbf31b48ef74e56184fb19ed8bc3be07ed33d7d97830fcee","81374257c87db982d891f53b9f1caf0cfe011d943be775ea3f903952f81fab69","097fc392369de9744117595a3c18edc1acd0651d4f908c47153b5d04310a3878","16e91472c0861115036548fcd36a7b00f5f98f9f1dfb033dae4175fabb1409d2","9f752ffefe86f1263bc3bbfe4f2da80f52e159225ed698a03485a6770b55b33a","15f49a4ccf8a98a461a83ea0f01288c5a73610bfb65afdd0ef25c1a5ec2ee9a8","10c4200cc040e99f22f3d18bb86f57d4ae5380adae9143321cb2b54938fde5fb",{"version":"ec9ea5789e2433ad476c3f082220c6dd079abe800e053802f84f156403d4ec3a","impliedFormat":99},{"version":"bc7a7fa8205df8b450ffb186c0c6f93d72fefe44913280e6b6bdc4b4e8f1fff9","impliedFormat":99},{"version":"62bb2984db8c13e1ed99bdbb3bfd0740847229b726534f3b56e91dd49e13dd21","impliedFormat":99},{"version":"196356f6ae68edfb4c783f574977fee6d02acce16ca5c08a8b7833e866304cbe","impliedFormat":99},{"version":"dcd00ba5b2b49174a773f38af2ceee024a2c88f94f380a038df6de47ca07003f","impliedFormat":99},{"version":"a15f4dcfb928fa747df964c0d13390d527b9bc81dffa46d99b5154e839ba0010","impliedFormat":99},{"version":"267be29634d9a5c4a2e749ed4a267b1af57c50afbea509895bd95bfcca0ed4a3","impliedFormat":99},"57fc0bc85399c8d1573cb1fdebc43d81aeeafb4f81046a6648a23581916a20a2","061fa6f111f265d081b60b433344dd15d296deb8a73fa88aeaa4dc0e6f2b3835",{"version":"e7c2f40dc99121500ad108a4f86541d29cac105ed018f994c7c5a2836e77b257","impliedFormat":1},{"version":"90e930283286ab117ab89f00589cf89ab5e9992bc57e79f303b36ee14649bdd9","impliedFormat":1},{"version":"6d48a6c907c668a6d6eda66acec4242e367c983e073100e35c1e234c424ad1a4","impliedFormat":1},{"version":"68a0e898d6c39160f1326ef922508914498c7a2d0b5a0d9222b7928d343214eb","impliedFormat":1},{"version":"69d96a8522b301a9e923ac4e42dd37fc942763740b183dffa3d51aca87f978d5","impliedFormat":1},{"version":"ff2fadad64868f1542a69edeadf5c5519e9c89e33bec267605298f8d172417c7","impliedFormat":1},{"version":"2866ae69517d6605a28d0c8d5dff4f15a0b876eeb8e5a1cbc51631d9c6793d3f","impliedFormat":1},{"version":"f8c4434aa8cbd4ede2a75cbc5532b6a12c9cac67c3095ed907e54f3f89d2e628","impliedFormat":1},{"version":"0b8adc0ae60a47acf65575952eee568b3d497f9975e3162f408052a99e65f488","impliedFormat":1},{"version":"ede9879d22f7ce68a8c99e455acab32fc45091c6eed9625549742b03e1f1ac1a","impliedFormat":1},{"version":"0e8c007c6e404da951c3d98a489ac0a3e9b6567648b997c03445ac69d7938c1c","impliedFormat":1},{"version":"f2a4866bed198a7c804b58ee39efe74c66ecdcf2dfebef0b9895d534a50790c4","impliedFormat":1},{"version":"ad72538d0c5e417ee6621e1b54691c274bcacaa1807c9895c5fa6d40b45fb631","impliedFormat":1},{"version":"4f851c59f3112702f6178e76204f839e3156daa98b5b7d7e3fc407a6c5764118","impliedFormat":1},{"version":"57511f723968d2f41dd2d55b9fbc5d0f3107af4e4227db0fb357c904bd34e690","impliedFormat":1},{"version":"9585df69c074d82dda33eadd6e5dccd164659f59b09bd5a0d25874770cf6042d","impliedFormat":1},{"version":"f6f6ce3e3718c2e7592e09d91c43b44318d47bca8ee353426252c694127f2dcb","impliedFormat":1},{"version":"4f70076586b8e194ef3d1b9679d626a9a61d449ba7e91dfc73cbe3904b538aa0","impliedFormat":1},{"version":"6d5838c172ff503ef37765b86019b80e3abe370105b2e1c4510d6098b0e84414","impliedFormat":1},{"version":"1876dac2baa902e2b7ebed5e03b95f338192dc03a6e4b0731733d675ba4048f3","impliedFormat":1},{"version":"8086407dd2a53ce700125037abf419bddcce43c14b3cf5ea3ac1ebded5cad011","impliedFormat":1},{"version":"c2501eb4c4e05c2d4de551a4bace9c28d06a0d89b228443f69eb3d7f9049fbd6","impliedFormat":1},{"version":"1829f790849d54ea3d736c61fdefd3237bede9c5784f4c15dfdafb7e0a9b8f63","impliedFormat":1},{"version":"5392feeda1bf0a1cc755f7339ea486b7a4d0d019774da8057ddc85347359ed63","impliedFormat":1},{"version":"c998117afca3af8432598c7e8d530d8376d0ca4871a34137db8caa1e94d94818","impliedFormat":1},{"version":"4e465f7e9a161a5a5248a18af79dbfbf06e8e1255bfdc8f63ab15475a2ba48bd","impliedFormat":1},{"version":"e0353c5070349846fe9835d782a8ce338d6d4172c603d14a6b364d6354957a4e","impliedFormat":1},{"version":"323133630008263f857a6d8350e36fb7f6e8d221ec0a425b075c20290570c020","impliedFormat":1},{"version":"c04e691d64b97e264ca4d000c287a53f2a75527556962cdbe3e8e2b301dac906","impliedFormat":1},{"version":"3733dba5107de9152f98da9bcb21bf6c91ac385f3b22f30ed08d0dc5e74c966f","impliedFormat":1},{"version":"d3ec922ddd9677696ee0552f10e95c4e59f85bb8c93fd76cd41b2dd93988ff39","impliedFormat":1},{"version":"0492c0d35e05c0fdd638980e02f3a7cdec18b311959fc730d85ed7e1d4ff38a7","impliedFormat":1},{"version":"c7122ba860d3497fa04a112d424ee88b50c482360042972bcf0917c5b82f4484","impliedFormat":1},{"version":"838f52090a0d39dce3c42e0ccb0db8db250c712c1fa2cd36799910c8f8a7f7bf","impliedFormat":1},{"version":"116ec624095373939de9edb03619916226f5e5b6e93cd761c4bda4efecb104fc","impliedFormat":1},{"version":"8e6b8259bfd8c8c3d6ed79349b7f2f69476d255aede2cd6c0acb0869ad8c6fdd","impliedFormat":1},"b4fb5ced80f4d483ee01e178f59cdc0a484629e56fed3384adab535107634da1","5babad7b05cb460fbaa04a3ef544518bfb8bcc4115d968bb943a56b1e3641923","cb1f4e899b3220086cbd5439dd821b792399f2e3a7d88070dc81102dcb1c22e9","e90e26e28de8859b6a7aa7a3c600d691e1f4f6ead014cacb5e431094397abec3","524e28981b37d1598d04b83039191dadbe7312086e73d9d7c6bfd9234b149ac6","187e2f405d45f10bb5a130973097f1e5f16b062375b5ad27ae32615668782c67","38117351cf455962805c15add0223141433d8830db3bce8243ad6b75982107ae","ff5499d46d9ea3e68ee609b049b704ce0045ad794a86133740de9f90db112750","de1b81d0c7db5d96c6fe377ed63b670c3883270f4816fb67cbe97a7c5ab59fe1","eeb5a5d8175e1722856652dedeba516a4bda4d9c7a6f80cb1534b3f5db5f27fa","d54ba7e18f1c88ff492a76a055f8d2bd1eb89e0e7f6f92ac6d0fd923341c1d32","ab1207b585b38d232b3bf1d4bf9a13ea6ed950457a628323a7b3d3e87aa102e3","b6b990c62909bef18f2beba4f2eef533f33f796b89a79485f5f30b163f35b687","083d34dd695a5523c5c2b02043616225c0438a7b5c18028dad0155e2a6cf1b9b","d0022295c68a72515d437c870672376db19845be90c5f2325565ee3491d7736d","95799184faa0ed49546724de9e7e3c70847ccd7ece420003ba465fc3ceeb28eb","45a03d43e8483c79ab95fa2052aa7a83291a6c5695081ae85afd78bcfd534743","68cd5ee509e2eda95c6c5240efd21553534386acea232283542c6ea9a9cbb95c","b5f38a6d4197eadab8960bc3e580d720d8f0c93ce68bffb431c626a86888e50b","70d901591f34ea379b79b4bd252255e97baf37a626c748ec8c482c506e772778","f1017429da46fb1c8744e18b3c8bfda91a47bf0adac08f0fc02e920286fe2991","37fbcb8aa4d50ae8263b04636bc1ec7ac2d0a322fd32e8a2995152a18d9599ea","fa18c7342121bbc37fd866fac395b6dd7e463e91ba2043e24462ca78274d6795","3061514d968c53ac7aa80188b30bf46a574d42a91b6b99888a50e8f6092af192",{"version":"54e76a6612d9b83fde2b1cc0569f20c5b8d38f7a860b88a1d9d805399bfeead3","impliedFormat":99},{"version":"5a4ddf80b1bdab540fe5d3f837921e9e8dc559a1a319e75451c30f0d5f62ac0f","impliedFormat":99},{"version":"97e0a23ac45763f990b704b66cabbb48df07eddc5bf46054a34d72e350f1088e","impliedFormat":99},{"version":"fe9dd679e568dc2a0e5e6959f77b53f8bc1f126d46b0d17631347ba57470b808","impliedFormat":99},{"version":"86245b010961138b1c4ce2e0610b8b9577157dac3f7eeaf3d20017ee01e7760b","impliedFormat":99},{"version":"0c6ef3deba595b7dc7b4ee09342435c7a2392fe7752e335acdedfe2476529638","impliedFormat":99},{"version":"00fab36b3130e6d7a2316d0583a2e2a4d328a6f4e01817d90d8b07baad69b4e1","impliedFormat":99},{"version":"e9549a400fa6ed33871effcd70b9bc5ab77f24ecc6349c97d8da7ae078e6a25a","impliedFormat":99},{"version":"b6299cb4477935a9feaf12efb768d832186f55a7a6703cbd17f64d4cf6be88bc","impliedFormat":99},{"version":"126eac20336c7374782d571be802e7b7adb9fc5b24c0dd0dfc37bfc9774d9182","impliedFormat":99},{"version":"9001790195bf5cf382c676ded6da44833812e677bb9f31fcb22fa47d389039f4","impliedFormat":99},"33266b683929a42b469630dbb58ce96b0766ac18aa5d16b800ac7f92134c9c5a","850dd9520a583b6cb831d43b6059d9371f88b777d84963bee8fc423c3108a490","689823d4644b38e87cff42b37ac62bdf05aac676dbe5aad82953c24bece5a97b","8380b67b781e5f47c540b9a8f61261718a67abe707a8023d2943e584cea71995",{"version":"07c859c5e9a953cb9f6f6d796f68911c1e0e0709187fdd2326822a3c14ee9965","impliedFormat":99},{"version":"337a57006982a97cef4fc8b8ae60c5f0d3c821dbe23aecaf7f372bef569c92ab","impliedFormat":99},{"version":"3a6b10911970b0588c5a287642e4c6be91c16b96407a499c6dc81a96daf1085a","impliedFormat":99},{"version":"5964182f2a04bf1343710b40c73877124fdae476d588ade8883e05be3616a5e0","impliedFormat":99},{"version":"32aa20fd978847e617304582657723f0dcd1809de9b087ed0ad5b7090b1a47c1","impliedFormat":99},{"version":"d506c22df30f41fc14199ad23fd4b093e69876c3d1af20358856b2d0769d5b7a","impliedFormat":99},{"version":"c07898a85c15b3b636506443e88fe6d85bbd568c0bb504a9ae5cb371d58f6319","impliedFormat":99},{"version":"576e16db43be11f9c63f88f9dacea43ea236b0ac8d69fb415564add001dbc516","impliedFormat":99},{"version":"44c5d9f47e85552ea141ddc1b0af65903297624f0ff2227372d5ce31ff0380c6","impliedFormat":99},{"version":"126c84b38fb99188436b4c61e4cc5d8008247f687f9ddb5517358f2128c938d6","impliedFormat":99},{"version":"1f3952b74b8c766a2e602a0ba2db19d3d872d00bab4e01746c6b7229c585086c","impliedFormat":99},"aaf3000b148cace11d0a850e34b2267e8ad82e3ac399106b79fa87d665231677","b71f1eb5213e6d5086107a9779e0d68fa5f7f840bbfc8b02229ebe628d161963","c8351b50cef3bf121d64f6a987c03cc14f672e38ef2340f689f093ac54b1799d","4e45561716d155908b8ab182e595e052373af0f07170565f3ff6f5e8092e4483","7a93e65a587704261eb2035d701d1b0d5c4cdcffc11a4b26bdfeb3bf4789f1c3","e59ebbfc75018339f480c1e57e0a97c7352efc07bda4b06321ab67187525c0e4","49ff844eee2facc9b062b72595b4d3e6321f47c0a6bf7658f074d8eed6fe5ad0","50ec6f248450efbbc233731b4c389d689bb7fdad74c3025267c836c1ad83b80e","cecd5086cba0fbdca36b26dc0547fa3fa6939e4b221b00793ad4f5cf6d344246","c7911d2e3d114c06050fb1fc573edb7f4203fc8c200a1c9de786a148332ef1e1",{"version":"08bd56e0588ca86f196ebcc9fa2692cdc54a33f9898eaa96d07fcb08e469a194","impliedFormat":1},{"version":"aeb3aaa10886b6546660b705197ed5ed9b291c3723e6f58d3df69feeeabb878b","impliedFormat":1},{"version":"638262138fd431dc3253891dbd7fad0aa50037096c1e4423a30719b896f8f9ce","impliedFormat":1},{"version":"80ac8ee26de343b7ca9da72cefdb2672ed2b0d3d89da28fff4beb8e76a7d2037","impliedFormat":1},{"version":"4aa7fdc017a0a097c71ada2ca187e1475c987b4f933960c0792eb143997e4709","impliedFormat":1},{"version":"3c546afeef41bb1f9461ab8fa2c03a47efe7270624fd45073ab3942ee9713959","impliedFormat":1},{"version":"e2c8e88d98dc73c922d7bfae116a2213750e8356344f1475cf5609191e9554e5","impliedFormat":1},{"version":"022b875826f17cae23d8c42346f71567dd3641eac42de92707f2cd9e22af0e2e","impliedFormat":1},{"version":"9c99366141847b2d0e47278f799bf652ee21d6c0948f570665dda5d57c24a616","impliedFormat":1},{"version":"5fbe5df6723eb54ad15c4e6572c378eced978e9938da1dcd7d8e1120994e231b","impliedFormat":1},{"version":"cad354bd9addfe6641096887f6eeac3209624a971dd300510d3157e9dd949e18","impliedFormat":1},{"version":"b6d492805801eb5f74311758be130c73b854b787842c932ae1985c7ec90386cc","impliedFormat":1},{"version":"374993f45883f2a59d96dc2040a15da6475f28426167ae2c581708a2801537af","impliedFormat":1},{"version":"d48d487df0c516a79f1ed7161c24957ef7c5fe9daa6b65ce9c3ad53b722fb7dc","impliedFormat":1},{"version":"47bcd4882c5b6fdf44b594d5cc8c35d79bedfb02345589ffe2c37cf9b53ce1ea","impliedFormat":1},{"version":"53ff686121f6095df3a4ed9bad160a23b3d06f8a4396e5d55e333c70bae70fdd","impliedFormat":1},{"version":"bb65ffa4af326524e0ffa0721d9f2d9b50e17a84379ee9f4fdc260164aac495f","impliedFormat":1},{"version":"15645b5a9f19802397a2c8454aa79ed80dbe196f1d9860c846f9ccc7e74140a7","impliedFormat":1},{"version":"918f62963d8acdf74442cbfe8707ffeb00bb9fdea46c9f002be0acdc52871711","impliedFormat":1},{"version":"201750f32c5eeb46ca683b6bdcedc5732e1f7b6565172488529f7327ac28f0f1","impliedFormat":1},{"version":"1d567d12f550acc452d0585b43ba1cc99119eef69bc9f54777a546f86b29ffbf","impliedFormat":1},{"version":"c474a8f49174bb27c05cef03a22259c8e4559c1fe39431e3cfaeb713ecb024ed","impliedFormat":1},{"version":"efb40e9f34f6fef8b8252035f150ad34d63155df5d843a9efa14ecb293ec4e41","impliedFormat":1},{"version":"1ffbc2f979a8ec11a126314d693ea79637e9cfd1388159a41aee45fe42c71fdb","impliedFormat":1},{"version":"6d02f48cb96396733e20ac466903d3fa9947a16bc421f268a187c5e8e476fd3a","impliedFormat":1},{"version":"a70e640de41b5c58911da48c3490201a305555fd829ef80159c4393023a50c4b","impliedFormat":1},{"version":"b83112b5965cd9bb1d70605a321a50262a3904cf6bec0baff097569c1761ba04","impliedFormat":1},{"version":"9ebbf1aa81848c437e3a147319a569b9ae62f58c8e6cf369edb5ed847afb036d","impliedFormat":1},{"version":"12c83647be78c827ac5d76506832bb2ff724940335ab5ef58eb612b6078bbc87","impliedFormat":1},{"version":"1f9121bb8d3b31113e95fb44cc506c756c8d6db7c06fbb26f9a536de376662cb","impliedFormat":1},{"version":"fb4b133415a7e8238ea049926a23c300e048fa8046a53c1ff9b59406af386fac","impliedFormat":1},{"version":"c4aac5d09d46f6d569ffd391365250ee22cc055dc62c0d270367f46691f55f92","impliedFormat":1},{"version":"0bb370c6b404f6fd6190ccf5006f441b2c383d7c5f8efe1215eb2dce6ffd948f","impliedFormat":1},{"version":"01ea993e1b2831936d08c321c84839dd232ecd63d041e2aaadbbe124d7740e20","impliedFormat":1},{"version":"81a6b55cc52b775adad47f0d86073ca1dcd07992df5b1ae6d65a237d5574ca2f","impliedFormat":1},{"version":"49d5de13372a76069a08ae800ace5b23be17dd57d8b44211e28394defdf8ee80","impliedFormat":1},{"version":"6c1c479e7287e53b8dee6a9054d2096edf4fa97e65db3a69b09620a245cda043","impliedFormat":1},{"version":"ec2c3edf7cd39a72164e1cb032c4869d04b31670c77028b75eb6ca1f479833e4","impliedFormat":1},{"version":"cc8a30aee57adcdcc414d28ca014fd9630b4f233ffe2ea5af8fb06044a1d9ded","impliedFormat":1},{"version":"d54a9b317f57afc5faedd216f56aac9899f6d1349ebd01c2154e18eabb8c5749","impliedFormat":1},{"version":"b10470e7e904bc2b1c06b7c3ad769a3f5ebf0d10ce1e483d970f6ab0aa763ae4","impliedFormat":1},{"version":"c6bfd4ae8f9c297603a5451afd545ab2bcada266ea1566951a022f0a23ce2e32","impliedFormat":1},{"version":"25f912ec6cca1c5fe09514a3a8ffc7ff8e5add689bbd8171daeaa7798902b0ff","impliedFormat":1},{"version":"f3e3bd42ba0e0de28405bfb1b99c7a389e6387ff46e985a428d22948180a647a","impliedFormat":1},{"version":"5e1543db1bddecd840231311145bdfa20e4ef7cb5a7b7b1bf62939a1112f0be2","impliedFormat":1},{"version":"d7552881688adb3d1ebacdc34f286b5ab16174ff14be914c011c8c4c091f56fb","impliedFormat":1},{"version":"e223b9379dc8faef3a2109f91b0e447fd69f61b99eeb54a49c26602b0b2264ae","impliedFormat":1},{"version":"4ff051a3535d98a64099359b15ae0a71c129f1f5c9ff2386f179fc443ad8a292","impliedFormat":1},{"version":"60969b4b3429267c2d8cc8b4d72f810662712bd57c982c07fca19c4dc6267a2f","impliedFormat":1},{"version":"eaa9088bdceb60bd1282fe92cafd8bbedce2ffabcee4848564f82531c4f0918f","impliedFormat":1},{"version":"3f361222b9efcd94ec3a3298c552a65cbc5a07ef0841791dcbba252103746f51","impliedFormat":1},{"version":"6e4f7983e80803ef22c3fe2613f36a096e046b990a8f73636763e60332c58af0","impliedFormat":1},{"version":"dd0660556f2d728dde0cb85b9f2f28b54a90a89b8a83b3ff93a0948125237e09","impliedFormat":1},{"version":"04399d897b48a07a4e62617a34fafd9d035e22ce941625f908dbca874284beb8","impliedFormat":1},{"version":"9fa921f6d869589739d0452e4bffa5f73c64311f757974c98af07e05be0449a7","impliedFormat":1},{"version":"5d67354078b66418c05d378a7ccabfd040692cccd02351efccc2f1ada473a00c","impliedFormat":1},{"version":"fba164f651974e6a41b8c8259d66e5a642a5235f45a9584bc037371810092738","impliedFormat":1},{"version":"8de28ca8b0a0544359461f433f5cc7d9d3f5f9eb07b5c54a20c47e80dd52e351","impliedFormat":1},{"version":"19606a6077e2ec02292fc10f4a5d974a23ae4548092fb9c6f2b11f6d678b87bc","impliedFormat":1},{"version":"4a937967fa75e08dd9f4e8999f36c7c99f69556f94147602ce9d065d2cb3d222","impliedFormat":1},{"version":"9061248ddc3ababcabe72c13b4e3ffa932c8cb3199b6a205f1e5ce8f344bdbdc","impliedFormat":1},{"version":"5d0637ff3f01a71665d89ff827b52802c962737f3394888e504730a42c6c3f96","impliedFormat":1},{"version":"00400a37f08853f36b6ffce0150094aa832b534eeec5eb960b9c1ac48f84d06b","impliedFormat":1},{"version":"50de4a87b7a4833126c84def8f08669b6d8aa298b94745be769969c998ab73d4","impliedFormat":1},{"version":"97fc391ea531e7cf09c22fae61a9a10af2bdeb08047eee455c1de857df55fd83","impliedFormat":1},{"version":"f12e5f4c39f9d7d3cab6c75a1fba633e73911766194d1c393be6a31bb4a8cf06","impliedFormat":1},{"version":"e1e77c898296d762e4d90d1ad5b26074bf4f0b8e3f55c8dda8615ab1af1c6e66","impliedFormat":1},{"version":"073ca26c96184db9941b5ec0ddea6981c9b816156d9095747809e524fdd90e35","impliedFormat":1},{"version":"e41d17a2ec23306d953cda34e573ed62954ca6ea9b8c8b74e013d07a6886ce47","impliedFormat":1},{"version":"241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","impliedFormat":1},{"version":"2ae3787e1498b20aad1b9c2ee9ea517ec30e89b70d242d8e3e52d1e091039695","impliedFormat":1},{"version":"c7c72c4cffb1bc83617eefed71ed68cc89df73cab9e19507ccdecb3e72b4967e","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","impliedFormat":1},{"version":"38b38db08e7121828294dec10957a7a9ff263e33e2a904b346516d4a4acca482","impliedFormat":1},{"version":"a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","impliedFormat":1},{"version":"8a2aaea564939c22be05d665cc955996721bad6d43148f8fa21ae8f64afecd37","impliedFormat":1},{"version":"e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","impliedFormat":1},{"version":"e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","impliedFormat":1},{"version":"95950a187596e206d32d5d9c7b932901088c65ed8f9040e614aa8e321e0225ef","impliedFormat":1},{"version":"89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","impliedFormat":1},{"version":"e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","impliedFormat":1},{"version":"71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","impliedFormat":1},{"version":"7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","impliedFormat":1},{"version":"78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","impliedFormat":1},{"version":"5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","impliedFormat":1},{"version":"f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","impliedFormat":1},{"version":"9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","impliedFormat":1},{"version":"3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","impliedFormat":1},{"version":"2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","impliedFormat":1},{"version":"4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","impliedFormat":1},{"version":"61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","impliedFormat":1},{"version":"64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","impliedFormat":1},{"version":"0521108c9f8ddb17654a0a54dae6ba9667c99eddccfd6af5748113e022d1c37a","impliedFormat":1},{"version":"c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","impliedFormat":1},{"version":"ee764e6e9a7f2b987cc1a2c0a9afd7a8f4d5ebc4fdb66ad557a7f14a8c2bd320","impliedFormat":1},{"version":"0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","impliedFormat":1},{"version":"5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","impliedFormat":1},{"version":"e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","impliedFormat":1},{"version":"b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","impliedFormat":1},{"version":"6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","impliedFormat":1},{"version":"d7058e75920120b142a9d57be25562a3cd9a936269fd52908505f530105f2ec4","impliedFormat":1},{"version":"6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","impliedFormat":1},{"version":"0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","impliedFormat":1},{"version":"91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","impliedFormat":1},{"version":"db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","impliedFormat":1},{"version":"758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","impliedFormat":1},{"version":"2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","impliedFormat":1},{"version":"6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","impliedFormat":1},{"version":"a472a1d3f25ce13a1d44911cd3983956ac040ce2018e155435ea34afb25f864c","impliedFormat":1},{"version":"b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","impliedFormat":1},{"version":"792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","impliedFormat":1},{"version":"a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","impliedFormat":1},{"version":"93181bac0d90db185bb730c95214f6118ae997fe836a98a49664147fbcaf1988","impliedFormat":1},{"version":"8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","impliedFormat":1},{"version":"b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","impliedFormat":1},{"version":"4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","impliedFormat":1},{"version":"cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","impliedFormat":1},{"version":"75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","impliedFormat":1},{"version":"b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","impliedFormat":1},{"version":"c54166a85bd60f86d1ebb90ce0117c0ecb850b8a33b366691629fdf26f1bbbd8","impliedFormat":1},{"version":"0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","impliedFormat":1},{"version":"80f23f1d60fbed356f726b3b26f9d348dddbb34027926d10d59fad961e70a730","impliedFormat":1},{"version":"cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","impliedFormat":1},{"version":"cc20bb2227dd5de0aab0c8d697d1572f8000550e62c7bf5c92f212f657dd88c5","impliedFormat":1},{"version":"06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","impliedFormat":1},{"version":"860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","impliedFormat":1},{"version":"f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","impliedFormat":1},{"version":"d0da80c845999a16c24d0783033fb5366ada98df17867c98ad433ede05cd87fd","impliedFormat":1},{"version":"bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","impliedFormat":1},{"version":"fd9a991b51870325e46ebb0e6e18722d313f60cd8e596e645ec5ac15b96dbf4e","impliedFormat":1},{"version":"c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","impliedFormat":1},{"version":"a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","impliedFormat":1},{"version":"d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","impliedFormat":1},{"version":"fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","impliedFormat":1},{"version":"063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","impliedFormat":1},{"version":"314e402cd481370d08f63051ae8b8c8e6370db5ee3b8820eeeaaf8d722a6dac6","impliedFormat":1},{"version":"9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","impliedFormat":1},{"version":"4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","impliedFormat":1},{"version":"656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","impliedFormat":1},{"version":"3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","impliedFormat":1},{"version":"1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","impliedFormat":1},{"version":"af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","impliedFormat":1},{"version":"70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","impliedFormat":1},{"version":"af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","impliedFormat":1},{"version":"cefc20054d20b85b534206dbcedd509bb74f87f3d8bc45c58c7be3a76caa45e1","impliedFormat":1},{"version":"ad6eee4877d0f7e5244d34bc5026fd6e9cf8e66c5c79416b73f9f6ebf132f924","impliedFormat":1},{"version":"4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","impliedFormat":1},{"version":"f4749c102ced952aa6f40f0b579865429c4869f6d83df91000e98005476bee87","impliedFormat":1},{"version":"56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","impliedFormat":1},{"version":"8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","impliedFormat":1},{"version":"05f56cd4b929977d18df8f3d08a4c929a2592ef5af083e79974b20a063f30940","impliedFormat":1},{"version":"547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","impliedFormat":1},{"version":"b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","impliedFormat":1},{"version":"3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","impliedFormat":1},{"version":"140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","impliedFormat":1},{"version":"0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","impliedFormat":1},{"version":"cb46b38d5e791acaa243bf342b8b5f8491639847463ac965b93896d4fb0af0d9","impliedFormat":1},{"version":"7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","impliedFormat":1},{"version":"af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","impliedFormat":1},{"version":"006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","impliedFormat":1},{"version":"7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","impliedFormat":1},{"version":"339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","impliedFormat":1},{"version":"34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","impliedFormat":1},{"version":"9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","impliedFormat":1},{"version":"18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","impliedFormat":1},{"version":"5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","impliedFormat":1},{"version":"5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","impliedFormat":1},{"version":"907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","impliedFormat":1},{"version":"ce60a562cd2a92f37a88f2ddd99a3abfbc5848d7baf38c48fb8d3243701fcb75","impliedFormat":1},{"version":"a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","impliedFormat":1},{"version":"f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","impliedFormat":1},{"version":"75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","impliedFormat":1},{"version":"9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","impliedFormat":1},{"version":"b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","impliedFormat":1},{"version":"b6e2b0448ced813b8c207810d96551a26e7d7bb73255eea4b9701698f78846d6","impliedFormat":1},{"version":"8ae10cd85c1bd94d2f2d17c4cbd25c068a4b2471c70c2d96434239f97040747a","impliedFormat":1},{"version":"9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","impliedFormat":1},{"version":"b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","impliedFormat":1},{"version":"e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","impliedFormat":1},{"version":"ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","impliedFormat":1},{"version":"8776a368617ce51129b74db7d55c3373dadcce5d0701e61d106e99998922a239","impliedFormat":1},{"version":"5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","impliedFormat":1},{"version":"9108ab5af05418f599ab48186193b1b07034c79a4a212a7f73535903ba4ca249","impliedFormat":1},{"version":"bb4e2cdcadf9c9e6ee2820af23cee6582d47c9c9c13b0dca1baaffe01fbbcb5f","impliedFormat":1},{"version":"6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","impliedFormat":1},{"version":"423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","impliedFormat":1},{"version":"fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","impliedFormat":1},{"version":"2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","impliedFormat":1},{"version":"c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","impliedFormat":1},{"version":"02ae43d5bae42efcd5a00d3923e764895ce056bca005a9f4e623aa6b4797c8af","impliedFormat":1},{"version":"db6e01f17012a9d7b610ae764f94a1af850f5d98c9c826ad61747dca0fb800bd","impliedFormat":1},{"version":"8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","impliedFormat":1},{"version":"24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","impliedFormat":1},{"version":"33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","impliedFormat":1},{"version":"0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","impliedFormat":1},{"version":"16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","impliedFormat":1},{"version":"8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","impliedFormat":1},{"version":"d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","impliedFormat":1},{"version":"97f9169882d393e6f303f570168ca86b5fe9aab556e9a43672dae7e6bb8e6495","impliedFormat":1},{"version":"7c9adb3fcd7851497818120b7e151465406e711d6a596a71b807f3a17853cb58","impliedFormat":1},{"version":"6752d402f9282dd6f6317c8c048aaaac27295739a166eed27e00391b358fed9a","impliedFormat":1},{"version":"9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","impliedFormat":1},{"version":"fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","impliedFormat":1},{"version":"85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","impliedFormat":1},{"version":"84794e3abd045880e0fadcf062b648faf982aa80cfc56d28d80120e298178626","impliedFormat":1},{"version":"053d8b827286a16a669a36ffc8ccc8acdf8cc154c096610aa12348b8c493c7b8","impliedFormat":1},{"version":"3cce4ce031710970fe12d4f7834375f5fd455aa129af4c11eb787935923ff551","impliedFormat":1},{"version":"8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","impliedFormat":1},{"version":"62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","impliedFormat":1},{"version":"c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","impliedFormat":1},{"version":"8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","impliedFormat":1},{"version":"132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","impliedFormat":1},{"version":"df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","impliedFormat":1},{"version":"33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","impliedFormat":1},{"version":"ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","impliedFormat":1},{"version":"a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","impliedFormat":1},{"version":"eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","impliedFormat":1},{"version":"0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","impliedFormat":1},{"version":"aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","impliedFormat":1},{"version":"0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","impliedFormat":1},{"version":"40f06693e2e3e58526b713c937895c02e113552dc8ba81ecd49cdd9596567ddb","impliedFormat":1},{"version":"4ed5e1992aedb174fb8f5aa8796aa6d4dcb8bd819b4af1b162a222b680a37fa0","impliedFormat":1},{"version":"d7f4bd46a8b97232ea6f8c28012b8d2b995e55e729d11405f159d3e00c51420a","impliedFormat":1},{"version":"d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","impliedFormat":1},{"version":"e4f4f9cf1e3ac9fd91ada072e4d428ecbf0aa6dc57138fb797b8a0ca3a1d521c","impliedFormat":1},{"version":"12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","impliedFormat":1},{"version":"340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","impliedFormat":1},{"version":"c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","impliedFormat":1},{"version":"7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","impliedFormat":1},{"version":"5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","impliedFormat":1},{"version":"9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","impliedFormat":1},{"version":"1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","impliedFormat":1},{"version":"8018dd2e95e7ce6e613ddd81672a54532614dc745520a2f9e3860ff7fb1be0ca","impliedFormat":1},{"version":"b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","impliedFormat":1},{"version":"0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","impliedFormat":1},{"version":"3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","impliedFormat":1},{"version":"032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","impliedFormat":1},{"version":"69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","impliedFormat":1},{"version":"0e704ee6e9fd8b6a5a7167886f4d8915f4bc22ed79f19cb7b32bd28458f50643","impliedFormat":1},{"version":"06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","impliedFormat":1},{"version":"904a96f84b1bcee9a7f0f258d17f8692e6652a0390566515fe6741a5c6db8c1c","impliedFormat":1},{"version":"11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","impliedFormat":1},{"version":"2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","impliedFormat":1},{"version":"1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","impliedFormat":1},{"version":"1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","impliedFormat":1},{"version":"07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","impliedFormat":1},{"version":"619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","impliedFormat":1},{"version":"f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","impliedFormat":1},{"version":"f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","impliedFormat":1},{"version":"350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","impliedFormat":1},{"version":"eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","impliedFormat":1},{"version":"45b74185005ed45bec3f07cac6e4d68eaf02ead9ff5a66721679fb28020e5e7c","impliedFormat":1},{"version":"0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","impliedFormat":1},{"version":"c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","impliedFormat":1},{"version":"5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","impliedFormat":1},{"version":"ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","impliedFormat":1},{"version":"9bf18d0ce20f7a353aaa10f3bb5e30c848c07f7047336e924d085459c00c993a","impliedFormat":1},{"version":"89ef5d771ac372abd1f5edc3d33109f31c134d5a872abd7b79b03f992bb707d0","impliedFormat":1},{"version":"0646812335695e5bb3e79527ceee0fa0cabfda07d70cdf2fbca99a9bad45273f","impliedFormat":1},{"version":"1f19c96e0b107c9235e952bf4934eb7b8be55df04ed4ce0427ed5d4a52bd165b","impliedFormat":1},{"version":"7b3664e21e08e631e99c43c38ac512b0d6939729df86ca66c58bef8e910ce5d4","impliedFormat":1},{"version":"c034ed577f9e54eec587a9460e18de99042d2d46d2fce55a166993100de706f9","impliedFormat":1},{"version":"bb0ea48e9a828b1d522218e815c2f3a969571908e082f57f6f0cf24b5b589453","impliedFormat":1},{"version":"45dc6c23327bce116ff2a9fa2f0429b50a0d62ef6eb6c601e6b7824927edd273","impliedFormat":1},{"version":"31f1ecd8bf0fbdd95553b23ac129c8039507e4c615e757eec727d8c316a0aa87","impliedFormat":1},{"version":"afde78a3b377e0e82df76dd72e383829dcb33c51a84990bfdedc825644d3ae43","impliedFormat":1},{"version":"ebcaa3f55b788b8fc04d7c9e3c41a736748373f3fdd3ae5e55fb06cc385e8123","impliedFormat":1},{"version":"d210cc1986d1787ad00b8235168f3a16e28aeeab05f74e334f9f3e2d6ba94c9d","impliedFormat":1},{"version":"c1bdcb2bce6c1c9601f35cc397fcac1988d3644d86d52e9214bddc96d5356b34","impliedFormat":1},{"version":"d4cc344020cc5995cb16916027dbb48a4659de3d96ed3a2f37869376b4819a8a","impliedFormat":1},{"version":"d2d8b08f2a96400fc93aca226293603e03982d6d87336edbdc1a8bcb9d893f8c","impliedFormat":1},{"version":"17b25e5eaa4436940e7e86315ee3bcc7359938e51646d5421e45dd44aeb1ff10","impliedFormat":1},{"version":"694c2ccda8c028ffc9eed496acff36f08f1fcd4bb1f00f5a3f66e757d136cccf","impliedFormat":1},{"version":"ab0f92c242726fc5bcb917067bdebeea53fd9004d46f676ec057f0d5b66dc476","impliedFormat":1},{"version":"d34d618328653e883cab33d24606bb94397fdb68fb7e38e011f85df2fd3cc845","impliedFormat":1},{"version":"d31f80c5a66c2347e8cb53d6f49445eab7f7c2d6a662d800c7b9a9fe1f2d9c47","impliedFormat":1},{"version":"5b9172039d573cab240aae6b71e1e93772a3f4c45341845c6cf1a85d8aa36df2","impliedFormat":1},{"version":"fae38e81445b9d17eb0f4920f4550b8ecf48f2432da619b3e08b8609d6e6cb0f","impliedFormat":1},{"version":"75dd20f711b026dec3b234bbab5a4bd4340e19345b25a4a4b7d2f647519cce80","impliedFormat":1},{"version":"018ea95d86bdbb345b943639aabcb324af2398082d0d54a618c75250e52a749c","impliedFormat":1},{"version":"af1ec9c12553b1da20d8ec24678c89221aefb8309cd7bbe62ba160c2dea1c9ad","impliedFormat":1},"5208770d650fe4ad50d8658423bf02d00aba21ecdc4fd3c3e4b1779f8452faed",{"version":"d30e67059f5c545c5f8f0cc328a36d2e03b8c4a091b4301bc1d6afb2b1491a3a","impliedFormat":1},{"version":"a356d9a0ba90d10ec6c0fa33386c0b0e2843fd6f0a49513c44f7809926ac25ff","impliedFormat":1},"334d053802c323e8a5509137aaf13ffb7d9cacb936dde816cfdfdcca2a16725c","fbcccf5606452328260490ff895f40fdf823410b56a62e25bff5f7434330da94","6206b472fe17ea64c81313beb540655ac01081d22982319cf21f5211e4a9b71c","781bb211e885a0c3c9f2fc6decb1dc2f134d2608ec445a2e93d26b32b06eb4d1","cec34e971d7a4e23252019ca1deedb77af5b3a42c5d62f61095dfe82aa2a848a","a0a2dbe59b46d1eb4351817661d5a56bc8f7d1554fd7e153a38e66cacd156e24","a3baee44bc31bf8e91300a47cec243a23421efe90b7c099c93d6b714873095e6",{"version":"23fea8bad58c63e1a9058d779587f091521c525c8a0945247636f24c6e073503","signature":"21c63f6576f08dd88a9616edda06fc70355fd88c2a34cbfa58c7e4538f72e714"},{"version":"218e00e649509c6d8e8176eece29790b11881532adc596c7f7b6b2334a249c2e","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4d7d964609a07368d076ce943b07106c5ebee8138c307d3273ba1cf3a0c3c751","impliedFormat":99},{"version":"0e48c1354203ba2ca366b62a0f22fec9e10c251d9d6420c6d435da1d079e6126","impliedFormat":99},{"version":"0662a451f0584bb3026340c3661c3a89774182976cd373eca502a1d3b5c7b580","impliedFormat":99},{"version":"4781142e27cfd19d75a2c0ee432826153fcdf670bdc52631a6078330c9133e6f","impliedFormat":99},{"version":"fa7b2a99713734f303c1d88360ee4affe6a81fea624a6bbd56e727b910f8d460","signature":"760169ac1f87359d2f6d96a14ace0baf9000eeb59c0a0857c0bf9569def90124"},{"version":"3b1f3e57163b2541cf00984780a6417c0b7ea82e72f55fa26d149cb943867498","signature":"a5d30845d783ed03dc9718ba178a480b157d3432c7e6c9129223b9fdbabcc6bb"},{"version":"6d7cd1205e15b287ecdfb2d00c51bab80033a2a9ee37ced6c9310f71f0290f45","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"753358ddfa1f14ed3c7c1be76b938cdd05b3e2a643177c809deea6c780b1a685","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"b53f45e0efb59a34f6110535e0b4909484ac01f01c07f9e11d9011d8b9163e72","signature":"b3773398b038e5776a9aed6ac693eb5651de53372a7a11bd71503835cee9e915"},{"version":"33dab8c26a9caf099df839615fd74617ec74ebba2ee4e44ed4576e13fb0f7a31","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"50cf7a23fc93928995caec8d7956206990f82113beeb6b3242dae8124edc3ca0","impliedFormat":99},{"version":"352031ac2e53031b69a09355e09ad7d95361edf32cc827cfe2417d80247a5a50","impliedFormat":99},{"version":"9971931daaf18158fc38266e838d56eb5d9d1f13360b1181bb4735a05f534c03","impliedFormat":99},{"version":"06d635a90365afe107c7e2daaa9851f5d3f062d78ebe4524b1b23b122469a1e2","impliedFormat":99},{"version":"aa103fbc4677b71d3deda20d37088cc2f39c3db8c2566ddf516b56ce7532d00a","impliedFormat":99},{"version":"0c5b705d31420477189618154d1b6a9bb62a34fa6055f56ade1a316f6adb6b3a","impliedFormat":99},{"version":"853b8bdb5da8c8e5d31e4d715a8057d8e96059d6774b13545c3616ed216b890c","impliedFormat":99},{"version":"430f4fa4e99e5e0a7ca2bbdde84abc8536bdfde4fd0de26009db508b8f571bb5","impliedFormat":99},{"version":"fe3c64bf61fcfec9b9861725c6d92de03f33748a01d982760ccfa798d777cf9d","impliedFormat":99},{"version":"1120a39f36c968298e2ca1d8cb1405389f9696f6b49e13b335626a94c16930bb","impliedFormat":99},{"version":"0a049adb920f3b42e1933c037052bcbc5e78b4704ad080bf078353c7f8ed6225","impliedFormat":99},{"version":"af9753433dec6dc41a2d3141804113a4d34f09fb19eb9eea063bd8800aa28db6","impliedFormat":99},{"version":"832f2fd6cf5eeaac22e2bdb0e3d7e2498cd8dd4058b853cd6b42033f126680ee","impliedFormat":99},{"version":"22fe66950a6308b2c6a0e11ed74930e90ba9d8a5fd2910666565007678875c13","impliedFormat":99},{"version":"084c09a35a9611e1777c02343c11ab8b1be48eb4895bbe6da90222979940b4a6","impliedFormat":99},{"version":"4b3049a2c849f0217ff4def308637931661461c329e4cf36aeb31db34c4c0c64","impliedFormat":99},{"version":"6245aa515481727f994d1cf7adfc71e36b5fc48216a92d7e932274cee3268000","impliedFormat":99},{"version":"3550708c55e4b79c5c13870f994461bcec97208e1d6758395a178913bbf05de3","impliedFormat":99},{"version":"660ce583eaa09bb39eef5ad7af9d1b5f027a9d1fbf9f76bf5b9dc9ef1be2830e","impliedFormat":99},{"version":"b7d9ca4e3248f643fa86ff11872623fdc8ed2c6009836bec0e38b163b6faed0c","impliedFormat":99},{"version":"904a01fef87360fa2fd0c2e934af92995b669565fe0bfb546ed0ff23769999cb","impliedFormat":99},{"version":"d4f7a7a5f66b9bc6fbfd53fa08dcf8007ff752064df816da05edfa35abd2c97c","impliedFormat":99},{"version":"1f38ecf63dead74c85180bf18376dc6bc152522ef3aedf7b588cadbbd5877506","impliedFormat":99},{"version":"82fb33c00b1300c19591105fc25ccf78acba220f58d162b120fe3f4292a5605f","impliedFormat":99},{"version":"facde2bec0f59cf92f4635ece51b2c3fa2d0a3bbb67458d24af61e7e6b8f003c","impliedFormat":99},{"version":"4669194e4ca5f7c160833bbb198f25681e629418a6326aba08cf0891821bfe8f","impliedFormat":99},{"version":"db185b403e30e91c5b90f3f2cfa062832d764c9d7df3ad7f5db7e17596344fe8","impliedFormat":99},{"version":"669b62a7169354658d4ae1e043ad8203728655492a8f70a940a11ca5ed4d5029","impliedFormat":99},{"version":"a95cd11c5c8bc03eab4011f8e339a48f9a87293e90c0bf3e9003d7a6f833f557","impliedFormat":99},{"version":"e9bc0db0144701fab1e98c4d595a293c7c840d209b389144142f0adbc36b5ec2","impliedFormat":99},{"version":"9d884b885c4b2d89286685406b45911dcaab03e08e948850e3e41e29af69561c","impliedFormat":99},{"version":"c2377cbc236abfceb8aa9e427a4af7fd4e29be9ecba27dca1b0290457b14e3ca","signature":"a5907eaac26f834a614431fb7c17f7d5a68f68adea3a1ca2fa2e91a4601ce1a0"},{"version":"0c4a271c60dbb7f6d86f5de56bb15346116376b486c6316c549e1f35b8a416a5","signature":"0dae3d242db51e2ef475883baa090ada156f523f5884ec58e4e53038add780e4"},{"version":"701cbedc228368dfe5c070664cf671f8acda85ba2964e00d100f3d2e81472da3","signature":"e5884046ead4841070c731e0287ae6bfa8c0d2b8fc87bc9ee61276ba3bebfb7c"},{"version":"767960dee327cad1ed74af029aa30109dbf307fa0aaab71b20c381164aa8c9b4","signature":"4694f1f14da89086f105fac1e727ae291d08083e554513ee1eec633f1f14a96a"},{"version":"2b30302f5ff109adc2bfbfe8951b7cf1963e8dd23b94b7a572108320e4d209d7","signature":"c4769758284ccc2fb109a604f6250369ce8e29c73b2ef0b7401f4a432b292bdc"},{"version":"5202715726a874edcd366e0862702c4c9f0ecdb80a4d3df427f071895328e9f4","signature":"d8281b81fe0b639cdbaebc63448dae41c50feb1cc737a822cc87a223a194cc58"},{"version":"1ee38d63eb8775530749331ff48e539a269c98fb7ac883d8ae918d4e6e2b6b89","signature":"71d25c0a7880b88619efe2d29031ef9960abcbf9aebc16389639d033ff6e27be"},{"version":"bedf524939e560fb1c68b73f078d0246006e1ede891ec0355b49291fd8b39007","signature":"5574ea08fb2d02e5a7b5069940b41492f582427cd6517ebc5e46bb0fa4df87ff"},{"version":"aecbd57591e5813689b3799dda24d6ceb10f5267d415430b753604538a060b6a","signature":"2f1fe7986e5f596e0359609fd4a4eef45e49734450f3032902b41f7a26db2489"},{"version":"8cf7c9ebfbd2fff3a94a3f10a0801cc67dd86d89e8ce4369b77d13719b39621f","signature":"72509efef61cfa607e34ae64294eb793d2c57aded98c092a07cd4d55cd366650"},{"version":"7bb9ce0e5edf1756c8ab3bd5739e99b8748a0b6f0545497e84c37671162d710e","signature":"a7a1f4267e921ab3c1f34f46ac71070d54211c34ec987d4834d8185ba30769ae"},{"version":"f34113c7e7e96a700d731ad25fff1904f2cd579a44141e145b6a1f004cfcf1dc","signature":"828030183d2ee8d81df3c784b96a26315fbd4be7c2e69c0054ce9dd94aeded30"},{"version":"204b8a4af3742532a879253194e624caac77d9e6763584a4a49ca8b1b08c8aed","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"21d1de9e6c40d79f9122d0158b97c62c03cab5a3060eeb0696830475e7060f17","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"5a4308a27bc95b4d8b7596325abe01a0a7e15a6d6350dc9ff001932259861725","signature":"08070110f6963aaa99ddd59742ef67da601c36c2d607f087870c6850de9dd0ca"},{"version":"9f0fc47d4c80e818be81d1d031b5aa94764ada023f54b6de98d6ba24ab78eab0","signature":"cfb03122d3296fc7960c283ce37cac6adf8791bfc8dd5ac8ad524229c81b0493"},{"version":"19110f1633292d89b215c30fba37d05107c2d8eb601854e87102d09c0c512cd8","signature":"14cc966519b7de516392e1dc09103a0c035a1bb66f7333d1e07b5f49aa291c80"},{"version":"3de4a8524e8c5199e8e6435f9f64d64101b7f7912e18fa525b131d6910c4336a","signature":"f25e8ef7d90ac2b3cf8373ec312645f5c142e5c5ef276a19d42a5e74ea3a946f"},{"version":"129de4a3b796279f5e3227e78ca0fa59dbf7bf1bc1fd329fcc76150297478d0f","signature":"39a16aa34fc956a305fbf041a21c01b44990f122e74b5a2dd4d22406e508f394"},{"version":"e9a802fbb7f1706a98a8ed4f6b8196bced25383b6078630a5003dc77cd746f46","signature":"3ecb4ed313cd7cf0583a500b22fc61673a03815df10078e35ac620cae116b422"},{"version":"dd02e824c0aaa811947a17b2c396c815b0f0d3ccff3879ad0450542fc8cd30ee","signature":"01ff16421b8c72f4443c95538c9b875e8a12f76a282c3e68115930adf27dbf16"},{"version":"14c4dd0a56578dc569ef708da2d60ddbe00a009bc0760684d9cd36b04a296fc7","signature":"3763c07411d78b70fc66479a5a068acdd0ec4d62ee0eb76006f792ddb4092d03"},{"version":"98e54e75d9ff55930e9edb347a7bc75b845d654816a5f94ca60361035ba81dcb","signature":"01723de39f277d5ee69a7b2f15838fcd6e02b7fbc7bf0099e7038c190173a757"},{"version":"eb8758e2e7e84b83d7208dd8ec94a76db4b603009f7fa58f1d917a2fade570a4","signature":"acaeab5c4273e255d64c8bc4216a4eec82f7c14357f0f48015f4e5a9d9e32154"},{"version":"bcc029f882c873c97fbd934e39ff6a3419f75389fa43535b966d85e05ff83776","signature":"c8b06ac86dbd025d371196fda0a07e7bc974e3e61dc86da7352ebedf12c72903"},{"version":"4ff0b443bfaee4e537a64c4d45ec3e0740957c1ba60facedd05aabbc691b678f","signature":"d908d903a664da4b1f9a5ec64ef790a09c920984baf44960b869a86f9206a6f8"},{"version":"ae5319ff02451b0d853d38f26a9622a145a852df699fa54bb62137fd03c1e344","signature":"60bea022c13559794166204b7f2f9b50545bd747ca9ec987ea66c076ff961040"},{"version":"22af236bfddaf599772f4cbf08dce5715d3deafc554a63b054d6d279e06483a8","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"43811aa13f8aa3f73fd98a4b1a4be0221a5a51255af9cd3413835ed1141a507f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7749a12774aec31660b01e975ff1db221cbbf57a9a589d6652ffdd842516bd6d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"8bf6d05029045b7412a7b53031daf64413df17dd76e16f70d0639123ddaf6e39","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"0622fc5f8619214660ca03a4bd02a086f4c37c61ae2e1450c3c4f2598d4f70c6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"d56e959076cf8cb2ca48490c7d0643d74cd257a700c28a25aec1209820951001","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e24fd01358bff91ab2631d1b1a5e9a3712dfe29bd997c2c89c369e75653c0778","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e49e78bd1d3e1853d0f9383cd7359c7e19ac6fd3ab4576a166f2a48ad73190ea","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2cb6f03f759fba58d6c7fcb7f678ea227ac87aa892b8a6c7921282b151ce0dd5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"120565597209a07683d5f7ad7a0503ab5cdcd3c237d92446574a77d3711444c8","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"42c6d1a3e2f496d1b035f3fc35720b3e4a389330c82071bf05159bc3e61e7c4b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"9b3805cd540bcf067f5d36a08ef4f34c0fe3ccb9261dc1562ed46d0bc68997d6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"aa4ea57b6ea9522b865460dc5cd1dc1a9896cd51d58a28c9aeb43c291fb00fc3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"890e9a8a8c8b5dece8429daa458c11f28b75ae878ccd0f079becdd78e7a3708c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"38248c29c2981b276816fbab4d6c9cff096a48f4e5926f1e2112fac270d34a3c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f654f8eeeb145dae3e05f4e8f515fdaeb4794aee8e52dae9c5a4cb9042a84226","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2a3d8cd0ba12e9d42bffd49f419a9e88cccda9c2dc809211a8f4fcfc09787d20","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7ddbddf826b3628fcf57f332bed85885870249fe217498739e33e7e00b7e7c4f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1bf8f0ec4333800b299a28eac0f92b3f6504d930aee00e488744541ebd226755","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4f08b57e079b9b6c31a9e5252b0d9d283e98330cae1efcc4b745af1976166a38","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7b1872aa4ccfa359c601baae478ceb3028f814036dc4824432fa9362866f213b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"0dfd1b5702047dbf17f1aa23a1ae2296f46f70409a21345b033d0bbca75fb98a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1c26ef21b5532f7d1601ce837a7888f634172d6e6c0de842975234cdb39fd87d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a3dd7172db966e29dbda5a63d63195dad0dddef033c1b75935712059a6395c12","impliedFormat":1},{"version":"27c79103b3eddd641481f5e04e766adfaa52c6252e5e9fad369a808890291186","impliedFormat":1},{"version":"c32bcfd472e509a021990489cb750319a849c85932f562e3bcc9d72a8f5ad4ce","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e62cc8dc7ed6c75139993da3014d4119645617e9610979b5bf8826121db4678a","signature":"5a4bb46daa590e8b617d84286f738dc02ddc607233ce59d96dc5bb3a67209f11"},{"version":"10aa7d5bf677d1dbcea9bc4d755f767d895b14e5b66c1bccc8436fb0934d8c5b","signature":"af766774d91280243fb8a228fa2c16450cba846c5c53493ef9f63d6e25bf074c"},{"version":"945cbeea4f66887ce6d79ea7ceb03bfe33475c53c4fa6941ad89967585106fc3","signature":"ad60caf4894a04d95e5c9ec0e1a77c70103ae71a8b2c0d88ed2acecbeb72a731"},{"version":"8c0d3c01bf1f459feb2cbcd4e84ef55de085100e4ff6e28b52bf324b05e34ab0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"369f190a2ae0467f597e8657441a6e9dfe834a971db0eb69a243d9437993c4a6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"df44bc17fc7ac1395656df5488dc363ff71806f540bc6317d272e156a850151b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"de438ac2a3c7070d097a1b41fc1d81fa17e597c031bf44a59fdad8af6d4c0374","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c0377fcd10375d9cfba74da6e572644e15e4c610b58ff7e13cc523f018c38e08","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"bc25cb26503dd558cead2c02413e9a7dd0a14a38568821f81f23391d33f107f9",{"version":"2514dceb2e759f4ae71cd71b99cd0aba597d086f98ee55a658e5086bcaea9a0b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"476e83e2c9e398265eed2c38773ae9081932b08ea5597b579a7d2e0c690ead56","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"d6056b480feb3370ff004ca083aed2b9dd36b391fc3cef6da7038574bcdb5577","impliedFormat":99},{"version":"d00b7ef279b5e11236738e99e985ced45d75dbf417eab19110519d7fcf029be9","impliedFormat":99},{"version":"52844bb4893076de3d60e804334a824bcde07147640e8bd5cf67f0e2cb734ad5","signature":"963991fa5943adde556cea8ebb00bbc508e9de048eb361c5a8b9c59a88707119"},{"version":"ad42a30dde8d673db8b232330018f096049c75e22725f8f3ce7055d6aebc7645","signature":"ba54342937eb116567785cc93f6ef7c8ce3b041a67bb2ecb579ab28359b06047"},{"version":"ec742e2e34f91b21a061818aaa97bfff535d01152c2e109b12d67d6ab08e65bd","signature":"45b373ad2e114de335dd3eaf62f9658266d71c2f34537489f88f3b4815fa72f8"},{"version":"6617d5980971da57c470259ed8c32486cdb5746eae3cfdfa56b1d929b1607318","signature":"872981c7daf929ee5ed35e720f59692075154510ce720a68d7a59859e1da78b0"},{"version":"4c54300bb2670678e16cb98079486f3f2bfa061dd1b954e7e4a8999959420507","impliedFormat":1},{"version":"476976d4b642aa0387002fc45e2e3461b39a7ab89147c36c88a43f6208165937","signature":"7fced774d307155dbe328583316013de87b8d033941c7c306909e3dba9a401d1"},{"version":"3fe7a556695f0c657ec1c1936fff3f64b6f16197a159597e04785a51a95ddcf0","signature":"a9466257646872f6012c5fb31eaf5a84aab09a3ae64b473127d1452e49fb8fdd"},{"version":"904c69311a147514fdcfa68893c13f5e44a1a8717a65078a3891cb8f5a94b0cb","signature":"f606c8123859197a15831ac5a4c80145ff3ba2174041efc9db3f9132b22ebc76"},{"version":"e320cefa4edad8e5b3af95758726edfbb1b673d116b03e801e08c36f14f8d32b","signature":"37bc689e0c9de566c5f3c67bb30bc41eb8330cecd4a85c0bdaecc37c60f1cff4"},{"version":"a742cc0cce963af5eb92591b844032c3af8cdced8f09843a44fd6e808790d8c9","signature":"e9765aeaf4547c97126abaea9a8613ace300b5b1ed01343c3e5d9908ba3451ed"},{"version":"8e6b8259bfd8c8c3d6ed79349b7f2f69476d255aede2cd6c0acb0869ad8c6fdd","impliedFormat":1},{"version":"ede1e6178dbb8a30a16a794eca81b4fd0bd428215fa7c9d97ba69635c5a6fcf0","signature":"fad98eeca840b360468da4b1043cb12482440a7ed2b8a03c139718e39862e1f8"},{"version":"e5ad6faeec6643c23cb7cddada64138f93a6291cc8a3267f19dbcdf0536635b3","signature":"305559e2cdcee635c18a2585e1949b111bd861ab1bdcf30810f8258e143d01aa"},{"version":"12310737cc574faf81f430dff62d63799e1313d87bd7f006b1cf8eac5ee22338","signature":"88766f164b56e8c0382f41fd1464d1086bc78289659ce1ef0dede3717a54e845"},{"version":"32fb39e0f7a2b976524b6f90ed5372654407235816bc60095186ce6ab94ad3c0","signature":"6a066802da0d1d5dea0606ef71a68de48a3e76674b08d063534f70d37d2934c2"},{"version":"63b819455f4a72ae2c950900a1ee0870c5a73576293ba28f1a37d8f2bdc88746","signature":"44d26e47b3007639b21116cd58930a5b9c6fa84dace6ec7b2b84f2642be3bcf5"},{"version":"088bb47b98092b56b9de5a0f87ae7d9fb0c6bdc0812613e9430105d9875f0d4a","signature":"1d10a3e829f3ca1935afca9281f1624f7c1d2662c0153214144d9dc98e8b94ba"},{"version":"ca60376c872dfece09cf1b6b1fe847f0e0ba253eed2f0002eb5269713e1905f2","signature":"7202386fc70e103adeee82f157cb695974ad9d8d7e53e01b54f99371546fee74"},{"version":"775c44175f08f5827343d1647d0cffe520039d033806b7a2961778c84bed55d3","signature":"57e91333d92fd6ff2d260f8918bd27f1bfa300099338e8d69c3c04a2181df853"},{"version":"afadb92ca8fde7a95ad4a91a9b815add9f4573423ca9f90054d4050e5cf47edb","signature":"1266b44e4716758133ab13dd5cd91b42fd275919ec2f4fd9434d2f6badb0f933"},{"version":"dd332252bb45677533cd5553e0c35340cee4c485c90c63360f8e653901286a4f","impliedFormat":1},{"version":"dddde95f3dea44dc49c9095a861298e829122a54a3f56b3b815e615501e2ed16","impliedFormat":1},{"version":"794a88237c94d74302df12ebb02f521cf5389a5bf046a3fdbdd3afb21dc02511","impliedFormat":1},{"version":"66a08d30c55a7aefa847c1f5958924a3ef9bea6cd1c962a8ff1b2548f66a6ce0","impliedFormat":1},{"version":"0790ae78f92ab08c9d7e66b59733a185a9681be5d0dc90bd20ab5d84e54dcb86","impliedFormat":1},{"version":"1046cd42ec19e4fd038c803b4fc1aff31e51e6e48a6b8237a0240a11c1c27792","impliedFormat":1},{"version":"8f93c7e1084de38a142085c7f664b0eb463428601308fb51c68b25cb687e0887","impliedFormat":1},{"version":"83f69c968d32101f8690845f47bcae016cbea049e222a5946889eb3ae37e7582","impliedFormat":1},{"version":"59c3f3ed18de1c7f5927e0eafcdc0e545db88bfae4168695a89e38a85943a86d","impliedFormat":1},{"version":"32e6c27fd3ef2b1ddbf2bf833b2962d282eb07d9d9d3831ca7f4ff63937268e1","impliedFormat":1},{"version":"406ebb72aa8fdd9227bfce7a1b3e390e2c15b27f5da37ea9e3ed19c7fb78d298","impliedFormat":1},{"version":"197109f63a34b5f9379b2d7ba82fc091659d6878db859bd428ea64740cb06669","impliedFormat":1},{"version":"059871a743c0ca4ae511cbd1e356548b4f12e82bc805ab2e1197e15b5588d1c4","impliedFormat":1},{"version":"8ccefe3940a2fcb6fef502cdbc7417bb92a19620a848f81abc6caa146ab963e9","impliedFormat":1},{"version":"44d8ec73d503ae1cb1fd7c64252ffa700243b1b2cc0afe0674cd52fe37104d60","impliedFormat":1},{"version":"67ea5a827a2de267847bb6f1071a56431aa58a4c28f8af9b60d27d5dc87b7289","impliedFormat":1},{"version":"e33bb784508856827448a22947f2cac69e19bc6e9d6ef1c4f42295f7bd4ce293","impliedFormat":1},{"version":"383bb09bfeb8c6ef424c7fbce69ec7dc59b904446f8cfec838b045f0143ce917","impliedFormat":1},{"version":"83508492e3fc5977bc73e63541e92c5a137db076aafc59dcf63e9c6ad34061c7","impliedFormat":1},{"version":"ef064b9a331b7fc9fe0b368499c52623fb85d37d8972d5758edc26064189d14d","impliedFormat":1},{"version":"d64457d06ab06ad5e5f693123ee2f17594f00e6d5481517058569deac326fea0","impliedFormat":1},{"version":"e92ea29d716c5fe1977a34e447866d5cfbd94b3f648e3b9c550603fdae0e94fb","impliedFormat":1},{"version":"3d10f47c6b1e9225c68c140235657a0cdd4fc590c18faf87dcd003fd4e22c67f","impliedFormat":1},{"version":"13989f79ff8749a8756cac50f762f87f153e3fb1c35768cc6df15968ec1adb1a","impliedFormat":1},{"version":"e014c2f91e94855a52dd9fc88867ee641a7d795cfe37e6045840ecf93dab2e6b","impliedFormat":1},{"version":"74b9f867d1cc9f4e6122f81b59c77cbd6ff39f482fb16cffdc96e4cda1b5fdb1","impliedFormat":1},{"version":"7c8574cfc7cb15a86db9bf71a7dc7669593d7f62a68470adc01b05f246bd20ff","impliedFormat":1},{"version":"c8f49d91b2669bf9414dfc47089722168602e5f64e9488dbc2b6fe1a0f6688da","impliedFormat":1},{"version":"3abee758d3d415b3b7b03551f200766c3e5dd98bb1e4ff2c696dc6f0c5f93191","impliedFormat":1},{"version":"79bd7f60a080e7565186cfdfd84eac7781fc4e7b212ab4cd315b9288c93b7dc7","impliedFormat":1},{"version":"4a2f281330a7b5ed71ebc4624111a832cd6835f3f92ad619037d06b944398cf4","impliedFormat":1},{"version":"ea8130014cb8ee30621bf521f58d036bff3b9753b2f6bd090cc88ac15836d33c","impliedFormat":1},{"version":"c740d49c5a0ecc553ddfc14b7c550e6f5a2971be9ed6e4f2280b1f1fa441551d","impliedFormat":1},{"version":"886a56c6252e130f3e4386a6d3340cf543495b54c67522d21384ed6fb80b7241","impliedFormat":1},{"version":"4b7424620432be60792ede80e0763d4b7aab9fe857efc7bbdb374e8180f4092a","impliedFormat":1},{"version":"e407db365f801ee8a693eca5c21b50fefd40acafda5a1fa67f223800319f98a8","impliedFormat":1},{"version":"529660b3de2b5246c257e288557b2cfa5d5b3c8d2240fa55a4f36ba272b57d18","impliedFormat":1},{"version":"0f6646f9aba018d0a48b8df906cb05fa4881dc7f026f27ab21d26118e5aa15de","impliedFormat":1},{"version":"b3620fcf3dd90a0e6a07268553196b65df59a258fe0ec860dfac0169e0f77c52","impliedFormat":1},{"version":"08135e83e8d9e34bab71d0cf35b015c21d0fd930091b09706c6c9c0e766aca28","impliedFormat":1},{"version":"96e14f2fdc1e3a558462ada79368ed49b004efce399f76f084059d50121bb9a9","impliedFormat":1},{"version":"56f2ade178345811f0c6c4e63584696071b1bd207536dc12384494254bc1c386","impliedFormat":1},{"version":"e484786ef14e10d044e4b16b6214179c95741e89122ba80a7c93a7e00bf624b1","impliedFormat":1},{"version":"4763ce202300b838eb045923eaeb32d9cf86092eee956ca2d4e223cef6669b13","impliedFormat":1},{"version":"7cff5fff5d1a92ae954bf587e5c35987f88cacaa006e45331b3164c4e26369de","impliedFormat":1},{"version":"c276acedaadc846336bb51dd6f2031fdf7f299d0fae1ee5936ccba222e1470ef","impliedFormat":1},{"version":"426c3234f768c89ba4810896c1ee4f97708692727cfecba85712c25982e7232b","impliedFormat":1},{"version":"ee12dd75feac91bb075e2cb0760279992a7a8f5cf513b1cffaa935825e3c58be","impliedFormat":1},{"version":"3e51868ea728ceb899bbfd7a4c7b7ad6dd24896b66812ea35893e2301fd3b23f","impliedFormat":1},{"version":"781e8669b80a9de58083ca1f1c6245ef9fb04d98add79667e3ed70bde034dfd5","impliedFormat":1},{"version":"cfd35b460a1e77a73f218ebf7c4cd1e2eeeaf3fa8d0d78a0a314c6514292e626","impliedFormat":1},{"version":"452d635c0302a0e1c5108edebcca06fc704b2f8132123b1e98a5220afa61a965","impliedFormat":1},{"version":"bbe64c26d806764999b94fcd47c69729ba7b8cb0ca839796b9bb4d887f89b367","impliedFormat":1},{"version":"b87d65da85871e6d8c27038146044cffe40defd53e5113dbd198b8bce62c32db","impliedFormat":1},{"version":"c37712451f6a80cbf8abec586510e5ac5911cb168427b08bc276f10480667338","impliedFormat":1},{"version":"ecf02c182eec24a9a449997ccc30b5f1b65da55fd48cbfc2283bcfa8edc19091","impliedFormat":1},{"version":"0b2c6075fc8139b54e8de7bcb0bed655f1f6b4bf552c94c3ee0c1771a78dea73","impliedFormat":1},{"version":"49707726c5b9248c9bac86943fc48326f6ec44fe7895993a82c3e58fb6798751","impliedFormat":1},{"version":"a9679a2147c073267943d90a0a736f271e9171de8fbc9c378803dd4b921f5ed3","impliedFormat":1},{"version":"a8a2529eec61b7639cce291bfaa2dd751cac87a106050c3c599fccb86cc8cf7f","impliedFormat":1},{"version":"bfc46b597ca6b1f6ece27df3004985c84807254753aaebf8afabd6a1a28ed506","impliedFormat":1},{"version":"7fdee9e89b5a38958c6da5a5e03f912ac25b9451dc95d9c5e87a7e1752937f14","impliedFormat":1},{"version":"b8f3eafeaf04ba3057f574a568af391ca808bdcb7b031e35505dd857db13e951","impliedFormat":1},{"version":"30b38ae72b1169c4b0d6d84c91016a7f4c8b817bfe77539817eac099081ce05c","impliedFormat":1},{"version":"c9f17e24cb01635d6969577113be7d5307f7944209205cb7e5ffc000d27a8362","impliedFormat":1},{"version":"685ead6d773e6c63db1df41239c29971a8d053f2524bfabdef49b829ae014b9a","impliedFormat":1},{"version":"b7bdabcd93148ae1aecdc239b6459dfbe35beb86d96c4bd0aca3e63a10680991","impliedFormat":1},{"version":"e83cfc51d3a6d3f4367101bfdb81283222a2a1913b3521108dbaf33e0baf764a","impliedFormat":1},{"version":"95f397d5a1d9946ca89598e67d44a214408e8d88e76cf9e5aecbbd4956802070","impliedFormat":1},{"version":"74042eac50bc369a2ed46afdd7665baf48379cf1a659c080baec52cc4e7c3f13","impliedFormat":1},{"version":"1541765ce91d2d80d16146ca7c7b3978bd696dc790300a4c2a5d48e8f72e4a64","impliedFormat":1},{"version":"ec6acc4492c770e1245ade5d4b6822b3df3ba70cf36263770230eac5927cf479","impliedFormat":1},{"version":"4c39ee6ae1d2aeda104826dd4ce1707d3d54ac34549d6257bea5d55ace844c29","impliedFormat":1},{"version":"deb099454aabad024656e1fc033696d49a9e0994fc3210b56be64c81b59c2b20","impliedFormat":1},{"version":"80eec3c0a549b541de29d3e46f50a3857b0b90552efeeed90c7179aba7215e2f","impliedFormat":1},{"version":"a4153fbd5c9c2f03925575887c4ce96fc2b3d2366a2d80fad5efdb75056e5076","impliedFormat":1},{"version":"6f7c70ca6fa1a224e3407eb308ec7b894cfc58042159168675ccbe8c8d4b3c80","impliedFormat":1},{"version":"4b56181b844219895f36cfb19100c202e4c7322569dcda9d52f5c8e0490583c9","impliedFormat":1},{"version":"5609530206981af90de95236ce25ddb81f10c5a6a346bf347a86e2f5c40ae29b","impliedFormat":1},{"version":"632ce3ee4a6b320a61076aeca3da8432fb2771280719fde0936e077296c988a9","impliedFormat":1},{"version":"8b293d772aff6db4985bd6b33b364d971399993abb7dc3f19ceed0f331262f04","impliedFormat":1},{"version":"4eb7bad32782df05db4ba1c38c6097d029bed58f0cb9cda791b8c104ccfdaa1f","impliedFormat":1},{"version":"c6a8aa80d3dde8461b2d8d03711dbdf40426382923608aac52f1818a3cead189","impliedFormat":1},{"version":"bf5e79170aa7fc005b5bf87f2fe3c28ca8b22a1f7ff970aa2b1103d690593c92","impliedFormat":1},{"version":"ba3c92c785543eba69fbd333642f5f7da0e8bce146dec55f06cfe93b41e7e12f","impliedFormat":1},{"version":"c6d72ececae6067e65c78076a5d4a508f16c806577a3d206259a0d0bfeedc8d1","impliedFormat":1},{"version":"b6429631df099addfcd4a5f33a046cbbde1087e3fc31f75bfbbd7254ef98ea3c","impliedFormat":1},{"version":"4e9cf1b70c0faf6d02f1849c4044368dc734ad005c875fe7957b7df5afe867c9","impliedFormat":1},{"version":"7498b7d83674a020bd6be46aeed3f0717610cb2ae76d8323e560e964eb122d0c","impliedFormat":1},{"version":"b80405e0473b879d933703a335575858b047e38286771609721c6ab1ea242741","impliedFormat":1},{"version":"7193dfd01986cd2da9950af33229f3b7c5f7b1bee0be9743ad2f38ec3042305e","impliedFormat":1},{"version":"1ccb40a5b22a6fb32e28ffb3003dea3656a106dd3ed42f955881858563776d2c","impliedFormat":1},{"version":"8d97d5527f858ae794548d30d7fc78b8b9f6574892717cc7bc06307cc3f19c83","impliedFormat":1},{"version":"ccb4ecdc8f28a4f6644aa4b5ab7337f9d93ff99c120b82b1c109df12915292ac","impliedFormat":1},{"version":"8bbcf9cecabe7a70dcb4555164970cb48ba814945cb186493d38c496f864058f","impliedFormat":1},{"version":"7d57bdfb9d227f8a388524a749f5735910b3f42adfe01bfccca9999dc8cf594c","impliedFormat":1},{"version":"3508810388ea7c6585496ee8d8af3479880aba4f19c6bbd61297b17eb30428f4","impliedFormat":1},{"version":"56931daef761e6bdd586358664ccd37389baabeb5d20fe39025b9af90ea169a5","impliedFormat":1},{"version":"abb48247ab33e8b8f188ef2754dfa578129338c0f2e277bfc5250b14ef1ab7c5","impliedFormat":1},{"version":"beaba1487671ed029cf169a03e6d680540ea9fa8b810050bc94cb95d5e462db2","impliedFormat":1},{"version":"1418ef0ba0a978a148042bc460cf70930cd015f7e6d41e4eb9348c4909f0e16d","impliedFormat":1},{"version":"56be4f89812518a2e4f0551f6ef403ffdeb8158a7c271b681096a946a25227e9","impliedFormat":1},{"version":"bbb0937150b7ab2963a8bc260e86a8f7d2f10dc5ee7ddb1b4976095a678fdaa4","impliedFormat":1},{"version":"862301d178172dc3c6f294a9a04276b30b6a44d5f44302a6e9d7dc1b4145b20b","impliedFormat":1},{"version":"cbf20c7e913c08cb08c4c3f60dae4f190abbabaa3a84506e75e89363459952f0","impliedFormat":1},{"version":"0f3333443f1fea36c7815601af61cb3184842c06116e0426d81436fc23479cb8","impliedFormat":1},{"version":"421d3e78ed21efcbfa86a18e08d5b6b9df5db65340ef618a9948c1f240859cc1","impliedFormat":1},{"version":"b1225bc77c7d2bc3bad15174c4fd1268896a90b9ab3b306c99b1ade2f88cddcc","impliedFormat":1},{"version":"ca46e113e95e7c8d2c659d538b25423eac6348c96e94af3b39382330b3929f2a","impliedFormat":1},{"version":"03ca07dbb8387537b242b3add5deed42c5143b90b5a10a3c51f7135ca645bd63","impliedFormat":1},{"version":"ca936efd902039fda8a9fc3c7e7287801e7e3d5f58dd16bf11523dc848a247d7","impliedFormat":1},{"version":"2c7b3bfa8b39ed4d712a31e24a8f4526b82eeca82abb3828f0e191541f17004c","impliedFormat":1},{"version":"5ffaae8742b1abbe41361441aa9b55a4e42aee109f374f9c710a66835f14a198","impliedFormat":1},{"version":"ecab0f43679211efc9284507075e0b109c5ad024e49b190bb28da4adfe791e49","impliedFormat":1},{"version":"967109d5bc55face1aaa67278fc762ac69c02f57277ab12e5d16b65b9023b04f","impliedFormat":1},{"version":"36d25571c5c35f4ce81c9dcae2bdd6bbaf12e8348d57f75b3ef4e0a92175cd41","impliedFormat":1},{"version":"fde94639a29e3d16b84ea50d5956ee76263f838fa70fe793c04d9fce2e7c85b9","impliedFormat":1},{"version":"5f4c286fea005e44653b760ebfc81162f64aabc3d1712fd4a8b70a982b8a5458","impliedFormat":1},{"version":"e02dabe428d1ffd638eccf04a6b5fba7b2e8fccee984e4ef2437afc4e26f91c2","impliedFormat":1},{"version":"60dc0180bd223aa476f2e6329dca42fb0acaa71b744a39eb3f487ab0f3472e1c","impliedFormat":1},{"version":"b6fdbecf77dcbf1b010e890d1a8d8bfa472aa9396e6c559e0fceee05a3ef572f","impliedFormat":1},{"version":"e1bf9d73576e77e3ae62695273909089dbbb9c44fb52a1471df39262fe518344","impliedFormat":1},{"version":"d2d57df33a7a5ea6db5f393df864e3f8f8b8ee1dfdfe58180fb5d534d617470f","impliedFormat":1},{"version":"fdcd692f0ac95e72a0c6d1e454e13d42349086649828386fe7368ac08c989288","impliedFormat":1},{"version":"5583eef89a59daa4f62dd00179a3aeff4e024db82e1deff2c7ec3014162ea9a2","impliedFormat":1},{"version":"b0641d9de5eaa90bff6645d754517260c3536c925b71c15cb0f189b68c5386b4","impliedFormat":1},{"version":"9899a0434bd02881d19cb08b98ddd0432eb0dafbfe5566fa4226bdd15624b56f","impliedFormat":1},{"version":"4496c81ce10a0a9a2b9cb1dd0e0ddf63169404a3fb116eb65c52b4892a2c91b9","impliedFormat":1},{"version":"ecdb4312822f5595349ec7696136e92ecc7de4c42f1ea61da947807e3f11ebfc","impliedFormat":1},{"version":"42edbfb7198317dd7359ce3e52598815b5dc5ca38af5678be15a4086cccd7744","impliedFormat":1},{"version":"8105321e64143a22ed5411258894fb0ba3ec53816dad6be213571d974542feeb","impliedFormat":1},{"version":"d1b34c4f74d3da4bdf5b29bb930850f79fd5a871f498adafb19691e001c4ea42","impliedFormat":1},{"version":"9a1caf586e868bf47784176a62bf71d4c469ca24734365629d3198ebc80858d7","impliedFormat":1},{"version":"35a443f013255b33d6b5004d6d7e500548536697d3b6ba1937fd788ca4d5d37b","impliedFormat":1},{"version":"b591c69f31d30e46bc0a2b383b713f4b10e63e833ec42ee352531bbad2aadfaa","impliedFormat":1},{"version":"31e686a96831365667cbd0d56e771b19707bad21247d6759f931e43e8d2c797d","impliedFormat":1},{"version":"dfc3b8616bece248bf6cd991987f723f19c0b9484416835a67a8c5055c5960e0","impliedFormat":1},{"version":"03b64b13ecf5eb4e015a48a01bc1e70858565ec105a5639cfb2a9b63db59b8b1","impliedFormat":1},{"version":"c56cc01d91799d39a8c2d61422f4d5df44fab62c584d86c8a4469a5c0675f7c6","impliedFormat":1},{"version":"5205951312e055bc551ed816cbb07e869793e97498ef0f2277f83f1b13e50e03","impliedFormat":1},{"version":"50b1aeef3e7863719038560b323119f9a21f5bd075bb97efe03ee7dec23e9f1b","impliedFormat":1},{"version":"0cc13970d688626da6dce92ae5d32edd7f9eabb926bb336668e5095031833b7c","impliedFormat":1},{"version":"3be9c1368c34165ba541027585f438ed3e12ddc51cdc49af018e4646d175e6a1","impliedFormat":1},{"version":"7d617141eb3f89973b1e58202cdc4ba746ea086ef35cdedf78fb04a8bb9b8236","impliedFormat":1},{"version":"ea6d9d94247fd6d72d146467070fe7fc45e4af6e0f6e046b54438fd20d3bd6a2","impliedFormat":1},{"version":"d584e4046091cdef5df0cb4de600d46ba83ff3a683c64c4d30f5c5a91edc6c6c","impliedFormat":1},{"version":"ce68902c1612e8662a8edde462dff6ee32877ed035f89c2d5e79f8072f96aed0","impliedFormat":1},{"version":"d48ac7569126b1bc3cd899c3930ef9cf22a72d51cf45b60fc129380ae840c2f2","impliedFormat":1},{"version":"e4f0d7556fda4b2288e19465aa787a57174b93659542e3516fd355d965259712","impliedFormat":1},{"version":"756b471ce6ec8250f0682e4ad9e79c2fddbe40618ba42e84931dbb65d7ac9ab0","impliedFormat":1},{"version":"ce9635a3551490c9acdbcb9a0491991c3d9cd472e04d4847c94099252def0c94","impliedFormat":1},{"version":"b70ee10430cc9081d60eb2dc3bee49c1db48619d1269680e05843fdaba4b2f7a","impliedFormat":1},{"version":"9b78500996870179ab99cbbc02dffbb35e973d90ab22c1fb343ed8958598a36c","impliedFormat":1},{"version":"c6ee8f32bb16015c07b17b397e1054d6906bc916ab6f9cd53a1f9026b7080dbf","impliedFormat":1},{"version":"67e913fa79af629ee2805237c335ea5768ea09b0b541403e8a7eaef253e014d9","impliedFormat":1},{"version":"0b8a688a89097bd4487a78c33e45ca2776f5aedaa855a5ba9bc234612303c40e","impliedFormat":1},{"version":"188e5381ed8c466256937791eab2cc2b08ddcc5e4aaf6b4b43b8786ed1ab5edd","impliedFormat":1},{"version":"8559f8d381f1e801133c61d329df80f7fdab1cbad5c69ebe448b6d3c104a65bd","impliedFormat":1},{"version":"00a271352b854c5d07123587d0bb1e18b54bf2b45918ab0e777d95167fd0cb0b","impliedFormat":1},{"version":"10c4be0feeac95619c52d82e31a24f102b593b4a9eba92088c6d40606f95b85d","impliedFormat":1},{"version":"e1385f59b1421fceba87398c3eb16064544a0ce7a01b3a3f21fa06601dc415dc","impliedFormat":1},{"version":"bacf2c0f8cbfc5537b3c64fc79d3636a228ccbb00d769fb1426b542efe273585","impliedFormat":1},{"version":"3103c479ff634c3fbd7f97a1ccbfb645a82742838cb949fdbcf30dd941aa7c85","impliedFormat":1},{"version":"4b37b3fab0318aaa1d73a6fde1e3d886398345cff4604fe3c49e19e7edd8a50d","impliedFormat":1},{"version":"bf429e19e155685bda115cc7ea394868f02dec99ee51cfad8340521a37a5867a","impliedFormat":1},{"version":"72116c0e0042fd5aa020c2c121e6decfa5414cf35d979f7db939f15bb50d2943","impliedFormat":1},{"version":"20510f581b0ee148a80809122f9bcaa38e4691d3183a4ed585d6d02ffe95a606","impliedFormat":1},{"version":"71f4b56ed57bbdea38e1b12ad6455653a1fbf5b1f1f961d75d182bff544a9723","impliedFormat":1},{"version":"b3e1c5db2737b0b8357981082b7c72fe340edf147b68f949413fee503a5e2408","impliedFormat":1},{"version":"396e64a647f4442a770b08ed23df3c559a3fa7e35ffe2ae0bbb1f000791bda51","impliedFormat":1},{"version":"698551f7709eb21c3ddec78b4b7592531c3e72e22e0312a128c40bb68692a03f","impliedFormat":1},{"version":"662b28f09a4f60e802023b3a00bdd52d09571bc90bf2e5bfbdbc04564731a25e","impliedFormat":1},{"version":"e6b8fb8773eda2c898e414658884c25ff9807d2fce8f3bdb637ab09415c08c3c","impliedFormat":1},{"version":"528288d7682e2383242090f09afe55f1a558e2798ceb34dc92ae8d6381e3504a","impliedFormat":1},{"version":"afe38dfb2e6612d0ef3c8bb931424b3a7963d366592a25a11aaab160bc88490e","signature":"2d776501f2a2b1476841cae6d404f84ff252dc23c7f05576bb85ca6f6886b62d"},{"version":"61e3d1d5b68c19f6c72b7cb260d9a80bda1019264c4f2116f932d58e833b5974","signature":"60002c487a35f56f10374f256c0dead5ade101bcf316b25ad10632d1f6085ff2"},{"version":"683be6dd9193ca614df5fa26b099128396f79f563fd0862163cb1199a9355417","signature":"be643f13920ad2a0656600a5427c020eb181420745c2ec2fcfa8781cedc6e023"},{"version":"87921aae4f4dcd04df1c0847cdd122b7ad5ad601b2f128859f73c3e2ec3bb508","signature":"d1a7e02b7d88e88ab0f962179017887d9e1025a96ea91b19c3f3f2ea233a570c"},{"version":"4da1068f7cdb75179c7e28aaa9ae135f3b1eee9d7464c4aa3d031acf2f0447d2","signature":"0faf65f747c4aa402c5617b83bbb07b4bb624ea4d43fae72e3b8db53f25455af"},{"version":"c96a31670ecd37c84a868810ec5527ec80a9c25380cfa427d661c75044478280","signature":"d6293f8e6015f12244efcf5905b8589c8c2fcff290254cab426f605eb2ddf252"},{"version":"c4a69b7535f327535e41c309f9c4a197afe30be9c8099ca911bc48c367254926","signature":"c10e3955b7781f0d1daf6c347c8328184463f5743680a9f5a8f0e5e037f3f408"},{"version":"f8bc975826b9e10e386beee456a3dbd6b0d919f0fdd5a312ffd59a41b66ebbe9","signature":"4cc978dc6f42a6b615c0e97eeebedc2897b740578d15e1953891d8a056bff611"},{"version":"fe3174926fe6328920581978a088a1ddd61494d3d115c67ef77f006169704790","signature":"3dd7fa809ceb89d471e9198186c68302ae3397ba52026ecbebb03ce3dd52be81"},{"version":"b7bcb8665e825491e1b8298d8c738285e377f398a2529b1167efeb8050c2e112","signature":"cd81a0cf3331f86d961dfb92f27c12ce1ed4ee13ed910b7ab60e1a463732aef9"},{"version":"1e5d009cffe090a90af6f78b74b2fa95aa24941b9dcfedf58e766dc24098fa3b","signature":"9e2b7312da57bda4fa0c7f709fd6b9d10eef7721752fece75c5ddb671b5e864a"},{"version":"a827c04987a53acd81b692bda49ac2a14b56835aa9b6a1ebafe0a5a88f19b7ab","signature":"291a05e5bfba762bcf3172303e8b08ec91fe88ab1b3b761958ffbbd6b39ecb3b"},{"version":"cbd1c32a18cf93864267d5f20db51006e7ed660bf0b5e5b78679d3ff8e0ede04","signature":"4ccee85d1d11d99d62f689eec188370152dd554bc68997046809afedb609f328"},{"version":"1c2250ee80be8a065f292be6233626563f18d90a8022ac0447349eb30957d8fa","signature":"7837dd9c018c571283ac6e26b11fd830ca92edacdfde40f0dbf8ad4e9643b736"},{"version":"8a3ae4d577e7e92f29181a3980c79bd278c92cc1edfb41181a90460233f428ba","signature":"1227161785191518f559afec099a92220304fe1e9c405211be5e685ad9289a51"},{"version":"aa7afba26d4c638807643d427a6b1b2a0899c5ae6ace7d54709086188e41748d","signature":"c4732ad268fb4f54c9d5a0ec75f9dc8a65a04aba1e0a06f5e30cf8ac10fe4982"},{"version":"932ec5cadd5bdf13c4a1a1fa6abec792e95f27282c513b38f5fe02ac0c381f43","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"2552a31fad45a9ed1bde87e51b038dc0e786cd364b597162263abbf57018949b",{"version":"c16e0ebf15b6f8b055012bf4c5cad3e8d4edae09638f7f9702eb436c2e4f193b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"95b40b68ed59aa7c82c3ebdaed873051e11d14fe6c95e938e46a8171de986a53","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"3f61dd0abfe1cd3d6c343e7f1e1f385a337d4b24e15e86ea8c372b74f64a09e4","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"23061791a175bb03951af6183f21dc51d6857e4a298c750d82fdbb88a98a970e","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"32d4c852566094ec5e5228600d6b7305af126519ec53a3a3bcc1a4d7aeada5d4","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"430e7c9820732772c9852f0b6c152554e1978cd450f338f983bad8c624472229","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"3e177533c35e217dd8daf481516b2c83ac91c22d4f71b57646772011da8c6fc2","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"8c8688d34a3248cf3200b12c0ce4b9ce52b7b41e82e60bcbdd27e7e4c5c0045c","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"669f3a478c78a8d297c2cd68f877da0ffd3618041bc393155e46c4105dd6658c","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"1f2a7b89594570d58e68428dd7bb2b0610bcb24315b759ed54fd998acd830433","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"cb4e10dca24645f1b30b967860dec21c5505459ba89a4ca6f3a3c3c41993abbb","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"fea6553ab05ca916e993023c7a65414d57fe6378e7531e9c5db86988cf57176c","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"25502916657b647990163167d6125fceba57acb21cda652e686c7a1e5c02f076","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"575bdde143bf2b6d78e7e374bc67de44521252fb30b8bbafa75f9718169d00c9","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"235ff6d01a3a8d2af90e478e0e5ef4c039e8778be06eed5c53fb911dc6d73f28","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"5a9c68e18d49f1464179db057d72f42a627c0ab05ca45fb12ee44e19d1f1be99","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"fbafb6a470c6946ec893c2d2593fd4ea21ee57802beebeb7be6461ccfdcc5b70","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"67e7dcd7fa2cf9211cc0425cd38064f5442aabeac2ef0aa3283bd510e780c55a","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"449b6ae802c4f68611b14d01bfa4eae0ef43ae857b54ae0c98d24fdfb8642001","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"82a90bad3a8a5d3ee824fe0acbfa5c94fd279fa2415373cbac47bd4e73009d1b","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"ee37673e7eb5879b0facf1151e0ead7e12cbb458aaf03c71519f0dcdfdf6a291","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"1c35d61f488978ecd981006ff90573378337b98bb02cef25cf8438d57529468c","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"45f38748ea036810e33852cb7ca4c2a855efd3f085047fff5c49f94da81b24d9","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"fc5f70133e7e34c7afbe0b5295f7e1aef0e91af423d3ad2c448967eb157112a2","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"3683134e49e553601dff0232b3dda6423c53577c94caebbb6dfa5498cb24103d","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"c8b5e334d4cee35a44cca7aa218f53f0e8f0ff54dc60d9418ecf77ae17a26ebb","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"3023bb938c83ec38067ef184c5938fb9166eead16161fc443fe108ffec4cf8f1","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"c828b323b67d8bb3a0469115556c41d038566a111c086d75099c1c81d9897a7e","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"1d6b45cd4639e21989a35f20057d8a88e1ed44554ad5607b6f95c5b35d9cd765","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"941c9f83847d2eeb27f141a0020f5f8b292f4bda72c1403faf03630e82f486ad","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"2e23be37a190953f60cdc4a62f89e5dfe4d6c64f38c71564bc0fb63c7810c9a1","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1}],"root":[60,479,482,483,492,518,580,[583,597],[897,909],[935,938],960,[970,973],[998,1053],2014,2015,[2020,2025],[2057,2106],[2109,2119],[2125,2128],[2130,2134],[2136,2144],[2319,2366]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[2339,1],[2340,2],[2344,3],[2343,4],[2345,5],[2341,6],[2342,7],[2346,8],[2347,9],[2348,10],[2349,11],[2351,12],[2352,13],[2353,14],[2350,15],[2354,16],[2357,17],[2358,18],[2356,19],[2359,20],[2360,21],[2355,22],[2361,23],[2362,24],[2364,25],[2363,26],[2366,27],[2365,28],[2338,29],[2336,30],[60,31],[2337,32],[482,33],[586,34],[587,34],[588,34],[589,34],[590,35],[591,34],[592,36],[593,34],[594,34],[595,34],[596,34],[585,37],[597,34],[897,38],[898,39],[899,34],[900,34],[583,40],[584,40],[901,35],[902,35],[903,34],[904,34],[905,35],[906,35],[907,35],[908,34],[909,34],[479,41],[483,42],[934,43],[921,44],[919,45],[917,46],[916,31],[920,47],[914,47],[918,48],[922,49],[924,50],[912,31],[928,51],[931,52],[933,53],[930,54],[932,55],[929,31],[923,43],[925,56],[915,31],[983,57],[979,58],[980,59],[981,60],[982,61],[2233,62],[2235,63],[2234,31],[2236,64],[2237,65],[2232,66],[2267,67],[2268,68],[2266,69],[2270,70],[2273,71],[2269,72],[2271,73],[2272,73],[2274,74],[2275,75],[2280,76],[2277,77],[2276,78],[2279,79],[2278,80],[2284,81],[2283,82],[2281,83],[2282,72],[2285,84],[2286,85],[2290,86],[2288,87],[2287,88],[2289,89],[2225,90],[2207,72],[2208,91],[2210,92],[2224,91],[2211,93],[2213,72],[2212,31],[2214,72],[2215,94],[2222,72],[2216,31],[2217,31],[2218,31],[2219,72],[2220,95],[2221,96],[2209,74],[2223,97],[2291,98],[2264,99],[2265,100],[2263,101],[2201,102],[2199,103],[2200,104],[2198,105],[2197,106],[2194,107],[2193,108],[2187,106],[2189,109],[2188,110],[2196,111],[2195,108],[2190,112],[2191,113],[2192,113],[2228,93],[2226,93],[2229,114],[2231,115],[2230,116],[2227,117],[2178,95],[2179,31],[2202,118],[2206,119],[2203,31],[2204,120],[2205,31],[2181,121],[2182,121],[2185,122],[2186,123],[2184,121],[2183,122],[2180,91],[2238,72],[2239,72],[2240,72],[2241,124],[2262,125],[2250,126],[2249,31],[2242,127],[2245,72],[2243,72],[2246,72],[2248,128],[2247,129],[2244,72],[2258,31],[2251,31],[2252,31],[2253,72],[2254,72],[2255,31],[2256,72],[2257,31],[2261,130],[2259,31],[2260,72],[2298,131],[2297,132],[2301,133],[2302,134],[2299,135],[2300,136],[2318,137],[2310,138],[2309,139],[2308,97],[2303,140],[2307,141],[2304,140],[2305,140],[2306,140],[2293,97],[2292,31],[2296,142],[2294,135],[2295,143],[2311,31],[2312,31],[2313,97],[2317,144],[2314,31],[2315,97],[2316,140],[2155,31],[2157,145],[2158,146],[2156,31],[2159,31],[2160,31],[2163,147],[2161,31],[2162,31],[2164,31],[2165,31],[2166,31],[2167,148],[2168,31],[2169,149],[2154,150],[2145,31],[2146,31],[2148,31],[2147,78],[2149,78],[2150,31],[2151,78],[2152,31],[2153,31],[2177,151],[2175,152],[2170,31],[2171,31],[2172,31],[2173,31],[2174,31],[2176,31],[226,31],[490,153],[532,31],[2027,154],[2029,155],[2036,156],[2030,157],[2031,31],[2032,154],[2033,157],[2028,31],[2035,157],[2026,31],[2034,31],[2049,158],[2056,159],[2046,160],[2055,78],[2053,160],[2047,158],[2048,161],[2039,160],[2037,162],[2054,163],[2050,162],[2052,160],[2051,162],[2045,162],[2044,160],[2038,160],[2040,164],[2042,160],[2043,160],[2041,160],[2135,165],[2108,166],[2107,167],[2367,31],[535,168],[533,31],[613,169],[614,170],[540,31],[123,171],[124,171],[125,172],[77,173],[126,174],[127,175],[128,176],[72,31],[75,177],[73,31],[74,31],[129,178],[130,179],[131,180],[132,181],[133,182],[134,183],[135,183],[136,184],[137,185],[138,186],[139,187],[78,31],[76,31],[140,188],[141,189],[142,190],[176,191],[143,192],[144,31],[145,193],[146,194],[147,195],[148,196],[149,197],[150,198],[151,199],[152,200],[153,201],[154,201],[155,202],[156,31],[157,203],[158,204],[160,205],[159,206],[161,207],[162,208],[163,209],[164,210],[165,211],[166,212],[167,213],[168,214],[169,215],[170,216],[171,217],[172,218],[173,219],[79,31],[80,31],[81,31],[120,220],[121,31],[122,31],[174,221],[175,222],[180,223],[336,78],[181,224],[179,225],[338,226],[337,227],[177,228],[334,31],[178,229],[61,31],[63,230],[333,78],[244,78],[2368,231],[612,232],[536,233],[562,234],[563,235],[561,31],[519,31],[529,236],[525,237],[528,238],[571,239],[552,31],[554,240],[574,240],[553,241],[530,31],[527,242],[520,243],[567,244],[522,245],[524,246],[566,31],[564,245],[523,31],[526,243],[521,31],[534,31],[911,247],[910,31],[82,31],[62,31],[582,248],[480,249],[481,250],[729,251],[660,252],[885,253],[664,254],[654,31],[730,255],[707,256],[732,257],[656,255],[655,31],[727,258],[665,259],[690,260],[697,261],[666,261],[667,261],[668,262],[696,263],[669,264],[684,261],[670,265],[671,265],[672,261],[673,261],[674,262],[675,261],[698,266],[676,261],[677,261],[678,267],[679,261],[680,261],[681,267],[682,262],[683,261],[685,268],[686,267],[687,261],[688,262],[689,261],[722,269],[718,270],[695,271],[734,272],[691,273],[692,271],[719,274],[710,275],[720,276],[717,277],[715,278],[721,279],[714,280],[726,281],[716,282],[728,283],[723,284],[712,285],[694,286],[693,271],[733,287],[713,288],[724,31],[725,289],[657,290],[788,291],[735,292],[773,293],[886,294],[739,295],[740,295],[741,296],[742,295],[738,297],[743,298],[744,299],[745,300],[746,295],[794,301],[887,302],[747,295],[749,303],[750,294],[752,304],[753,305],[754,305],[755,296],[756,295],[757,295],[758,305],[759,296],[760,296],[761,305],[762,295],[763,294],[764,295],[765,296],[766,306],[751,307],[767,295],[768,296],[769,295],[770,295],[771,295],[772,295],[892,308],[888,309],[736,310],[799,311],[737,312],[775,313],[776,310],[889,314],[789,315],[793,316],[791,317],[784,318],[890,319],[891,320],[792,321],[783,322],[787,323],[790,324],[774,255],[795,325],[748,255],[782,326],[780,327],[778,328],[777,310],[796,329],[797,31],[798,330],[779,288],[785,31],[786,331],[894,332],[895,333],[896,334],[893,335],[706,336],[662,337],[709,255],[708,338],[711,339],[781,340],[847,341],[825,342],[831,343],[800,343],[801,343],[802,344],[830,345],[803,346],[818,343],[804,347],[805,347],[806,343],[807,343],[808,348],[809,343],[832,349],[810,343],[811,343],[812,350],[813,343],[814,343],[815,350],[816,344],[817,343],[819,351],[820,350],[821,343],[822,344],[823,343],[824,343],[844,352],[836,353],[850,354],[826,355],[827,356],[839,357],[833,358],[843,359],[835,360],[842,361],[841,362],[846,363],[834,364],[848,365],[845,366],[840,367],[829,368],[828,356],[849,369],[838,370],[837,371],[699,372],[701,373],[700,372],[702,372],[704,374],[703,375],[705,376],[663,377],[883,378],[851,379],[876,380],[880,381],[879,382],[852,383],[881,384],[872,385],[873,386],[874,386],[875,387],[860,388],[868,389],[878,390],[884,391],[853,392],[854,390],[856,393],[863,394],[867,395],[865,396],[869,397],[857,398],[861,399],[866,400],[882,401],[864,402],[862,403],[858,404],[877,405],[855,406],[871,407],[859,288],[870,408],[661,288],[658,409],[659,410],[731,31],[966,411],[968,412],[967,413],[965,414],[964,31],[2129,78],[977,415],[959,416],[2123,417],[975,418],[974,419],[952,420],[976,31],[954,421],[958,422],[943,423],[942,31],[953,424],[940,424],[944,425],[955,426],[956,427],[939,31],[945,428],[948,429],[951,430],[947,431],[949,432],[946,31],[950,420],[957,433],[941,31],[978,434],[2124,435],[70,436],[425,437],[430,30],[432,438],[202,439],[230,440],[408,441],[225,442],[213,31],[194,31],[200,31],[398,443],[261,444],[201,31],[367,445],[235,446],[236,447],[332,448],[395,449],[350,450],[402,451],[403,452],[401,453],[400,31],[399,454],[232,455],[203,456],[282,31],[283,457],[198,31],[214,458],[204,459],[266,458],[263,458],[187,458],[228,460],[227,31],[407,461],[417,31],[193,31],[308,462],[309,463],[303,78],[453,31],[311,31],[312,161],[304,464],[459,465],[457,466],[452,31],[394,467],[393,31],[451,468],[305,78],[346,469],[344,470],[454,31],[458,31],[456,471],[455,31],[345,472],[446,473],[449,474],[273,475],[272,476],[271,477],[462,78],[270,478],[255,31],[465,31],[2121,479],[2120,31],[468,31],[467,78],[469,480],[183,31],[404,481],[405,482],[406,483],[216,31],[192,484],[182,31],[324,78],[185,485],[323,486],[322,487],[313,31],[314,31],[321,31],[316,31],[319,488],[315,31],[317,489],[320,490],[318,489],[199,31],[190,31],[191,458],[245,491],[246,492],[243,493],[241,494],[242,495],[238,31],[330,161],[352,161],[424,496],[433,497],[437,498],[411,499],[410,31],[258,31],[470,500],[420,501],[306,502],[307,503],[298,504],[288,31],[329,505],[289,506],[331,507],[326,508],[325,31],[327,31],[343,509],[412,510],[413,511],[291,512],[295,513],[286,514],[390,515],[419,516],[265,517],[368,518],[188,519],[418,520],[184,442],[239,31],[247,521],[379,522],[237,31],[378,523],[71,31],[373,524],[215,31],[284,525],[369,31],[189,31],[248,31],[377,526],[197,31],[253,527],[294,528],[409,529],[293,31],[376,31],[240,31],[381,530],[382,531],[195,31],[384,532],[386,533],[385,534],[218,31],[375,519],[388,535],[374,536],[380,537],[206,31],[209,31],[207,31],[211,31],[208,31],[210,31],[212,538],[205,31],[360,539],[359,31],[365,540],[361,541],[364,542],[363,542],[366,540],[362,541],[252,543],[353,544],[416,545],[472,31],[441,546],[443,547],[290,31],[442,548],[414,510],[471,549],[310,510],[196,31],[292,550],[249,551],[250,552],[251,553],[281,554],[389,554],[267,554],[354,555],[268,555],[234,556],[233,31],[358,557],[357,558],[356,559],[355,560],[415,561],[302,562],[340,563],[301,564],[335,565],[339,566],[397,567],[396,568],[392,569],[349,570],[351,571],[348,572],[387,573],[342,31],[429,31],[341,574],[391,31],[254,575],[287,481],[285,576],[256,577],[259,578],[466,31],[257,579],[260,579],[427,31],[426,31],[428,31],[464,31],[262,580],[300,78],[69,31],[347,581],[231,31],[220,582],[296,31],[435,78],[445,583],[280,78],[439,161],[279,584],[422,585],[278,583],[186,31],[447,586],[276,78],[277,78],[269,31],[219,31],[275,587],[274,588],[217,589],[297,200],[264,200],[383,31],[371,590],[370,31],[431,31],[328,591],[299,78],[423,592],[64,78],[67,593],[68,594],[65,78],[66,31],[229,595],[224,596],[223,31],[222,597],[221,31],[421,598],[434,599],[436,600],[438,601],[2122,602],[440,603],[444,604],[478,605],[448,605],[477,606],[450,607],[460,608],[461,609],[463,610],[473,611],[476,484],[475,31],[474,612],[491,31],[581,40],[913,31],[487,613],[484,31],[485,613],[486,614],[489,615],[488,616],[509,617],[507,618],[508,619],[496,620],[497,618],[504,621],[495,622],[500,623],[510,31],[501,624],[506,625],[512,626],[511,627],[494,628],[502,629],[503,630],[498,631],[505,617],[499,632],[653,633],[927,634],[926,635],[542,636],[541,637],[372,231],[493,31],[517,31],[515,638],[514,31],[513,31],[516,639],[601,31],[598,31],[599,31],[607,640],[600,31],[602,641],[603,633],[604,31],[605,31],[606,31],[609,642],[608,31],[622,643],[611,644],[623,31],[610,645],[617,646],[615,31],[619,647],[620,648],[621,31],[618,31],[624,649],[635,650],[632,31],[634,651],[633,652],[636,653],[637,654],[638,655],[639,656],[631,657],[652,658],[629,659],[640,660],[641,661],[630,662],[642,31],[616,663],[627,664],[643,31],[644,31],[626,31],[625,31],[647,665],[645,665],[648,665],[649,666],[646,666],[651,667],[628,668],[650,669],[572,31],[531,31],[58,31],[59,31],[10,31],[11,31],[13,31],[12,31],[2,31],[14,31],[15,31],[16,31],[17,31],[18,31],[19,31],[20,31],[21,31],[3,31],[22,31],[23,31],[4,31],[24,31],[28,31],[25,31],[26,31],[27,31],[29,31],[30,31],[31,31],[5,31],[32,31],[33,31],[34,31],[35,31],[6,31],[39,31],[36,31],[37,31],[38,31],[40,31],[7,31],[41,31],[46,31],[47,31],[42,31],[43,31],[44,31],[45,31],[8,31],[51,31],[48,31],[49,31],[50,31],[52,31],[9,31],[53,31],[54,31],[55,31],[57,31],[56,31],[1,31],[98,670],[108,671],[97,670],[118,672],[89,673],[88,674],[117,612],[111,675],[116,676],[91,677],[105,678],[90,679],[114,680],[86,681],[85,612],[115,682],[87,683],[92,684],[93,31],[96,684],[83,31],[119,685],[109,686],[100,687],[101,688],[103,689],[99,690],[102,691],[112,612],[94,692],[95,693],[104,694],[84,633],[107,686],[106,684],[110,31],[113,695],[579,696],[538,697],[551,698],[544,699],[545,31],[539,697],[537,31],[543,700],[549,31],[547,31],[548,31],[546,31],[550,701],[569,702],[578,703],[568,704],[573,705],[560,706],[557,707],[565,31],[558,237],[963,708],[961,709],[576,710],[575,711],[556,712],[962,713],[555,31],[559,714],[577,715],[969,716],[570,31],[997,717],[989,718],[996,719],[991,31],[992,31],[990,720],[993,721],[984,31],[985,31],[986,717],[988,722],[994,31],[995,723],[987,724],[2018,725],[2017,726],[2019,31],[2016,31],[492,727],[971,31],[972,31],[973,31],[970,728],[2127,729],[2128,730],[2329,731],[2142,732],[2331,733],[2130,734],[2131,735],[2332,736],[2334,737],[999,738],[1002,739],[1001,740],[1012,741],[1011,742],[1014,743],[1013,744],[1016,745],[1015,746],[1017,747],[1010,742],[1019,748],[1018,749],[1022,750],[1024,751],[1023,752],[1027,753],[1026,754],[1021,755],[1029,756],[1028,755],[1030,757],[1034,758],[1033,759],[1020,755],[1036,760],[1035,31],[1039,761],[1038,762],[1042,763],[1041,764],[1044,765],[1043,766],[1047,767],[1046,755],[1048,768],[1045,769],[1052,770],[1051,771],[1053,772],[1050,771],[1049,773],[2126,774],[2015,775],[2022,776],[2335,777],[2023,778],[2139,779],[2138,780],[2327,781],[2140,782],[2333,781],[2330,78],[2132,783],[2137,784],[2134,785],[2141,786],[2133,787],[2125,788],[2328,789],[2136,790],[2326,791],[2025,792],[2323,793],[2143,794],[2322,795],[2319,796],[2320,797],[2321,798],[2144,799],[2325,800],[2024,78],[2324,795],[2069,801],[2070,802],[2057,803],[2058,78],[2059,804],[2060,803],[2062,805],[2063,806],[2064,804],[2066,807],[2067,804],[2068,803],[938,808],[2084,809],[2085,810],[2086,811],[2087,811],[2088,812],[2089,813],[2090,814],[2091,815],[2092,816],[2093,817],[2094,818],[2095,819],[2096,820],[2097,821],[2098,822],[2099,823],[2100,824],[2101,825],[2102,826],[2103,827],[2104,828],[1009,773],[2105,829],[2106,830],[998,831],[1003,832],[1000,833],[937,834],[2072,835],[2071,31],[2074,836],[2075,837],[1004,595],[1025,837],[1031,838],[2076,837],[2065,795],[2109,839],[936,840],[935,841],[2014,795],[2077,842],[2021,842],[2078,843],[2079,837],[2080,837],[1032,844],[2073,31],[1037,31],[1006,845],[1040,595],[1005,31],[2081,31],[2082,837],[1007,846],[1008,847],[2083,31],[960,848],[2113,849],[2114,850],[2115,851],[2116,777],[2117,852],[2110,853],[2111,854],[2112,855],[2020,856],[2061,853],[2119,857],[2118,858],[518,859],[580,860],[1694,861],[1696,862],[1695,863],[1693,864],[1689,31],[1697,865],[1691,866],[1162,31],[1163,867],[1164,868],[1169,869],[1165,868],[1168,31],[1166,31],[1167,31],[1687,31],[1692,870],[1688,870],[1988,871],[1728,872],[1726,873],[1729,874],[1730,875],[1724,872],[1725,876],[1731,31],[1723,873],[1732,877],[1986,878],[1987,879],[1999,880],[1990,881],[1991,882],[1992,882],[1993,882],[1994,882],[1995,882],[1996,882],[1997,882],[1998,882],[1989,883],[2003,884],[2001,885],[2000,886],[2002,887],[1153,888],[1136,889],[1116,890],[1072,891],[1070,892],[1071,892],[1124,893],[1152,894],[1112,892],[1134,895],[1114,890],[1139,896],[1115,890],[1066,897],[1065,892],[1138,898],[1156,899],[1141,900],[1118,901],[1119,890],[1113,892],[1127,902],[1126,894],[1120,900],[1075,897],[1074,892],[1132,894],[1057,892],[1129,894],[1150,902],[1145,903],[1143,904],[1155,890],[1117,31],[1662,165],[1641,905],[1651,906],[1648,906],[1649,907],[1633,907],[1647,907],[1628,906],[1634,908],[1637,909],[1642,910],[1630,908],[1631,907],[1644,911],[1629,908],[1635,908],[1638,908],[1643,908],[1645,907],[1632,907],[1646,907],[1640,912],[1636,913],[1661,914],[1639,915],[1650,916],[1627,907],[1652,907],[1653,907],[1654,907],[1655,907],[1656,907],[1657,907],[1658,907],[1659,907],[1660,907],[2005,31],[2006,917],[1054,31],[1056,918],[1123,892],[1060,919],[1059,920],[1058,31],[1597,921],[1055,31],[1258,922],[1237,923],[1334,31],[1238,924],[1174,922],[1175,922],[1176,922],[1177,922],[1178,922],[1179,922],[1180,922],[1181,922],[1182,922],[1183,922],[1184,922],[1185,922],[1186,922],[1187,922],[1188,922],[1189,922],[1190,922],[1191,922],[1170,31],[1192,922],[1193,922],[1194,31],[1195,922],[1196,922],[1198,922],[1197,922],[1199,922],[1200,922],[1201,922],[1202,922],[1203,922],[1204,922],[1205,922],[1206,922],[1207,922],[1208,922],[1209,922],[1210,922],[1211,922],[1212,922],[1213,922],[1214,922],[1215,922],[1216,922],[1217,922],[1219,922],[1220,922],[1221,922],[1218,922],[1222,922],[1223,922],[1224,922],[1225,922],[1226,922],[1227,922],[1228,922],[1229,922],[1230,922],[1231,922],[1232,922],[1233,922],[1234,922],[1235,922],[1236,922],[1239,925],[1240,922],[1241,922],[1242,926],[1243,927],[1244,922],[1245,922],[1246,922],[1247,922],[1250,922],[1248,922],[1249,922],[1172,31],[1251,922],[1252,922],[1253,922],[1254,922],[1255,922],[1256,922],[1257,922],[1259,928],[1260,922],[1261,922],[1262,922],[1264,922],[1263,922],[1265,922],[1266,922],[1267,922],[1268,922],[1269,922],[1270,922],[1271,922],[1272,922],[1273,922],[1274,922],[1276,922],[1275,922],[1277,922],[1278,31],[1279,31],[1280,31],[1427,929],[1281,922],[1282,922],[1283,922],[1284,922],[1285,922],[1286,922],[1287,31],[1288,922],[1289,31],[1290,922],[1291,922],[1292,922],[1293,922],[1294,922],[1295,922],[1296,922],[1297,922],[1298,922],[1299,922],[1300,922],[1301,922],[1302,922],[1303,922],[1304,922],[1305,922],[1306,922],[1307,922],[1308,922],[1309,922],[1310,922],[1311,922],[1312,922],[1313,922],[1314,922],[1315,922],[1316,922],[1317,922],[1318,922],[1319,922],[1320,922],[1321,922],[1322,31],[1323,922],[1324,922],[1325,922],[1326,922],[1327,922],[1328,922],[1329,922],[1330,922],[1331,922],[1332,922],[1333,922],[1335,930],[1523,931],[1428,924],[1430,924],[1431,924],[1432,924],[1433,924],[1434,924],[1429,924],[1435,924],[1437,924],[1436,924],[1438,924],[1439,924],[1440,924],[1441,924],[1442,924],[1443,924],[1444,924],[1445,924],[1447,924],[1446,924],[1448,924],[1449,924],[1450,924],[1451,924],[1452,924],[1453,924],[1454,924],[1455,924],[1456,924],[1457,924],[1458,924],[1459,924],[1460,924],[1461,924],[1462,924],[1464,924],[1465,924],[1463,924],[1466,924],[1467,924],[1468,924],[1469,924],[1470,924],[1471,924],[1472,924],[1473,924],[1474,924],[1475,924],[1476,924],[1477,924],[1479,924],[1478,924],[1481,924],[1480,924],[1482,924],[1483,924],[1484,924],[1485,924],[1486,924],[1487,924],[1488,924],[1489,924],[1490,924],[1491,924],[1492,924],[1493,924],[1494,924],[1496,924],[1495,924],[1497,924],[1498,924],[1499,924],[1501,924],[1500,924],[1502,924],[1503,924],[1504,924],[1505,924],[1506,924],[1507,924],[1509,924],[1508,924],[1510,924],[1511,924],[1512,924],[1513,924],[1514,924],[1171,922],[1515,924],[1516,924],[1518,924],[1517,924],[1519,924],[1520,924],[1521,924],[1522,924],[1336,922],[1337,922],[1338,31],[1339,31],[1340,31],[1341,922],[1342,31],[1343,31],[1344,31],[1345,31],[1346,31],[1347,922],[1348,922],[1349,922],[1350,922],[1351,922],[1352,922],[1353,922],[1354,922],[1359,932],[1357,933],[1358,934],[1356,935],[1355,922],[1360,922],[1361,922],[1362,922],[1363,922],[1364,922],[1365,922],[1366,922],[1367,922],[1368,922],[1369,922],[1370,31],[1371,31],[1372,922],[1373,922],[1374,31],[1375,31],[1376,31],[1377,922],[1378,922],[1379,922],[1380,922],[1381,928],[1382,922],[1383,922],[1384,922],[1385,922],[1386,922],[1387,922],[1388,922],[1389,922],[1390,922],[1391,922],[1392,922],[1393,922],[1394,922],[1395,922],[1396,922],[1397,922],[1398,922],[1399,922],[1400,922],[1401,922],[1402,922],[1403,922],[1404,922],[1405,922],[1406,922],[1407,922],[1408,922],[1409,922],[1410,922],[1411,922],[1412,922],[1413,922],[1414,922],[1415,922],[1416,922],[1417,922],[1418,922],[1419,922],[1420,922],[1421,922],[1422,922],[1173,936],[1423,31],[1424,31],[1425,31],[1426,31],[1706,937],[1708,938],[1704,939],[1712,940],[1710,941],[1705,942],[1707,942],[1703,942],[1711,31],[1709,942],[1702,31],[1727,31],[1121,892],[1782,943],[1781,31],[1776,31],[1745,31],[1755,944],[1754,945],[1780,946],[1737,947],[1736,948],[1735,949],[1789,950],[1733,31],[1768,951],[1766,943],[1767,952],[1750,31],[1756,953],[1751,954],[1772,955],[1752,943],[1765,31],[1749,956],[1771,957],[1769,31],[1770,958],[1779,959],[1762,960],[1763,960],[1764,961],[1761,31],[1748,962],[1759,963],[1753,964],[1760,31],[1747,965],[1783,31],[1787,966],[1734,31],[1785,31],[1786,966],[1744,967],[1741,947],[1742,31],[1739,966],[1774,968],[1743,969],[1778,970],[1773,971],[1777,972],[1740,962],[1738,962],[1775,973],[1758,974],[1757,975],[1746,976],[1788,31],[1784,31],[1983,977],[1985,978],[1980,979],[1979,980],[1982,981],[1984,982],[1981,983],[1582,984],[1543,985],[1542,986],[1581,987],[1583,988],[1524,892],[1525,892],[1526,892],[1570,989],[1549,990],[1550,990],[1551,991],[1552,892],[1553,892],[1554,992],[1527,993],[1555,892],[1556,892],[1557,994],[1558,892],[1559,892],[1560,892],[1561,892],[1562,892],[1563,892],[1528,993],[1564,892],[1565,892],[1566,993],[1567,892],[1568,892],[1569,994],[1584,991],[1571,984],[1572,984],[1573,984],[1574,984],[1575,984],[1576,31],[1577,984],[1578,995],[1585,996],[1586,997],[1595,998],[1540,999],[1529,1000],[1530,984],[1531,1000],[1532,984],[1533,31],[1534,984],[1535,31],[1536,984],[1537,984],[1538,984],[1539,984],[1580,984],[1547,1001],[1548,1002],[1544,1003],[1545,1004],[1579,1005],[1541,892],[1546,1006],[1587,1000],[1588,1000],[1594,1007],[1589,984],[1590,1000],[1591,1000],[1592,984],[1593,1000],[1621,1008],[1624,1009],[1620,1008],[1622,1010],[1623,1008],[1619,1011],[1618,31],[1078,31],[1094,1012],[1095,1012],[1096,1012],[1110,1013],[1097,1014],[1098,1014],[1099,1015],[1091,1016],[1089,1017],[1080,31],[1084,1018],[1088,1019],[1086,1020],[1093,1021],[1081,1022],[1082,1023],[1083,1024],[1085,1025],[1087,1026],[1090,1027],[1092,1028],[1100,1014],[1101,1014],[1102,1014],[1103,1012],[1104,1014],[1105,1014],[1079,1014],[1106,31],[1108,1029],[1107,1014],[1109,1012],[1978,1030],[1951,31],[1929,1031],[1927,1031],[1977,1032],[1942,1033],[1941,1033],[1842,1034],[1793,1035],[1949,1034],[1950,1034],[1952,1036],[1953,1034],[1954,1037],[1853,1038],[1955,1034],[1926,1034],[1956,1034],[1957,1039],[1958,1034],[1959,1033],[1960,1040],[1961,1034],[1962,1034],[1963,1034],[1964,1034],[1965,1033],[1966,1034],[1967,1034],[1968,1034],[1969,1034],[1970,1041],[1971,1034],[1972,1034],[1973,1034],[1974,1034],[1975,1034],[1792,1032],[1795,1037],[1796,1037],[1797,1037],[1798,1037],[1799,1037],[1800,1037],[1801,1037],[1802,1034],[1804,1042],[1805,1037],[1803,1037],[1806,1037],[1807,1037],[1808,1037],[1809,1037],[1810,1037],[1811,1037],[1812,1034],[1813,1037],[1814,1037],[1815,1037],[1816,1037],[1817,1037],[1818,1034],[1819,1037],[1820,1037],[1821,1037],[1822,1037],[1823,1037],[1824,1037],[1825,1034],[1827,1043],[1826,1037],[1828,1037],[1829,1037],[1830,1037],[1831,1037],[1832,1041],[1833,1034],[1834,1034],[1848,1044],[1836,1045],[1837,1037],[1838,1037],[1839,1034],[1840,1037],[1841,1037],[1843,1046],[1844,1037],[1845,1037],[1846,1037],[1847,1037],[1849,1037],[1850,1037],[1851,1037],[1852,1037],[1854,1047],[1855,1037],[1856,1037],[1857,1037],[1858,1034],[1859,1037],[1860,1048],[1861,1048],[1862,1048],[1863,1034],[1864,1037],[1865,1037],[1866,1037],[1871,1037],[1867,1037],[1868,1034],[1869,1037],[1870,1034],[1872,1037],[1873,1037],[1874,1037],[1875,1037],[1876,1037],[1877,1037],[1878,1034],[1879,1037],[1880,1037],[1881,1037],[1882,1037],[1883,1037],[1884,1037],[1885,1037],[1886,1037],[1887,1037],[1888,1037],[1889,1037],[1890,1037],[1891,1037],[1892,1037],[1893,1037],[1894,1037],[1895,1049],[1896,1037],[1897,1037],[1898,1037],[1899,1037],[1900,1037],[1901,1037],[1902,1034],[1903,1034],[1904,1034],[1905,1034],[1906,1034],[1907,1037],[1908,1037],[1909,1037],[1910,1037],[1928,1050],[1976,1034],[1913,1051],[1912,1052],[1936,1053],[1935,1054],[1931,1055],[1930,1054],[1932,1056],[1921,1057],[1919,1058],[1934,1059],[1933,1056],[1920,31],[1922,1060],[1835,1061],[1791,1062],[1790,1037],[1925,31],[1917,1063],[1918,1064],[1915,31],[1916,1065],[1914,1037],[1923,1066],[1794,1067],[1943,31],[1944,31],[1937,31],[1940,1033],[1939,31],[1945,31],[1946,31],[1938,1068],[1947,31],[1948,31],[1911,1069],[1924,1070],[1690,31],[1061,31],[1720,1071],[1714,1072],[1718,1073],[1715,31],[2004,1074],[2008,1075],[1719,1071],[2007,1076],[1721,1071],[1722,1077],[1716,31],[1713,1078],[1614,1079],[1672,1080],[1671,31],[1670,1081],[1668,1082],[1699,1079],[1700,1083],[1602,1084],[1606,1085],[1675,1086],[1674,1087],[1673,1088],[1603,1079],[1677,1089],[1625,1090],[1626,1091],[1664,1092],[1666,1093],[1665,1094],[1667,1095],[1663,1096],[1605,1097],[1607,1079],[1669,1089],[1686,1098],[1701,1099],[1610,1082],[1600,1100],[1608,1082],[1604,1101],[1612,1079],[1676,1102],[1685,1103],[1681,1104],[1682,1105],[1683,1106],[1684,1107],[1680,1108],[1679,1109],[1678,1110],[1601,1111],[1611,1112],[1698,1113],[1616,1114],[1615,1100],[1609,1115],[1617,1116],[1613,1117],[1154,1118],[1137,1119],[1149,1120],[1073,1121],[1069,1120],[1158,1122],[1063,1123],[1596,1124],[1068,1079],[1125,1125],[1598,1126],[1135,1127],[1140,1128],[1111,1129],[1599,1130],[1064,1079],[1067,1131],[1157,1132],[1159,1100],[1142,1133],[1128,1134],[1122,1135],[1076,1136],[1160,1127],[1077,1091],[1133,1137],[1130,1138],[1161,1079],[1151,1139],[1131,1079],[1146,1140],[1148,1141],[1144,1142],[2011,1143],[1147,1144],[1717,892],[2010,1145],[2009,892],[2013,1146],[1062,1147],[2012,1091],[2369,31]],"affectedFilesPendingEmit":[2339,2340,2344,2343,2345,2341,2342,2346,2347,2348,2349,2351,2352,2353,2350,2354,2357,2358,2356,2359,2360,2355,2361,2362,2364,2363,2366,2365,2338,2337,482,586,587,588,589,590,591,592,593,594,595,596,585,597,897,898,899,900,583,584,901,902,903,904,905,906,907,908,909,483,492,971,972,973,970,2127,2128,2329,2142,2331,2130,2131,2332,2334,999,1002,1001,1012,1011,1014,1013,1016,1015,1017,1010,1019,1018,1022,1024,1023,1027,1026,1021,1029,1028,1030,1034,1033,1020,1036,1035,1039,1038,1042,1041,1044,1043,1047,1046,1048,1045,1052,1051,1053,1050,1049,2126,2015,2022,2335,2023,2139,2138,2327,2140,2333,2330,2132,2137,2134,2141,2133,2125,2328,2136,2326,2025,2323,2143,2322,2319,2320,2321,2144,2325,2024,2324,2069,2070,2057,2058,2059,2060,2062,2063,2064,2066,2067,2068,938,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,1009,2105,2106,998,1003,1000,937,2072,2071,2074,2075,1004,1025,1031,2076,2065,2109,936,935,2014,2077,2021,2078,2079,2080,1032,2073,1037,1006,1040,1005,2081,2082,1007,1008,2083,960,2113,2114,2115,2116,2117,2110,2111,2112,2020,2061,2119,518,580],"version":"5.9.3"} \ No newline at end of file +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./.next/types/routes.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/build/webpack/plugins/app-build-manifest-plugin.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/prefetch-rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/shared/lib/runtime-config.external.d.ts","./node_modules/next/config.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/root-params.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/drizzle-kit/index-baurj6ib.d.mts","./node_modules/drizzle-kit/index.d.mts","./drizzle.config.ts","./next.config.ts","./node_modules/playwright-core/types/protocol.d.ts","./node_modules/playwright-core/types/structs.d.ts","./node_modules/playwright-core/types/types.d.ts","./node_modules/playwright-core/index.d.ts","./node_modules/playwright/types/test.d.ts","./node_modules/playwright/test.d.ts","./node_modules/@playwright/test/index.d.ts","./node_modules/nextcov/dist/index.d.ts","./node_modules/dotenv/lib/main.d.ts","./playwright.config.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/tailwindcss/types/generated/corepluginlist.d.ts","./node_modules/tailwindcss/types/generated/colors.d.ts","./node_modules/tailwindcss/types/config.d.ts","./node_modules/tailwindcss/types/index.d.ts","./node_modules/tailwindcss-animate/index.d.ts","./tailwind.config.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/display.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/@vitest/utils/dist/timers.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/runner/dist/tasks.d-c7uxawj9.d.ts","./node_modules/@vitest/utils/dist/types.d-bcelap-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/runner/dist/types.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/tinyrainbow/dist/index.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/vite/types/hmrpayload.d.ts","./node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","./node_modules/vite/types/customevent.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/rollup/dist/rollup.d.ts","./node_modules/rollup/dist/parseast.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/vite/node_modules/esbuild/lib/main.d.ts","./node_modules/vite/types/internal/terseroptions.d.ts","./node_modules/vite/types/internal/csspreprocessoroptions.d.ts","./node_modules/vite/types/internal/lightningcssoptions.d.ts","./node_modules/vite/types/importglob.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-dhdq1csl.d.ts","./node_modules/@vitest/snapshot/dist/rawsnapshot.d-lfsmjfud.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/vitest/dist/chunks/traces.d.402v_yfi.d.ts","./node_modules/vitest/dist/chunks/rpc.d.rh3apgef.d.ts","./node_modules/vitest/dist/chunks/config.d.cy95hicx.d.ts","./node_modules/vitest/dist/chunks/environment.d.crsxczp1.d.ts","./node_modules/vitest/dist/chunks/worker.d.dyxm8del.d.ts","./node_modules/vitest/dist/chunks/browser.d.chkacdzh.d.ts","./node_modules/@vitest/mocker/dist/types.d-b8cckmht.d.ts","./node_modules/@vitest/mocker/dist/index.d-c-slyzi-.d.ts","./node_modules/@vitest/mocker/dist/index.d.ts","./node_modules/@vitest/utils/dist/source-map.d.ts","./node_modules/vitest/dist/chunks/coverage.d.bztk59wp.d.ts","./node_modules/@vitest/utils/dist/serialize.d.ts","./node_modules/@vitest/utils/dist/error.d.ts","./node_modules/vitest/dist/browser.d.ts","./node_modules/vitest/browser/context.d.ts","./node_modules/vitest/optional-types.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.daahlpsq.d.ts","./node_modules/@vitest/snapshot/dist/manager.d.ts","./node_modules/vitest/dist/chunks/reporters.d.cwxni2jg.d.ts","./node_modules/vitest/dist/chunks/plugin.d.ctqpeehp.d.ts","./node_modules/vitest/dist/config.d.ts","./node_modules/vitest/config.d.ts","./node_modules/vite-tsconfig-paths/dist/index.d.ts","./vitest.config.ts","./node_modules/nextcov/dist/playwright/index.d.ts","./e2e/pages/auth.ts","./e2e/pages/sidebar.ts","./e2e/fixtures.ts","./e2e/api-docs.spec.ts","./e2e/api-keys.spec.ts","./e2e/auth-states.spec.ts","./e2e/auth.spec.ts","./e2e/auto-refresh.spec.ts","./e2e/charts.spec.ts","./e2e/code-completion.spec.ts","./e2e/connection-advanced.spec.ts","./e2e/connections.spec.ts","./e2e/dashboard-metadata.spec.ts","./e2e/dashboard-portability.spec.ts","./e2e/dashboard-states.spec.ts","./e2e/dashboard-visibility.spec.ts","./e2e/dashboards.spec.ts","./e2e/design-system.spec.ts","./e2e/empty-states.spec.ts","./e2e/form-widget.spec.ts","./node_modules/testcontainers/build/common/file-lock.d.ts","./node_modules/testcontainers/build/common/hash.d.ts","./node_modules/testcontainers/build/common/logger.d.ts","./node_modules/testcontainers/build/common/clock.d.ts","./node_modules/testcontainers/build/common/retry.d.ts","./node_modules/testcontainers/build/common/streams.d.ts","./node_modules/testcontainers/build/common/time.d.ts","./node_modules/testcontainers/build/common/type-guards.d.ts","./node_modules/testcontainers/build/common/uuid.d.ts","./node_modules/testcontainers/build/common/index.d.ts","./node_modules/testcontainers/build/container-runtime/auth/types.d.ts","./node_modules/testcontainers/build/container-runtime/auth/get-auth-config.d.ts","./node_modules/testcontainers/build/container-runtime/clients/compose/types.d.ts","./node_modules/testcontainers/build/container-runtime/clients/compose/compose-client.d.ts","./node_modules/@types/ssh2/index.d.ts","./node_modules/@types/docker-modem/index.d.ts","./node_modules/@types/dockerode/index.d.ts","./node_modules/testcontainers/build/container-runtime/clients/container/types.d.ts","./node_modules/testcontainers/build/types.d.ts","./node_modules/testcontainers/build/container-runtime/clients/container/container-client.d.ts","./node_modules/testcontainers/build/container-runtime/image-name.d.ts","./node_modules/testcontainers/build/container-runtime/clients/image/image-client.d.ts","./node_modules/testcontainers/build/container-runtime/clients/network/network-client.d.ts","./node_modules/testcontainers/build/container-runtime/clients/types.d.ts","./node_modules/testcontainers/build/container-runtime/clients/client.d.ts","./node_modules/testcontainers/build/container-runtime/clients/compose/parse-compose-container-name.d.ts","./node_modules/testcontainers/build/container-runtime/index.d.ts","./node_modules/testcontainers/build/utils/pull-policy.d.ts","./node_modules/testcontainers/build/utils/port.d.ts","./node_modules/testcontainers/build/utils/bound-ports.d.ts","./node_modules/testcontainers/build/wait-strategies/wait-strategy.d.ts","./node_modules/testcontainers/build/network/network.d.ts","./node_modules/testcontainers/build/test-container.d.ts","./node_modules/testcontainers/build/generic-container/started-generic-container.d.ts","./node_modules/testcontainers/build/docker-compose-environment/downed-docker-compose-environment.d.ts","./node_modules/testcontainers/build/docker-compose-environment/stopped-docker-compose-environment.d.ts","./node_modules/testcontainers/build/docker-compose-environment/started-docker-compose-environment.d.ts","./node_modules/testcontainers/build/docker-compose-environment/docker-compose-environment.d.ts","./node_modules/testcontainers/build/generic-container/abstract-started-container.d.ts","./node_modules/testcontainers/build/generic-container/abstract-stopped-container.d.ts","./node_modules/testcontainers/build/generic-container/generic-container-builder.d.ts","./node_modules/testcontainers/build/generic-container/generic-container.d.ts","./node_modules/testcontainers/build/reaper/reaper.d.ts","./node_modules/testcontainers/build/socat/socat-container.d.ts","./node_modules/testcontainers/build/test-containers.d.ts","./node_modules/testcontainers/build/utils/labels.d.ts","./node_modules/testcontainers/build/utils/port-generator.d.ts","./node_modules/testcontainers/build/wait-strategies/http-wait-strategy.d.ts","./node_modules/testcontainers/build/wait-strategies/startup-check-strategy.d.ts","./node_modules/testcontainers/build/wait-strategies/composite-wait-strategy.d.ts","./node_modules/testcontainers/build/wait-strategies/log-wait-strategy.d.ts","./node_modules/testcontainers/build/wait-strategies/shell-wait-strategy.d.ts","./node_modules/testcontainers/build/wait-strategies/wait.d.ts","./node_modules/testcontainers/build/wait-strategies/wait-for-container.d.ts","./node_modules/testcontainers/build/index.d.ts","./node_modules/postgres/types/index.d.ts","./node_modules/drizzle-orm/entity.d.ts","./node_modules/drizzle-orm/migrator.d.ts","./node_modules/drizzle-orm/logger.d.ts","./node_modules/drizzle-orm/operations.d.ts","./node_modules/drizzle-orm/table.d.ts","./node_modules/drizzle-orm/utils.d.ts","./node_modules/drizzle-orm/casing.d.ts","./node_modules/drizzle-orm/subquery.d.ts","./node_modules/drizzle-orm/query-builders/select.types.d.ts","./node_modules/drizzle-orm/sql/sql.d.ts","./node_modules/drizzle-orm/column.d.ts","./node_modules/drizzle-orm/mysql-core/checks.d.ts","./node_modules/drizzle-orm/mysql-core/columns/binary.d.ts","./node_modules/drizzle-orm/mysql-core/columns/boolean.d.ts","./node_modules/drizzle-orm/mysql-core/columns/char.d.ts","./node_modules/drizzle-orm/mysql-core/columns/custom.d.ts","./node_modules/drizzle-orm/mysql-core/columns/date.d.ts","./node_modules/drizzle-orm/mysql-core/columns/datetime.d.ts","./node_modules/drizzle-orm/mysql-core/columns/decimal.d.ts","./node_modules/drizzle-orm/mysql-core/columns/double.d.ts","./node_modules/drizzle-orm/mysql-core/columns/enum.d.ts","./node_modules/drizzle-orm/mysql-core/columns/float.d.ts","./node_modules/drizzle-orm/mysql-core/columns/int.d.ts","./node_modules/drizzle-orm/mysql-core/columns/json.d.ts","./node_modules/drizzle-orm/mysql-core/columns/mediumint.d.ts","./node_modules/drizzle-orm/mysql-core/columns/real.d.ts","./node_modules/drizzle-orm/mysql-core/columns/serial.d.ts","./node_modules/drizzle-orm/mysql-core/columns/smallint.d.ts","./node_modules/drizzle-orm/mysql-core/columns/text.d.ts","./node_modules/drizzle-orm/mysql-core/columns/time.d.ts","./node_modules/drizzle-orm/mysql-core/columns/date.common.d.ts","./node_modules/drizzle-orm/mysql-core/columns/timestamp.d.ts","./node_modules/drizzle-orm/mysql-core/columns/tinyint.d.ts","./node_modules/drizzle-orm/mysql-core/columns/varbinary.d.ts","./node_modules/drizzle-orm/mysql-core/columns/varchar.d.ts","./node_modules/drizzle-orm/mysql-core/columns/year.d.ts","./node_modules/drizzle-orm/mysql-core/columns/all.d.ts","./node_modules/drizzle-orm/mysql-core/indexes.d.ts","./node_modules/drizzle-orm/mysql-core/primary-keys.d.ts","./node_modules/drizzle-orm/mysql-core/unique-constraint.d.ts","./node_modules/drizzle-orm/mysql-core/table.d.ts","./node_modules/drizzle-orm/mysql-core/foreign-keys.d.ts","./node_modules/drizzle-orm/mysql-core/columns/common.d.ts","./node_modules/drizzle-orm/mysql-core/columns/bigint.d.ts","./node_modules/drizzle-orm/mysql-core/columns/index.d.ts","./node_modules/drizzle-orm/sql/expressions/conditions.d.ts","./node_modules/drizzle-orm/sql/expressions/select.d.ts","./node_modules/drizzle-orm/sql/expressions/index.d.ts","./node_modules/drizzle-orm/sql/functions/aggregate.d.ts","./node_modules/drizzle-orm/sql/functions/vector.d.ts","./node_modules/drizzle-orm/sql/functions/index.d.ts","./node_modules/drizzle-orm/sql/index.d.ts","./node_modules/drizzle-orm/query-builders/query-builder.d.ts","./node_modules/drizzle-orm/expressions.d.ts","./node_modules/drizzle-orm/relations.d.ts","./node_modules/drizzle-orm/query-promise.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/delete.d.ts","./node_modules/drizzle-orm/runnable-query.d.ts","./node_modules/drizzle-orm/mysql-core/subquery.d.ts","./node_modules/drizzle-orm/mysql-core/view-base.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/select.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/query-builder.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/update.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/insert.d.ts","./node_modules/drizzle-orm/mysql-core/dialect.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/count.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/index.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/query.d.ts","./node_modules/drizzle-orm/mysql-core/db.d.ts","./node_modules/drizzle-orm/mysql-core/session.d.ts","./node_modules/drizzle-orm/mysql-core/view-common.d.ts","./node_modules/drizzle-orm/mysql-core/view.d.ts","./node_modules/drizzle-orm/mysql-core/query-builders/select.types.d.ts","./node_modules/drizzle-orm/mysql-core/alias.d.ts","./node_modules/drizzle-orm/mysql-core/schema.d.ts","./node_modules/drizzle-orm/alias.d.ts","./node_modules/drizzle-orm/errors.d.ts","./node_modules/drizzle-orm/view-common.d.ts","./node_modules/drizzle-orm/index.d.ts","./node_modules/drizzle-orm/mysql-core/utils.d.ts","./node_modules/drizzle-orm/mysql-core/index.d.ts","./node_modules/drizzle-orm/pg-core/checks.d.ts","./node_modules/drizzle-orm/pg-core/foreign-keys.d.ts","./node_modules/drizzle-orm/pg-core/indexes.d.ts","./node_modules/drizzle-orm/pg-core/columns/common.d.ts","./node_modules/drizzle-orm/pg-core/columns/bigserial.d.ts","./node_modules/drizzle-orm/pg-core/columns/boolean.d.ts","./node_modules/drizzle-orm/pg-core/columns/char.d.ts","./node_modules/drizzle-orm/pg-core/columns/cidr.d.ts","./node_modules/drizzle-orm/pg-core/columns/custom.d.ts","./node_modules/drizzle-orm/pg-core/columns/date.common.d.ts","./node_modules/drizzle-orm/pg-core/columns/date.d.ts","./node_modules/drizzle-orm/pg-core/columns/double-precision.d.ts","./node_modules/drizzle-orm/pg-core/columns/inet.d.ts","./node_modules/drizzle-orm/pg-core/sequence.d.ts","./node_modules/drizzle-orm/pg-core/columns/int.common.d.ts","./node_modules/drizzle-orm/pg-core/columns/integer.d.ts","./node_modules/drizzle-orm/pg-core/columns/timestamp.d.ts","./node_modules/drizzle-orm/pg-core/columns/interval.d.ts","./node_modules/drizzle-orm/pg-core/columns/json.d.ts","./node_modules/drizzle-orm/pg-core/columns/jsonb.d.ts","./node_modules/drizzle-orm/pg-core/columns/line.d.ts","./node_modules/drizzle-orm/pg-core/columns/macaddr.d.ts","./node_modules/drizzle-orm/pg-core/columns/macaddr8.d.ts","./node_modules/drizzle-orm/pg-core/columns/numeric.d.ts","./node_modules/drizzle-orm/pg-core/columns/point.d.ts","./node_modules/drizzle-orm/pg-core/columns/postgis_extension/geometry.d.ts","./node_modules/drizzle-orm/pg-core/columns/real.d.ts","./node_modules/drizzle-orm/pg-core/columns/serial.d.ts","./node_modules/drizzle-orm/pg-core/columns/smallint.d.ts","./node_modules/drizzle-orm/pg-core/columns/smallserial.d.ts","./node_modules/drizzle-orm/pg-core/columns/text.d.ts","./node_modules/drizzle-orm/pg-core/columns/time.d.ts","./node_modules/drizzle-orm/pg-core/columns/uuid.d.ts","./node_modules/drizzle-orm/pg-core/columns/varchar.d.ts","./node_modules/drizzle-orm/pg-core/columns/vector_extension/bit.d.ts","./node_modules/drizzle-orm/pg-core/columns/vector_extension/halfvec.d.ts","./node_modules/drizzle-orm/pg-core/columns/vector_extension/sparsevec.d.ts","./node_modules/drizzle-orm/pg-core/columns/vector_extension/vector.d.ts","./node_modules/drizzle-orm/pg-core/columns/all.d.ts","./node_modules/drizzle-orm/pg-core/roles.d.ts","./node_modules/drizzle-orm/pg-core/policies.d.ts","./node_modules/drizzle-orm/pg-core/primary-keys.d.ts","./node_modules/drizzle-orm/pg-core/unique-constraint.d.ts","./node_modules/drizzle-orm/pg-core/table.d.ts","./node_modules/drizzle-orm/pg-core/view-base.d.ts","./node_modules/drizzle-orm/pg-core/subquery.d.ts","./node_modules/drizzle-orm/session.d.ts","./node_modules/drizzle-orm/pg-core/session.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/select.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/query-builder.d.ts","./node_modules/drizzle-orm/pg-core/view-common.d.ts","./node_modules/drizzle-orm/pg-core/view.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/select.types.d.ts","./node_modules/drizzle-orm/pg-core/alias.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/delete.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/update.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/insert.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/refresh-materialized-view.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/index.d.ts","./node_modules/drizzle-orm/pg-core/columns/enum.d.ts","./node_modules/drizzle-orm/pg-core/schema.d.ts","./node_modules/drizzle-orm/pg-core/utils.d.ts","./node_modules/drizzle-orm/pg-core/utils/array.d.ts","./node_modules/drizzle-orm/pg-core/utils/index.d.ts","./node_modules/drizzle-orm/pg-core/index.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/binary.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/boolean.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/char.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/custom.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/date.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/datetime.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/decimal.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/double.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/enum.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/float.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/int.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/json.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/mediumint.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/real.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/serial.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/smallint.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/text.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/time.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/date.common.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/timestamp.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/tinyint.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/varbinary.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/varchar.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/vector.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/year.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/all.d.ts","./node_modules/drizzle-orm/singlestore-core/indexes.d.ts","./node_modules/drizzle-orm/singlestore-core/primary-keys.d.ts","./node_modules/drizzle-orm/singlestore-core/unique-constraint.d.ts","./node_modules/drizzle-orm/singlestore-core/table.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/common.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/bigint.d.ts","./node_modules/drizzle-orm/singlestore-core/columns/index.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/delete.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/update.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/insert.d.ts","./node_modules/drizzle-orm/singlestore-core/dialect.d.ts","./node_modules/drizzle-orm/singlestore/session.d.ts","./node_modules/drizzle-orm/singlestore/driver.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/count.d.ts","./node_modules/drizzle-orm/singlestore-core/subquery.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/select.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/query-builder.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/index.d.ts","./node_modules/drizzle-orm/singlestore-core/db.d.ts","./node_modules/drizzle-orm/singlestore-core/session.d.ts","./node_modules/drizzle-orm/singlestore-core/query-builders/select.types.d.ts","./node_modules/drizzle-orm/singlestore-core/alias.d.ts","./node_modules/drizzle-orm/singlestore-core/schema.d.ts","./node_modules/drizzle-orm/singlestore-core/utils.d.ts","./node_modules/drizzle-orm/singlestore-core/index.d.ts","./node_modules/drizzle-orm/sqlite-core/checks.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/custom.d.ts","./node_modules/drizzle-orm/sqlite-core/indexes.d.ts","./node_modules/drizzle-orm/sqlite-core/primary-keys.d.ts","./node_modules/drizzle-orm/sqlite-core/unique-constraint.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/count.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/query.d.ts","./node_modules/drizzle-orm/sqlite-core/subquery.d.ts","./node_modules/drizzle-orm/sqlite-core/view-base.d.ts","./node_modules/drizzle-orm/sqlite-core/db.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/raw.d.ts","./node_modules/drizzle-orm/sqlite-core/session.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/delete.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/update.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/insert.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/select.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/index.d.ts","./node_modules/drizzle-orm/sqlite-core/dialect.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.d.ts","./node_modules/drizzle-orm/sqlite-core/view.d.ts","./node_modules/drizzle-orm/sqlite-core/utils.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/integer.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/numeric.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/real.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/text.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/all.d.ts","./node_modules/drizzle-orm/sqlite-core/table.d.ts","./node_modules/drizzle-orm/sqlite-core/foreign-keys.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/common.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/blob.d.ts","./node_modules/drizzle-orm/sqlite-core/columns/index.d.ts","./node_modules/drizzle-orm/sqlite-core/query-builders/select.types.d.ts","./node_modules/drizzle-orm/sqlite-core/alias.d.ts","./node_modules/drizzle-orm/sqlite-core/index.d.ts","./node_modules/drizzle-orm/column-builder.d.ts","./node_modules/drizzle-orm/pg-core/columns/bigint.d.ts","./node_modules/drizzle-orm/pg-core/columns/index.d.ts","./node_modules/drizzle-orm/pg-core/dialect.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/count.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/query.d.ts","./node_modules/drizzle-orm/pg-core/query-builders/raw.d.ts","./node_modules/drizzle-orm/pg-core/db.d.ts","./node_modules/drizzle-orm/postgres-js/session.d.ts","./node_modules/drizzle-orm/postgres-js/driver.d.ts","./node_modules/drizzle-orm/postgres-js/index.d.ts","./node_modules/drizzle-orm/postgres-js/migrator.d.ts","./e2e/global-setup.ts","./e2e/global-teardown.ts","./e2e/grid.spec.ts","./e2e/navigation.spec.ts","./e2e/parameters.spec.ts","./e2e/performance.spec.ts","./e2e/responsive.spec.ts","./e2e/sidebar-states.spec.ts","./e2e/styling-rules.spec.ts","./e2e/users.spec.ts","./e2e/widget-lab.spec.ts","./e2e/widget-states.spec.ts","./e2e/widgets.spec.ts","./node_modules/bcryptjs/types.d.ts","./node_modules/bcryptjs/index.d.ts","./node_modules/@auth/core/lib/vendored/cookie.d.ts","./node_modules/oauth4webapi/build/index.d.ts","./node_modules/@auth/core/lib/utils/cookie.d.ts","./node_modules/@auth/core/warnings.d.ts","./node_modules/@auth/core/lib/symbols.d.ts","./node_modules/@auth/core/lib/index.d.ts","./node_modules/@auth/core/lib/utils/env.d.ts","./node_modules/@auth/core/jwt.d.ts","./node_modules/@auth/core/lib/utils/actions.d.ts","./node_modules/@auth/core/index.d.ts","./node_modules/@auth/core/lib/utils/logger.d.ts","./node_modules/@auth/core/providers/webauthn.d.ts","./node_modules/@auth/core/lib/utils/webauthn-utils.d.ts","./node_modules/@auth/core/types.d.ts","./node_modules/preact/src/jsx.d.ts","./node_modules/preact/src/index.d.ts","./node_modules/@auth/core/providers/credentials.d.ts","./node_modules/@auth/core/providers/provider-types.d.ts","./node_modules/@auth/core/providers/nodemailer.d.ts","./node_modules/@auth/core/providers/email.d.ts","./node_modules/@auth/core/providers/oauth.d.ts","./node_modules/@auth/core/providers/index.d.ts","./node_modules/@auth/core/adapters.d.ts","./src/lib/db/schema.ts","./src/lib/db/index.ts","./src/lib/bootstrap.ts","./src/instrumentation.ts","./node_modules/next-auth/node_modules/@auth/core/lib/vendored/cookie.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/utils/cookie.d.ts","./node_modules/next-auth/node_modules/@auth/core/warnings.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/symbols.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/index.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/utils/env.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/credentials.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/provider-types.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/nodemailer.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/email.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/oauth.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/webauthn.d.ts","./node_modules/next-auth/node_modules/@auth/core/providers/index.d.ts","./node_modules/next-auth/node_modules/@auth/core/adapters.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/utils/actions.d.ts","./node_modules/next-auth/node_modules/@auth/core/index.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/utils/logger.d.ts","./node_modules/next-auth/node_modules/@auth/core/lib/utils/webauthn-utils.d.ts","./node_modules/next-auth/node_modules/@auth/core/types.d.ts","./node_modules/next-auth/node_modules/@auth/core/jwt.d.ts","./node_modules/next-auth/jwt.d.ts","./src/middleware.ts","./node_modules/vitest/dist/chunks/global.d.b15mdlcr.d.ts","./node_modules/vitest/dist/chunks/suite.d.bjwk38hb.d.ts","./node_modules/vitest/dist/chunks/evaluatedmodules.d.bxj5omdx.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./src/__tests__/instrumentation.test.ts","./src/__tests__/helpers/drizzle-mocks.ts","./src/__tests__/helpers/next-mocks.ts","./src/__tests__/helpers/request-helpers.ts","./node_modules/next-auth/lib/types.d.ts","./node_modules/next-auth/lib/index.d.ts","./node_modules/next-auth/node_modules/@auth/core/errors.d.ts","./node_modules/next-auth/index.d.ts","./node_modules/next-auth/providers/credentials.d.ts","./node_modules/@auth/drizzle-adapter/lib/mysql.d.ts","./node_modules/@auth/drizzle-adapter/lib/pg.d.ts","./node_modules/@auth/drizzle-adapter/lib/sqlite.d.ts","./node_modules/@auth/drizzle-adapter/lib/utils.d.ts","./node_modules/@auth/drizzle-adapter/index.d.ts","./node_modules/zod/v3/helpers/typealiases.d.cts","./node_modules/zod/v3/helpers/util.d.cts","./node_modules/zod/v3/index.d.cts","./node_modules/zod/v3/zoderror.d.cts","./node_modules/zod/v3/locales/en.d.cts","./node_modules/zod/v3/errors.d.cts","./node_modules/zod/v3/helpers/parseutil.d.cts","./node_modules/zod/v3/helpers/enumutil.d.cts","./node_modules/zod/v3/helpers/errorutil.d.cts","./node_modules/zod/v3/helpers/partialutil.d.cts","./node_modules/zod/v3/standard-schema.d.cts","./node_modules/zod/v3/types.d.cts","./node_modules/zod/v3/external.d.cts","./node_modules/zod/index.d.cts","./src/lib/auth/config.ts","./src/app/api/auth/[...nextauth]/route.ts","./src/lib/auth/signup.ts","./src/lib/api-response.ts","./src/app/api/auth/bootstrap-status/route.ts","./src/app/api/auth/bootstrap-status/__tests__/route.test.ts","./src/lib/auth/api-key.ts","./src/lib/auth/session.ts","./src/lib/crypto.ts","./src/lib/connection-adapter.ts","./src/lib/query-params.ts","./src/lib/query-executor.ts","./src/lib/schema-prefetch.ts","./src/lib/schemas.ts","./src/lib/api-utils.ts","./src/app/api/connections/route.ts","./src/app/api/connections/[id]/route.ts","./src/app/api/connections/[id]/__tests__/route.test.ts","./src/app/api/connections/[id]/schema/route.ts","./src/app/api/connections/[id]/schema/__tests__/route.test.ts","./src/app/api/connections/[id]/test/route.ts","./src/app/api/connections/[id]/test/__tests__/route.test.ts","./src/app/api/connections/__tests__/route.test.ts","./src/app/api/connections/test-inline/route.ts","./src/app/api/connections/test-inline/__tests__/route.test.ts","./src/app/api/dashboards/route.ts","./src/app/api/dashboards/[id]/route.ts","./src/app/api/dashboards/[id]/__tests__/route.test.ts","./src/app/api/dashboards/[id]/duplicate/route.ts","./src/app/api/dashboards/[id]/duplicate/__tests__/route.test.ts","./src/lib/dashboard-export.ts","./src/app/api/dashboards/[id]/export/route.ts","./src/app/api/dashboards/[id]/export/__tests__/route.test.ts","./src/app/api/dashboards/[id]/share/route.ts","./src/app/api/dashboards/[id]/share/__tests__/route.test.ts","./src/app/api/dashboards/__tests__/route.test.ts","./src/lib/dashboard-import.ts","./src/lib/neodash-converter.ts","./src/app/api/dashboards/import/route.ts","./src/app/api/dashboards/import/__tests__/route.test.ts","./src/app/api/docs/route.ts","./src/app/api/docs/__tests__/route.test.ts","./src/app/api/keys/route.ts","./src/app/api/keys/[id]/route.ts","./src/app/api/keys/[id]/__tests__/route.test.ts","./src/app/api/keys/__tests__/route.test.ts","./src/lib/openapi-spec.ts","./src/app/api/openapi/route.ts","./src/app/api/openapi/__tests__/route.test.ts","./src/app/api/openapi.json/route.ts","./src/app/api/openapi.json/__tests__/route.test.ts","./src/lib/query-hash.ts","./src/app/api/query/route.ts","./src/app/api/query/__tests__/route.test.ts","./src/app/api/query/write/route.ts","./src/app/api/query/write/__tests__/route.test.ts","./src/app/api/users/route.ts","./src/app/api/users/[id]/route.ts","./src/app/api/users/[id]/__tests__/route.test.ts","./src/app/api/users/__tests__/route.test.ts","./src/app/api/widget-templates/shared.ts","./src/app/api/widget-templates/route.ts","./src/app/api/widget-templates/[id]/route.ts","./src/app/api/widget-templates/[id]/__tests__/route.test.ts","./src/app/api/widget-templates/__tests__/route.test.ts","../component/node_modules/@types/react/global.d.ts","../component/node_modules/csstype/index.d.ts","../component/node_modules/@types/react/index.d.ts","../component/node_modules/@radix-ui/react-slot/dist/index.d.mts","../component/node_modules/clsx/clsx.d.mts","../component/node_modules/class-variance-authority/dist/types.d.ts","../component/node_modules/class-variance-authority/dist/index.d.ts","../component/node_modules/tailwind-merge/dist/types.d.ts","../component/src/lib/utils.ts","../component/src/components/ui/button.tsx","../component/src/components/ui/input.tsx","../component/node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive/dist/index.d.mts","../component/node_modules/@radix-ui/react-label/dist/index.d.mts","../component/src/components/ui/label.tsx","../component/src/components/ui/card.tsx","../component/src/components/ui/badge.tsx","../component/node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context/dist/index.d.mts","../component/node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive/dist/index.d.mts","../component/node_modules/@radix-ui/react-avatar/dist/index.d.mts","../component/src/components/ui/avatar.tsx","../component/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.mts","../component/node_modules/@radix-ui/react-separator/dist/index.d.mts","../component/src/components/ui/separator.tsx","../component/src/components/ui/skeleton.tsx","../component/node_modules/react-hook-form/dist/constants.d.ts","../component/node_modules/react-hook-form/dist/utils/createsubject.d.ts","../component/node_modules/react-hook-form/dist/types/events.d.ts","../component/node_modules/react-hook-form/dist/types/path/common.d.ts","../component/node_modules/react-hook-form/dist/types/path/eager.d.ts","../component/node_modules/react-hook-form/dist/types/path/index.d.ts","../component/node_modules/react-hook-form/dist/types/fieldarray.d.ts","../component/node_modules/react-hook-form/dist/types/resolvers.d.ts","../component/node_modules/react-hook-form/dist/types/form.d.ts","../component/node_modules/react-hook-form/dist/types/utils.d.ts","../component/node_modules/react-hook-form/dist/types/fields.d.ts","../component/node_modules/react-hook-form/dist/types/errors.d.ts","../component/node_modules/react-hook-form/dist/types/validator.d.ts","../component/node_modules/react-hook-form/dist/types/controller.d.ts","../component/node_modules/react-hook-form/dist/types/watch.d.ts","../component/node_modules/react-hook-form/dist/types/index.d.ts","../component/node_modules/react-hook-form/dist/controller.d.ts","../component/node_modules/react-hook-form/dist/form.d.ts","../component/node_modules/react-hook-form/dist/formstatesubscribe.d.ts","../component/node_modules/react-hook-form/dist/logic/appenderrors.d.ts","../component/node_modules/react-hook-form/dist/logic/createformcontrol.d.ts","../component/node_modules/react-hook-form/dist/logic/index.d.ts","../component/node_modules/react-hook-form/dist/usecontroller.d.ts","../component/node_modules/react-hook-form/dist/usefieldarray.d.ts","../component/node_modules/react-hook-form/dist/useform.d.ts","../component/node_modules/react-hook-form/dist/useformcontext.d.ts","../component/node_modules/react-hook-form/dist/useformstate.d.ts","../component/node_modules/react-hook-form/dist/usewatch.d.ts","../component/node_modules/react-hook-form/dist/utils/get.d.ts","../component/node_modules/react-hook-form/dist/utils/set.d.ts","../component/node_modules/react-hook-form/dist/utils/index.d.ts","../component/node_modules/react-hook-form/dist/watch.d.ts","../component/node_modules/react-hook-form/dist/index.d.ts","../component/src/components/ui/form.tsx","../component/node_modules/@radix-ui/react-context/dist/index.d.mts","../component/node_modules/@radix-ui/react-primitive/dist/index.d.mts","../component/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts","../component/node_modules/@radix-ui/react-focus-scope/dist/index.d.mts","../component/node_modules/@radix-ui/react-arrow/dist/index.d.mts","../component/node_modules/@radix-ui/rect/dist/index.d.mts","../component/node_modules/@radix-ui/react-popper/dist/index.d.mts","../component/node_modules/@radix-ui/react-portal/dist/index.d.mts","../component/node_modules/@radix-ui/react-select/dist/index.d.mts","../component/node_modules/lucide-react/dist/lucide-react.d.ts","../component/src/components/ui/select.tsx","../component/node_modules/@types/react/jsx-runtime.d.ts","../component/node_modules/@radix-ui/react-checkbox/dist/index.d.mts","../component/src/components/ui/checkbox.tsx","../component/node_modules/@radix-ui/react-roving-focus/dist/index.d.mts","../component/node_modules/@radix-ui/react-radio-group/dist/index.d.mts","../component/src/components/ui/radio-group.tsx","../component/node_modules/@radix-ui/react-switch/dist/index.d.mts","../component/src/components/ui/switch.tsx","../component/src/components/ui/textarea.tsx","../component/node_modules/@radix-ui/react-slider/dist/index.d.mts","../component/src/components/ui/slider.tsx","../component/node_modules/@radix-ui/react-dialog/dist/index.d.mts","../component/src/components/ui/dialog.tsx","../component/node_modules/@radix-ui/react-alert-dialog/dist/index.d.mts","../component/src/components/ui/alert-dialog.tsx","../component/node_modules/@radix-ui/react-menu/dist/index.d.mts","../component/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.mts","../component/src/components/ui/dropdown-menu.tsx","../component/node_modules/@radix-ui/react-popover/dist/index.d.mts","../component/src/components/ui/popover.tsx","../component/node_modules/@radix-ui/react-tooltip/dist/index.d.mts","../component/src/components/ui/tooltip.tsx","../component/node_modules/@radix-ui/react-toast/dist/index.d.mts","../component/src/components/ui/toast.tsx","../component/src/hooks/use-toast.ts","../component/src/components/ui/toaster.tsx","../component/src/components/ui/alert.tsx","../component/node_modules/@radix-ui/react-tabs/dist/index.d.mts","../component/src/components/ui/tabs.tsx","../component/node_modules/@radix-ui/react-collapsible/dist/index.d.mts","../component/node_modules/@radix-ui/react-accordion/dist/index.d.mts","../component/src/components/ui/accordion.tsx","../component/node_modules/@radix-ui/react-visually-hidden/dist/index.d.mts","../component/node_modules/@radix-ui/react-navigation-menu/dist/index.d.mts","../component/src/components/ui/navigation-menu.tsx","../component/src/components/ui/breadcrumb.tsx","../component/src/components/ui/pagination.tsx","../component/src/components/ui/sheet.tsx","../component/src/components/ui/table.tsx","../component/node_modules/@date-fns/tz/constants/index.d.ts","../component/node_modules/@date-fns/tz/date/index.d.ts","../component/node_modules/@date-fns/tz/date/mini.d.ts","../component/node_modules/@date-fns/tz/tz/index.d.ts","../component/node_modules/@date-fns/tz/tzoffset/index.d.ts","../component/node_modules/@date-fns/tz/tzscan/index.d.ts","../component/node_modules/@date-fns/tz/tzname/index.d.ts","../component/node_modules/@date-fns/tz/index.d.ts","../component/node_modules/date-fns/constants.d.ts","../component/node_modules/date-fns/locale/types.d.ts","../component/node_modules/date-fns/fp/types.d.ts","../component/node_modules/date-fns/types.d.ts","../component/node_modules/date-fns/add.d.ts","../component/node_modules/date-fns/addbusinessdays.d.ts","../component/node_modules/date-fns/adddays.d.ts","../component/node_modules/date-fns/addhours.d.ts","../component/node_modules/date-fns/addisoweekyears.d.ts","../component/node_modules/date-fns/addmilliseconds.d.ts","../component/node_modules/date-fns/addminutes.d.ts","../component/node_modules/date-fns/addmonths.d.ts","../component/node_modules/date-fns/addquarters.d.ts","../component/node_modules/date-fns/addseconds.d.ts","../component/node_modules/date-fns/addweeks.d.ts","../component/node_modules/date-fns/addyears.d.ts","../component/node_modules/date-fns/areintervalsoverlapping.d.ts","../component/node_modules/date-fns/clamp.d.ts","../component/node_modules/date-fns/closestindexto.d.ts","../component/node_modules/date-fns/closestto.d.ts","../component/node_modules/date-fns/compareasc.d.ts","../component/node_modules/date-fns/comparedesc.d.ts","../component/node_modules/date-fns/constructfrom.d.ts","../component/node_modules/date-fns/constructnow.d.ts","../component/node_modules/date-fns/daystoweeks.d.ts","../component/node_modules/date-fns/differenceinbusinessdays.d.ts","../component/node_modules/date-fns/differenceincalendardays.d.ts","../component/node_modules/date-fns/differenceincalendarisoweekyears.d.ts","../component/node_modules/date-fns/differenceincalendarisoweeks.d.ts","../component/node_modules/date-fns/differenceincalendarmonths.d.ts","../component/node_modules/date-fns/differenceincalendarquarters.d.ts","../component/node_modules/date-fns/differenceincalendarweeks.d.ts","../component/node_modules/date-fns/differenceincalendaryears.d.ts","../component/node_modules/date-fns/differenceindays.d.ts","../component/node_modules/date-fns/differenceinhours.d.ts","../component/node_modules/date-fns/differenceinisoweekyears.d.ts","../component/node_modules/date-fns/differenceinmilliseconds.d.ts","../component/node_modules/date-fns/differenceinminutes.d.ts","../component/node_modules/date-fns/differenceinmonths.d.ts","../component/node_modules/date-fns/differenceinquarters.d.ts","../component/node_modules/date-fns/differenceinseconds.d.ts","../component/node_modules/date-fns/differenceinweeks.d.ts","../component/node_modules/date-fns/differenceinyears.d.ts","../component/node_modules/date-fns/eachdayofinterval.d.ts","../component/node_modules/date-fns/eachhourofinterval.d.ts","../component/node_modules/date-fns/eachminuteofinterval.d.ts","../component/node_modules/date-fns/eachmonthofinterval.d.ts","../component/node_modules/date-fns/eachquarterofinterval.d.ts","../component/node_modules/date-fns/eachweekofinterval.d.ts","../component/node_modules/date-fns/eachweekendofinterval.d.ts","../component/node_modules/date-fns/eachweekendofmonth.d.ts","../component/node_modules/date-fns/eachweekendofyear.d.ts","../component/node_modules/date-fns/eachyearofinterval.d.ts","../component/node_modules/date-fns/endofday.d.ts","../component/node_modules/date-fns/endofdecade.d.ts","../component/node_modules/date-fns/endofhour.d.ts","../component/node_modules/date-fns/endofisoweek.d.ts","../component/node_modules/date-fns/endofisoweekyear.d.ts","../component/node_modules/date-fns/endofminute.d.ts","../component/node_modules/date-fns/endofmonth.d.ts","../component/node_modules/date-fns/endofquarter.d.ts","../component/node_modules/date-fns/endofsecond.d.ts","../component/node_modules/date-fns/endoftoday.d.ts","../component/node_modules/date-fns/endoftomorrow.d.ts","../component/node_modules/date-fns/endofweek.d.ts","../component/node_modules/date-fns/endofyear.d.ts","../component/node_modules/date-fns/endofyesterday.d.ts","../component/node_modules/date-fns/_lib/format/formatters.d.ts","../component/node_modules/date-fns/_lib/format/longformatters.d.ts","../component/node_modules/date-fns/format.d.ts","../component/node_modules/date-fns/formatdistance.d.ts","../component/node_modules/date-fns/formatdistancestrict.d.ts","../component/node_modules/date-fns/formatdistancetonow.d.ts","../component/node_modules/date-fns/formatdistancetonowstrict.d.ts","../component/node_modules/date-fns/formatduration.d.ts","../component/node_modules/date-fns/formatiso.d.ts","../component/node_modules/date-fns/formatiso9075.d.ts","../component/node_modules/date-fns/formatisoduration.d.ts","../component/node_modules/date-fns/formatrfc3339.d.ts","../component/node_modules/date-fns/formatrfc7231.d.ts","../component/node_modules/date-fns/formatrelative.d.ts","../component/node_modules/date-fns/fromunixtime.d.ts","../component/node_modules/date-fns/getdate.d.ts","../component/node_modules/date-fns/getday.d.ts","../component/node_modules/date-fns/getdayofyear.d.ts","../component/node_modules/date-fns/getdaysinmonth.d.ts","../component/node_modules/date-fns/getdaysinyear.d.ts","../component/node_modules/date-fns/getdecade.d.ts","../component/node_modules/date-fns/_lib/defaultoptions.d.ts","../component/node_modules/date-fns/getdefaultoptions.d.ts","../component/node_modules/date-fns/gethours.d.ts","../component/node_modules/date-fns/getisoday.d.ts","../component/node_modules/date-fns/getisoweek.d.ts","../component/node_modules/date-fns/getisoweekyear.d.ts","../component/node_modules/date-fns/getisoweeksinyear.d.ts","../component/node_modules/date-fns/getmilliseconds.d.ts","../component/node_modules/date-fns/getminutes.d.ts","../component/node_modules/date-fns/getmonth.d.ts","../component/node_modules/date-fns/getoverlappingdaysinintervals.d.ts","../component/node_modules/date-fns/getquarter.d.ts","../component/node_modules/date-fns/getseconds.d.ts","../component/node_modules/date-fns/gettime.d.ts","../component/node_modules/date-fns/getunixtime.d.ts","../component/node_modules/date-fns/getweek.d.ts","../component/node_modules/date-fns/getweekofmonth.d.ts","../component/node_modules/date-fns/getweekyear.d.ts","../component/node_modules/date-fns/getweeksinmonth.d.ts","../component/node_modules/date-fns/getyear.d.ts","../component/node_modules/date-fns/hourstomilliseconds.d.ts","../component/node_modules/date-fns/hourstominutes.d.ts","../component/node_modules/date-fns/hourstoseconds.d.ts","../component/node_modules/date-fns/interval.d.ts","../component/node_modules/date-fns/intervaltoduration.d.ts","../component/node_modules/date-fns/intlformat.d.ts","../component/node_modules/date-fns/intlformatdistance.d.ts","../component/node_modules/date-fns/isafter.d.ts","../component/node_modules/date-fns/isbefore.d.ts","../component/node_modules/date-fns/isdate.d.ts","../component/node_modules/date-fns/isequal.d.ts","../component/node_modules/date-fns/isexists.d.ts","../component/node_modules/date-fns/isfirstdayofmonth.d.ts","../component/node_modules/date-fns/isfriday.d.ts","../component/node_modules/date-fns/isfuture.d.ts","../component/node_modules/date-fns/islastdayofmonth.d.ts","../component/node_modules/date-fns/isleapyear.d.ts","../component/node_modules/date-fns/ismatch.d.ts","../component/node_modules/date-fns/ismonday.d.ts","../component/node_modules/date-fns/ispast.d.ts","../component/node_modules/date-fns/issameday.d.ts","../component/node_modules/date-fns/issamehour.d.ts","../component/node_modules/date-fns/issameisoweek.d.ts","../component/node_modules/date-fns/issameisoweekyear.d.ts","../component/node_modules/date-fns/issameminute.d.ts","../component/node_modules/date-fns/issamemonth.d.ts","../component/node_modules/date-fns/issamequarter.d.ts","../component/node_modules/date-fns/issamesecond.d.ts","../component/node_modules/date-fns/issameweek.d.ts","../component/node_modules/date-fns/issameyear.d.ts","../component/node_modules/date-fns/issaturday.d.ts","../component/node_modules/date-fns/issunday.d.ts","../component/node_modules/date-fns/isthishour.d.ts","../component/node_modules/date-fns/isthisisoweek.d.ts","../component/node_modules/date-fns/isthisminute.d.ts","../component/node_modules/date-fns/isthismonth.d.ts","../component/node_modules/date-fns/isthisquarter.d.ts","../component/node_modules/date-fns/isthissecond.d.ts","../component/node_modules/date-fns/isthisweek.d.ts","../component/node_modules/date-fns/isthisyear.d.ts","../component/node_modules/date-fns/isthursday.d.ts","../component/node_modules/date-fns/istoday.d.ts","../component/node_modules/date-fns/istomorrow.d.ts","../component/node_modules/date-fns/istuesday.d.ts","../component/node_modules/date-fns/isvalid.d.ts","../component/node_modules/date-fns/iswednesday.d.ts","../component/node_modules/date-fns/isweekend.d.ts","../component/node_modules/date-fns/iswithininterval.d.ts","../component/node_modules/date-fns/isyesterday.d.ts","../component/node_modules/date-fns/lastdayofdecade.d.ts","../component/node_modules/date-fns/lastdayofisoweek.d.ts","../component/node_modules/date-fns/lastdayofisoweekyear.d.ts","../component/node_modules/date-fns/lastdayofmonth.d.ts","../component/node_modules/date-fns/lastdayofquarter.d.ts","../component/node_modules/date-fns/lastdayofweek.d.ts","../component/node_modules/date-fns/lastdayofyear.d.ts","../component/node_modules/date-fns/_lib/format/lightformatters.d.ts","../component/node_modules/date-fns/lightformat.d.ts","../component/node_modules/date-fns/max.d.ts","../component/node_modules/date-fns/milliseconds.d.ts","../component/node_modules/date-fns/millisecondstohours.d.ts","../component/node_modules/date-fns/millisecondstominutes.d.ts","../component/node_modules/date-fns/millisecondstoseconds.d.ts","../component/node_modules/date-fns/min.d.ts","../component/node_modules/date-fns/minutestohours.d.ts","../component/node_modules/date-fns/minutestomilliseconds.d.ts","../component/node_modules/date-fns/minutestoseconds.d.ts","../component/node_modules/date-fns/monthstoquarters.d.ts","../component/node_modules/date-fns/monthstoyears.d.ts","../component/node_modules/date-fns/nextday.d.ts","../component/node_modules/date-fns/nextfriday.d.ts","../component/node_modules/date-fns/nextmonday.d.ts","../component/node_modules/date-fns/nextsaturday.d.ts","../component/node_modules/date-fns/nextsunday.d.ts","../component/node_modules/date-fns/nextthursday.d.ts","../component/node_modules/date-fns/nexttuesday.d.ts","../component/node_modules/date-fns/nextwednesday.d.ts","../component/node_modules/date-fns/parse/_lib/types.d.ts","../component/node_modules/date-fns/parse/_lib/setter.d.ts","../component/node_modules/date-fns/parse/_lib/parser.d.ts","../component/node_modules/date-fns/parse/_lib/parsers.d.ts","../component/node_modules/date-fns/parse.d.ts","../component/node_modules/date-fns/parseiso.d.ts","../component/node_modules/date-fns/parsejson.d.ts","../component/node_modules/date-fns/previousday.d.ts","../component/node_modules/date-fns/previousfriday.d.ts","../component/node_modules/date-fns/previousmonday.d.ts","../component/node_modules/date-fns/previoussaturday.d.ts","../component/node_modules/date-fns/previoussunday.d.ts","../component/node_modules/date-fns/previousthursday.d.ts","../component/node_modules/date-fns/previoustuesday.d.ts","../component/node_modules/date-fns/previouswednesday.d.ts","../component/node_modules/date-fns/quarterstomonths.d.ts","../component/node_modules/date-fns/quarterstoyears.d.ts","../component/node_modules/date-fns/roundtonearesthours.d.ts","../component/node_modules/date-fns/roundtonearestminutes.d.ts","../component/node_modules/date-fns/secondstohours.d.ts","../component/node_modules/date-fns/secondstomilliseconds.d.ts","../component/node_modules/date-fns/secondstominutes.d.ts","../component/node_modules/date-fns/set.d.ts","../component/node_modules/date-fns/setdate.d.ts","../component/node_modules/date-fns/setday.d.ts","../component/node_modules/date-fns/setdayofyear.d.ts","../component/node_modules/date-fns/setdefaultoptions.d.ts","../component/node_modules/date-fns/sethours.d.ts","../component/node_modules/date-fns/setisoday.d.ts","../component/node_modules/date-fns/setisoweek.d.ts","../component/node_modules/date-fns/setisoweekyear.d.ts","../component/node_modules/date-fns/setmilliseconds.d.ts","../component/node_modules/date-fns/setminutes.d.ts","../component/node_modules/date-fns/setmonth.d.ts","../component/node_modules/date-fns/setquarter.d.ts","../component/node_modules/date-fns/setseconds.d.ts","../component/node_modules/date-fns/setweek.d.ts","../component/node_modules/date-fns/setweekyear.d.ts","../component/node_modules/date-fns/setyear.d.ts","../component/node_modules/date-fns/startofday.d.ts","../component/node_modules/date-fns/startofdecade.d.ts","../component/node_modules/date-fns/startofhour.d.ts","../component/node_modules/date-fns/startofisoweek.d.ts","../component/node_modules/date-fns/startofisoweekyear.d.ts","../component/node_modules/date-fns/startofminute.d.ts","../component/node_modules/date-fns/startofmonth.d.ts","../component/node_modules/date-fns/startofquarter.d.ts","../component/node_modules/date-fns/startofsecond.d.ts","../component/node_modules/date-fns/startoftoday.d.ts","../component/node_modules/date-fns/startoftomorrow.d.ts","../component/node_modules/date-fns/startofweek.d.ts","../component/node_modules/date-fns/startofweekyear.d.ts","../component/node_modules/date-fns/startofyear.d.ts","../component/node_modules/date-fns/startofyesterday.d.ts","../component/node_modules/date-fns/sub.d.ts","../component/node_modules/date-fns/subbusinessdays.d.ts","../component/node_modules/date-fns/subdays.d.ts","../component/node_modules/date-fns/subhours.d.ts","../component/node_modules/date-fns/subisoweekyears.d.ts","../component/node_modules/date-fns/submilliseconds.d.ts","../component/node_modules/date-fns/subminutes.d.ts","../component/node_modules/date-fns/submonths.d.ts","../component/node_modules/date-fns/subquarters.d.ts","../component/node_modules/date-fns/subseconds.d.ts","../component/node_modules/date-fns/subweeks.d.ts","../component/node_modules/date-fns/subyears.d.ts","../component/node_modules/date-fns/todate.d.ts","../component/node_modules/date-fns/transpose.d.ts","../component/node_modules/date-fns/weekstodays.d.ts","../component/node_modules/date-fns/yearstodays.d.ts","../component/node_modules/date-fns/yearstomonths.d.ts","../component/node_modules/date-fns/yearstoquarters.d.ts","../component/node_modules/date-fns/index.d.ts","../component/node_modules/date-fns/locale/af.d.ts","../component/node_modules/date-fns/locale/ar.d.ts","../component/node_modules/date-fns/locale/ar-dz.d.ts","../component/node_modules/date-fns/locale/ar-eg.d.ts","../component/node_modules/date-fns/locale/ar-ma.d.ts","../component/node_modules/date-fns/locale/ar-sa.d.ts","../component/node_modules/date-fns/locale/ar-tn.d.ts","../component/node_modules/date-fns/locale/az.d.ts","../component/node_modules/date-fns/locale/be.d.ts","../component/node_modules/date-fns/locale/be-tarask.d.ts","../component/node_modules/date-fns/locale/bg.d.ts","../component/node_modules/date-fns/locale/bn.d.ts","../component/node_modules/date-fns/locale/bs.d.ts","../component/node_modules/date-fns/locale/ca.d.ts","../component/node_modules/date-fns/locale/ckb.d.ts","../component/node_modules/date-fns/locale/cs.d.ts","../component/node_modules/date-fns/locale/cy.d.ts","../component/node_modules/date-fns/locale/da.d.ts","../component/node_modules/date-fns/locale/de.d.ts","../component/node_modules/date-fns/locale/de-at.d.ts","../component/node_modules/date-fns/locale/el.d.ts","../component/node_modules/date-fns/locale/en-au.d.ts","../component/node_modules/date-fns/locale/en-ca.d.ts","../component/node_modules/date-fns/locale/en-gb.d.ts","../component/node_modules/date-fns/locale/en-ie.d.ts","../component/node_modules/date-fns/locale/en-in.d.ts","../component/node_modules/date-fns/locale/en-nz.d.ts","../component/node_modules/date-fns/locale/en-us.d.ts","../component/node_modules/date-fns/locale/en-za.d.ts","../component/node_modules/date-fns/locale/eo.d.ts","../component/node_modules/date-fns/locale/es.d.ts","../component/node_modules/date-fns/locale/et.d.ts","../component/node_modules/date-fns/locale/eu.d.ts","../component/node_modules/date-fns/locale/fa-ir.d.ts","../component/node_modules/date-fns/locale/fi.d.ts","../component/node_modules/date-fns/locale/fr.d.ts","../component/node_modules/date-fns/locale/fr-ca.d.ts","../component/node_modules/date-fns/locale/fr-ch.d.ts","../component/node_modules/date-fns/locale/fy.d.ts","../component/node_modules/date-fns/locale/gd.d.ts","../component/node_modules/date-fns/locale/gl.d.ts","../component/node_modules/date-fns/locale/gu.d.ts","../component/node_modules/date-fns/locale/he.d.ts","../component/node_modules/date-fns/locale/hi.d.ts","../component/node_modules/date-fns/locale/hr.d.ts","../component/node_modules/date-fns/locale/ht.d.ts","../component/node_modules/date-fns/locale/hu.d.ts","../component/node_modules/date-fns/locale/hy.d.ts","../component/node_modules/date-fns/locale/id.d.ts","../component/node_modules/date-fns/locale/is.d.ts","../component/node_modules/date-fns/locale/it.d.ts","../component/node_modules/date-fns/locale/it-ch.d.ts","../component/node_modules/date-fns/locale/ja.d.ts","../component/node_modules/date-fns/locale/ja-hira.d.ts","../component/node_modules/date-fns/locale/ka.d.ts","../component/node_modules/date-fns/locale/kk.d.ts","../component/node_modules/date-fns/locale/km.d.ts","../component/node_modules/date-fns/locale/kn.d.ts","../component/node_modules/date-fns/locale/ko.d.ts","../component/node_modules/date-fns/locale/lb.d.ts","../component/node_modules/date-fns/locale/lt.d.ts","../component/node_modules/date-fns/locale/lv.d.ts","../component/node_modules/date-fns/locale/mk.d.ts","../component/node_modules/date-fns/locale/mn.d.ts","../component/node_modules/date-fns/locale/ms.d.ts","../component/node_modules/date-fns/locale/mt.d.ts","../component/node_modules/date-fns/locale/nb.d.ts","../component/node_modules/date-fns/locale/nl.d.ts","../component/node_modules/date-fns/locale/nl-be.d.ts","../component/node_modules/date-fns/locale/nn.d.ts","../component/node_modules/date-fns/locale/oc.d.ts","../component/node_modules/date-fns/locale/pl.d.ts","../component/node_modules/date-fns/locale/pt.d.ts","../component/node_modules/date-fns/locale/pt-br.d.ts","../component/node_modules/date-fns/locale/ro.d.ts","../component/node_modules/date-fns/locale/ru.d.ts","../component/node_modules/date-fns/locale/se.d.ts","../component/node_modules/date-fns/locale/sk.d.ts","../component/node_modules/date-fns/locale/sl.d.ts","../component/node_modules/date-fns/locale/sq.d.ts","../component/node_modules/date-fns/locale/sr.d.ts","../component/node_modules/date-fns/locale/sr-latn.d.ts","../component/node_modules/date-fns/locale/sv.d.ts","../component/node_modules/date-fns/locale/ta.d.ts","../component/node_modules/date-fns/locale/te.d.ts","../component/node_modules/date-fns/locale/th.d.ts","../component/node_modules/date-fns/locale/tr.d.ts","../component/node_modules/date-fns/locale/ug.d.ts","../component/node_modules/date-fns/locale/uk.d.ts","../component/node_modules/date-fns/locale/uz.d.ts","../component/node_modules/date-fns/locale/uz-cyrl.d.ts","../component/node_modules/date-fns/locale/vi.d.ts","../component/node_modules/date-fns/locale/zh-cn.d.ts","../component/node_modules/date-fns/locale/zh-hk.d.ts","../component/node_modules/date-fns/locale/zh-tw.d.ts","../component/node_modules/date-fns/locale.d.ts","../component/node_modules/react-day-picker/dist/esm/components/button.d.ts","../component/node_modules/react-day-picker/dist/esm/components/captionlabel.d.ts","../component/node_modules/react-day-picker/dist/esm/components/chevron.d.ts","../component/node_modules/react-day-picker/dist/esm/components/monthcaption.d.ts","../component/node_modules/react-day-picker/dist/esm/components/week.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labeldaybutton.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelgrid.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelgridcell.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelmonthdropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelnav.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelnext.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelprevious.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelweekday.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelweeknumber.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelweeknumberheader.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/labelyeardropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/labels/index.d.ts","../component/node_modules/react-day-picker/dist/esm/ui.d.ts","../component/node_modules/react-day-picker/dist/esm/classes/calendarweek.d.ts","../component/node_modules/react-day-picker/dist/esm/classes/calendarmonth.d.ts","../component/node_modules/react-day-picker/dist/esm/types/props.d.ts","../component/node_modules/react-day-picker/dist/esm/types/selection.d.ts","../component/node_modules/react-day-picker/dist/esm/usedaypicker.d.ts","../component/node_modules/react-day-picker/dist/esm/types/deprecated.d.ts","../component/node_modules/react-day-picker/dist/esm/types/index.d.ts","../component/node_modules/react-day-picker/dist/esm/components/day.d.ts","../component/node_modules/react-day-picker/dist/esm/components/daybutton.d.ts","../component/node_modules/react-day-picker/dist/esm/components/dropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/components/dropdownnav.d.ts","../component/node_modules/react-day-picker/dist/esm/components/footer.d.ts","../component/node_modules/react-day-picker/dist/esm/components/month.d.ts","../component/node_modules/react-day-picker/dist/esm/components/monthgrid.d.ts","../component/node_modules/react-day-picker/dist/esm/components/months.d.ts","../component/node_modules/react-day-picker/dist/esm/components/monthsdropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/components/nav.d.ts","../component/node_modules/react-day-picker/dist/esm/components/nextmonthbutton.d.ts","../component/node_modules/react-day-picker/dist/esm/components/option.d.ts","../component/node_modules/react-day-picker/dist/esm/components/previousmonthbutton.d.ts","../component/node_modules/react-day-picker/dist/esm/components/root.d.ts","../component/node_modules/react-day-picker/dist/esm/components/select.d.ts","../component/node_modules/react-day-picker/dist/esm/components/weekday.d.ts","../component/node_modules/react-day-picker/dist/esm/components/weekdays.d.ts","../component/node_modules/react-day-picker/dist/esm/components/weeknumber.d.ts","../component/node_modules/react-day-picker/dist/esm/components/weeknumberheader.d.ts","../component/node_modules/react-day-picker/dist/esm/components/weeks.d.ts","../component/node_modules/react-day-picker/dist/esm/components/yearsdropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/components/custom-components.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatcaption.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatday.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatmonthdropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatweekdayname.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatweeknumber.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatweeknumberheader.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/formatyeardropdown.d.ts","../component/node_modules/react-day-picker/dist/esm/formatters/index.d.ts","../component/node_modules/react-day-picker/dist/esm/types/shared.d.ts","../component/node_modules/react-day-picker/dist/esm/locale/en-us.d.ts","../component/node_modules/react-day-picker/dist/esm/classes/datelib.d.ts","../component/node_modules/react-day-picker/dist/esm/classes/calendarday.d.ts","../component/node_modules/react-day-picker/dist/esm/classes/index.d.ts","../component/node_modules/react-day-picker/dist/esm/daypicker.d.ts","../component/node_modules/react-day-picker/dist/esm/helpers/getdefaultclassnames.d.ts","../component/node_modules/react-day-picker/dist/esm/helpers/index.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/addtorange.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/datematchmodifiers.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/rangecontainsdayofweek.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/rangecontainsmodifiers.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/rangeincludesdate.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/rangeoverlaps.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/typeguards.d.ts","../component/node_modules/react-day-picker/dist/esm/utils/index.d.ts","../component/node_modules/react-day-picker/dist/esm/index.d.ts","../component/src/components/ui/calendar.tsx","../component/node_modules/cmdk/dist/index.d.ts","../component/src/components/ui/command.tsx","../component/src/components/ui/index.ts","../component/src/components/composed/loading-button.tsx","../component/src/components/composed/password-input.tsx","../component/src/components/composed/combobox.tsx","../component/src/components/composed/creatable-combobox.tsx","../component/src/components/composed/multi-select.tsx","../component/src/components/composed/date-range-picker.tsx","../component/src/components/composed/confirm-dialog.tsx","../component/src/components/composed/empty-state.tsx","../component/src/components/composed/loading-overlay.tsx","../component/src/components/composed/time-ago.tsx","../component/src/components/composed/json-viewer.tsx","../component/src/components/composed/property-panel.tsx","../component/src/components/composed/page-header.tsx","../component/src/components/composed/widget-card.tsx","../component/src/components/composed/app-shell.tsx","../component/src/components/composed/sidebar.tsx","../component/src/components/composed/sidebar-item.tsx","../component/src/components/composed/toolbar.tsx","../component/node_modules/react-grid-layout/dist/types-bixsdxr7.d.mts","../component/node_modules/react-grid-layout/dist/responsivegridlayout-dqk__izz.d.mts","../component/node_modules/react-grid-layout/dist/position-cetgohhd.d.mts","../component/node_modules/react-grid-layout/dist/calculate-fbcwy8x1.d.mts","../component/node_modules/react-grid-layout/dist/react.d.mts","../component/node_modules/react-grid-layout/dist/responsive-t0n0gmbb.d.mts","../component/node_modules/react-grid-layout/dist/index.d.mts","../component/src/components/composed/dashboard-grid.tsx","../component/src/components/composed/dashboard-mini-preview.tsx","../component/node_modules/@tanstack/table-core/build/lib/utils.d.ts","../component/node_modules/@tanstack/table-core/build/lib/core/table.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnvisibility.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnordering.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnpinning.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/rowpinning.d.ts","../component/node_modules/@tanstack/table-core/build/lib/core/headers.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnfaceting.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/globalfaceting.d.ts","../component/node_modules/@tanstack/table-core/build/lib/filterfns.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnfiltering.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/globalfiltering.d.ts","../component/node_modules/@tanstack/table-core/build/lib/sortingfns.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/rowsorting.d.ts","../component/node_modules/@tanstack/table-core/build/lib/aggregationfns.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columngrouping.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/rowexpanding.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/columnsizing.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/rowpagination.d.ts","../component/node_modules/@tanstack/table-core/build/lib/features/rowselection.d.ts","../component/node_modules/@tanstack/table-core/build/lib/core/row.d.ts","../component/node_modules/@tanstack/table-core/build/lib/core/cell.d.ts","../component/node_modules/@tanstack/table-core/build/lib/core/column.d.ts","../component/node_modules/@tanstack/table-core/build/lib/types.d.ts","../component/node_modules/@tanstack/table-core/build/lib/columnhelper.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getcorerowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getexpandedrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getfacetedminmaxvalues.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getfacetedrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getfaceteduniquevalues.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getfilteredrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getgroupedrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getpaginationrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/utils/getsortedrowmodel.d.ts","../component/node_modules/@tanstack/table-core/build/lib/index.d.ts","../component/node_modules/@tanstack/react-table/build/lib/index.d.ts","../component/src/components/composed/data-grid.tsx","../component/src/components/composed/data-grid-column-header.tsx","../component/src/components/composed/data-grid-pagination.tsx","../component/src/components/composed/data-grid-faceted-filter.tsx","../component/src/components/composed/data-grid-view-options.tsx","../component/src/components/composed/chart-type-picker.tsx","../component/src/components/composed/field-picker.tsx","../component/src/components/composed/chart-settings-panel.tsx","../component/src/components/composed/chart-options-schema.ts","../component/src/components/composed/chart-options-panel.tsx","../component/src/components/composed/connection-status.tsx","../component/src/components/composed/connection-form.tsx","../component/src/components/composed/connection-card.tsx","../component/src/components/composed/parameter-bar.tsx","../component/src/components/composed/cross-filter-tag.tsx","../component/src/components/composed/parameter-widgets/text-input.tsx","../component/src/components/composed/parameter-widgets/param-selector.tsx","../component/src/components/composed/parameter-widgets/param-multi-selector.tsx","../component/src/components/composed/parameter-widgets/date-picker.tsx","../component/src/components/composed/parameter-widgets/date-range-picker.tsx","../component/src/components/composed/parameter-widgets/date-relative-picker.tsx","../component/src/components/composed/parameter-widgets/number-range-slider.tsx","../component/src/components/composed/parameter-widgets/cascading-selector.tsx","../component/src/components/composed/form-widget.tsx","../component/src/lib/schema-transforms.ts","../component/node_modules/@lezer/common/dist/index.d.ts","../component/node_modules/@lezer/lr/dist/index.d.ts","../component/node_modules/@codemirror/state/dist/index.d.ts","../component/node_modules/style-mod/src/style-mod.d.ts","../component/node_modules/@codemirror/view/dist/index.d.ts","../component/node_modules/@lezer/highlight/dist/index.d.ts","../component/node_modules/@codemirror/language/dist/index.d.ts","../component/node_modules/@codemirror/autocomplete/dist/index.d.ts","../component/node_modules/@codemirror/lang-sql/dist/index.d.ts","../component/node_modules/@codemirror/commands/dist/index.d.ts","../component/node_modules/@codemirror/theme-one-dark/dist/index.d.ts","../component/node_modules/@neo4j-cypher/editor-support/src/editor-support.d.ts","../component/node_modules/@neo4j-cypher/codemirror/src/codemirror.d.ts","../component/src/components/composed/query-editor.tsx","../component/src/components/composed/code-preview.tsx","../component/src/components/composed/column-mapping-overlay.tsx","../component/src/components/composed/index.ts","../component/node_modules/echarts/types/dist/shared.d.ts","../component/node_modules/echarts/types/dist/core.d.ts","../component/node_modules/echarts/core.d.ts","../component/node_modules/echarts/types/dist/charts.d.ts","../component/node_modules/echarts/charts.d.ts","../component/node_modules/echarts/types/dist/components.d.ts","../component/node_modules/echarts/components.d.ts","../component/node_modules/echarts/types/dist/renderers.d.ts","../component/node_modules/echarts/renderers.d.ts","../component/node_modules/echarts/types/dist/echarts.d.ts","../component/node_modules/echarts/index.d.ts","../component/src/charts/types.ts","../component/src/charts/theme.ts","../component/src/charts/base-chart.tsx","../component/src/charts/color-threshold.ts","../component/src/charts/styling-rule.ts","../component/src/hooks/usecontainersize.ts","../component/src/charts/chart-utils.ts","../component/src/charts/line-chart.tsx","../component/src/charts/bar-chart.tsx","../component/src/charts/pie-chart.tsx","../component/src/charts/single-value-chart.tsx","../component/node_modules/@neo4j-nvl/base/dist/types/utils/geometry.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/renderers/domrenderer/shared/types.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/types/graph-element.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/modules/externalcallbackhandler.d.ts","../component/node_modules/loglevel/index.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/modules/dataset.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/modules/state/types.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/renderers/domrenderer/canvasrenderer/canvasutils.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/utils/errors.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/utils/hittest.d.ts","../component/node_modules/neo4j-driver-core/types/integer.d.ts","../component/node_modules/neo4j-driver-core/types/mapping.highlevel.d.ts","../component/node_modules/neo4j-driver-core/types/graph-types.d.ts","../component/node_modules/neo4j-driver-core/types/gql-constants.d.ts","../component/node_modules/neo4j-driver-core/types/error.d.ts","../component/node_modules/neo4j-driver-core/types/temporal-types.d.ts","../component/node_modules/neo4j-driver-core/types/record.d.ts","../component/node_modules/neo4j-driver-core/types/spatial-types.d.ts","../component/node_modules/neo4j-driver-core/types/notification.d.ts","../component/node_modules/neo4j-driver-core/types/protocol-version.d.ts","../component/node_modules/neo4j-driver-core/types/result-summary.d.ts","../component/node_modules/neo4j-driver-core/types/notification-filter.d.ts","../component/node_modules/neo4j-driver-core/types/client-certificate.d.ts","../component/node_modules/neo4j-driver-core/types/types.d.ts","../component/node_modules/neo4j-driver-core/types/internal/util.d.ts","../component/node_modules/neo4j-driver-core/types/internal/temporal-util.d.ts","../component/node_modules/neo4j-driver-core/types/internal/observers.d.ts","../component/node_modules/neo4j-driver-core/types/internal/bookmarks.d.ts","../component/node_modules/neo4j-driver-core/types/internal/constants.d.ts","../component/node_modules/neo4j-driver-core/types/internal/logger.d.ts","../component/node_modules/neo4j-driver-core/types/internal/tx-config.d.ts","../component/node_modules/neo4j-driver-core/types/connection.d.ts","../component/node_modules/neo4j-driver-core/types/connection-provider.d.ts","../component/node_modules/neo4j-driver-core/types/internal/connection-holder.d.ts","../component/node_modules/neo4j-driver-core/types/transaction.d.ts","../component/node_modules/neo4j-driver-core/types/transaction-promise.d.ts","../component/node_modules/neo4j-driver-core/types/internal/transaction-executor.d.ts","../component/node_modules/neo4j-driver-core/types/internal/url-util.d.ts","../component/node_modules/neo4j-driver-core/types/internal/server-address.d.ts","../component/node_modules/neo4j-driver-core/types/internal/resolver/base-host-name-resolver.d.ts","../component/node_modules/neo4j-driver-core/types/internal/resolver/configured-custom-resolver.d.ts","../component/node_modules/neo4j-driver-core/types/internal/resolver/index.d.ts","../component/node_modules/neo4j-driver-core/types/internal/object-util.d.ts","../component/node_modules/neo4j-driver-core/types/internal/bolt-agent/node/bolt-agent.d.ts","../component/node_modules/neo4j-driver-core/types/internal/bolt-agent/node/index.d.ts","../component/node_modules/neo4j-driver-core/types/internal/bolt-agent/index.d.ts","../component/node_modules/neo4j-driver-core/types/internal/pool/pool-config.d.ts","../component/node_modules/neo4j-driver-core/types/internal/pool/pool.d.ts","../component/node_modules/neo4j-driver-core/types/internal/pool/index.d.ts","../component/node_modules/neo4j-driver-core/types/internal/index.d.ts","../component/node_modules/neo4j-driver-core/types/result.d.ts","../component/node_modules/neo4j-driver-core/types/result-eager.d.ts","../component/node_modules/neo4j-driver-core/types/transaction-managed.d.ts","../component/node_modules/neo4j-driver-core/types/bookmark-manager.d.ts","../component/node_modules/neo4j-driver-core/types/session.d.ts","../component/node_modules/neo4j-driver-core/types/result-transformers.d.ts","../component/node_modules/neo4j-driver-core/types/internal/query-executor.d.ts","../component/node_modules/neo4j-driver-core/types/driver.d.ts","../component/node_modules/neo4j-driver-core/types/auth.d.ts","../component/node_modules/neo4j-driver-core/types/auth-token-manager.d.ts","../component/node_modules/neo4j-driver-core/types/json.d.ts","../component/node_modules/neo4j-driver-core/types/vector.d.ts","../component/node_modules/neo4j-driver-core/types/mapping.nameconventions.d.ts","../component/node_modules/neo4j-driver-core/types/mapping.rulesfactories.d.ts","../component/node_modules/neo4j-driver-core/types/mapping.decorators.d.ts","../component/node_modules/neo4j-driver-core/types/unsupported-type.d.ts","../component/node_modules/neo4j-driver-core/types/index.d.ts","../component/node_modules/rxjs/dist/types/internal/subscription.d.ts","../component/node_modules/rxjs/dist/types/internal/subscriber.d.ts","../component/node_modules/rxjs/dist/types/internal/operator.d.ts","../component/node_modules/rxjs/dist/types/internal/observable.d.ts","../component/node_modules/rxjs/dist/types/internal/types.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/audittime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/buffercount.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/buffertime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/buffertoggle.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/bufferwhen.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/catcherror.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/combinelatestall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/combineall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/combinelatest.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/combinelatestwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/concatall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/concatmap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/concatmapto.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/concatwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/count.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/debouncetime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/defaultifempty.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/delaywhen.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/distinctuntilchanged.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/distinctuntilkeychanged.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/elementat.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/endwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/every.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/exhaustall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/exhaustmap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/find.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/findindex.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/first.d.ts","../component/node_modules/rxjs/dist/types/internal/subject.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/groupby.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/ignoreelements.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/isempty.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/last.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/map.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mapto.d.ts","../component/node_modules/rxjs/dist/types/internal/notification.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/max.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mergeall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mergemap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/flatmap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mergemapto.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mergescan.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/mergewith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/min.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/connectableobservable.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/observeon.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/onerrorresumenextwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/publishbehavior.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/publishlast.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/publishreplay.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/race.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/racewith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/repeatwhen.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/retrywhen.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/refcount.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/sampletime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/sequenceequal.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/share.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/sharereplay.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/single.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/skiplast.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/skipuntil.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/skipwhile.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/startwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/subscribeon.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/switchall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/switchmap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/switchmapto.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/switchscan.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/take.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/takelast.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/takeuntil.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/takewhile.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/throttletime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/throwifempty.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/timeinterval.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/timeoutwith.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/toarray.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/window.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/windowcount.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/windowtime.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/windowtoggle.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/windowwhen.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/withlatestfrom.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/zipall.d.ts","../component/node_modules/rxjs/dist/types/internal/operators/zipwith.d.ts","../component/node_modules/rxjs/dist/types/operators/index.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/action.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/testmessage.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/subscriptionlog.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/subscriptionloggable.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/coldobservable.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/hotobservable.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/asyncscheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/timerhandle.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/asyncaction.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/virtualtimescheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/testing/testscheduler.d.ts","../component/node_modules/rxjs/dist/types/testing/index.d.ts","../component/node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/dom/animationframes.d.ts","../component/node_modules/rxjs/dist/types/internal/behaviorsubject.d.ts","../component/node_modules/rxjs/dist/types/internal/replaysubject.d.ts","../component/node_modules/rxjs/dist/types/internal/asyncsubject.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/asapscheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/queuescheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/animationframescheduler.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduler/animationframe.d.ts","../component/node_modules/rxjs/dist/types/internal/util/identity.d.ts","../component/node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../component/node_modules/rxjs/dist/types/internal/util/noop.d.ts","../component/node_modules/rxjs/dist/types/internal/util/isobservable.d.ts","../component/node_modules/rxjs/dist/types/internal/lastvaluefrom.d.ts","../component/node_modules/rxjs/dist/types/internal/firstvaluefrom.d.ts","../component/node_modules/rxjs/dist/types/internal/util/argumentoutofrangeerror.d.ts","../component/node_modules/rxjs/dist/types/internal/util/emptyerror.d.ts","../component/node_modules/rxjs/dist/types/internal/util/notfounderror.d.ts","../component/node_modules/rxjs/dist/types/internal/util/objectunsubscribederror.d.ts","../component/node_modules/rxjs/dist/types/internal/util/sequenceerror.d.ts","../component/node_modules/rxjs/dist/types/internal/util/unsubscriptionerror.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/bindcallback.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/bindnodecallback.d.ts","../component/node_modules/rxjs/dist/types/internal/anycatcher.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/combinelatest.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/forkjoin.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/from.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/fromevent.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/fromeventpattern.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/never.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/of.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/onerrorresumenext.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/race.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/range.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/throwerror.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/using.d.ts","../component/node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../component/node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../component/node_modules/rxjs/dist/types/internal/config.d.ts","../component/node_modules/rxjs/dist/types/index.d.ts","../component/node_modules/neo4j-driver/types/result-rx.d.ts","../component/node_modules/neo4j-driver/types/query-runner.d.ts","../component/node_modules/neo4j-driver/types/transaction-rx.d.ts","../component/node_modules/neo4j-driver/types/session-rx.d.ts","../component/node_modules/neo4j-driver/types/driver.d.ts","../component/node_modules/neo4j-driver/types/transaction-managed-rx.d.ts","../component/node_modules/neo4j-driver/types/index.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/utils/jsdriverresulttransformer.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/utils/zoomfunctions.d.ts","../component/node_modules/@neo4j-nvl/base/dist/types/index.d.ts","../component/node_modules/@neo4j-nvl/react/lib/basic-wrapper/basicnvlwrapper.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/base.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/box-select-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/click-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/drag-node-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/draw-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/hover-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/lasso-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/pan-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/interaction-handlers/zoom-interaction.d.ts","../component/node_modules/@neo4j-nvl/interaction-handlers/lib/index.d.ts","../component/node_modules/@neo4j-nvl/react/lib/interactive-nvl-wrapper/types.d.ts","../component/node_modules/@neo4j-nvl/react/lib/interactive-nvl-wrapper/interactivenvlwrapper.d.ts","../component/node_modules/@neo4j-nvl/react/lib/static-picture-wrapper/staticpicturewrapper.d.ts","../component/node_modules/@neo4j-nvl/react/lib/index.d.ts","../component/src/charts/graph-chart.tsx","../component/node_modules/@types/geojson/index.d.ts","../component/node_modules/@types/leaflet/index.d.ts","../component/src/charts/map-chart.tsx","../component/src/charts/index.ts","../component/src/hooks/usewidgetsize.tsx","../component/src/hooks/usegraphexploration.ts","../component/src/hooks/index.ts","../component/src/utils/index.ts","../component/src/index.ts","./src/lib/derive-form-fields.ts","./src/components/__tests__/form-widget-renderer.test.ts","./node_modules/zustand/esm/vanilla.d.mts","./node_modules/zustand/esm/react.d.mts","./node_modules/zustand/esm/index.d.mts","./node_modules/zustand/esm/react/shallow.d.mts","./src/stores/parameter-store.ts","./src/lib/format-parameter-value.ts","./src/components/__tests__/format-parameter-value.test.ts","./src/components/__tests__/widget-outdated.test.ts","./src/components/widget-editor/use-accordion-crud.ts","./src/components/widget-editor/__tests__/use-accordion-crud.test.ts","./node_modules/@tanstack/query-core/build/modern/subscribable.d.ts","./node_modules/@tanstack/query-core/build/modern/focusmanager.d.ts","./node_modules/@tanstack/query-core/build/modern/removable.d.ts","./node_modules/@tanstack/query-core/build/modern/hydration-blevg2lp.d.ts","./node_modules/@tanstack/query-core/build/modern/infinitequeryobserver.d.ts","./node_modules/@tanstack/query-core/build/modern/notifymanager.d.ts","./node_modules/@tanstack/query-core/build/modern/onlinemanager.d.ts","./node_modules/@tanstack/query-core/build/modern/queriesobserver.d.ts","./node_modules/@tanstack/query-core/build/modern/timeoutmanager.d.ts","./node_modules/@tanstack/query-core/build/modern/streamedquery.d.ts","./node_modules/@tanstack/query-core/build/modern/index.d.ts","./node_modules/@tanstack/react-query/build/modern/types.d.ts","./node_modules/@tanstack/react-query/build/modern/usequeries.d.ts","./node_modules/@tanstack/react-query/build/modern/queryoptions.d.ts","./node_modules/@tanstack/react-query/build/modern/usequery.d.ts","./node_modules/@tanstack/react-query/build/modern/usesuspensequery.d.ts","./node_modules/@tanstack/react-query/build/modern/usesuspenseinfinitequery.d.ts","./node_modules/@tanstack/react-query/build/modern/usesuspensequeries.d.ts","./node_modules/@tanstack/react-query/build/modern/useprefetchquery.d.ts","./node_modules/@tanstack/react-query/build/modern/useprefetchinfinitequery.d.ts","./node_modules/@tanstack/react-query/build/modern/infinitequeryoptions.d.ts","./node_modules/@tanstack/react-query/build/modern/queryclientprovider.d.ts","./node_modules/@tanstack/react-query/build/modern/queryerrorresetboundary.d.ts","./node_modules/@tanstack/react-query/build/modern/hydrationboundary.d.ts","./node_modules/@tanstack/react-query/build/modern/useisfetching.d.ts","./node_modules/@tanstack/react-query/build/modern/usemutationstate.d.ts","./node_modules/@tanstack/react-query/build/modern/usemutation.d.ts","./node_modules/@tanstack/react-query/build/modern/mutationoptions.d.ts","./node_modules/@tanstack/react-query/build/modern/useinfinitequery.d.ts","./node_modules/@tanstack/react-query/build/modern/isrestoringprovider.d.ts","./node_modules/@tanstack/react-query/build/modern/index.d.ts","./src/hooks/use-api-keys.ts","./src/lib/api-client.ts","./src/hooks/use-connections.ts","./src/hooks/use-countdown.ts","./src/hooks/use-dashboards.ts","./src/hooks/use-query-execution.ts","./src/lib/schema-types.ts","./src/stores/schema-store.ts","./src/hooks/use-schema.ts","./src/hooks/use-seed-query.ts","./src/hooks/use-theme.ts","./src/hooks/use-users.ts","./src/lib/date-utils.ts","./src/hooks/use-widget-query.ts","./src/hooks/use-widget-templates.ts","./src/hooks/use-write-query-execution.ts","./src/hooks/__tests__/use-countdown.test.ts","./src/hooks/__tests__/use-schema.test.ts","./node_modules/@types/aria-query/index.d.ts","./node_modules/@testing-library/dom/types/matches.d.ts","./node_modules/@testing-library/dom/types/wait-for.d.ts","./node_modules/@testing-library/dom/types/query-helpers.d.ts","./node_modules/@testing-library/dom/types/queries.d.ts","./node_modules/@testing-library/dom/types/get-queries-for-element.d.ts","./node_modules/pretty-format/build/types.d.ts","./node_modules/pretty-format/build/index.d.ts","./node_modules/@testing-library/dom/types/screen.d.ts","./node_modules/@testing-library/dom/types/wait-for-element-to-be-removed.d.ts","./node_modules/@testing-library/dom/types/get-node-text.d.ts","./node_modules/@testing-library/dom/types/events.d.ts","./node_modules/@testing-library/dom/types/pretty-dom.d.ts","./node_modules/@testing-library/dom/types/role-helpers.d.ts","./node_modules/@testing-library/dom/types/config.d.ts","./node_modules/@testing-library/dom/types/suggestions.d.ts","./node_modules/@testing-library/dom/types/index.d.ts","./node_modules/@types/react-dom/test-utils/index.d.ts","./node_modules/@testing-library/react/types/index.d.ts","./src/hooks/__tests__/use-theme.test.ts","./src/hooks/__tests__/use-widget-query.test.ts","./src/lib/capture-preview.ts","./src/lib/capture-dashboard-thumbnails.ts","./src/lib/normalize-value.ts","./src/lib/chart-registry.ts","./src/lib/collect-parameter-names.ts","./src/lib/dashboard-settings.ts","./src/lib/form-field-def.ts","./src/lib/interpolate-title.ts","./src/lib/migrate-color-thresholds.ts","./src/lib/migrate-layout.ts","./src/lib/resolve-cache-options.ts","./src/lib/resolve-click-action.ts","./src/lib/wrap-with-preview-limit.ts","./src/lib/__tests__/api-client.test.ts","./src/lib/__tests__/api-response.test.ts","./src/lib/__tests__/api-utils.test.ts","./src/lib/__tests__/bootstrap.test.ts","./src/lib/__tests__/capture-preview.test.ts","./src/lib/__tests__/chart-registry-mapping.test.ts","./src/lib/__tests__/chart-registry.test.ts","./src/lib/__tests__/collect-parameter-names.test.ts","./src/lib/__tests__/crypto.test.ts","./src/lib/__tests__/dashboard-export.test.ts","./src/lib/__tests__/dashboard-import.test.ts","./src/lib/__tests__/dashboard-settings.test.ts","./src/lib/__tests__/date-utils.test.ts","./src/lib/__tests__/form-field-def.test.ts","./src/lib/__tests__/interpolate-title.test.ts","./src/lib/__tests__/migrate-color-thresholds.test.ts","./src/lib/__tests__/migrate-layout.test.ts","./src/lib/__tests__/neodash-converter.test.ts","./src/lib/__tests__/normalize-value.test.ts","./src/lib/__tests__/query-executor-core.test.ts","./src/lib/__tests__/query-executor.test.ts","./src/lib/__tests__/query-hash.test.ts","./src/lib/__tests__/resolve-cache-options.test.ts","./src/lib/__tests__/resolve-click-action.test.ts","./src/lib/__tests__/schemas.test.ts","./src/lib/__tests__/wrap-with-preview-limit.test.ts","./src/lib/auth/__tests__/api-key.test.ts","./src/lib/auth/__tests__/session.test.ts","./src/lib/auth/__tests__/signup.test.ts","./node_modules/@testcontainers/postgresql/build/postgresql-container.d.ts","./node_modules/@testcontainers/postgresql/build/index.d.ts","./src/lib/db/__tests__/migrations.test.ts","./src/stores/connection-store.ts","./src/stores/dashboard-store.ts","./src/stores/graph-widget-store.ts","./src/stores/__tests__/connection-store.test.ts","./src/stores/__tests__/dashboard-store.test.ts","./src/stores/__tests__/graph-widget-store.test.ts","./src/stores/__tests__/parameter-store.test.ts","./src/stores/__tests__/schema-store.test.ts","./src/types/neo4j-cypher-codemirror.d.ts","./src/types/next-auth.d.ts","./src/types/__tests__/next-auth-types.test.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./node_modules/next-auth/lib/client.d.ts","./node_modules/next-auth/react.d.ts","./src/components/providers.tsx","./src/app/layout.tsx","./src/app/(auth)/login/page.tsx","./src/app/(auth)/signup/page.tsx","./node_modules/lucide-react/dist/lucide-react.d.ts","./src/app/(dashboard)/layout.tsx","./src/app/(dashboard)/page.tsx","./src/components/debounced-text-input.tsx","./src/components/parameter-widget-renderer.tsx","./src/components/graph-exploration-wrapper.tsx","./node_modules/@tanstack/react-table/build/lib/index.d.ts","./src/components/table-renderer.tsx","./src/components/form-widget-renderer.tsx","./src/components/chart-renderer.tsx","./src/components/card-container.tsx","./src/components/dashboard-container.tsx","./src/components/page-tabs.tsx","./src/app/(dashboard)/[id]/page.tsx","./src/components/widget-editor/chart-type-selector.tsx","./src/components/widget-editor/query-editor-panel.tsx","./node_modules/@dnd-kit/utilities/dist/hooks/usecombinedrefs.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useevent.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useisomorphiclayouteffect.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useinterval.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/uselatestvalue.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/uselazymemo.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/usenoderef.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useprevious.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useuniqueid.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/index.d.ts","./node_modules/@dnd-kit/utilities/dist/adjustment.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/types.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/geteventcoordinates.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/index.d.ts","./node_modules/@dnd-kit/utilities/dist/css.d.ts","./node_modules/@dnd-kit/utilities/dist/event/hasviewportrelativecoordinates.d.ts","./node_modules/@dnd-kit/utilities/dist/event/iskeyboardevent.d.ts","./node_modules/@dnd-kit/utilities/dist/event/istouchevent.d.ts","./node_modules/@dnd-kit/utilities/dist/event/index.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/canusedom.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/getownerdocument.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/getwindow.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/index.d.ts","./node_modules/@dnd-kit/utilities/dist/focus/findfirstfocusablenode.d.ts","./node_modules/@dnd-kit/utilities/dist/focus/index.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/isdocument.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/ishtmlelement.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/isnode.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/issvgelement.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/iswindow.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/index.d.ts","./node_modules/@dnd-kit/utilities/dist/types.d.ts","./node_modules/@dnd-kit/utilities/dist/index.d.ts","./node_modules/@dnd-kit/core/dist/types/coordinates.d.ts","./node_modules/@dnd-kit/core/dist/types/direction.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/types.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/closestcenter.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/closestcorners.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/rectintersection.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/pointerwithin.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/helpers.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/abstractpointersensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/pointersensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/types.d.ts","./node_modules/@dnd-kit/core/dist/sensors/usesensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/usesensors.d.ts","./node_modules/@dnd-kit/core/dist/sensors/mouse/mousesensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/mouse/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/touch/touchsensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/touch/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/types.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/keyboardsensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/defaults.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/index.d.ts","./node_modules/@dnd-kit/core/dist/types/events.d.ts","./node_modules/@dnd-kit/core/dist/types/other.d.ts","./node_modules/@dnd-kit/core/dist/types/react.d.ts","./node_modules/@dnd-kit/core/dist/types/rect.d.ts","./node_modules/@dnd-kit/core/dist/types/index.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useautoscroller.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usecachednode.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usesyntheticlisteners.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usecombineactivators.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usedroppablemeasuring.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useinitialvalue.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useinitialrect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userectdelta.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useresizeobserver.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrollableancestors.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrollintoviewifneeded.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrolloffsets.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrolloffsetsdelta.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usesensorsetup.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userects.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usewindowrect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usedragoverlaymeasuring.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/index.d.ts","./node_modules/@dnd-kit/core/dist/store/constructors.d.ts","./node_modules/@dnd-kit/core/dist/store/types.d.ts","./node_modules/@dnd-kit/core/dist/store/actions.d.ts","./node_modules/@dnd-kit/core/dist/store/context.d.ts","./node_modules/@dnd-kit/core/dist/store/reducer.d.ts","./node_modules/@dnd-kit/core/dist/store/index.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/types.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/accessibility.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/components/restorefocus.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/components/index.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/defaults.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/constants.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/distancebetweenpoints.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/getrelativetransformorigin.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/adjustscale.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getrectdelta.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/rectadjustment.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getwindowclientrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/rect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/other/noop.d.ts","./node_modules/@dnd-kit/core/dist/utilities/other/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollableancestors.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollableelement.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollcoordinates.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrolldirectionandspeed.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollelementrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrolloffsets.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollposition.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/documentscrollingelement.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/isscrollable.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/scrollintoviewifneeded.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/index.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/types.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/applymodifiers.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/types.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/dndcontext.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/types.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/context.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/usedndmonitor.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/usedndmonitorprovider.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/animationmanager/animationmanager.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/animationmanager/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/nullifiedcontextprovider/nullifiedcontextprovider.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/nullifiedcontextprovider/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/positionedoverlay/positionedoverlay.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/positionedoverlay/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/usedropanimation.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/usekey.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/dragoverlay.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/index.d.ts","./node_modules/@dnd-kit/core/dist/components/index.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedraggable.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedndcontext.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedroppable.d.ts","./node_modules/@dnd-kit/core/dist/hooks/index.d.ts","./node_modules/@dnd-kit/core/dist/index.d.ts","./node_modules/@dnd-kit/sortable/dist/types/disabled.d.ts","./node_modules/@dnd-kit/sortable/dist/types/data.d.ts","./node_modules/@dnd-kit/sortable/dist/types/strategies.d.ts","./node_modules/@dnd-kit/sortable/dist/types/type-guard.d.ts","./node_modules/@dnd-kit/sortable/dist/types/index.d.ts","./node_modules/@dnd-kit/sortable/dist/components/sortablecontext.d.ts","./node_modules/@dnd-kit/sortable/dist/components/index.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/types.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/usesortable.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/defaults.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/index.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/horizontallistsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/rectsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/rectswapping.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/verticallistsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/index.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/keyboard/sortablekeyboardcoordinates.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/keyboard/index.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/index.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/arraymove.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/arrayswap.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/getsortedrects.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/isvalidindex.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/itemsequal.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/normalizedisabled.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/index.d.ts","./node_modules/@dnd-kit/sortable/dist/index.d.ts","./src/components/widget-editor/form-fields-editor.tsx","./src/components/widget-editor/parameter-config-section.tsx","./src/components/widget-editor/parameter-preview.tsx","./src/components/widget-editor/field-selector-input.tsx","./src/components/widget-editor/action-rules-editor.tsx","./src/components/widget-editor/value-or-param-input.tsx","./src/components/widget-editor/styling-rules-editor.tsx","./src/components/widget-editor-modal.tsx","./src/components/dashboard-assign-panel.tsx","./src/components/save-template-dialog.tsx","./src/app/(dashboard)/[id]/edit/page.tsx","./src/components/db-logos.tsx","./src/app/(dashboard)/connections/page.tsx","./src/app/(dashboard)/settings/api-keys/page.tsx","./src/app/(dashboard)/users/page.tsx","./src/components/dashboard-picker-dialog.tsx","./src/app/(dashboard)/widget-lab/page.tsx","./src/components/__tests__/parameter-widget-renderer.test.tsx","./.next/types/cache-life.d.ts","./.next/types/validator.ts","./.next/types/app/layout.ts","./.next/types/app/(auth)/login/page.ts","./.next/types/app/(auth)/signup/page.ts","./.next/types/app/(dashboard)/page.ts","./.next/types/app/(dashboard)/[id]/page.ts","./.next/types/app/(dashboard)/[id]/edit/page.ts","./.next/types/app/(dashboard)/connections/page.ts","./.next/types/app/(dashboard)/settings/api-keys/page.ts","./.next/types/app/(dashboard)/users/page.ts","./.next/types/app/(dashboard)/widget-lab/page.ts","./.next/types/app/api/auth/[...nextauth]/route.ts","./.next/types/app/api/auth/bootstrap-status/route.ts","./.next/types/app/api/connections/route.ts","./.next/types/app/api/connections/[id]/route.ts","./.next/types/app/api/connections/[id]/schema/route.ts","./.next/types/app/api/connections/[id]/test/route.ts","./.next/types/app/api/connections/test-inline/route.ts","./.next/types/app/api/dashboards/route.ts","./.next/types/app/api/dashboards/[id]/route.ts","./.next/types/app/api/dashboards/[id]/duplicate/route.ts","./.next/types/app/api/dashboards/[id]/export/route.ts","./.next/types/app/api/dashboards/[id]/share/route.ts","./.next/types/app/api/dashboards/import/route.ts","./.next/types/app/api/docs/route.ts","./.next/types/app/api/keys/route.ts","./.next/types/app/api/keys/[id]/route.ts","./.next/types/app/api/openapi/route.ts","./.next/types/app/api/openapi.json/route.ts","./.next/types/app/api/query/route.ts","./.next/types/app/api/query/write/route.ts","./.next/types/app/api/users/route.ts","./.next/types/app/api/users/[id]/route.ts","./.next/types/app/api/widget-templates/route.ts","./.next/types/app/api/widget-templates/[id]/route.ts","./node_modules/@types/ssh2-streams/index.d.ts","../node_modules/@types/json-schema/index.d.ts"],"fileIdsList":[[77,126,143,144,319,2177],[77,126,143,144,319,2178],[77,126,143,144,319,2379],[77,126,143,144,319,2192],[77,126,143,144,319,2381],[77,126,143,144,319,2181],[77,126,143,144,319,2382],[77,126,143,144,319,2383],[77,126,143,144,319,2385],[77,126,143,144,473,1004],[77,126,143,144,473,1007],[77,126,143,144,473,1019],[77,126,143,144,473,1021],[77,126,143,144,473,1023],[77,126,143,144,473,1018],[77,126,143,144,473,1026],[77,126,143,144,473,1031],[77,126,143,144,473,1034],[77,126,143,144,473,1029],[77,126,143,144,473,1036],[77,126,143,144,473,1041],[77,126,143,144,473,1028],[77,126,143,144,473,1043],[77,126,143,144,473,1046],[77,126,143,144,473,1045],[77,126,143,144,473,1052],[77,126,143,144,473,1050],[77,126,143,144,473,1055],[77,126,143,144,473,1057],[77,126,143,144,473,1060],[77,126,143,144,473,1059],[77,126,143,144,473,1065],[77,126,143,144,473,1064],[77,126,143,144,319,2176],[77,126,143,144,426,427,428,429],[77,126,143,144],[60,77,126,143,144,473,476,1004,1007,1018,1019,1021,1023,1026,1028,1029,1031,1034,1036,1041,1043,1045,1046,1050,1052,1055,1057,1059,1060,1064,1065,2176,2177,2178,2180,2181,2192,2379,2381,2382,2383,2385],[77,126,143,144,481],[77,126,143,144,585],[77,126,143,144,490,585],[77,126,138,143,144,147,148,585],[77,126,143,144,148,490,492,493,582,583,584],[77,126,127,131,138,140,143,144,146,148,582,657,658,900,901],[77,126,127,138,143,144,148,582],[77,126,143,144,490],[60,77,126,143,144,477,478],[77,126,143,144,148,477],[77,126,143,144,930,938],[77,126,143,144,921,922,923,924,925,927,930,938,939],[77,126,143,144,927,930],[77,126,143,144,921],[77,126,143,144,930],[77,126,143,144,926,930],[77,126,143,144,920,926],[77,126,143,144,919,928,930,939],[77,126,143,144,930,932,938],[77,126,143,144,930,934,935,938],[77,126,143,144,928,930,933,936,937],[77,126,143,144,930,936],[77,126,143,144,918,921,926,930,934,938],[77,126,143,144,917,918,919,920,926,927,929,938],[77,126,143,144,939,987],[77,126,143,144,737,739,939],[77,126,143,144,737,804,939],[77,126,143,144,737,889,939],[77,126,143,144,739,804,889,984,985,986],[63,77,126,143,144,2282],[77,126,143,144,2284],[77,126,143,144,2282],[77,126,143,144,2282,2283,2285,2286],[77,126,143,144,2281],[63,77,126,143,144,2227,2251,2256,2275,2287,2312,2315,2316],[77,126,143,144,2316,2317],[77,126,143,144,2256,2275],[63,77,126,143,144,2319],[77,126,143,144,2319,2320,2321,2322],[77,126,143,144,2256],[77,126,143,144,2319],[63,77,126,143,144,2256],[77,126,143,144,2324],[77,126,143,144,2325,2327,2329],[77,126,143,144,2326],[63,77,126,143,144],[77,126,143,144,2328],[63,77,126,143,144,2227,2256],[63,77,126,143,144,2315,2330,2333],[77,126,143,144,2331,2332],[77,126,143,144,2227,2256,2281,2318],[77,126,143,144,2333,2334],[77,126,143,144,2287,2318,2323,2335],[77,126,143,144,2275,2337,2338,2339],[63,77,126,143,144,2281],[63,77,126,143,144,2227,2256,2275,2281],[63,77,126,143,144,2256,2281],[77,126,143,144,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274],[77,126,143,144,2256,2281],[77,126,143,144,2251,2259],[77,126,143,144,2256,2277],[77,126,143,144,2206,2256],[77,126,143,144,2227],[77,126,143,144,2251],[77,126,143,144,2341],[77,126,143,144,2251,2256,2281,2312,2315,2336,2340],[77,126,143,144,2227,2313],[77,126,143,144,2313,2314],[77,126,143,144,2227,2256,2281],[77,126,143,144,2239,2240,2241,2242,2244,2246,2250],[77,126,143,144,2247],[77,126,143,144,2247,2248,2249],[77,126,143,144,2240,2247],[77,126,143,144,2240,2256],[77,126,143,144,2243],[63,77,126,143,144,2239,2240],[77,126,143,144,2237,2238],[63,77,126,143,144,2237,2240],[77,126,143,144,2245],[63,77,126,143,144,2236,2239,2256,2281],[77,126,143,144,2240],[63,77,126,143,144,2277],[77,126,143,144,2277,2278,2279,2280],[77,126,143,144,2277,2278],[63,77,126,143,144,2227,2236,2256,2275,2276,2278,2336],[77,126,143,144,2228,2236,2251,2256,2281],[77,126,143,144,2228,2229,2252,2253,2254,2255],[63,77,126,143,144,2227],[77,126,143,144,2230],[77,126,143,144,2230,2256],[77,126,143,144,2230,2231,2232,2233,2234,2235],[77,126,143,144,2288,2289,2290],[77,126,143,144,2236,2291,2298,2300,2311],[77,126,143,144,2299],[77,126,143,144,2227,2256],[77,126,143,144,2292,2293,2294,2295,2296,2297],[77,126,143,144,2255],[77,126,143,144,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310],[77,126,143,144,2347],[63,77,126,143,144,2341,2346],[77,126,143,144,2349],[77,126,143,144,2349,2350,2351],[77,126,143,144,2227,2341],[63,77,126,143,144,2227,2275,2341,2346,2349],[77,126,143,144,2346,2348,2352,2357,2360,2367],[77,126,143,144,2359],[77,126,143,144,2358],[77,126,143,144,2346],[77,126,143,144,2353,2354,2355,2356],[77,126,143,144,2342,2343,2344,2345],[77,126,143,144,2341,2343],[77,126,143,144,2361,2362,2363,2364,2365,2366],[77,126,143,144,2206],[77,126,143,144,2206,2207],[77,126,143,144,2210,2211,2212],[77,126,143,144,2214,2215,2216],[77,126,143,144,2218],[77,126,143,144,2195,2196,2197,2198,2199,2200,2201,2202,2203],[77,126,143,144,2204,2205,2208,2209,2213,2217,2219,2225,2226],[77,126,143,144,2220,2221,2222,2223,2224],[77,126,143,144,489],[77,126,143,144,2044],[77,126,143,144,2044,2046],[77,126,143,144,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053],[77,126,143,144,2044,2046,2047],[63,77,126,143,144,2054],[63,77,126,143,144,244,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073],[77,126,143,144,2054,2055],[63,77,126,143,144,244],[77,126,143,144,2054],[77,126,143,144,2054,2055,2064],[77,126,143,144,2054,2055,2057],[77,126,143,144,1070,1675],[77,126,143,144,2156],[77,126,143,144,657],[77,126,143,144,2097],[77,126,143,144,2094,2095,2096,2097,2098,2101,2102,2103,2104,2105,2106,2107,2108],[77,126,143,144,2093],[77,126,143,144,2100],[77,126,143,144,2094,2095,2096],[77,126,143,144,2094,2095],[77,126,143,144,2097,2098,2100],[77,126,143,144,2095],[63,77,126,143,144,181,336,2109,2110],[77,126,143,144,534,535],[77,126,140,143,144,146,158,176,617],[77,126,137,143,144,158,176,617,618],[77,123,124,126,143,144],[77,125,126,143,144],[126,143,144],[77,126,131,143,144,161],[77,126,127,132,137,143,144,146,158,169],[77,126,127,128,137,143,144,146],[72,73,74,77,126,143,144],[77,126,129,143,144,170],[77,126,130,131,138,143,144,147],[77,126,131,143,144,158,166],[77,126,132,134,137,143,144,146],[77,125,126,133,143,144],[77,126,134,135,143,144],[77,126,136,137,143,144],[77,125,126,137,143,144],[77,126,137,138,139,143,144,158,169],[77,126,137,138,139,143,144,153,158,161],[77,119,126,134,137,140,143,144,146,158,169],[77,126,137,138,140,141,143,144,146,158,166,169],[77,126,140,142,143,144,158,166,169],[75,76,77,78,79,80,81,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175],[77,126,137,143,144],[77,126,143,144,145,169],[77,126,134,137,143,144,146,158],[77,126,143,144,147],[77,126,143,144,148],[77,125,126,143,144,149],[77,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175],[77,126,143,144,151],[77,126,143,144,152],[77,126,137,143,144,153,154],[77,126,143,144,153,155,170,172],[77,126,138,143,144],[77,126,137,143,144,158,159,161],[77,126,143,144,160,161],[77,126,143,144,158,159],[77,126,143,144,161],[77,126,143,144,162],[77,123,126,143,144,158,163,169],[77,126,137,143,144,164,165],[77,126,143,144,164,165],[77,126,131,143,144,146,158,166],[77,126,143,144,167],[77,126,143,144,146,168],[77,126,140,143,144,152,169],[77,126,131,143,144,170],[77,126,143,144,158,171],[77,126,143,144,145,172],[77,126,143,144,173],[77,119,126,143,144],[77,119,126,137,139,143,144,149,158,161,169,171,172,174],[77,126,143,144,158,175],[63,67,77,126,143,144,177,178,179,181,421,469],[63,67,77,126,143,144,177,178,179,180,336,421,469],[63,67,77,126,143,144,177,178,180,181,421,469],[63,77,126,143,144,181,336,337],[63,77,126,143,144,181,336],[63,67,77,126,143,144,178,179,180,181,421,469],[63,67,77,126,143,144,177,179,180,181,421,469],[61,62,77,126,143,144],[77,126,143,144,158,176],[77,126,137,140,142,143,144,146,158,176],[77,126,143,144,521,525,528,530,531,532,533,536,966],[77,126,143,144,562],[77,126,143,144,562,563],[77,126,143,144,525,526,528,529],[77,126,143,144,525],[77,126,143,144,525,526,528],[77,126,143,144,525,526],[77,126,143,144,520,553,554],[77,126,143,144,520,553],[77,126,143,144,520,527],[77,126,143,144,520],[77,126,143,144,520,527,567],[77,126,143,144,522],[77,126,143,144,520,521,522,523,524],[77,126,143,144,915],[77,126,143,144,169,176],[77,126,143,144,166],[77,126,143,144,166,480],[77,126,143,144,659,663,668,669,713],[77,126,143,144,659,664,669],[77,126,143,144,659,664,668,669,739,804,855,889],[77,126,143,144,659,663,664,668,890],[77,126,143,144,659],[77,126,143,144,706],[77,126,143,144,659,661,662,663,664,666,669,710,712,713,714,734,735,736,890],[77,126,143,144,699,718,731],[77,126,143,144,659,668,699],[77,126,143,144,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,690,691,692,693,694,702],[77,126,143,144,659,669,701,890],[77,126,143,144,659,664,669,701,890],[77,126,143,144,659,664,668,669,699,700,890],[77,126,143,144,659,664,668,669,699,701,890],[77,126,143,144,659,664,669,699,701,890],[77,126,143,144,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,690,691,692,693,694,701,702],[77,126,143,144,659,669,681,701,890],[77,126,143,144,659,664,669,689,890],[77,126,143,144,659,664,666,668,699,713,717,718,723,724,725,726,728,731],[77,126,143,144,659,660,664,668,699,701,713,715,721,722,728,731],[77,126,143,144,659,699,703],[77,126,143,144,670,696,697,698,699,700,703,717,723,725,727,728,729,730,732,733,738],[77,126,143,144,659,668,699,703],[77,126,143,144,659,668,699,718,728],[77,126,143,144,659,664,666,668,699,701,714,723,728,731],[77,126,143,144,715,719,720,721,722,731],[77,126,143,144,659,663,668,699,701,711,714,716,720,721,723,728,731],[77,126,143,144,659,666,717,719,723,731],[77,126,143,144,659,664,668,699,713,714,723,728],[77,126,143,144,659,664,666,667,668,696,699,703,711,714,717,718,723,728,731],[77,126,143,144,662,663,664,666,667,668,699,703,711,718,719,728,730],[77,126,143,144,659,664,666,668,669,699,701,714,723,728,731],[77,126,143,144,659,699,730],[77,126,143,144,659,664,668,713,723,727,731],[77,126,143,144,666,667,668,711,720],[77,126,143,144,659,663,670,695,696,697,698,700,701,890],[77,126,143,144,669,670,696,697,698,699,700,719,730,737,739,890],[77,126,143,144,659,668],[77,126,143,144,659,667,668,703,711,718,720,729,890],[77,126,143,144,663,668,669],[77,126,143,144,783,784,792],[77,126,143,144,659,710,783],[77,126,143,144,744,745,746,747,748,750,751,752,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,891],[77,126,143,144,659,669,743,754,890],[77,126,143,144,659,669,743,890],[77,126,143,144,659,664,669,743,890],[77,126,143,144,659,664,668,669,741,742,783,890],[77,126,143,144,659,664,668,669,743,783,890],[77,126,143,144,659,743,890],[77,126,143,144,659,664,669,743,749,890],[77,126,143,144,659,664,669,743,783,890],[77,126,143,144,743,744,745,746,747,748,750,751,752,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,799,891],[77,126,143,144,659,743,753,890],[77,126,143,144,659,669,743,756,890],[77,126,143,144,659,669,743,783,890],[77,126,143,144,659,669,743,749,756,783,890],[77,126,143,144,659,664,669,743,749,783,890],[77,126,143,144,659,664,666,668,713,783,784,785,787,791,792,797,798,892,893,894,895,896],[77,126,143,144,659,660,664,668,713,783,787,791,792,798,892],[77,126,143,144,659,783,892],[77,126,143,144,740,741,742,753,779,780,781,782,783,785,787,790,791,793,798,800,801,803,892,893,897],[77,126,143,144,659,668,783,892],[77,126,143,144,659,668,779,783],[77,126,143,144,659,664,668,783,787],[77,126,143,144,659,666,667,668,711,714,716,783,787,792,893],[77,126,143,144,788,789,792,794,795,796,797],[77,126,143,144,659,663,666,667,668,711,714,716,742,743,783,787,789,792,795,893],[77,126,143,144,659,666,668,785,788,792,892,893],[77,126,143,144,659,664,668,713,714,716,783,787,893],[77,126,143,144,659,668,714,716,786],[77,126,143,144,659,668,714,716,787,791,893],[77,126,143,144,659,664,666,667,668,711,714,716,783,784,785,787,792,892,893],[77,126,143,144,662,663,664,666,667,668,711,783,784,787,788,791,892],[77,126,143,144,659,663,664,666,667,668,669,711,714,716,743,783,784,787,792,893],[77,126,143,144,659,668,753,783,791,799],[77,126,143,144,659,664,710,713,786,792,893,897],[77,126,143,144,666,667,668,711,789],[77,126,143,144,659,663,740,741,742,743,778,780,781,782,890],[77,126,143,144,669,737,740,741,742,780,781,782,783,791,804,890,892],[77,126,143,144,802],[77,126,143,144,659,664,667,668,711,743,784,789,790,890],[77,126,143,144,658,659,664,897,898],[77,126,143,144,898,899],[77,126,143,144,660,899],[77,126,143,144,658,659,661,664,668,713,787,792,804,893],[77,126,143,144,659,710],[77,126,143,144,662,663,664,666,668,669,890],[77,126,143,144,659,663,664,668,669,706,712],[77,126,143,144,890],[77,126,143,144,737],[77,126,143,144,834,851],[77,126,143,144,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,824,825,826,827,828,829,836],[77,126,143,144,659,669,835,890],[77,126,143,144,659,664,669,835,890],[77,126,143,144,659,664,669,834,890],[77,126,143,144,659,664,668,669,834,835,890],[77,126,143,144,659,664,669,834,835,890],[77,126,143,144,659,664,669,710,835,890],[77,126,143,144,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,824,825,826,827,828,829,835,836],[77,126,143,144,659,669,815,835,890],[77,126,143,144,659,664,669,823,890],[77,126,143,144,659,666,668,713,834,841,843,844,845,848,850,851],[77,126,143,144,659,660,664,668,713,834,835,838,839,840,850,851],[77,126,143,144,831,832,833,834,837,841,845,848,849,850,852,853,854],[77,126,143,144,659,668,834,837],[77,126,143,144,659,834,837],[77,126,143,144,659,668,834,850],[77,126,143,144,659,664,666,668,714,834,835,841,850,851],[77,126,143,144,838,839,840,846,847,851],[77,126,143,144,659,663,668,714,716,834,835,839,841,850,851],[77,126,143,144,659,666,841,845,846,851],[77,126,143,144,659,664,666,667,668,711,714,834,837,841,845,850,851],[77,126,143,144,662,663,664,666,667,668,711,834,837,846,850],[77,126,143,144,659,664,666,668,669,714,834,835,841,850,851],[77,126,143,144,659,834],[77,126,143,144,659,664,668,713,841,849,851],[77,126,143,144,666,667,668,711,847],[77,126,143,144,659,663,830,831,832,833,835,890],[77,126,143,144,669,831,832,833,834,855,890],[77,126,143,144,659,661,664,713,841,842,849],[77,126,143,144,659,661,664,668,713,841,850,851],[77,126,143,144,668,669],[77,126,143,144,704,705],[77,126,143,144,707,708],[77,126,143,144,668,669,711],[77,126,143,144,668,706,709],[77,126,143,144,659,663,664,665,666,667,669],[77,126,143,144,864,882,887],[77,126,143,144,659,668,882],[77,126,143,144,857,877,878,879,880,885],[77,126,143,144,659,664,669,884,890],[77,126,143,144,659,664,668,669,882,883,890],[77,126,143,144,659,664,668,669,882,884,890],[77,126,143,144,857,877,878,879,880,884,885],[77,126,143,144,659,664,669,876,882,884,890],[77,126,143,144,659,669,884,890],[77,126,143,144,659,664,669,882,884,890],[77,126,143,144,659,664,666,668,713,861,862,863,864,867,872,873,882,887],[77,126,143,144,659,660,664,668,713,867,872,882,886,887],[77,126,143,144,659,882,886],[77,126,143,144,856,858,859,860,863,865,867,872,873,875,876,882,883,886,888],[77,126,143,144,659,668,882,886],[77,126,143,144,659,668,867,875,882],[77,126,143,144,659,664,666,667,668,714,716,867,873,882,884,887],[77,126,143,144,868,869,870,871,874,887],[77,126,143,144,659,664,666,667,668,711,714,716,858,867,869,873,874,882,884,887],[77,126,143,144,659,666,863,871,873,887],[77,126,143,144,659,664,668,713,714,716,867,873,882],[77,126,143,144,659,668,714,716,786,873],[77,126,143,144,659,664,666,667,668,711,714,716,863,864,867,873,882,886,887],[77,126,143,144,662,663,664,666,667,668,711,864,867,871,875,882,886],[77,126,143,144,659,664,666,667,668,669,714,716,864,867,873,882,884,887],[77,126,143,144,659,668,713,714,786,865,866,873,887],[77,126,143,144,666,667,668,711,874],[77,126,143,144,659,663,856,858,859,860,881,883,884,890],[77,126,143,144,659,882,884],[77,126,143,144,737,856,858,859,860,875,882,883,889],[77,126,143,144,659,667,668,711,864,874,884,890],[77,126,143,144,659,662,664,668,669],[77,126,143,144,661,663,668,669],[77,126,143,144,969,970],[77,126,143,144,969,970,971,972],[77,126,143,144,969,971],[77,126,143,144,969],[77,126,143,144,473,477,956,959,962,979,980,981],[77,126,143,144,963],[63,77,126,143,144,956,962,981],[77,126,143,144,473,477,959,962,979],[77,126,143,144,473],[77,126,143,144,956,962],[77,126,143,144,947,948,949,956,957,958,960,962,963],[77,126,143,144,960,962],[77,126,143,144,947],[77,126,143,144,962],[77,126,143,144,959,962],[77,126,143,144,946,959],[77,126,143,144,945,955,957,962],[77,126,143,144,932,956,962],[77,126,143,144,951,952,956,962],[77,126,143,144,950,953,954,955,962],[77,126,143,144,953,962],[77,126,143,144,918,947,951,956,959,962],[77,126,143,144,918,944,945,946,956,959,960,961],[77,126,143,144,950],[63,77,126,143,144,956,962,2173],[69,77,126,143,144],[77,126,143,144,424],[77,126,143,144,431],[77,126,143,144,185,199,200,201,203,418],[77,126,143,144,185,224,226,228,229,232,418,420],[77,126,143,144,185,189,191,192,193,194,195,407,418,420],[77,126,143,144,418],[77,126,143,144,200,302,388,397,414],[77,126,143,144,185],[77,126,143,144,182,414],[77,126,143,144,236],[77,126,143,144,235,418,420],[77,126,140,143,144,284,302,331,475],[77,126,140,143,144,295,311,397,413],[77,126,140,143,144,349],[77,126,143,144,401],[77,126,143,144,400,401,402],[77,126,143,144,400],[71,77,126,140,143,144,182,185,189,192,196,197,198,200,204,212,213,342,367,398,418,421],[77,126,143,144,185,202,220,224,225,230,231,418,475],[77,126,143,144,202,475],[77,126,143,144,213,220,282,418,475],[77,126,143,144,475],[77,126,143,144,185,202,203,475],[77,126,143,144,227,475],[77,126,143,144,196,399,406],[77,126,143,144,152,244,414],[77,126,143,144,244,414],[63,77,126,143,144,303],[77,126,143,144,299,347,414,457,458],[77,126,143,144,394,451,452,453,454,456],[77,126,143,144,393],[77,126,143,144,393,394],[77,126,143,144,193,343,344,345],[77,126,143,144,343,346,347],[77,126,143,144,455],[77,126,143,144,343,347],[63,77,126,143,144,186,445],[63,77,126,143,144,169],[63,77,126,143,144,202,272],[63,77,126,143,144,202],[77,126,143,144,270,274],[63,77,126,143,144,271,423],[77,126,143,144,2170],[63,67,77,126,140,143,144,176,177,178,179,180,181,421,467,468],[77,126,140,143,144],[77,126,140,143,144,189,251,343,353,368,388,403,404,418,419,475],[77,126,143,144,212,405],[77,126,143,144,421],[77,126,143,144,184],[63,77,126,143,144,284,298,310,320,322,413],[77,126,143,144,152,284,298,319,320,321,413,474],[77,126,143,144,313,314,315,316,317,318],[77,126,143,144,315],[77,126,143,144,319],[77,126,143,144,242,243,244,246],[63,77,126,143,144,237,238,239,245],[77,126,143,144,242,245],[77,126,143,144,240],[77,126,143,144,241],[63,77,126,143,144,244,271,423],[63,77,126,143,144,244,422,423],[63,77,126,143,144,244,423],[77,126,143,144,368,410],[77,126,143,144,410],[77,126,140,143,144,419,423],[77,126,143,144,307],[77,125,126,143,144,306],[77,126,143,144,214,252,290,292,294,295,296,297,340,343,413,416,419],[77,126,143,144,214,328,343,347],[77,126,143,144,295,413],[63,77,126,143,144,295,304,305,307,308,309,310,311,312,323,324,325,326,327,329,330,413,414,475],[77,126,143,144,289],[77,126,140,143,144,152,214,215,251,266,296,340,341,342,347,368,388,409,418,419,420,421,475],[77,126,143,144,413],[77,125,126,143,144,200,293,296,342,409,411,412,419],[77,126,143,144,295],[77,125,126,143,144,251,256,285,286,287,288,289,290,291,292,294,413,414],[77,126,140,143,144,256,257,285,419,420],[77,126,143,144,200,342,343,368,409,413,419],[77,126,140,143,144,418,420],[77,126,140,143,144,158,416,419,420],[77,126,140,143,144,152,169,182,189,202,214,215,217,252,253,258,263,266,292,296,343,353,355,358,360,363,364,365,366,367,388,408,409,414,416,418,419,420],[77,126,140,143,144,158],[77,126,143,144,185,186,187,189,194,197,202,220,408,416,417,421,423,475],[77,126,140,143,144,158,169,232,234,236,237,238,239,246,475],[77,126,143,144,152,169,182,224,234,262,263,264,265,292,343,358,367,368,374,377,378,388,409,414,416],[77,126,143,144,196,197,212,342,367,409,418],[77,126,140,143,144,169,186,189,292,372,416,418],[77,126,143,144,283],[77,126,140,143,144,375,376,385],[77,126,143,144,416,418],[77,126,143,144,290,293],[77,126,143,144,292,296,408,423],[77,126,140,143,144,152,218,224,265,358,368,374,377,380,416],[77,126,140,143,144,196,212,224,381],[77,126,143,144,185,217,383,408,418],[77,126,140,143,144,169,418],[77,126,140,143,144,202,216,217,218,229,247,382,384,408,418],[71,77,126,143,144,214,296,387,421,423],[77,126,140,143,144,152,169,189,196,204,212,215,252,258,262,263,264,265,266,292,343,355,368,369,371,373,388,408,409,414,415,416,423],[77,126,140,143,144,158,196,374,379,385,416],[77,126,143,144,207,208,209,210,211],[77,126,143,144,253,359],[77,126,143,144,361],[77,126,143,144,359],[77,126,143,144,361,362],[77,126,140,143,144,189,192,193,251,419],[77,126,140,143,144,152,184,186,214,252,266,296,351,352,388,416,420,421,423],[77,126,140,143,144,152,169,188,193,292,352,415,419],[77,126,143,144,285],[77,126,143,144,286],[77,126,143,144,287],[77,126,143,144,414],[77,126,143,144,233,249],[77,126,140,143,144,189,233,252],[77,126,143,144,248,249],[77,126,143,144,250],[77,126,143,144,233,234],[77,126,143,144,233,267],[77,126,143,144,233],[77,126,143,144,253,357,415],[77,126,143,144,356],[77,126,143,144,234,414,415],[77,126,143,144,354,415],[77,126,143,144,234,414],[77,126,143,144,340],[77,126,143,144,189,194,252,281,284,290,292,296,298,301,332,335,339,343,387,408,416,419],[77,126,143,144,275,278,279,280,299,300,347],[63,77,126,143,144,179,181,244,333,334],[63,77,126,143,144,179,181,244,333,334,338],[77,126,143,144,396],[77,126,143,144,200,257,295,296,307,311,343,387,389,390,391,392,394,395,398,408,413,418],[77,126,143,144,347],[77,126,143,144,351],[77,126,140,143,144,252,268,348,350,353,387,416,421,423],[77,126,143,144,275,276,277,278,279,280,299,300,347,422],[71,77,126,140,143,144,152,169,215,233,234,266,292,296,385,386,388,408,409,418,419,421],[77,126,143,144,257,259,262,409],[77,126,140,143,144,253,418],[77,126,143,144,256,295],[77,126,143,144,255],[77,126,143,144,257,258],[77,126,143,144,254,256,418],[77,126,140,143,144,188,257,259,260,261,418,419],[63,77,126,143,144,343,344,346],[77,126,143,144,219],[63,77,126,143,144,186],[63,77,126,143,144,414],[63,71,77,126,143,144,266,296,421,423],[77,126,143,144,186,445,446],[63,77,126,143,144,274],[63,77,126,143,144,152,169,184,231,269,271,273,423],[77,126,143,144,202,414,419],[77,126,143,144,370,414],[77,126,143,144,343],[63,77,126,138,140,143,144,152,184,220,226,274,421,422],[63,77,126,143,144,177,178,179,180,181,421,469],[63,64,65,66,67,77,126,143,144],[77,126,131,143,144],[77,126,143,144,221,222,223],[77,126,143,144,221],[63,67,77,126,140,142,143,144,152,176,177,178,179,180,181,182,184,215,319,380,418,420,423,469],[77,126,143,144,433],[77,126,143,144,435],[77,126,143,144,437],[77,126,143,144,2171],[77,126,143,144,439],[77,126,143,144,441,442,443],[77,126,143,144,447],[68,70,77,126,143,144,425,430,432,434,436,438,440,444,448,450,460,461,463,473,474,475,476],[77,126,143,144,449],[77,126,143,144,459],[77,126,143,144,271],[77,126,143,144,462],[77,125,126,143,144,257,259,260,262,310,414,464,465,466,469,470,471,472],[77,126,143,144,176],[77,126,143,144,486],[77,126,127,138,143,144,158,484,485],[77,126,143,144,488],[77,126,143,144,487],[77,126,143,144,509],[77,126,143,144,507,509],[77,126,143,144,498,506,507,508,510,512],[77,126,143,144,496],[77,126,143,144,499,504,509,512],[77,126,143,144,495,512],[77,126,143,144,499,500,503,504,505,512],[77,126,143,144,499,500,501,503,504,512],[77,126,143,144,496,497,498,499,500,504,505,506,508,509,510,512],[77,126,143,144,512],[77,126,143,144,494,496,497,498,499,500,501,503,504,505,506,507,508,509,510,511],[77,126,143,144,494,512],[77,126,143,144,499,501,502,504,505,512],[77,126,143,144,503,512],[77,126,143,144,504,505,509,512],[77,126,143,144,497,507],[77,126,143,144,158],[77,126,143,144,931],[77,126,143,144,932],[77,126,143,144,2099],[77,126,143,144,542,551,552],[77,126,143,144,541,542],[77,126,143,144,514,515],[77,126,143,144,513,516],[77,126,143,144,603,604,605,607,608,609,610,611],[77,126,143,144,606],[77,126,143,144,613],[77,126,143,144,616,622,624,625,626],[77,126,143,144,615],[77,126,143,144,612],[77,126,143,144,158,619,620,621],[77,126,143,144,619,623],[77,126,143,144,619],[77,126,143,144,614,615,623,626,627,628],[77,126,143,144,612,621,629,630,633,639],[77,126,143,144,629,636,637,638],[77,126,143,144,629,637],[77,126,143,144,158,621,635],[77,126,143,144,635],[77,126,143,144,612,621,630,644],[77,126,143,144,158,619,621,629,630,631,633,634,635,643],[77,126,143,144,158,619,621,632,633,635],[77,126,143,144,612,621,629,630,631,632,633,634,635,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,655,656],[77,126,143,144,612,619,629],[77,126,143,144,629],[77,126,143,144,635,641,644],[77,126,143,144,158,621,630,631,633,634],[77,126,143,144,158,613,620],[77,126,143,144,621,629,631],[77,126,143,144,619,632,633],[77,126,143,144,619,633],[77,126,143,144,619,629,632,633],[77,126,143,144,619,632],[77,126,143,144,633,650,652,653,654],[77,91,95,126,143,144,169],[77,91,126,143,144,158,169],[77,86,126,143,144],[77,88,91,126,143,144,166,169],[77,126,143,144,146,166],[77,86,126,143,144,176],[77,88,91,126,143,144,146,169],[77,83,84,87,90,126,137,143,144,158,169],[77,91,98,126,143,144],[77,83,89,126,143,144],[77,91,112,113,126,143,144],[77,87,91,126,143,144,161,169,176],[77,112,126,143,144,176],[77,85,86,126,143,144,176],[77,91,126,143,144],[77,85,86,87,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,115,116,117,118,126,143,144],[77,91,106,126,143,144],[77,91,98,99,126,143,144],[77,89,91,99,100,126,143,144],[77,90,126,143,144],[77,83,86,91,126,143,144],[77,91,95,99,100,126,143,144],[77,95,126,143,144],[77,89,91,94,126,143,144,169],[77,83,88,91,98,126,143,144],[77,86,91,112,126,143,144,174,176],[77,126,143,144,552,578],[77,126,143,144,538],[77,126,137,138,140,141,142,143,144,146,158,166,169,175,176,513,538,539,540,542,543,545,546,547,548,549,550,551,552],[77,126,143,144,538,539,540,544],[77,126,143,144,540],[77,126,143,144,542,552],[77,126,143,144,569],[77,126,143,144,537,578,966],[77,126,143,144,520,521,523,524,525,528,530,531,555,556,558,565,566,568,966],[77,126,143,144,530,572,573,966],[77,126,143,144,530,556,560,966],[77,126,143,144,520,528,530,555,966],[77,126,143,144,545],[77,126,143,144,520,530,537,555,557,574,966],[77,126,143,144,552,576,578],[77,126,129,138,143,144,158,520,525,528,530,537,552,555,556,557,558,560,561,564,565,566,570,571,574,575,578,966],[77,126,143,144,530,545,555,556,966],[77,126,143,144,530,572,573,574,966],[77,126,143,144,530,545,557,558,559,966],[77,126,129,138,143,144,158,520,525,528,530,537,545,552,555,556,557,558,559,560,561,564,565,566,570,571,572,573,574,575,576,577,578,966],[77,126,143,144,520,525,528,530,531,537,545,555,556,557,558,559,560,561,572,573,574,966,967,968,973],[77,126,143,144,1001],[77,126,143,144,992,993],[77,126,143,144,989,990,992,994,995,1000],[77,126,143,144,990,992],[77,126,143,144,1000],[77,126,143,144,992],[77,126,143,144,989,990,992,995,996,997,998,999],[77,126,143,144,989,990,991],[77,126,143,144,2034,2035],[77,126,143,144,2034],[77,126,143,144,148,490,491,492],[77,126,143,144,943,974],[63,77,126,143,144,450,460,2031,2174],[63,77,126,143,144,450,460,1005,2031,2174],[63,77,126,143,144,460,940,2031,2038,2039,2074,2077,2079,2089,2115,2123,2160,2174,2179,2190,2191,2376,2377,2378],[63,77,126,143,144,460,940,2031,2038,2039,2078,2079,2119,2123,2179,2190,2191],[63,77,126,143,144,2031,2077,2179,2380],[63,77,126,143,144,460,2031,2085,2174,2179],[63,77,126,143,144,460,1040,2031,2077,2079,2174,2179],[63,77,126,143,144,2031,2075,2179],[63,77,126,143,144,940,982,1676,2031,2086,2168,2174,2179],[63,77,126,143,144,460,940,2031,2077,2089,2117,2174,2179,2376,2384],[77,126,143,144,1003],[77,126,143,144,974,977,1007],[77,126,143,144,1005,1006],[77,126,143,144,974,976,977,978,1019],[77,126,143,144,737,940,941,1006,1010,1011,1015,1016,1017],[77,126,143,144,974,977,978,1021],[77,126,143,144,473,737,940,941,1010,1011,1014,1015],[77,126,143,144,974,977,978,1023],[77,126,143,144,473,737,940,941,1010,1011,1014],[77,126,143,144,974,976,977,978,1018],[77,126,143,144,974,977,978,1026],[77,126,143,144,473,1010,1014,1016],[77,126,143,144,974,976,977,978,1029],[77,126,143,144,974,977,978,1031],[77,126,143,144,737,940,941,1006,1010,1017],[77,126,143,144,974,976,1034],[77,126,143,144,473,737,940,941,1010,1033],[77,126,143,144,737,940,941,1002,1006,1010,1017],[77,126,143,144,974,976,977,978,1036],[77,126,143,144,974,976,977,978,1028],[77,126,143,144,974,976,977,978,1041],[77,126,143,144,737,940,941,1002,1006,1010,1017,1039,1040],[77,126,143,144,974,1043],[77,126,143,144,974,976,977,978,1046],[77,126,143,144,473,737,940,941,1010,1017],[77,126,143,144,974,976,977,978,1045],[77,126,143,144,473,737,940,941,1002,1009,1010,1017],[77,126,143,144,974,1052],[77,126,143,144,473,1049],[77,126,143,144,974,1050],[77,126,143,144,974,977,978,1054,1055],[77,126,143,144,737,940,941,1002,1006,1010,1011,1014,1017,1054],[77,126,143,144,974,977,978,1057],[77,126,143,144,737,940,941,1002,1006,1010,1011,1014,1017],[77,126,143,144,974,976,977,978,1060],[77,126,143,144,974,976,977,978,1059],[77,126,143,144,737,916,940,941,1002,1006,1010,1017],[77,126,143,144,974,976,977,1065],[77,126,143,144,737,940,941,1002,1006,1010,1017,1063],[77,126,143,144,974,976,977,1064],[77,126,143,144,1002,1017],[77,126,143,144,477,2172,2175],[77,126,143,144,974,2032],[77,126,143,144,974,2038,2039],[77,126,143,144,974,2038],[77,126,143,144,940,974],[63,77,126,143,144,940,2031,2038,2088,2117,2122,2124,2125,2179,2188],[63,77,126,143,144,436,2031,2038,2116,2117,2179,2183,2184,2186,2187],[63,77,126,143,144,2031,2079,2179],[63,77,126,143,144,940,2031,2038,2039,2074,2117,2121,2124,2179,2189],[63,77,126,143,144,2031],[63,77,126,143,144,2031,2074,2084,2090,2120,2174,2182],[63,77,126,143,144,2031,2076,2116,2117,2161],[63,77,126,143,144,940,2031,2179],[63,77,126,143,144,2031,2038,2084,2174,2182],[63,77,126,143,144,2031,2074,2174],[63,77,126,143,144,940,2031,2089,2117],[63,77,126,143,144,1676,2031],[63,77,126,143,144,940,2031,2038,2077,2080,2088,2089,2117,2118,2120,2122,2126,2179,2189,2193,2194,2369,2370,2371,2373,2375],[77,126,143,144,974,2042],[63,77,126,143,144,940,2031,2042,2179,2372],[77,126,143,144,2031,2117,2179],[77,126,143,144,2031],[63,77,126,143,144,2031,2038,2042,2120,2179,2227,2341,2368],[63,77,126,143,144,2031,2179],[77,126,143,144,2031,2370],[77,126,143,144,436,2031,2082,2083,2117,2179],[63,77,126,143,144,940,2031,2042,2179,2227,2341,2368,2372,2374],[77,126,143,144,974,2078],[77,126,143,144,974,2081,2082,2083],[77,126,143,144,974,2085,2111],[77,126,143,144,974,2087,2088],[77,126,143,144,2074],[77,126,143,144,2074,2076],[77,126,143,144,940,2074,2076],[77,126,143,144,2074,2076,2081,2082],[63,77,126,143,144,2031,2074,2076],[63,77,126,143,144,2031,2038,2074,2076,2087],[77,126,143,144,942],[77,126,143,144,974,2076],[77,126,143,144,974,977,1006],[77,126,143,144,974,977,1002,1017],[77,126,143,144,942,974],[77,126,143,144,974,2114],[77,126,143,144,974,2117],[77,126,143,144,940,974,2118],[77,126,143,144,974,1011],[77,126,143,144,940,974,1033],[77,126,143,144,940,974,1039],[77,126,143,144,974,2119],[77,126,143,144,974,2087],[77,126,143,144,974,2120],[77,126,143,144,974,2038,2121],[77,126,143,144,974,2122],[77,126,143,144,940,974,2123],[77,126,143,144,974,1040],[77,126,143,144,974,2116],[77,126,143,144,974,1014],[77,126,143,144,974,1013],[77,126,143,144,974,1054],[77,126,143,144,974,2124],[77,126,143,144,940,974,2125],[77,126,143,144,974,1016],[77,126,143,144,974,2126],[77,126,143,144,1002,1006],[77,126,131,143,144,974,976,1009],[77,126,143,144,974,1010],[77,126,143,144,974,1005],[77,126,131,143,144,444,737,940,941],[77,126,143,144,737,916,940,941,982,983,988,1002,2168],[77,126,143,144,940,1003,1009],[77,126,131,143,144,737,916,940,941,1002],[77,126,143,144,916,940,941],[77,126,143,144,2114],[77,126,143,144,2031,2116],[77,126,143,144,940],[77,126,143,144,940,1002],[77,126,143,144,148,658,900,901,974,2157],[77,126,143,144,658,900,940],[77,126,143,144,804,939],[77,126,143,144,2038],[77,126,143,144,2038,2039],[77,126,143,144,940,1033],[77,126,143,144,1012,1013],[77,126,143,144,1013,1014],[77,126,143,144,1002],[77,126,143,144,473,964,2168],[77,126,143,144,974,2159],[77,126,143,144,974,2160],[77,126,143,144,974,2161],[77,126,143,144,974,2081,2082],[77,126,143,144,2036],[77,126,143,144,940,2036],[77,126,143,144,2031,2036],[77,126,143,144,2036,2037],[77,126,143,144,2036,2081],[77,126,143,144,940,964,974,982,2168],[77,126,143,144,940,964,982],[77,126,143,144,517,518],[77,126,143,144,579,580],[77,126,143,144,1702,1704,1706],[77,126,143,144,1704,1706],[77,126,143,144,1703,1704,1708,1709],[77,126,143,144,1702,1703,1704,1705,1706,1707],[77,126,143,144,1704,1708],[77,126,143,144,1704,1705],[77,126,143,144,1176],[77,126,143,144,1177],[77,126,143,144,1176,1177,1178,1179,1180,1181,1182],[77,126,143,144,1702],[77,126,143,144,1704,1706,1713],[77,126,143,144,1741,1742,1743,1744,1747,1748,1749,1750,2004,2005],[77,126,143,144,1741,1743],[77,126,143,144,1743],[77,126,143,144,1742,1743,1744,1745,1746],[77,126,143,144,1741,1742],[77,126,143,144,1742],[77,126,143,144,1741,1743,1747],[77,126,143,144,1743,1807,2003],[77,126,143,144,1741,2006],[77,126,143,144,2009,2010,2011,2012,2013,2014,2015,2016],[77,126,143,144,2006],[77,126,143,144,2006,2008],[77,126,143,144,1070,2006],[77,126,143,144,2007,2018,2019,2020],[77,126,143,144,1070,2006,2018],[77,126,143,144,2007,2017],[77,126,143,144,1137,2006],[77,126,143,144,1070,1126,1127,1166],[77,126,143,144,1070,1126,1148],[77,126,143,144,1070,1127],[77,126,143,144,1070,1079,1084],[77,126,143,144,1070],[77,126,143,144,1070,1126,1127,1137],[77,126,143,144,1070,1126,1127],[77,126,143,144,1070,1126,1127,1128,1129,1133],[77,126,143,144,1070,1126,1127,1152],[77,126,143,144,1070,1079],[77,126,143,144,1070,1126,1127,1128,1129,1132,1133,1140],[77,126,143,144,1070,1126,1127,1128,1169],[77,126,143,144,1070,1126,1127,1128,1129,1132,1133],[77,126,143,144,1070,1126,1127,1130,1131],[77,126,143,144,1070,1126,1127,1140],[77,126,143,144,1070,1126,1127,1128],[77,126,143,144,1070,1126,1127,1128,1132,1133],[77,126,143,144,1656],[77,126,143,144,1641,1664],[77,126,143,144,1664],[77,126,143,144,1664,1675],[77,126,143,144,1650,1664,1675],[77,126,143,144,1655,1664,1675],[77,126,143,144,1645,1664],[77,126,143,144,1653,1664,1675],[77,126,143,144,1651],[77,126,143,144,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674],[77,126,143,144,1654],[77,126,143,144,1641,1642,1643,1644,1645,1646,1647,1648,1649,1651,1652,1654,1656,1657,1658,1659,1660,1661,1662,1663],[77,126,143,144,2023],[62,77,126,143,144,1068],[77,126,143,144,1072,1073],[77,126,143,144,1072],[77,126,143,144,1070,1148],[77,126,143,144,1187],[77,126,143,144,1185,1187],[77,126,143,144,1185],[77,126,143,144,1187,1251,1252],[77,126,143,144,1187,1254],[77,126,143,144,1187,1255],[77,126,143,144,1272],[77,126,143,144,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440],[77,126,143,144,1187,1348],[77,126,143,144,1185,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536],[77,126,143,144,1187,1252,1372],[77,126,143,144,1185,1369,1370],[77,126,143,144,1371],[77,126,143,144,1187,1369],[77,126,143,144,1184,1185,1186],[77,126,143,144,1722],[77,126,143,144,1724],[77,126,143,144,1720],[77,126,143,144,1728],[77,126,143,144,1726],[77,126,143,144,1719],[77,126,143,144,1764],[77,126,143,144,1760,1761,1764,1772,1790],[77,126,143,144,1760,1762,1767,1768,1769,1771],[77,126,143,144,1760,1761,1762,1764,1768,1770,1773,1779,1781,1792,1794,1795,1796,1797],[77,126,143,144,1754],[77,126,143,144,1753],[77,126,143,144,1751,1752],[77,126,143,144,1751,1752,1753,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1772,1773,1775,1776,1790,1791,1792,1793,1794,1795,1796,1798,1799,1800,1801,1802,1803,1804,1805,1806],[77,126,143,144,1785],[77,126,143,144,1784],[77,126,143,144,1764,1768,1769,1770,1772,1773],[77,126,143,144,1760],[77,126,143,144,1765,1766,1767,1768,1769,1770,1771,1774,1777,1778,1779,1782,1783,1786,1789],[77,126,143,144,1757,1761,1791],[77,126,143,144,1787,1788],[77,126,143,144,1755,1770,1779,1787],[77,126,143,144,1764,1791,1794,1795],[77,126,143,144,1779],[77,126,143,144,1780,1781],[77,126,143,144,1751,1753],[77,126,143,144,1775,1776],[77,126,143,144,1751,1770],[77,126,143,144,1753,1764],[77,126,143,144,1752],[77,126,143,144,1759],[77,126,143,144,1757,1761],[77,126,143,144,1751,1753,1759,1760],[77,126,143,144,1751,1752,1753,1757,1761,1791,1792],[77,126,143,144,1751,1752,1753,1757,1761,1764,1790],[77,126,143,144,1753,1757,1762,1764,1767,1768,1770,1771,1772,1773,1774,1775,1776,1791,1793,1794],[77,126,143,144,1757,1764,1775,1791],[77,126,143,144,1762,1768,1771,1774,1775],[77,126,143,144,1757,1762,1764,1768,1769,1771,1772,1774,1791],[77,126,143,144,1762,1763],[77,126,143,144,1807,2000],[77,126,143,144,1807,1997,1998,1999,2000,2001,2002],[77,126,143,144,1807],[77,126,143,144,1807,1996],[77,126,143,144,1807,1996,1997,1998,1999],[77,126,143,144,1997,1998],[77,126,143,144,1996,1997,1998],[77,126,143,144,1595],[77,126,143,144,1556],[77,126,143,144,1596],[77,126,143,144,1441,1537,1593,1594],[77,126,143,144,1556,1557,1595,1596],[77,126,143,144,1538,1539,1540,1541,1542,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583],[77,126,143,144,1070,1562,1597],[77,126,143,144,1070,1562],[77,126,143,144,1070,1557],[77,126,143,144,1070,1597],[77,126,143,144,1070,1565],[77,126,143,144,1585,1586,1587,1588,1589,1590,1591],[77,126,143,144,1562],[77,126,143,144,1599],[77,126,143,144,1183,1554,1555,1560,1562,1584,1592,1597,1598,1600,1608],[77,126,143,144,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553],[77,126,143,144,1562,1595],[77,126,143,144,1541,1542,1554,1555,1558,1560,1593],[77,126,143,144,1558,1559,1561,1593],[77,126,143,144,1070,1555,1593,1595],[77,126,143,144,1558,1593],[77,126,143,144,1070,1554,1555,1584,1592],[77,126,143,144,1070,1557,1558,1559,1593,1596],[77,126,143,144,1601,1602,1603,1604,1605,1606,1607],[77,126,143,144,1632],[77,126,143,144,1070,1632,1633,1634,1635,1636,1637],[77,126,143,144,1070,1632,1633,1634,1635],[77,126,143,144,1070,1632],[77,126,143,144,1070,1107],[77,126,143,144,1107,1108,1109,1110,1113,1114,1115,1116,1117,1118,1119,1122,1123],[77,126,143,144,1107],[77,126,143,144,1111,1112],[77,126,143,144,1070,1104,1107],[77,126,143,144,1101,1102,1104],[77,126,143,144,1097,1100,1102,1104],[77,126,143,144,1101,1104],[77,126,143,144,1070,1092,1093,1094,1097,1098,1099,1101,1102,1103,1104],[77,126,143,144,1094,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106],[77,126,143,144,1101],[77,126,143,144,1095,1101,1102],[77,126,143,144,1095,1096],[77,126,143,144,1100,1102,1103],[77,126,143,144,1100],[77,126,143,144,1092,1097,1102,1103],[77,126,143,144,1070,1097,1100,1101,1102],[77,126,143,144,1120,1121],[77,126,143,144,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1824,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1877,1878,1879,1880,1881,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1927,1928,1929,1931,1940,1942,1943,1944,1945,1946,1947,1949,1950,1952,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995],[77,126,143,144,1853],[77,126,143,144,1809,1812],[77,126,143,144,1811],[77,126,143,144,1811,1812],[77,126,143,144,1808,1809,1810,1812],[77,126,143,144,1809,1811,1812,1969],[77,126,143,144,1812],[77,126,143,144,1808,1811,1853],[77,126,143,144,1811,1812,1969],[77,126,143,144,1811,1977],[77,126,143,144,1809,1811,1812],[77,126,143,144,1821],[77,126,143,144,1844],[77,126,143,144,1865],[77,126,143,144,1811,1812,1853],[77,126,143,144,1812,1860],[77,126,143,144,1811,1812,1853,1871],[77,126,143,144,1811,1812,1871],[77,126,143,144,1812,1912],[77,126,143,144,1812,1853],[77,126,143,144,1808,1812,1930],[77,126,143,144,1808,1812,1931],[77,126,143,144,1953],[77,126,143,144,1937,1939],[77,126,143,144,1948],[77,126,143,144,1937],[77,126,143,144,1808,1812,1930,1937,1938],[77,126,143,144,1930,1931,1939],[77,126,143,144,1951],[77,126,143,144,1808,1812,1937,1938,1939],[77,126,143,144,1810,1811,1812],[77,126,143,144,1808,1812],[77,126,143,144,1809,1811,1931,1932,1933,1934],[77,126,143,144,1853,1931,1932,1933,1934],[77,126,143,144,1931,1933],[77,126,143,144,1811,1932,1933,1935,1936,1940],[77,126,143,144,1808,1811],[77,126,143,144,1812,1955],[77,126,143,144,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1854,1855,1856,1857,1858,1859,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928],[77,126,143,144,1941],[77,126,143,144,1070,1729,1730,1732,1733,1734,1735,1736],[77,126,143,144,1070,1076,1721,1723,1725,1727,1729,1730,1731],[77,126,143,144,1729,1733,1734],[77,126,143,144,1070,1081,1156,1730,2006,2021],[77,126,143,144,1730,1731,1732,1733,1734,1737,1738,1739,1740,2022,2025],[77,126,143,144,1070,1076,2024],[77,126,143,144,1076,1082,1733,1734],[77,126,143,144,1729],[77,126,143,144,1070,1076],[77,126,143,144,1070,1076,1078,1081,1135,1136,1144,1158,1685],[77,126,143,144,1070,1076,1165],[77,126,143,144,1070,1076,1135],[77,126,143,144,1076,1136],[77,126,143,144,1070,1076,1077,1135,1156,1612],[77,126,143,144,1076,1077,1151],[77,126,143,144,1076,1077,1082,1135,1154,1687],[77,126,143,144,1070,1076,1078,1081,1136,1614],[77,126,143,144,1076,1083,1158],[77,126,143,144,1076,1083,1135],[77,126,143,144,1070,1076,1638],[77,126,143,144,1076],[77,126,143,144,1076,1077,1135,1154,1676],[77,126,143,144,1070,1076,1077,1083,1090,1135,1156,1612,1676],[77,126,143,144,1077,1135,1136,1676],[77,126,143,144,1077,1135,1154,1676],[77,126,143,144,1070,1076,1139,1175,1676],[77,126,143,144,1070,1076,1077,1135,1156,1441,1609,1610],[77,126,143,144,1070,1077,1078,1081],[77,126,143,144,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1639,1640,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1715,1716,1717],[77,126,143,144,1070,1076,1077,1135],[77,126,143,144,1070,1076,1077,1083,1135,1156,1612],[77,126,143,144,1070,1076,1077],[77,126,143,144,1076,1077,1081,1091,1135,1136],[77,126,143,144,1070,1076,1077,1081,1135,1156,1441,1610],[77,126,143,144,1070,1076,1077,1081,1135,1156,1441,1609,1610],[77,126,143,144,1076,1077,1081],[77,126,143,144,1076,1077,1078,1081,1135,1147],[77,126,143,144,1070,1076,1077,1081,1083,1091,1135,1156,1612],[77,126,143,144,1070,1076,1077,1081,1091,1135,1136,1156,1612],[77,126,143,144,1076,1077,1078,1081,1135],[77,126,143,144,1070,1076,1077,1078,1135],[77,126,143,144,1070,1076,1077,1078,1135,1168],[77,126,143,144,1070,1076,1077,1135,1136,1701,1704,1706,1709,1710,1711,1712,2167],[77,126,143,144,1070,1076,1083,1158],[77,126,143,144,1070,1076,1158],[77,126,143,144,1070,1076,1090],[77,126,143,144,1070,1076,1077,1082,1135,1154],[77,126,143,144,1070,1076,1135,1167],[77,126,143,144,1070,1076,1077,1150],[77,126,143,144,1070,1074,1076],[77,126,143,144,1070,1076,1086],[77,126,143,144,1070,1071,1076,1135],[77,126,143,144,1070,1071,1074,1076],[77,126,143,144,1070,1076,1077,1135,1609],[77,126,143,144,1070,1076,1135,1138],[77,126,143,144,1070,1076,1135,1148,1149,1611],[77,126,143,144,1070,1074,1076,1135,1148],[77,126,143,144,1070,1076,1135,1153],[77,126,143,144,1070,1071,1076,1080,1081,1124],[77,126,143,144,1077,1078,1081,1082,1083,1087,1090,1091,1125,1136,1139,1142,1144,1145,1147,1149,1151,1154,1156,1158,1160,1162,1163,1165,1168,1171,1172,1173,1174,1175,1610,1612],[77,126,143,144,1070,1074,1076,1080],[77,126,143,144,1070,1074,1076,1135,1170],[77,126,143,144,1070,1076,1155],[77,126,143,144,1070,1076,1135,1141],[77,126,143,144,1070,1076,1134,1135],[77,126,143,144,1070,1076,1089],[77,126,143,144,1070,1076,1146],[77,126,143,144,1070,1076,1143],[77,126,143,144,1070,1076,1164],[77,126,143,144,1070,1074,1076,1135,1159],[77,126,143,144,1160,1161],[77,126,143,144,1070,1076,1157],[77,126,143,144,1161,1735,2027,2028],[77,126,143,144,1070,1160],[77,126,143,144,1070,1730],[77,126,143,144,1613,1718,2026,2029,2030],[77,126,143,144,1072,1075]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"aa6b5e5cb274d1897361c628603893f47d0a88f6e7afe1e908b64bb5248ccbd0","affectsGlobalScope":true},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"631eff75b0e35d1b1b31081d55209abc43e16b49426546ab5a9b40bdd40b1f60","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"f949f7f6c7802a338039cfc2156d1fe285cdd1e092c64437ebe15ae8edc854e0","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2bc7425ef40526650d6db7e072c1ff4a51101c3ac2cc4b666623b19496a6e27","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b039f55681caaf111d5eb84d292b9bee9e0131d0db1ad0871eef0964f533c73","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"0dba70b3fb0dcd713fda33c2df64fa6751fff6460e536971cee917260fb17882","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f663c2f91127ef7024e8ca4b3b4383ff2770e5f826696005de382282794b127","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"829b9e6028b29e6a8b1c01ddb713efe59da04d857089298fa79acbdb3cfcfdef","impliedFormat":1},{"version":"24f8562308dd8ba6013120557fa7b44950b619610b2c6cb8784c79f11e3c4f90","impliedFormat":1},{"version":"5d8717b437b9d6afeb4da84b9082db35cafce3dfd025bc7c9ad7abbe50fa2778","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"496bbf339f3838c41f164238543e9fe5f1f10659cb30b68903851618464b98ba","impliedFormat":1},{"version":"5178eb4415a172c287c711dc60a619e110c3fd0b7de01ed0627e51a5336aa09c","impliedFormat":1},{"version":"ca6e5264278b53345bc1ce95f42fb0a8b733a09e3d6479c6ccfca55cdc45038c","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"fb1d8e814a3eeb5101ca13515e0548e112bd1ff3fb358ece535b93e94adf5a3a","impliedFormat":1},{"version":"ffa495b17a5ef1d0399586b590bd281056cee6ce3583e34f39926f8dcc6ecdb5","impliedFormat":1},{"version":"98b18458acb46072947aabeeeab1e410f047e0cacc972943059ca5500b0a5e95","impliedFormat":1},{"version":"361e2b13c6765d7f85bb7600b48fde782b90c7c41105b7dab1f6e7871071ba20","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"b6db56e4903e9c32e533b78ac85522de734b3d3a8541bf24d256058d464bf04b","impliedFormat":1},{"version":"24daa0366f837d22c94a5c0bad5bf1fd0f6b29e1fae92dc47c3072c3fdb2fbd5","impliedFormat":1},{"version":"570bb5a00836ffad3e4127f6adf581bfc4535737d8ff763a4d6f4cc877e60d98","impliedFormat":1},{"version":"889c00f3d32091841268f0b994beba4dceaa5df7573be12c2c829d7c5fbc232c","impliedFormat":1},{"version":"65f43099ded6073336e697512d9b80f2d4fec3182b7b2316abf712e84104db00","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"27ab780875bcbb65e09da7496f2ca36288b0c541abaa75c311450a077d54ec15","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"380647d8f3b7f852cca6d154a376dbf8ac620a2f12b936594504a8a852e71d2f","impliedFormat":1},{"version":"208c9af9429dd3c76f5927b971263174aaa4bc7621ddec63f163640cbd3c473c","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"a23185bc5ef590c287c28a91baf280367b50ae4ea40327366ad01f6f4a8edbc5","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"002eae065e6960458bda3cf695e578b0d1e2785523476f8a9170b103c709cd4f","impliedFormat":1},{"version":"c83bb0c9c5645a46c68356c2f73fdc9de339ce77f7f45a954f560c7e0b8d5ebb","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"72179f9dd22a86deaad4cc3490eb0fe69ee084d503b686985965654013f1391b","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"6a148329edecbda07c21098639ef4254ef7869fb25a69f58e5d6a8b7b69d4236","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"f63ab283a1c8f5c79fabe7ca4ef85f9633339c4f0e822fce6a767f9d59282af2","impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a54c996c8870ef1728a2c1fa9b8eaec0bf4a8001cd2583c02dd5869289465b10","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"3754982006a3b32c502cff0867ca83584f7a43b1035989ca73603f400de13c96","impliedFormat":1},{"version":"a30ae9bb8a8fa7b90f24b8a0496702063ae4fe75deb27da731ed4a03b2eb6631","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"50b5bc34ce6b12eccb76214b51aadfa56572aa6cc79c2b9455cdbb3d6c76af1d","impliedFormat":1},{"version":"b7e16ef7f646a50991119b205794ebfd3a4d8f8e0f314981ebbe991639023d0e","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"e9dd71cf12123419c60dab867d44fbee5c358169f99529121eaef277f5c83531","impliedFormat":1},{"version":"5b6a189ba3a0befa1f5d9cb028eb9eec2af2089c32f04ff50e2411f63d70f25d","impliedFormat":1},{"version":"d6e73f8010935b7b4c7487b6fb13ea197cc610f0965b759bec03a561ccf8423a","impliedFormat":1},{"version":"174f3864e398f3f33f9a446a4f403d55a892aa55328cf6686135dfaf9e171657","impliedFormat":1},{"version":"824c76aec8d8c7e65769688cbee102238c0ef421ed6686f41b2a7d8e7e78a931","impliedFormat":1},{"version":"75b868be3463d5a8cfc0d9396f0a3d973b8c297401d00bfb008a42ab16643f13","impliedFormat":1},{"version":"15a234e5031b19c48a69ccc1607522d6e4b50f57d308ecb7fe863d44cd9f9eb3","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"6dcf60530c25194a9ee0962230e874ff29d34c59605d8e069a49928759a17e0a","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"1a42d2ec31a1fe62fdc51591768695ed4a2dc64c01be113e7ff22890bebb5e3f","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"0c7c947ff881c4274c0800deaa0086971e0bfe51f89a33bd3048eaa3792d4876","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"15b36126e0089bfef173ab61329e8286ce74af5e809d8a72edcafd0cc049057f","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"ad10d4f0517599cdeca7755b930f148804e3e0e5b5a3847adce0f1f71bbccd74","impliedFormat":1},{"version":"1042064ece5bb47d6aba91648fbe0635c17c600ebdf567588b4ca715602f0a9d","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"72d63643a657c02d3e51cd99a08b47c9b020a565c55f246907050d3c8a5e77fb","impliedFormat":1},{"version":"1d415445ea58f8033ba199703e55ff7483c52ac6742075b803bd3e7bbe9f5d61","impliedFormat":1},{"version":"d6406c629bb3efc31aedb2de809bef471e475c86c7e67f3ef9b676b5d7e0d6b2","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"71d8ba39a9e024d9e4bb922464d18542ed8d2c25ee78efa7890c27213cc6e5d3","impliedFormat":1},{"version":"8c030e515014c10a2b98f9f48408e3ba18023dfd3f56e3312c6c2f3ae1f55a16","impliedFormat":1},{"version":"dafc31e9e8751f437122eb8582b93d477e002839864410ff782504a12f2a550c","impliedFormat":1},{"version":"754498c5208ce3c5134f6eabd49b25cf5e1a042373515718953581636491f3c3","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"f56bdc6884648806d34bc66d31cdb787c4718d04105ce2cd88535db214631f82","impliedFormat":1},{"version":"633d58a237f4bb25ec7d565e4ffa32cecdcee8660ac12189c4351c52557cee9e","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"ce791f6ea807560f08065d1af6014581eeb54a05abd73294777a281b6dfd73c2","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"49f95e989b4632c6c2a578cc0078ee19a5831832d79cc59abecf5160ea71abad","impliedFormat":1},{"version":"9666533332f26e8995e4d6fe472bdeec9f15d405693723e6497bf94120c566c8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"e17cd049a1448de4944800399daa4a64c5db8657cc9be7ef46be66e2a2cd0e7c","impliedFormat":1},{"version":"43fa6ea8714e18adc312b30450b13562949ba2f205a1972a459180fa54471018","impliedFormat":1},{"version":"6e89c2c177347d90916bad67714d0fb473f7e37fb3ce912f4ed521fe2892cd0d","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"4d4927cbee21750904af7acf940c5e3c491b4d5ebc676530211e389dd375607a","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"8a97e578a9bc40eb4f1b0ca78f476f2e9154ecbbfd5567ee72943bab37fc156a","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"2d7db1d73456e8c5075387d4240c29a2a900847f9c1bff106a2e490da8fbd457","impliedFormat":1},{"version":"2b15c805f48e4e970f8ec0b1915f22d13ca6212375e8987663e2ef5f0205e832","impliedFormat":1},{"version":"f22d05663d873ee7a600faf78abb67f3f719d32266803440cf11d5db7ac0cab2","impliedFormat":1},{"version":"d93c544ad20197b3976b0716c6d5cd5994e71165985d31dcab6e1f77feb4b8f2","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"a8b1c79a833ee148251e88a2553d02ce1641d71d2921cce28e79678f3d8b96aa","impliedFormat":1},{"version":"126d4f950d2bba0bd45b3a86c76554d4126c16339e257e6d2fabf8b6bf1ce00c","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"2d3cc2211f352f46ea6b7cf2c751c141ffcdf514d6e7ae7ee20b7b6742da313f","impliedFormat":1},{"version":"c75445151ff8b77d9923191efed7203985b1a9e09eccf4b054e7be864e27923d","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"fa8a8fbf91ee2a4779496225f0312aac6635b0f21aa09cdafa4283fe32d519c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e8aef93d79b000deb6ec336b5645c87de167168e184e84521886f9ecc69a4b5","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"de7052bfee2981443498239a90c04ea5cc07065d5b9bb61b12cb6c84313ad4ef","impliedFormat":1},{"version":"a3e7d932dc9c09daa99141a8e4800fc6c58c625af0d4bbb017773dc36da75426","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"4a2edd238d9104eac35b60d727f1123de5062f452b70ed8e0366cb36387dfdfd","impliedFormat":1},{"version":"ca921bf56756cb6fe957f6af693a35251b134fb932dc13f3dfff0bb7106f80b4","impliedFormat":1},{"version":"fee92c97f1aa59eb7098a0cc34ff4df7e6b11bae71526aca84359a2575f313d8","impliedFormat":1},{"version":"0bd0297484aacea217d0b76e55452862da3c5d9e33b24430e0719d1161657225","impliedFormat":1},{"version":"2ab6d334bcbf2aff3acfc4fd8c73ecd82b981d3c3aa47b3f3b89281772286904","impliedFormat":1},{"version":"d07cbc787a997d83f7bde3877fec5fb5b12ce8c1b7047eb792996ed9726b4dde","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"4805f6161c2c8cefb8d3b8bd96a080c0fe8dbc9315f6ad2e53238f9a79e528a6","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"49179c6a23701c642bd99abe30d996919748014848b738d8e85181fc159685ff","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"45490817629431853543adcb91c0673c25af52a456479588b6486daba34f68bb","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"8514c62ce38e58457d967e9e73f128eedc1378115f712b9eef7127f7c88f82ae","impliedFormat":1},{"version":"f1289e05358c546a5b664fbb35a27738954ec2cc6eb4137350353099d154fc62","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"1d17ba45cfbe77a9c7e0df92f7d95f3eefd49ee23d1104d0548b215be56945ad","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"e16344db9b8ee59d41abdb3a61e4470955b5712c0ee869fb47112e152aabe142","impliedFormat":1},{"version":"46273e8c29816125d0d0b56ce9a849cc77f60f9a5ba627447501d214466f0ff3","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"144bc326e90b894d1ec78a2af3ffb2eb3733f4d96761db0ca0b6239a8285f972","impliedFormat":1},{"version":"3af3584f79c57853028ef9421ec172539e1fe01853296dc05a9d615ade4ffaf6","impliedFormat":1},{"version":"f82579d87701d639ff4e3930a9b24f4ee13ca74221a9a3a792feb47f01881a9c","impliedFormat":1},{"version":"d7e5d5245a8ba34a274717d085174b2c9827722778129b0081fefd341cca8f55","impliedFormat":1},{"version":"d9d32f94056181c31f553b32ce41d0ef75004912e27450738d57efcd2409c324","impliedFormat":1},{"version":"752513f35f6cff294ffe02d6027c41373adf7bfa35e593dbfd53d95c203635ee","impliedFormat":1},{"version":"6c800b281b9e89e69165fd11536195488de3ff53004e55905e6c0059a2d8591e","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"1a7e2ea171726446850ec72f4d1525d547ff7e86724cc9e7eec509725752a758","impliedFormat":1},{"version":"8c901126d73f09ecdea4785e9a187d1ac4e793e07da308009db04a7283ec2f37","impliedFormat":1},{"version":"db97922b767bd2675fdfa71e08b49c38b7d2c847a1cc4a7274cb77be23b026f1","impliedFormat":1},{"version":"aab290b8e4b7c399f2c09b957666fc95335eb4522b2dd9ead1bf0cb64da6d6ee","impliedFormat":1},{"version":"94fe3281392e1015b22f39535878610b4fa6f1388dc8d78746be3bc4e4bb8950","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"06c25ddfc2242bd06c19f66c9eae4c46d937349a267810f89783680a1d7b5259","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"bd4131091b773973ca5d2326c60b789ab1f5e02d8843b3587effe6e1ea7c9d86","impliedFormat":1},{"version":"c7f6485931085bf010fbaf46880a9b9ec1a285ad9dc8c695a9e936f5a48f34b4","impliedFormat":1},{"version":"14f6b927888a1112d662877a5966b05ac1bf7ed25d6c84386db4c23c95a5363b","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"0427df5c06fafc5fe126d14b9becd24160a288deff40e838bfbd92a35f8d0d00","impliedFormat":1},{"version":"90c54a02432d04e4246c87736e53a6a83084357acfeeba7a489c5422b22f5c7a","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"83fe880c090afe485a5c02262c0b7cdd76a299a50c48d9bde02be8e908fb4ae6","impliedFormat":1},{"version":"0a372c2d12a259da78e21b25974d2878502f14d89c6d16b97bd9c5017ab1bc12","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"6511e4503cf74c469c60aafd6589e4d14d5eb0a25f9bf043dcbecdf65f261972","impliedFormat":1},{"version":"ec1ca97598eda26b7a5e6c8053623acbd88e43be7c4d29c77ccd57abc4c43999","impliedFormat":1},{"version":"6e2261cd9836b2c25eecb13940d92c024ebed7f8efe23c4b084145cd3a13b8a6","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"a47e6d954d22dd9ebb802e7e431b560ed7c581e79fb885e44dc92ed4f60d4c07","impliedFormat":1},{"version":"f019e57d2491c159d47a107fd90219a1734bdd2e25cd8d1db3c8fae5c6b414c4","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"d1c9bf292a54312888a77bb19dba5e2503ad803f5393beafd45d78d2f4fe9b48","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"cb8d8ef7b9ce8ed3e6f1c814fcbf3f90dab0cb8863079236784fc350746e27c4","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"3be035da7bee86b4c3abf392e0edaa44fc6e45092995eefe36b39118c8a84068","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f828825d077c2fa0ea606649faeb122749273a353daab23924fe674e98ba44c","impliedFormat":1},{"version":"2896c2e673a5d3bd9b4246811f79486a073cbb03950c3d252fba10003c57411a","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"407a06ba04eede4074eec470ecba2784cbb3bf4e7de56833b097dd90a2aa0651","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"5c96bad5f78466785cdad664c056e9e2802d5482ca5f862ed19ba34ffbb7b3a4","impliedFormat":1},{"version":"81d8603ac527e75cfec72bb9391228b58f161c2b33514a9d814c7f3ebd3ef466","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"bb0cd7862b72f5eba39909c9889d566e198fcaddf7207c16737d0c2246112678","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"bad68fd0401eb90fe7da408565c8aee9c7a7021c2577aec92fa1382e8876071a","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"fec01479923e169fb52bd4f668dbeef1d7a7ea6e6d491e15617b46f2cacfa37d","impliedFormat":1},{"version":"8a8fb3097ba52f0ae6530ec6ab34e43e316506eb1d9aa29420a4b1e92a81442d","impliedFormat":1},{"version":"44e09c831fefb6fe59b8e65ad8f68a7ecc0e708d152cfcbe7ba6d6080c31c61e","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"4655709c9cb3fd6db2b866cab7c418c40ed9533ce8ea4b66b5f17ec2feea46a9","impliedFormat":1},{"version":"87affad8e2243635d3a191fa72ef896842748d812e973b7510a55c6200b3c2a4","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"3eecb25bb467a948c04874d70452b14ae7edb707660aac17dc053e42f2088b00","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"330896c1a2b9693edd617be24fbf9e5895d6e18c7955d6c08f028f272b37314d","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"5f0292a40df210ab94b9fb44c8b775c51e96777e14e073900e392b295ca1061b","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"8627ad129bcf56e82adff0ab5951627c993937aa99f5949c33240d690088b803","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"a68d4b3182e8d776cdede7ac9630c209a7bfbb59191f99a52479151816ef9f9e","impliedFormat":99},{"version":"39644b343e4e3d748344af8182111e3bbc594930fff0170256567e13bbdbebb0","impliedFormat":99},{"version":"ed7fd5160b47b0de3b1571c5c5578e8e7e3314e33ae0b8ea85a895774ee64749","impliedFormat":99},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"ecbaf0da125974be39c0aac869e403f72f033a4e7fd0d8cd821a8349b4159628","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"ceec3c81b2d81f5e3b855d9367c1d4c664ab5046dff8fd56552df015b7ccbe8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"8fac4a15690b27612d8474fb2fc7cc00388df52d169791b78d1a3645d60b4c8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"1d63055b690a582006435ddd3aa9c03aac16a696fac77ce2ed808f3e5a06efab","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"85ae5aee75f011967cf2d25cbc342f62d69314e9d925f7f4aa3456fc2cffcca6",{"version":"92d5369f7f9480aac66bbcd295c0b2d82077295c8bf0f0fe08fa3c3321225e49","impliedFormat":99},{"version":"878390f2f3d349610300c7603fb9dff16cfb92fcc6f5fc1f9b262e5bbd6479e5","impliedFormat":99},{"version":"4619213479ced58d78ec8b392a3d18868853b18d38f8eaece2d6fdf93b54fe59","signature":"7d35d1a0606d8bef01f74bcc9b550636bb9b3be02ed5a8f4ed39615ed3f98413"},{"version":"f8734234ef76a28319168f07c8ece98cdbf310d5525fbccd1673d4f791eacff3","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"99a323dc5a6e506c78b69913b32beba93453bcd87aae8b507520234f387a4c30","impliedFormat":1},{"version":"32727845ab5bd8a9ef3e4844c567c09f6d418fcf0f90d381c00652a6f23e7f6e","impliedFormat":1},{"version":"af3c4dcb64b945e01285bc0494e1cfa384fac43b08713a56fc3043c8f861553a","impliedFormat":1},{"version":"7a8ec10b0834eb7183e4bfcd929838ac77583828e343211bb73676d1e47f6f01","impliedFormat":1},{"version":"b05adc58d29cc06ef2cac72df7539527ed2b5af140cfded332f0ba2351731cb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f00324f263189b385c3a9383b1f4dae6237697bcf0801f96aa35c340512d79c","impliedFormat":1},{"version":"ec8997c2e5cea26befc76e7bf990750e96babb16977673a9ff3b5c0575d01e48","impliedFormat":1},{"version":"b16ff2e928d0ee39fa05981f80cf196e4b172115abf36406460a41cdc383749d","impliedFormat":99},{"version":"a1936fd7bdd911dc2fea8bb2edf2e1eb8765c657a9c0a50de2a7cf4e2fa0ca8d","impliedFormat":1},{"version":"bcfd8176685170d1e0c9e74b30387b541db1bf75ef1b66ee7a0c2a6a7b7608bb","signature":"7bca91d9d0ff422e49c9e6ecf5c37910c79c3eb17601d6bf0c13949d53887bd7"},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"8885cf05f3e2abf117590bbb951dcf6359e3e5ac462af1c901cfd24c6a6472e2","impliedFormat":1},{"version":"333caa2bfff7f06017f114de738050dd99a765c7eb16571c6d25a38c0d5365dc","impliedFormat":1},{"version":"e61df3640a38d535fd4bc9f4a53aef17c296b58dc4b6394fd576b808dd2fe5e6","impliedFormat":1},{"version":"459920181700cec8cbdf2a5faca127f3f17fd8dd9d9e577ed3f5f3af5d12a2e4","impliedFormat":1},{"version":"4719c209b9c00b579553859407a7e5dcfaa1c472994bd62aa5dd3cc0757eb077","impliedFormat":1},{"version":"7ec359bbc29b69d4063fe7dad0baaf35f1856f914db16b3f4f6e3e1bca4099fa","impliedFormat":1},{"version":"70790a7f0040993ca66ab8a07a059a0f8256e7bb57d968ae945f696cbff4ac7a","impliedFormat":1},{"version":"d1b9a81e99a0050ca7f2d98d7eedc6cda768f0eb9fa90b602e7107433e64c04c","impliedFormat":1},{"version":"a022503e75d6953d0e82c2c564508a5c7f8556fad5d7f971372d2d40479e4034","impliedFormat":1},{"version":"b215c4f0096f108020f666ffcc1f072c81e9f2f95464e894a5d5f34c5ea2a8b1","impliedFormat":1},{"version":"644491cde678bd462bb922c1d0cfab8f17d626b195ccb7f008612dc31f445d2d","impliedFormat":1},{"version":"dfe54dab1fa4961a6bcfba68c4ca955f8b5bbeb5f2ab3c915aa7adaa2eabc03a","impliedFormat":1},{"version":"1251d53755b03cde02466064260bb88fd83c30006a46395b7d9167340bc59b73","impliedFormat":1},{"version":"47865c5e695a382a916b1eedda1b6523145426e48a2eae4647e96b3b5e52024f","impliedFormat":1},{"version":"4cdf27e29feae6c7826cdd5c91751cc35559125e8304f9e7aed8faef97dcf572","impliedFormat":1},{"version":"331b8f71bfae1df25d564f5ea9ee65a0d847c4a94baa45925b6f38c55c7039bf","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"b558c9a18ea4e6e4157124465c3ef1063e64640da139e67be5edb22f534f2f08","impliedFormat":1},{"version":"01374379f82be05d25c08d2f30779fa4a4c41895a18b93b33f14aeef51768692","impliedFormat":1},{"version":"b0dee183d4e65cf938242efaf3d833c6b645afb35039d058496965014f158141","impliedFormat":1},{"version":"c0bbbf84d3fbd85dd60d040c81e8964cc00e38124a52e9c5dcdedf45fea3f213","impliedFormat":1},{"version":"9688c89e52b4dc1fb91afed9017d78610f3363bef61904c6c17e49afb969fe7a","impliedFormat":1},{"version":"98e08d3e9b35f4f480d1f86c79539581a61f5a131a11ad71ae9412893f5290de","signature":"f65ce75c9085571e6321abf2bf9833709f4897e381f89e9925521833dbb7ab16"},{"version":"acfb723d81eda39156251aed414c553294870bf53062429ebfcfba8a68cb4753","impliedFormat":99},{"version":"fa69a90381c2f85889722a911a732a5ee3596dc3acecda8a9aa2fa89b9615d8d","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"57e9e1b0911874c62d743af24b5d56032759846533641d550b12a45ff404bf07","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"854cd3a3375ffc4e7a92b2168dd065d7ff2614b43341038a65cca865a44c00c5","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"2f863ee9b873a65d9c3338ea7aaddbdb41a9673f062f06983d712bd01c25dc6b","impliedFormat":99},{"version":"67aa128c2bc170b93794f191feffc65a4b33e878db211cfcb7658c4b72f7a1f5","impliedFormat":99},{"version":"31fd7c12f6e27154efb52a916b872509a771880f3b20f2dfd045785c13aa813f","impliedFormat":99},{"version":"b481de4ab5379bd481ca12fc0b255cdc47341629a22c240a89cdb4e209522be2","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"4e258d11c899cb9ff36b4b5c53df59cf4a5ccae9a9931529686e77431e0a3518","affectsGlobalScope":true,"impliedFormat":99},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"10073cdcf56982064c5337787cc59b79586131e1b28c106ede5bff362f912b70","impliedFormat":99},{"version":"72950913f4900b680f44d8cab6dd1ea0311698fc1eefb014eb9cdfc37ac4a734","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"ee70b8037ecdf0de6c04f35277f253663a536d7e38f1539d270e4e916d225a3f","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"ff0a83c9a0489a627e264ffcb63f2264b935b20a502afa3a018848139e3d8575","impliedFormat":99},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":1},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":1},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e4af494f7a14b226bbe732e9c130d8811f8c7025911d7c58dd97121a85519715","impliedFormat":1},{"version":"47416e41b1af81e53e8c3cc5bf909d47ff632a7b6eddfe7ff43d187b4dcca047","impliedFormat":99},{"version":"324ac98294dab54fbd580c7d0e707d94506d7b2c3d5efe981a8495f02cf9ad96","impliedFormat":99},{"version":"9ec72eb493ff209b470467e24264116b6a8616484bca438091433a545dfba17e","impliedFormat":99},{"version":"c35b8117804c639c53c87f2c23e0c786df61d552e513bd5179f5b88e29964838","impliedFormat":99},{"version":"ac3d263474022e9a14c43f588f485d549641d839b159ecc971978b90f34bdf6b","impliedFormat":99},{"version":"67acaedb46832d66c15f1b09fb7b6a0b7f41bdbf8eaa586ec70459b3e8896eb9","impliedFormat":99},{"version":"c609331c6ed4ad4af54e101088c6a4dcb48f8db7b0b97e44a6efeb130f4331bd","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"4535ab977ee871e956eb7bebe2db5de79f5d5ec7dfbbf1d35e08f4a2d6630dac","impliedFormat":99},{"version":"b79b5ed99f26ffb2f8ae4bdcc4b34a9542197dc3fa96cfb425c2a81e618cff28","impliedFormat":99},{"version":"213a00d511892898e9dad3c98efe3b1de230f171b9e91496faca3e40e27ef6a7","impliedFormat":99},{"version":"62486ec77ac020b82d5a65a270096bb7f2a1fd0627a89f29c5a5d3cbd6bd1f59","impliedFormat":99},{"version":"c637a793905f02d354b640fae41a6ae79395ed0d77fbb87c36d9664ecbd95ac1","impliedFormat":99},{"version":"437b7613a30a2fcde463f7b707c6d5567a8823fbc51de50b8641bf5b1d126fad","impliedFormat":99},{"version":"63ea959e28c110923f495576e614fb8b36c09b6828b467b2c7cd7f03b03ccf9f","impliedFormat":99},{"version":"1601a95dbb33059fc3d12638ed2a9aecff899e339c5c0f3a0b28768866d385b4","impliedFormat":99},{"version":"a8dd232837b1d83f76a47a5193c1afd9e17b9bf352cb84345f86f7759ee346d0","impliedFormat":99},{"version":"be5fc0dd37f64420b0423059370b8319521e0b58060d7b07b8f62fe1c145b02e","impliedFormat":99},{"version":"45f770f2ae71acc1cacfac137f50911e1a004ccba52b2b55c4432c0d4bd97814","impliedFormat":99},{"version":"8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","impliedFormat":99},{"version":"a5ae67a67f786ffe92d34b55467a40fb50fb0093e92388cadce6168fa42690fd","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"b62006bbc815fe8190c7aee262aad6bff993e3f9ade70d7057dfceab6de79d2f","impliedFormat":99},{"version":"a20c4976da01d1c823b165275cef98a896d4758388c6409bc4ce24f0a5b49900","impliedFormat":99},{"version":"dffffa77f7716aa110e4253c6cd73a067e4729d95c97a538dbb20e58f0eb3e1d","impliedFormat":99},{"version":"0daddd6f389da2b55770e95c9ef8831bf2520aab44fb941bae38bb7ddfe1d6b6","impliedFormat":99},{"version":"7bbff6783e96c691a41a7cf12dd5486b8166a01b0c57d071dbcfca55c9525ec4","impliedFormat":99},{"version":"307f6461299ec378c95c31ec85012b9f613fb21f8376eddc42f6edddadbd0df9","impliedFormat":99},{"version":"a7e29fbd667968e5c6bf6af2ffbe482ef65d10b060a1e70daa5a830525809af5","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},{"version":"f97404f9caeb7c72d2962cb3758462704f1323a2d599a112b7ba4e6b820abc7a","impliedFormat":99},{"version":"c8422d6032abbd7568d12949846d6e66bdf1f14ec0f9e415ff8ff5597da2857e","signature":"2f6fc229df35f47ef0803fc76a1fdaf24852a4bbf37b205857274a86c5316793"},{"version":"ab0a79338c37f33fcd5ada4fe779945bd6040d32638c48b51c4bbe718b660f2d","signature":"f207564d45677800c542adaa44ecd260069f552702e91ea8828a11a3f2a43037"},{"version":"75c41a9d479a39c8b7ac648b114862a61dd7ad15bfd08418cfc45ee0735975bd","signature":"e3dd0830824d49cd87a3f0d1de738657f403b495fbc4767b82f9f2e010679840"},{"version":"68ca3440d7eedc326e8579b5a99dd3c9108f878279bc3f27de088550672650ef","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6922373ad67ba68dcb4f0c732056f26dfdad4dd3ca1b7452fad8c324d2680875","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1d4699f59b1d63c5872e279396e4a8b60ff8d7ada41adc7480f6f7336be734dd","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6d50e68aa1c8e95d8ebe7d949469ba8df796f6dc732eded9a1ec0d7e5930eeb5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e2b22e0d42c47a8af20196712d94899a58a8b8b12d953b40104da39f15f3cd7a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"32b4962531b5a5126e598c9abc2150cadc0d49588bbeb178141186369fca8aac","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e6c160aa709e60c9324944a30b77217225d307c636d839da81538057eb7f5698","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"31096762bae8ac24f006da9d26f37b947d35b1a0a5f6499a8dd9b1bf4014306b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1e440652e2b5da8eecf37cdfdebd3bb4e1e84778ed46b2e7665e37c45ea954e2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a4713188829d103b3dfc6c67b7cd13db3552aa58e1cb22e57bc1f3a7c053b6e2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"5af6089e996ed976f4d15da29267ae38a4d119089e372fe6350b90c0bac92375","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"95869cf45ef0a72343af4c0bf5dc8c60581d117003bfc0c0368344be2f7e64d3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"562c64dc9a7e6562d2d785e5cda18bf4361b78ec3c20771df0d89504b6efa135","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"212495a0a442be23757abdb29117ee6071d229cff5863619470df87a9b154a48","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"eff9d8b26959de84582ff25aa05265090abc9ad73f1e6eeaaba64c19419bcbc8","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c9ce9c8e444eff6c660abe5b3a068ce09092d8e45af40886dd23a71fe0ede779","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"45b965b96ec5a1f706680c8d49e379e135dc145085759cea659289b40948230c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"06fdbe25e9708ee8c154147d4130547116feb7538905e4a0ddd3897747f00c7a","impliedFormat":1},{"version":"4722fd74708636c5ccae96096d2e8105481d8054b1e9f2ba586380d8beae46e9","impliedFormat":1},{"version":"165b1e657a2e782586d02365c6e647625d1f83b0f86434e223e5ae79c961c413","impliedFormat":1},{"version":"6c92284a2b4829e9ae995011130e1577d383073220af9b1b3b10a875e6dc476c","impliedFormat":1},{"version":"7cc5cca50c261857fe6d0a8e16583c25bbe9b7f3edbb31df83cf7e8f0ac25907","impliedFormat":1},{"version":"5c356da2c84f4878800c653c500dd9532330f0759cc47f8ff3f4371c27598073","impliedFormat":1},{"version":"49598095930a8dadf9c462bf2a408f1aad78146409f223b9ee0a5f89a4e382cd","impliedFormat":1},{"version":"45b3baf59d4817d5691ecd36268fd65154edabfb07befd66e24875b59d0fb4b5","impliedFormat":1},{"version":"01f77442e53ce5e94687cf71eb41da6d9bfc38c8559f96cc08b85d5074fe964f","impliedFormat":1},{"version":"85affae5f55f168321490535b401fd910702cd8903f4d40a3c65942ce6482a5d","impliedFormat":1},{"version":"823fe7c69f291da9622f0775cc5630efbedc75fc079c502c7ba38c816c066858","impliedFormat":1},{"version":"6146c6200c43a0eca96e4c65fc666b37f4db80846217701c8e855217ff924ed7","impliedFormat":1},{"version":"afb5d4e43959a9e5bd99903a6e55db6e33b58570cd33bb46574fa7c64f252ea0","impliedFormat":1},{"version":"abdf8aa11c0105e515fbe6049a8cbe96d58873b1577aa4a7f4c8cb59d9f69486","impliedFormat":1},{"version":"4371055bb001f40596e2e236b27583e13bf11e75d937962f8947d56519237fb8","impliedFormat":1},{"version":"89189df027e8910200a4b65af1e29a996225cf25975f5c438fbe9361c008fc6b","impliedFormat":1},{"version":"4555baaea5dfc93e0c0ba3fc326b0ba3ad50bb2ab887fa2dff49c7da7bd3bcaa","impliedFormat":1},{"version":"0b000f734fad76dcc87c70c90158d691ee409680eceb20e531a133de740f2324","impliedFormat":1},{"version":"bf3d905e4e6459cc1d8e3d7d8f62bc11c8ec8497068720f658c3b03618116ecd","impliedFormat":1},{"version":"0f2267d6bd1f5a43718fb292535aa7586503ea542d67bd9ee0600a36ec8a83ea","impliedFormat":1},{"version":"900c6d7b342ed29604a346d6f680a912f7ef60ba97f44e8cb8d5205041969dec","impliedFormat":1},{"version":"8cae686f3bf9ffdc5fad65592f348a37e2ed743a632a1b605000a2431bc7eaf8","impliedFormat":1},{"version":"8d6b7b77814d3beda2224c9d32ab4e77d373a5225f15573b77eae05f03926ed0","impliedFormat":1},{"version":"1c3a0e3abac99928fb5dec8f42d23b8ad1ebd5f26df08cd0a8dcb0c9d43a503d","impliedFormat":1},{"version":"2cb76131ee7c1b849d730d266f49ad5617a285d7b8ad7ebc1ac2749ae454e222","impliedFormat":1},{"version":"34bf6d81c6b9e84f1d53c2465d521277bea994f8612a0d80417fcdaad37cfbcd","impliedFormat":1},{"version":"f489d5e1bd45c038e9355267b9fa20b2298a372c2a4efcfd5cbf9f0fd7e40627","impliedFormat":1},{"version":"2e59c8382b469370e5c7f60648be896285300a54e25acfb75007422c805c1cc6","impliedFormat":1},{"version":"1729f008e7761ea42cb17aee825ab171ec515cf564ace589685f56114d68f2ab","impliedFormat":1},{"version":"85f7a89a18d98bd7c68cda1289a19a3f7bce2166f0f7c2b9030d8a3eb4f427fb","impliedFormat":1},{"version":"a87fa100939aa190bc186945ab7293b5434e91fe3b137d43f5011adc47ecebf9","impliedFormat":1},{"version":"e560695e9bd123be74cd97ea2070204e15bf437dc7e38277f62e9013f09d0314","impliedFormat":1},{"version":"db86b7554668c4a5ccc4468e2ced875e9aa9b6289d11df31daf8e98d68d1e687","impliedFormat":1},{"version":"0d0d7f5ab1a8a0874ebc447216aaaf3a763d01a7b1dd450e0e6335a99dbe372f","impliedFormat":1},{"version":"c7798f43272b09de550520ead6df45f0ddf81bd97000784351d764df923e08d8","impliedFormat":1},{"version":"bb7973ee7b12dc2d956a74a68d589d2ec72209266509f88edabdfaddfb7ab712","impliedFormat":1},{"version":"fb47996d1fde69f078a79dda6a61c025dad9123d5fe1fdfc6bc2681fed5b9ae6","impliedFormat":1},{"version":"cd334950c884229ac8ab64b6b7ac646a4ca36cd8e894772cfcfbb79f2fb577ad","impliedFormat":1},{"version":"11fe56fbe44194784599e6368d155a9905d657d8b7c4fa0218daeeda194da13b","impliedFormat":1},{"version":"f065153d3b9e0f22d4a4dcddfd6fd902c73af666fd7350979525788e15590533","impliedFormat":1},{"version":"fec5c915e8a25765edc8fbc6f19a57da5bc4809b9191b79ce467fe84b1c43511","impliedFormat":1},{"version":"102ceddeca43cd886fdf6d01c1725fbbffd48bac0ed3b3d5b1eb927e38b07195","impliedFormat":1},{"version":"876112a26ad2bb14c5ecf0ef16e3ae963397c771a2e293173b5704c8aee4441e","impliedFormat":1},{"version":"21136f25b4d5a59b94bbb519552a7114f055dcf5736db41c20967dedce6768e1","impliedFormat":1},{"version":"1bdf93cfb8b270ca905a8dfd106ff88277aef6c70cb72077db4faf75b30b94e3","impliedFormat":1},{"version":"c30b233f5f9c1caf20b0e34e90aba73a631e0ed49cdb1f4f93b6a9fc52ea700d","impliedFormat":1},{"version":"6ac9e5eeb91f4e33a6c9440fad06b6ec59a3b9089f69e192eb3702daf92a41cb","impliedFormat":1},{"version":"c449c814cf771b723f4d747f27e4bebe1ffdf236e86fa2812e781753c39452fa","impliedFormat":1},{"version":"31813f5d800846efe3400b7bdeb442fcaee27915efea787d1f50b8edecca34a5","impliedFormat":1},{"version":"b0d558b2e806df3758ee259b14d9b247c967fb7950b598d19459ab5dce263e54","impliedFormat":1},{"version":"244f1dfd6f31217ab2bf572c8c1083c5c20ae1c7252276649b0104288bd6d053","impliedFormat":1},{"version":"82af965d0bbe372b7cea4ee17c2a96ecbbfe0eecca081c4aeaf63e102affcd88","impliedFormat":1},{"version":"af763fbd7007bf8ea62e6ef71a47ea19ebacf8561f1321b7d53347fb2afbaefd","impliedFormat":1},{"version":"dd54b0c1cc6cbe7b8d11e1802bc8cf7b9fda48a46a11ad20b09304b7f2c7321c","impliedFormat":1},{"version":"24e6cde1a508cca4c07ba5aa2bb0675d9e68e7946e4f424452f8fc0b842c2ae9","impliedFormat":1},{"version":"5ec6ba1674cf73d6a2d42e8ec00ded92f0211a92ae1bf5b1af1dbd1eb84e6ffe","impliedFormat":1},{"version":"c6fe327c538417b8dd5b9bb32abcd7911534b10da3a4514f3445cdb28cf3abf2","impliedFormat":99},{"version":"bb0519ff5ef245bbf829d51ad1f90002de702b536691f25334136864be259ec5","impliedFormat":99},{"version":"0065cdb7ac9f5b19921632de63f888ec2cc11ad57f7fc868f44bf0faad2fce3e","impliedFormat":99},{"version":"1921b8b1513bb282e741587ec802ef76a643a3a56b9ee07f549911eab532ee2e","impliedFormat":99},{"version":"16de02d4e7ae55933e1e310af296e8802753f2f9c60bf7436413b51cae0a451c","impliedFormat":99},{"version":"03200d03f2b750f0bc64cbbeac20d5bacb986dc6b2de4e464b47589ad9c6b740","impliedFormat":99},{"version":"8c1adc3171d0287f3a26f4891a7d1834c89999573a9b444aa5ff519dcc43a2b7","impliedFormat":99},{"version":"a16b99c0d3511955f5abc6c01590b01b062e8375f43816e831cb402c03a09400","impliedFormat":99},{"version":"d03f3549a814f5c5d1a62950349aad23dcf9f830873b78ac59ab7266e5b4a14a","impliedFormat":99},{"version":"5a2cf4cd852a58131b320da62269b2143850920ce27e8fdec41fed5c2c54ec95","impliedFormat":99},{"version":"49fcfda71ea42a9475b530479a547f93d4e88c2deb0c713845243f5c08af8d76","impliedFormat":99},{"version":"4f97089fe15655ae448c9d005bb9a87cc4e599b155edc9e115738c87aa788464","impliedFormat":99},{"version":"2fff037c771e3fe6108b14137e56827197944b855aa2df40f21fa2d8a2758e1e","impliedFormat":99},{"version":"22929f9874783b059156ee3cfa864d6f718e1abf9c139f298a037ae0274186f6","impliedFormat":99},{"version":"c72a7c316459b2e872ca4a9aca36cc05d1354798cee10077c57ff34a34440ac2","impliedFormat":99},{"version":"3e5bbf8893b975875f5325ebf790ab1ab38a4173f295ffea2ed1f108d9b1512c","impliedFormat":99},{"version":"9e4a38448c1d26d4503cf408cc96f81b7440a3f0a95d2741df2459fe29807f67","impliedFormat":99},{"version":"84124d21216da35986f92d4d7d1192ca54620baeca32b267d6d7f08b5db00df9","impliedFormat":99},{"version":"c08976f55a00ddbb3b13a68a9a0d418117f35c6e2d40f1f6f55468fc180a01f0","impliedFormat":99},{"version":"25f5bf39f0785a2976d0af5ac02f5c18ca759cde62bc48dd1d0d99871d9ad86f","impliedFormat":99},{"version":"877c73fdbe90937b3c16b5827526a428bf053957a202ac8c2fd88d6eab437764","impliedFormat":99},{"version":"e324b2143fa6e32fac37ed9021b88815e181b045a9f17dbb555b72d55e47cdc1","impliedFormat":99},{"version":"3e90ea83e3803a3da248229e3027a01428c3b3de0f3029f86c121dc76c5cdcc2","impliedFormat":99},{"version":"9368c3e26559a30ad3431d461f3e1b9060ab1d59413f9576e37e19aaf2458041","impliedFormat":99},{"version":"915e5bb8e0e5e65f1dc5f5f36b53872ffcdcaef53903e1c5db7338ea0d57587a","impliedFormat":99},{"version":"92cf986f065f18496f7fcb4f135bff8692588c5973e6c270d523191ef13525ad","impliedFormat":99},{"version":"652f2bd447e7135918bc14c74b964e5fe48f0ba10ff05e96ed325c45ac2e65fb","impliedFormat":99},{"version":"cc2156d0ec0f00ff121ce1a91e23bd2f35b5ab310129ad9f920ddaf1a18c2a4d","impliedFormat":99},{"version":"7b371e5d6e44e49b5c4ff88312ae00e11ab798cfcdd629dee13edc97f32133d8","impliedFormat":99},{"version":"e9166dab89930e97bb2ce6fc18bcc328de1287b1d6e42c2349a0f136fc1f73e6","impliedFormat":99},{"version":"6dc0813d9091dfaed7d19df0c5a079ee72e0248ce5e412562c5633913900be25","impliedFormat":99},{"version":"e704c601079399b3f2ec4acdfc4c761f5fe42f533feaaab7d2c1c1528248ca3e","impliedFormat":99},{"version":"49104d28daa32b15716179e61d76b343635c40763d75fe11369f681a8346b976","impliedFormat":99},{"version":"6d414a0690dd5e23448958babe29b6aeb984faf8ff79248310f6c9718a9196ad","impliedFormat":99},{"version":"0bfdb8230777769f3953fd41cf29c3cb61262a0be678dd5c899e859c0d159efe","impliedFormat":99},{"version":"97e685ac984fc93dcdae6c24f733a7a466274c103fdcf5d3b028eaa9245f59d6","impliedFormat":99},{"version":"68526ea8f3bbf75a95f63a3629bebe3eb8a8d2f81af790ce40bc6aad352a0c12","impliedFormat":99},{"version":"bcab57f5fe8791f2576249dfcc21a688ecf2a5929348cfe94bf3eb152cff8205","impliedFormat":99},{"version":"b5428f35f4ebf7ea46652b0158181d9c709e40a0182e93034b291a9dc53718d8","impliedFormat":99},{"version":"0afcd28553038bca2db622646c1e7fcf3fb6a1c4d3b919ef205a6014edeeae0f","impliedFormat":99},{"version":"ee016606dd83ceedc6340f36c9873fbc319a864948bc88837e71bd3b99fdb4f6","impliedFormat":99},{"version":"0e09ffe659fdd2e452e1cbe4159a51059ae4b2de7c9a02227553f69b82303234","impliedFormat":99},{"version":"4126cb6e6864f09ca50c23a6986f74e8744e6216f08c0e1fe91ab16260dab248","impliedFormat":99},{"version":"4927dba9193c224e56aa3e71474d17623d78a236d58711d8f517322bd752b320","impliedFormat":99},{"version":"3d3f189177511d1452e7095471e3e7854b8c44d94443485dc21f6599c2161921","impliedFormat":99},{"version":"99f169da66be3a487ce1fe30b11f33ed2bdf57893729caaea453517d9a7fa523","impliedFormat":99},{"version":"043195af0b52aadd10713870dd60369df0377ed153104b26e6bac1213b19f63e","impliedFormat":99},{"version":"ad17a36132569045ab97c8e5badf8febb556011a8ed7b2776ff823967d6d5aca","impliedFormat":99},{"version":"698d2b22251dbbfc0735e2d6ed350addead9ad031fac48b8bb316e0103d865db","impliedFormat":99},{"version":"ff10facf373a13d2864ff4de38c4892d74be27d9c6468dac49c08adabbf9b0eb","impliedFormat":99},{"version":"97b1cf4599cc3bc2e84b997aa1af60d91ca489d96bea0e20aaff0e52a5504b29","impliedFormat":99},{"version":"853dfbcd0999d3edc6be547d83dc0e0d75bf44530365b9583e75519d35984c35","impliedFormat":99},{"version":"abbb31e3da98902306359386224021bfb6cfa2496c89bbbde7ee2065cf58297c","impliedFormat":99},{"version":"6139824680a34eba08979f2e21785a761870384a4df16c143b19288aced9c346","impliedFormat":99},{"version":"c7d89156a4f0313c66377afd14063a9e5be3f8e01a7b5fae4723ef07a2628e55","impliedFormat":99},{"version":"e2381c64702025b4d57b005e94ed0b994b5592488d76f1e5f67f59d1860ebb70","impliedFormat":99},{"version":"a64e28f2333ea0324632cf81fd73dc0f7090525547a76308cb1dfe5dab96596a","impliedFormat":99},{"version":"d7dfcb039ff9cff38ccd48d2cc1ba95ca45c316670eddbcf81784e21b7128692","impliedFormat":99},{"version":"883f9faa0229f5d114f8c89dadd186d0bdf60bdafe94d67d886e0e3b81a3372e","impliedFormat":99},{"version":"d204b9ae964f73721d593e97c54fc55f7fd67de826ce9e9f14b1e762190f23d1","impliedFormat":99},{"version":"c010c1317efa90a9b10d67f0ad6b96bde45818b6cdca32afababcf7a2dd7ecc3","impliedFormat":99},{"version":"68115cdc58303bad32e2b6d59e821ccaada2c3fb63f964df7bd4b2ebd6735e80","impliedFormat":99},{"version":"7db31e5afa6ffa20d6e65505d1af449415e8a489d628f93a9a1f487d89a218c6","impliedFormat":99},{"version":"db5968a602bb6c07ab2d608e3035489d443f3556209ded7c0679e0c9c7b671ed","impliedFormat":99},{"version":"d010efe139c8bb78497dc7185dddbbcefc84d3059b5d8549c26221257818a961","impliedFormat":99},{"version":"85059ed9b6605d92c753daf3a534855ba944be69ff1a12ab4eca28cefbabd07a","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"ea68a96f4e2ba9ca97d557b7080fbdb7f6e6cf781bb6d2e084e54da2ac2bb36c","impliedFormat":99},{"version":"00173ffba39168fe3027099da73666fbedfb305284b64eaaee25bb0037e354b2","impliedFormat":99},{"version":"f3ed9a4ec3123351b2a8cba473e9a6f173eab5458309f380fe0039642f70bcae","impliedFormat":99},{"version":"21f96085ed19d415725c5a7d665de964f8283cacef43957de10bdd0333721cc4","impliedFormat":99},{"version":"e8d4da9e0859c6d41c4f1c3f4d0e70446554ba6a6ab91e470f01af6a2dcac9bf","impliedFormat":99},{"version":"39defc828dbdf47affd1e83ae63798fbb0224e158549db98e632742ab5ddaebd","impliedFormat":99},{"version":"a10fd5d76a2aaba572bec4143a35ff58912e81f107aa9e6d97f0cd11e4f12483","impliedFormat":99},{"version":"1215f54401c4af167783d0f88f5bfb2dcb6f0dacf48495607920229a84005538","impliedFormat":99},{"version":"6d640d840f53fb5f1613829a7627096717b9b0d98356fb86bb771b6168299e2e","impliedFormat":99},{"version":"07603bb68d27ff41499e4ed871cde4f6b4bb519c389dcf25d7f0256dfaa56554","impliedFormat":99},{"version":"6bd4aa523d61e94da44cee0ee0f3b6c8d5f1a91ef0bd9e8a8cf14530b0a1a6df","impliedFormat":99},{"version":"6b6e2508f79513e01386273e63d0fc3617613d80a5aca950a2b0fc33d90ad0b4","impliedFormat":99},{"version":"52869a2597d5c33241d1debc4dfb0c1c0a5a05b8a7b5f85de5cfe0e553e86f47","impliedFormat":99},{"version":"2fe93aef0ee58eaa1b22a9b93c8d8279fe94490160703e1aabeff026591f8300","impliedFormat":99},{"version":"bbb02e695c037f84947e56da3485bb0d0da9493ed005fa59e4b3c5bc6d448529","impliedFormat":99},{"version":"d388e0c1c9a42d59ce88412d3f6ce111f63ce2ff558e0a3f84510092431dfee0","impliedFormat":99},{"version":"326a980e72f7b9426be0805774c04838e95195b467bea2072189cefe708e9be7","impliedFormat":99},{"version":"35ea0a1e995aef5ae19b1553548a793c76eb31bdf7fef30bc74656660c3a09c3","impliedFormat":99},{"version":"ba666b3ab51c8bc916c0cebc11a23f4afec6c504c767fd5f0228358f7d285322","impliedFormat":99},{"version":"c10972922d1887fe48ed1722e04ab963e85e1ac12263a167edef9b804a2af097","impliedFormat":99},{"version":"6efeacbd1759ea57a4c7264eb766c531ae0ab2c00385294be58bc5031ef43ad1","impliedFormat":99},{"version":"1c261f5504d0175be4f1b6b99f101f4c3a129a5a29fc768e65c52d6861ca5784","impliedFormat":99},{"version":"f0e69b5877b378d47cbac219992b851e2bbc0f7e3a3d3579d67496dabd341ec4","impliedFormat":99},{"version":"b5ea27f19a54feca5621f5ba36a51026128ea98e7777e5d47f08b79637527cf5","impliedFormat":99},{"version":"b54890769fa3c34ab3eb7e315b474f52d5237c86c35f17d59eb21541e7078f11","impliedFormat":99},{"version":"c133db4b6c17a96db7fa36607c59151dec1e5364d9444cbe15e8c0ea4943861e","impliedFormat":99},{"version":"3a0514f77606d399838431166a0da6dbd9f3c7914eae5bbfbd603e3b6a552959","impliedFormat":99},{"version":"fa568f8d605595e1cffbfca3e8c8c492cf88ae2c6ed151f6c64acf0f9e8c25d8","impliedFormat":99},{"version":"c76fb65cb2eb09a0ee91f02ff5b43a607b94a12c34d16d005b2c0afc62870766","impliedFormat":99},{"version":"cf7af60a0d4308a150df0ab01985aabb1128638df2c22dd81a2f5b74495a3e45","impliedFormat":99},{"version":"913bbf31f6b3a7388b0c92c39aec4e2b5dba6711bf3b04d065bd80c85b6da007","impliedFormat":99},{"version":"42d8c168ca861f0a5b3c4c1a91ff299f07e07c2dd31532cd586fd1ee7b5e3ae6","impliedFormat":99},{"version":"a29faa7cb35193109ec1777562ca52c72e7382ffe9916b26859b5874ad61ff29","impliedFormat":99},{"version":"15bdf2eeef95500ba9f1602896e288cb425e50462b77a07fa4ca23f1068abb21","impliedFormat":99},{"version":"452db58fd828ab87401f6cecc9a44e75fa40716cc4be80a6f66cf0a43c5a60cc","impliedFormat":99},{"version":"54592d0215a3fd239a6aa773b1e1a448dc598b7be6ce9554629cd006ee63a9d6","impliedFormat":99},{"version":"9ee28966bb038151e21e240234f81c6ba5be6fde90b07a9e57d4d84ae8bc030c","impliedFormat":99},{"version":"ad639ad2ec93535c23cfa42fbd23d0d44be0fb50668dd57ee9b38b913e912430","impliedFormat":99},{"version":"956e43b28b5244b27fdb431a1737a90f68c042e162673769330947a8d727d399","impliedFormat":99},{"version":"92a2034da56c329a965c55fd7cffb31ccb293627c7295a114a2ccd19ab558d28","impliedFormat":99},{"version":"c1b7957cd42a98ab392ef9027565404e5826d290a2b3239a81fbac51970b2e63","impliedFormat":99},{"version":"4861ee34a633706bcbba4ea64216f52c82c0b972f3e790b14cf02202994d87c5","impliedFormat":99},{"version":"7af4e33f8b95528de005282d6cca852c48d293655dd7118ad3ce3d4e2790146f","impliedFormat":99},{"version":"df345b8d5bf736526fb45ae28992d043b2716838a128d73a47b18efffe90ffa7","impliedFormat":99},{"version":"a6e18a521af3c12bb42bf2da73d0ef1a82420425726c662d068d8d4d813b16c5","impliedFormat":99},{"version":"dcc38f415a89780b34d827b45493d6dbadb05447d194feb4498172e508c416ac","impliedFormat":99},{"version":"7e917e3b599572a2dd9cfa58ff1f68fda9e659537c077a2c08380b2f2b14f523","impliedFormat":99},{"version":"20b108e922abd1c1966c3f7eb79e530d9ac2140e5f51bfa90f299ad5a3180cf9","impliedFormat":99},{"version":"2bc82315d4e4ed88dc470778e2351a11bc32d57e5141807e4cdb612727848740","impliedFormat":99},{"version":"e2dd1e90801b6cd63705f8e641e41efd1e65abd5fce082ef66d472ba1e7b531b","impliedFormat":99},{"version":"a3cb22545f99760ba147eec92816f8a96222fbb95d62e00706a4c0637176df28","impliedFormat":99},{"version":"287671a0fe52f3e017a58a7395fd8e00f1d7cd9af974a8c4b2baf35cfda63cfa","impliedFormat":99},{"version":"e2cdad7543a43a2fb6ed9b5928821558a03665d3632c95e3212094358ae5896b","impliedFormat":99},{"version":"e3588e9db86c6eaa572c313a23bf10f7f2f8370e62972996ac79b99da065acaa","impliedFormat":99},{"version":"1f4700278d1383d6b53ef1f5aecd88e84d1b7e77578761838ffac8e305655c29","impliedFormat":99},{"version":"6362a4854c52419f71f14d3fee88b3b434d1e89dcd58a970e9a82602c0fd707a","impliedFormat":99},{"version":"fb1cc1e09d57dfeb315875453a228948b904cbe1450aaf8fda396ff58364a740","impliedFormat":99},{"version":"50652ed03ea16011bb20e5fa5251301bb7e88c80a6bf0c2ea7ed469be353923b","impliedFormat":99},{"version":"4a6c2ac831cff2d8fa846dfb010ee5f7afce3f1b9bd294298ee54fdc555f1161","impliedFormat":99},{"version":"ec359d001e98bf56b0e06b4882bd1421fd088d4d181dff3138f52175c0582a51","impliedFormat":99},{"version":"730cb342a128f5a8a036ffbd6dbc1135b623ce2100cefe1e1817bb8845bc7100","impliedFormat":99},{"version":"73468feda625fe017c2904c4d753e8e4e2e292502af8bcd4db59ff56a762692a","impliedFormat":99},{"version":"d8cf10c52fcfed3459ed885435124dfa75b7536c6dc7d56970e2a7c2015533a6","impliedFormat":99},{"version":"0abb1feddc76a0283c7e8e8910c28b366612a71f8bfdd5ca42271d7ad96e50b2","impliedFormat":99},{"version":"ac56b2f316b70d6a727fdbbcfa8d124bcd1798c293487acb2b27a43b5c886bb0","impliedFormat":99},{"version":"d849376baf73ec0b17ffd29de702a2fdbbe0c0390ec91bebf12b6732bf430d29","impliedFormat":99},{"version":"70de5b72bc833ab9ee7430534435d10e8edb218d06fdf781e0cae39a7b96067b","impliedFormat":99},{"version":"0f9c9f7d13a5cf1c63eb56318b6ae4dfa2accef1122b2e88b5ed1c22a4f24e3b","impliedFormat":99},{"version":"a85b5df75328fb3857cb558055d78d9aeb437214a766af0ad309ea1bfe943e6e","impliedFormat":99},{"version":"f80561a76c0187c98313433339bb44818fd98dc10f31c0574b0e9e5ba2912700","impliedFormat":99},{"version":"45c293919f535342cd0fcfe2da1a8d346014f7a368e4ec401ebdde80293eef96","impliedFormat":99},{"version":"2d4530d6228c27906cb4351f0b6af52ff761a7fab728622c5f67e946f55f7f00","impliedFormat":99},{"version":"77dabe31d44c48782c529d5c9acddc41f799bf9b424b259596131efc77355478","impliedFormat":99},{"version":"88ca3a19c8b99e409299e1173d2fe1b79c5960e966f2f3a7db6788969414f546","impliedFormat":99},{"version":"c693f9c0fda89d41e7670429d30ddcda570f9ad63a7301379695916524eb6d2e","impliedFormat":99},{"version":"66a83abc49216ddee4049056ee2b345c08c912529e93aa725d6cae384561de83","impliedFormat":99},{"version":"6b514d5159d0d189675a1d5a707ba068a6da6bc097afb2828aae0c98d8b32f08","impliedFormat":99},{"version":"39d7dbcfec85393fedc8c7cf62ee93f7e97c67605279492b085723b54ccaca8e","impliedFormat":99},{"version":"81882f1fa8d1e43debb7fa1c71f50aa14b81de8c94a7a75db803bb714a9d4e27","impliedFormat":99},{"version":"d2c74e0608352d6eb35b35633cdbce7ed49c3c4498720c9dd8053fdc47a9db8a","impliedFormat":99},{"version":"bca335fd821572e3f8f1522f6c3999b0bc1fe3782b4d443c317df57c925543ed","impliedFormat":99},{"version":"73332a05f142e33969f9a9b4fb9c12b08b57f09ada25eb3bb94194ca035dc83d","impliedFormat":99},{"version":"c366621e6a8febe9bbca8c26275a1272d99a45440156ca11c860df7aa9d97e6d","impliedFormat":99},{"version":"d9397a54c21d12091a2c9f1d6e40d23baa327ae0b5989462a7a4c6e88e360781","impliedFormat":99},{"version":"dc0e2f7f4d1f850eb20e226de8e751d29d35254b36aa34412509e74d79348b75","impliedFormat":99},{"version":"c7bc760336ac14f9423c83ca2eec570a2be6f73d2ce7f890c6cce76c931c8e15","impliedFormat":99},{"version":"dea1773a15722931fbfe48c14a2a1e1ad4b06a9d9f315b6323ee112c0522c814","impliedFormat":99},{"version":"b26e3175cf5cee8367964e73647d215d1bf38be594ac5362a096c611c0e2eea8","impliedFormat":99},{"version":"4280093ace6386de2a0d941b04cff77dda252f59a0c08282bd3d41ccc79f1a50","impliedFormat":99},{"version":"fe17427083904947a4125a325d5e2afa3a3d34adaedf6630170886a74803f4a2","impliedFormat":99},{"version":"0246f9f332b3c3171dcdd10edafab6eccb918c04b2509a74e251f82e8d423fb7","impliedFormat":99},{"version":"f6ef33c2ff6bbdf1654609a6ca52e74600d16d933fda1893f969fc922160d4d7","impliedFormat":99},{"version":"1abd22816a0d992fd33b3465bf17a5c8066bf13a8c6ca4fc0cd28884b495762d","impliedFormat":99},{"version":"82032a08169ea01cf01aa5fd3f7a02f1f417697df5e42fc27d811d23450bc28d","impliedFormat":99},{"version":"9c8cbd1871126e98602502444cffb28997e6aa9fbc62d85a844d9fd142e9ae1b","impliedFormat":99},{"version":"b0e20abc4a73df8f97b3f1223cc330e9ba3b2062db1908aa2a97754a792139ac","impliedFormat":99},{"version":"bc1f2428d738ab789339030078adf313100471c37d8d69f6cf512a5715333afc","impliedFormat":99},{"version":"dc500c6a23c9432849c82478bdab762fa7bdf9245298c2279a7063dd05ae9f9a","impliedFormat":99},{"version":"cd1b6a2503fc554dcab602e053565c4696e4262b641b897664d840a61f519229","impliedFormat":99},{"version":"af1580cd202df0e33fc592fe1d75d720c15930a4127a87633542b33811316724","impliedFormat":99},{"version":"af6106fc6900a51b49a8e6f4c5a8f18295eb9ae34efbea3c2b7db45e42b41b5e","impliedFormat":99},{"version":"cd090c8806133525e1085f6b820618194d0133e6fc328d03956969d211a9c885","impliedFormat":99},{"version":"9ea6fea875302b2bb3976f7431680affc45a4319499d057ce12be04e4f487bf9","impliedFormat":99},{"version":"66e0c3f9875da7be383d0c78c8b8940b6ebae3c6a0fbfd7e77698b5e8ade3b05","impliedFormat":99},{"version":"da38d326fe6a72491cad23ea22c4c94dfc244363b6a3ec8a03b5ad5f4ee6337b","impliedFormat":99},{"version":"da587bf084b08ea4e36a134ec5fb19ae71a0f32ec3ec2a22158029cb2b671e28","impliedFormat":99},{"version":"517a31c520e08c51cfe6d372bc0f5a6bf7bd6287b670bcaa180a1e05c6d4c4da","impliedFormat":99},{"version":"0263d94b7d33716a01d3e3a348b56c2c59e6d897d89b4210bdbf27311127223c","impliedFormat":99},{"version":"d0120e583750834bf1951c8b9936781a98426fe8d3ad3d951f96e12f43090469","impliedFormat":99},{"version":"a2e6a99c0fb4257e9301d592da0834a2cb321b9b1e0a81498424036109295f8b","impliedFormat":99},{"version":"c6b5ae9f99f1fccadc23d56307a28c8490c48e687678f2cafa006b3b9b8e73e4","impliedFormat":99},{"version":"eae178ee8d7292bcd23be2b773dda60b055bc008a0ddce2acc1bfe30cc36cf04","impliedFormat":99},{"version":"e0b5f197fb47b39a4689ad356b8488e335bbf399b283492c0ffae0cfda88837b","impliedFormat":99},{"version":"adb7aa4b8d8b423d0d7e78b6a8affb88c3a32a98e21cd54fcafd570ad8588d0c","impliedFormat":99},{"version":"643e22362c15304f344868ec0e7c0b4a1bc2b56c8b81d5b9f0ee0a6f3c690fff","impliedFormat":99},{"version":"f89e713e33bfcc7cc1d505a1e76f260b7aae72f8ba83f800ab47b5db2fed8653","impliedFormat":99},{"version":"4c3be904cab639b22989d13a9c4ea1184388af2ff27c4f5b39960628a76629db","impliedFormat":99},{"version":"307009cbc7927f6c2e7b482db913589f8093108b8bd4a450cfe749b80476aea0","impliedFormat":99},{"version":"a5bf6d947ce6a4f1935e692c376058493dbfbd9f69d9b60bbaf43fd5d22c324b","impliedFormat":99},{"version":"4927ef881b202105603e8416d63f317a1f1ea47d321e32826b9b20a44caa55e2","impliedFormat":99},{"version":"7deb9fb41fbf45e79da80de7e0eb10437cd81a36024edff239aa59228849b2d3","impliedFormat":99},{"version":"f9fdd2efc37eefc321338d39b5bd341b2aa82292b72610cb900f205f6803ff66","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"7139f89a25baa378770397bf9efd6e15061eb63d42df3591e946a87ef2197fea","impliedFormat":99},{"version":"956aeea3c94b894b3ae95a9691c1a8fa6f9eae47d30817a59c14908113322caa","impliedFormat":99},{"version":"87cbb57d0f80470800378bff30f8bc7e2c99a7b30a818bf7ccbf049407714a10","impliedFormat":99},{"version":"cc411cd97607f993efb008c8b8a67207e50fdd927b7e33657e8e332c2326c9f3","impliedFormat":99},{"version":"b144c6cdf6525af185cd417dc85fd680a386f0840d7135932a8b6839fdee4da6","impliedFormat":99},{"version":"2125e8c5695ddfded3b93c3537b379df2b4dcd3cdad97fa6ec87d51beda0bef1","impliedFormat":99},{"version":"572ee8f367fe4068ccb83f44028ddb124c93e3b2dcc20d65e27544d77a0b84d3","impliedFormat":99},{"version":"7d604c1d876ef8b7fec441cf799296fd0d8f66844cf2232d82cf36eb2ddff8fe","impliedFormat":99},{"version":"7b86b536d3e8ca578f8fbc7e48500f89510925aeda67ed82d5b5a3213baf5685","impliedFormat":99},{"version":"861596a3b58ade9e9733374bd6b45e5833b8b80fd2eb9fe504368fc8f73ae257","impliedFormat":99},{"version":"a3da7cf20826f3344ad9a8a56da040186a1531cace94e2788a2db795f277df94","impliedFormat":99},{"version":"900a9da363740d29e4df6298e09fad18ae01771d4639b4024aa73841c6a725da","impliedFormat":99},{"version":"4e979a85e80e332414f45089ff02f396683c0b5919598032a491eb7b981fedfd","impliedFormat":99},{"version":"6d3496cac1c65b8a645ecbb3e45ec678dd4d39ce360eecbcb6806a33e3d9a7ae","impliedFormat":99},{"version":"9909129eb7301f470e49bbf19f62a6e7dcdfe9c39fdc3f5030fd1578565c1d28","impliedFormat":99},{"version":"442f6a9e83bb7d79ff61877dc5f221eea37f1d8609d8848dfbc6228ebc7a8e90","impliedFormat":99},{"version":"10c21d52b988b30fcd2ee3ef277a15c7e5913e14da0641f8d50db18a3c4e6bef","impliedFormat":99},{"version":"7e4fc245cc369ba9c1a39df427563e008b8bfe5bf73c6c3f5d3a928d926a8708","impliedFormat":99},{"version":"2dd4989deea8669628ef01af137d9494c12bbfc5ff2bbe033369631932c558cb","impliedFormat":99},{"version":"d39330cb139d83d5fa5071995bb615ea48aa093018646d4985acd3c04b4e443d","impliedFormat":99},{"version":"663800dc36a836040573a5bb161d044da01e1eaf827ccc71a40721c532125a80","impliedFormat":99},{"version":"f28691d933673efd0f69ac7eae66dea47f44d8aa29ec3f9e8b3210f3337d34df","impliedFormat":99},{"version":"fa9c4f35c92322c61ec9a7f90dd2a290c35723348891f1459946186b189a129a","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"f716500cce26a598e550ac0908723b9c452e0929738c55a3c7fe3c348416c3d0","impliedFormat":99},{"version":"6b7c511d20403a5a1e3f5099056bc55973479960ceff56c066ff0dd14174c53c","impliedFormat":99},{"version":"48b83bd0962dac0e99040e91a49f794d341c7271e1744d84e1077e43ecda9e04","impliedFormat":99},{"version":"d7c98c7c260b3f68f766ec9bbd19d354db2254c190c5c6258ae6147283d308f0","impliedFormat":99},{"version":"ffa53626a9de934a9447b4152579a54a61b2ea103dbbf02b0f65519bfef98cdd","impliedFormat":99},{"version":"c427b591bfddecf5501efa905b408291a189ae579a06e4794407c8e94c8709fc","impliedFormat":99},{"version":"b6e9b15869788861fff21ec7f371bda9a2e1a1b15040cc005db4d2e792ece5ca","impliedFormat":99},{"version":"22c844fbe7c52ee4e27da1e33993c3bbb60f378fa27bb8348f32841baecb9086","impliedFormat":99},{"version":"dee6934166088b55fe84eae24de63d2e7aae9bfe918dfe635b252f682ceca95a","impliedFormat":99},{"version":"c39b9c4f5cc37a8ed51bef12075f5d023135e11a9b215739fd0dd87ee8da804a","impliedFormat":99},{"version":"db027bc9edef650cff3cbe542959f0d4ef8532073308c04a5217af25fc4f5860","impliedFormat":99},{"version":"a4e026fe4d88d36f577fbd38a390bd846a698206b6d0ca669a70c226e444af1b","impliedFormat":99},{"version":"165f3c6426e7dfff8fb0c34952d11d3b8528cb18502a7350d2eeb967177b2eb7","impliedFormat":99},{"version":"fa910f88f55844718a277ee9519206abce66629de2692676c3e2ad1c9278bdfd","impliedFormat":99},{"version":"9a7914a6000dbd6feaea9bc51065664d0fef0b5c608b7f66a7b229213e4805ef","impliedFormat":99},{"version":"9ae87bd743e93b6384efbfa306bde1fa70b6ff27533983e1e1fe08a4ef7037b8","impliedFormat":99},{"version":"5f7c0a4aad7a3406db65d674a5de9e36e0d08773f638b0f49d70e441de7127c0","impliedFormat":99},{"version":"4a43776782d9bce9cc167e176b4a4bb46e542619502ce1848d6f15946d54eaf7","impliedFormat":99},{"version":"56f4ae4e34cbff1e4158ccada4feea68a357bae86adb3bedaa65260d0af579df","impliedFormat":99},{"version":"a4f90a12cbfac13b45d256697ce70a6b4227790ca2bf3898ffd2359c19eab4eb","impliedFormat":99},{"version":"6801ebe0b7ab3b24832bc352e939302f481496b5d90b3bc128c00823990d7c7d","impliedFormat":99},{"version":"8395cc6350a8233a4da1c471bdac6b63d5ed0a0605da9f1e0c50818212145b5b","impliedFormat":99},{"version":"b58dda762d6bd8608d50e1a9cc4b4a1663a9d4aa50a9476d592a6ecdc6194af4","impliedFormat":99},{"version":"bc14cb4f3868dab2a0293f54a8fe10aa23c0428f37aece586270e35631dd6b67","impliedFormat":99},{"version":"ed88c3365f1ed406cd592ab4c69c9e31aedbaabaf5450cc93e0f0bd576a48180","impliedFormat":99},{"version":"99b6b07b5b54123e22e01e721a4d27eabecb7714060ec8ab60b79db5224cfcc0","impliedFormat":99},{"version":"b478cef88033c3b939a6b8a9076af57fc7030e7fd957557f82f2f57eddfc2b51","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},{"version":"a03b097607908fed59d8c33333707b2a5303d685fcb68a4f3a818c0cf7b178bc","impliedFormat":99},{"version":"b469dd9cf264e0b3bde6e0863f15893d64889e53a1ef8e4de9206c904ba09855","signature":"ca7fc49c423b4f471691a59fffb551d8409f0d013f898c84f929e046315a31c8"},{"version":"c85d2a0601a6701862cd97e451211d5f193240d4fef2b41b3e7015fd05a06a92","signature":"7778690faccc7e92f8d9c44b653f1dc6c8e9aee886850bc739ccd6d318c96f69"},{"version":"595bbf59efb3a5c3e97c8eff2b195c368d1b8cf803ed4a9fa834d7e2cab5c9ed","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"8698b230c61a64b99b1f50029d0ff706c04f562c7599f56a6cdccf0ecdf1b49b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6e0b52223560b7b87d426abe76fa8a3310736e3687ceda739b0284b57eec2ca3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"9781aad9660429f5f5316989ca6efcf4209926d2e7cf33bdd3bf3258a140f50a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"26cb495f55f78a38582a602e122416f0aa2cbe72347bfd52922deab51b4fd82c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a9f197afdc34064f31749c3cefb25bb8c30de7e82fea6c91de1c092fdf121b7f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"777fedfa6acf980d1380b8f0e48210d24ac8b411830c58811e9cd0e74abe4e4d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"29c1a34a0d8d971ac3ac210ea7138f21cd7d718a29673156dd2252acbdbb1604","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"65b869e36a620b35f35ba468d29221f8f1abf3b15a5657af4241ffb729a7db9f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f24caafb0061cd239e3c92d2cddab72578db910a51cedfd080342e759057fe31","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fcc045116cfa4a9a52871adf45630a9eba1d8acab11619da963acc4212bc42f9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"07fcc9be98e12bd2f0f71a501a9bfbe2e53d38c50e8a5e84223fdd05bd8749c5","impliedFormat":99},{"version":"b887a4575db46263f82d7bde681bdc14526e4a2618a1172fef4206c467752d8f","impliedFormat":99},{"version":"fa2c48fd724dd8f0e11dfb04f20d727a2595890bfa95419c83b21ed575ed77d1","impliedFormat":99},{"version":"6d23ffe7f1b73f16b08f5baeca430e6655b46fdc5862fd7bff1483b71fc6b28d","impliedFormat":99},{"version":"20be44c04e883d5fe7840d630a8d0656e95b00c2d6eebab9ab253275e7170534","impliedFormat":99},{"version":"3b674288fbdc0ff0ed2b7fc2839014c2ff209c84999fd06b6339347d0f976a85","impliedFormat":99},{"version":"cc2958d8abd86edcdf05542bb1b40ba659db5bc5a2560720cde08e8950e63bc1","impliedFormat":99},{"version":"e44e0ea195d68c0aea951809bda325322085008c0622fc4ee44db5359f37b747","impliedFormat":99},{"version":"21053659ad72fe51b9dfbde4fa14dbbac0912359fa37c9a5aa75f188782b2ee8","impliedFormat":99},{"version":"e297bdcb7db008d8d7d0481f2c935a9f7f0a338f41b7e5d1cec6a7744140a4ff","impliedFormat":99},{"version":"ef816ad6735a271c4c8035a1914c3a9beaaa90b3c174da312d26bce8736e56ec","impliedFormat":99},{"version":"7202026e24c5e5b7b6e5fe6b99455a91058ef82e74a5cdf6a3a4136b7ae9c080","impliedFormat":99},{"version":"87561cc8a2d7444adf4eed4b3f15bef8c6098cceb0e7617fba1cc45d187ac8c8","impliedFormat":99},{"version":"b52f7568bb9b00bcee6c4929938226541c09d86b849b8ba8db2fe2a8bba46f49","impliedFormat":99},{"version":"d42e1872d53ebb213e7bbe15e5fecdcaa9a490d2f2a2b035ee9cf4a6d3f1e44e","impliedFormat":99},{"version":"2262d96c02073dcb17a31ae8c738651ebff75f102522eae686f5462658b687a8","impliedFormat":99},{"version":"fd40c454d56e1d14e60ce13f3bc60c7fdb9bc70c6ef9c7bfafec1f0eb5d8075b","impliedFormat":1},{"version":"155ced96d70533d95c481061e2691802fae7cfb96869d7c85ac8622f53b51cb7","impliedFormat":1},{"version":"3689b6f599705380d2ceaccb4e58eec5c9439a7a5635d6e37c1ba66ed7c34b35","impliedFormat":99},{"version":"6cf0d3cc668cdbb01358ef7c2e41bbcc14d8d8e4ca424a1b6d2838d9a1cae8ce","impliedFormat":99},{"version":"b7bd70307671536c735389e0a1748555c438c392dfceb6f2ac3aa0a50ca82530","impliedFormat":99},{"version":"661c403f4c5bbf259e03f4fdc3a9e3f51ad562684f702e1b842e6c5336de0752","impliedFormat":99},{"version":"415dd92247ca21db682f75ba7e6289ab2d093cd34c6f471c6c789afd047ad4f3","impliedFormat":99},{"version":"4fc633107330ab389f07f86af80192ac697a68a586ad76dcf43304410e7cfb6a","impliedFormat":99},{"version":"828f8b38dff4e5c47b0112cb437da379c720f0360d40d392457c9775f30c8ae8","impliedFormat":99},{"version":"2d1f83d6714706674ee91998e967bee2ff2da6e86bebe173566afc676d0dd9bf","signature":"ff7503e520c527ee17c6464da66e68f99a1063d8c2a887d1c0e3862393693be4"},{"version":"ba10a313e4440bd980505cacb2c920e02d36dcb956763882e83715e4db88288d","signature":"684ee491b675e6b23b4a5ce57e90601b47b323d745cace07a9184ca285606dd5"},{"version":"2cba9cf54756b50009318570ed1a17b993d719d08d666a9223fdf8800488414a","signature":"9e901df45cd8bf96734e5ff217655167e923ea32600e4a05e853b791f139a96c"},{"version":"d49d82e859843352bd1fac242f835782ace8cbbe8c11cabe62cac514382b4ce9","signature":"f6aebd7cfce94a41ef8325969db3e4bb6aab3abbbb0e1697af8b3b97ef2bc6be"},{"version":"fa2c48fd724dd8f0e11dfb04f20d727a2595890bfa95419c83b21ed575ed77d1","impliedFormat":99},{"version":"20be44c04e883d5fe7840d630a8d0656e95b00c2d6eebab9ab253275e7170534","impliedFormat":99},{"version":"3b674288fbdc0ff0ed2b7fc2839014c2ff209c84999fd06b6339347d0f976a85","impliedFormat":99},{"version":"cc2958d8abd86edcdf05542bb1b40ba659db5bc5a2560720cde08e8950e63bc1","impliedFormat":99},{"version":"e44e0ea195d68c0aea951809bda325322085008c0622fc4ee44db5359f37b747","impliedFormat":99},{"version":"21053659ad72fe51b9dfbde4fa14dbbac0912359fa37c9a5aa75f188782b2ee8","impliedFormat":99},{"version":"3689b6f599705380d2ceaccb4e58eec5c9439a7a5635d6e37c1ba66ed7c34b35","impliedFormat":99},{"version":"6cf0d3cc668cdbb01358ef7c2e41bbcc14d8d8e4ca424a1b6d2838d9a1cae8ce","impliedFormat":99},{"version":"b7bd70307671536c735389e0a1748555c438c392dfceb6f2ac3aa0a50ca82530","impliedFormat":99},{"version":"661c403f4c5bbf259e03f4fdc3a9e3f51ad562684f702e1b842e6c5336de0752","impliedFormat":99},{"version":"415dd92247ca21db682f75ba7e6289ab2d093cd34c6f471c6c789afd047ad4f3","impliedFormat":99},{"version":"b52f7568bb9b00bcee6c4929938226541c09d86b849b8ba8db2fe2a8bba46f49","impliedFormat":99},{"version":"39d80ec3c018d7ffe7c99ddd3a7b6844b3376c15e52937a7687d2c2828830fd0","impliedFormat":99},{"version":"828f8b38dff4e5c47b0112cb437da379c720f0360d40d392457c9775f30c8ae8","impliedFormat":99},{"version":"ef816ad6735a271c4c8035a1914c3a9beaaa90b3c174da312d26bce8736e56ec","impliedFormat":99},{"version":"7202026e24c5e5b7b6e5fe6b99455a91058ef82e74a5cdf6a3a4136b7ae9c080","impliedFormat":99},{"version":"87561cc8a2d7444adf4eed4b3f15bef8c6098cceb0e7617fba1cc45d187ac8c8","impliedFormat":99},{"version":"d42e1872d53ebb213e7bbe15e5fecdcaa9a490d2f2a2b035ee9cf4a6d3f1e44e","impliedFormat":99},{"version":"2262d96c02073dcb17a31ae8c738651ebff75f102522eae686f5462658b687a8","impliedFormat":99},{"version":"e297bdcb7db008d8d7d0481f2c935a9f7f0a338f41b7e5d1cec6a7744140a4ff","impliedFormat":99},{"version":"568c26e04942bc025342240f0fadc1463ce47171909302d05024a7f77a31a7c2","impliedFormat":99},{"version":"dcd170fac901d7b9fb91f9e4141620200faa6a9cf52c0c30df439eba4898001c","signature":"1728a581f19c741e1d0deb106f81952bc82bbbe714aa3eeb12d768fe37c4511b"},{"version":"a534e61c2f06a147d97aebad720db97dffd8066b7142212e46bcbcdcb640b81a","impliedFormat":99},{"version":"ddf569d04470a4d629090d43a16735185001f3fcf0ae036ead99f2ceab62be48","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"53c448183c7177c83d3eb0b40824cf8952721a6584cf22052adc24f778986732","impliedFormat":99},{"version":"ff128381c9aee8ec304e33e1db75a0eb00557ea3a935319ddc5849447d5c2a6e","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"29862711141ae90f542d8c5190b58747d5134f9ec604b5f1aa5a4e58dc40ef15","signature":"583462e01b4ec7c547107308e1505487458253cf4dd4266a970a6e7240359234"},{"version":"185754a6cc160f3268f702a8323934c79c07a5cf6afcd80f7a13dc43ae638fd6","signature":"00a5a375c05d3a130d7da9e5da563ce4ed2753e7e7f2988eb7e98005bc928ab0"},{"version":"cc562e355340f742084220abe01feb01f77ea3b997ae9c540eff648bf37f03eb","signature":"ed42e7ba0422f9c3a1e645604844e13d91c2d7092fab357d39ae5999b6c9f14d"},{"version":"69dbe5d61d2f298046513598f55bd1e719c50dfd6af2f9feea6fc84f8aa3c4bf","impliedFormat":99},{"version":"6a78643fbbf1b0bd954a53d4edfa217b6a5f92d357fa9cdf8d2ee430f96b9472","impliedFormat":99},{"version":"2ebe2f0255b6f301ba7bc0e10c3dda289c6cf1876f289f7a8f6444613d988e5e","impliedFormat":99},{"version":"012b5083a47ccbe050763f8df2be89daa50c1606e9a0bb31f64276d508c02d78","impliedFormat":99},{"version":"fc7c3943608aec142abb8c28f5892a1faaf255d48e1137ff2b2e0be0afdd479e","impliedFormat":99},{"version":"e8fc8d807069e0f94d481106510fae66792e6a66f330c45fd3c769053cfa5608","impliedFormat":99},{"version":"4c57148a2cb7736c37a7ca128fc8adec5a683413663c17604a28da143ca1a65b","impliedFormat":99},{"version":"37a5b233da6141bd6cd4e78dd8bcd9c0dd29e33ec10707cb57c66304cf743e46","impliedFormat":99},{"version":"c8e1a516135ad6fd057ddc5a01036067ff3b43b3277d18f1eb4c5df22630b50b","impliedFormat":99},{"version":"7d8b55f6b9e7a7a003063ecd596c72c23fe6d8225d6cf3e00e8b375059123513","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"5780b706cece027f0d4444fbb4e1af62dc51e19da7c3d3719f67b22b033859b9","impliedFormat":1},{"version":"a70c4aeb18ed04d567de33ef6e7c1006fc3b14bbfcd78a0edab8fa8987df0644","signature":"5d73eea4701fc18da77393109dc6e8fb324a524eaf754a6fa30850d7efca1f10"},"2cd8ceb9d78233669aced348f594372ec4da99a31e7611b01c419d7e3c090cf8",{"version":"6dbeba835d9d13b69733b8478a01a6fc5b2e6f59335bb818749fbc4808e30150","signature":"22d30ddaf61da806ca602b1d7ef42dbdd17ec9091030e097f5055b9c450305c8"},{"version":"9d3821630ef85260e117212e68f02ab283259c2e06e59e82436a75aa6c939561","signature":"37d529f94b4208e677d61b5608ab6545bbaf9f252f7890596470cf36e807b6f2"},{"version":"a054aa88cdbc7a555671d5ca5755c50ceb3823457267e38383b05a9be138c74b","signature":"1e8a7e0975e4603e5506c43b88fefe79c4edf799a52da25d8fb576178b6073cf"},{"version":"8b06b8ed09709d638850f7433f26c9c6e72a64fce56f262d4f39530bcdeb3a64","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4372aafeabbf96bcb00a0cf4396378d397872e3740a46c3b102bb783d6f86b29","signature":"43f63c452c814675f777fd81d27c616089dce87d31c5bd633c5e87c808359e8f"},{"version":"8e86a1c7cc04ae1cea710d8f7392f9f883803133fd21d5840514c57f8dfcc6d6","signature":"9ac4d5239c77d6d17f4ff247e493ff87be7b3d2df778e32eedd7be57a6e0cd8b"},{"version":"271818adce738ea6ecc503c5617c3e6443ac441531843d8ab803f3adf7b98caf","signature":"b1d411fe11459f332e68f1698d0419812a853c0e272211ac8da8f15a5945abf0"},{"version":"dc452446d81dba5f3e56aba5aa6528d6343ca7fbfaa5b43d298201ae22bbd048","signature":"7fe651c429015cf4d880b1fd661e2f18e77423423ec873a9ad0fb2abaee92c31"},{"version":"341cf4f57f305dc092896ae8e8594411247fffd486f5576ba0f7581d05d73fc6","signature":"77552bbebbb26f74d48d45eb8008b75b2642088b47bb10ca566fab2fe3b430bd"},{"version":"cd17e866ebd6b151133fb77c31631366b831f2b17bbdfc077c872e1799765f0c","signature":"5cba45e2db58fb19b38c0a302a423f12c9501d8e5088729918824d6fb493f50c"},{"version":"c550713eb09fb763d285f7643c5c144db7ebfa6b2042eb688911e7d3f5afe896","signature":"4d2d9f075d1df6083052ea76f613c2bf40666d8d6e03993b04748584ec50a9c1"},{"version":"310e2723fe79be2b4bb458a5a7d3b13b3e7688558d04a18a2a772c97ca3d4bf4","signature":"e6c56cad948b779cf53690e47e2458b9a6db814084ced9806f1dfc6b83452f83"},{"version":"51ba8eef081b314085a11ff4eb088ce3867764f9a9bfb1e5d191a9489cb783d4","signature":"d319102d3afbf5a8506517a1d107656344c1f9b02a2aae3a7bd70102fb460ddb"},{"version":"dd4c726c90057fb2caed199ec559df9dd45aba5e39d232108effe07afb98ab1a","signature":"30d397b5c94a50b22b114db9e9a9e1d235efd97086b1d6973f2a4fe45eba1869"},{"version":"fed8b8f5fd79b6851746f3d901cbb0759d6a94da32a0e5bb8b10efd2901f7c9d","signature":"feb55a4c3666721c912d079543ae5b26d179dd80ce803a4dd766c48bc77a8069"},{"version":"724cdca62502ff522ae622c2449b330a13de8762a9174513c5cbb8a7dda90601","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe37458cbcd4f262017eb8feb99aaceeb74a10330efdf4ba0161084a12e6e8f8","signature":"f7f6f7910e82f97a35529b766bead1324693cf5d9e78ddc2fb532ff2706504d5"},{"version":"6a54e6e260f15c810abe529b29ae1d0e4328c095037235598b647001afd6dd5f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a9151032dc81d1e6d4e4af3f17461e63669d0f8d2b306d7142a4ddedfd29b24d","signature":"2de4016a4f65c467e9513bf7a9e3bd767678241d8d55d2e7efbaa85c77e1ffd2"},{"version":"a641e009ddf21e183c82a642db66f1e739f78b5ef7482a552f17029443226e11","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"edf78506322888dceead85d543a96b2d22ccc23b1b927777962c5873c6c4914d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"8c1445f73505ca56056164e50254a5fc94575cbc03189e3f43b0a3661e8b944d","signature":"6d31ff70bb89be7066ed526da00cda56309b9293b32812c8f63f942e7edfb111"},{"version":"8484034db80a452bab40f19c8feacc01ef4483b9253d5095be79511a749ab236","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"d556991a8bc95789d4309fad33148c6727c1cd763a57222f8ec54d9ae88d61ae","signature":"30d397b5c94a50b22b114db9e9a9e1d235efd97086b1d6973f2a4fe45eba1869"},{"version":"a9d2ebc84518030c0e9bb6714c8288f01e50dc09f84817463bce9d40200f8b5e","signature":"41974c6a368c789c8b8a9d995a003d0b2ac2849ddf8bb69a902782d64a0c0511"},{"version":"9b99a7295440d7ea3d545154306c7a54be9ebeac3658f541e3cdee6a1dbc06f6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e556eb6be3b0c3c19656895237a53d076ce5e5e94fc0429eaba9782e0b8ed425","signature":"5eaac2ffcd903f024db9db1d70943317c4d9502a2f05ba0aa1eaa809fd65a737"},{"version":"a0b1fe57ff125f73841d8848106ce64ba16b7f964af3b340ae3a7be5e3b2e1a0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"090daf26112fa2445fe107d95ec578af4e5911a7068c9ab706d879ac019a3d3e","signature":"e01086a749c2360bfd713aeff3f2876664f14db15b167270cf6e8b76230e5328"},{"version":"f8cc0068547066a2703249452734e9e27d496c19544897f15fcd61b8c59eee5a","signature":"81921905af55f744ebf75c837c253a189c14d11f9e97db771917ab3416e21e93"},{"version":"0163083635fe2d4a078e7a8c71f67ccad45a6778695088aa685e69d13050a9b2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2128578174d85dd7b938c26196b6263567a73ff5fed0c6193c185d68c098aba7","signature":"f1ef07645b29c9304137c8bc4e20280b8eb08621fda0641e53050c586f568be3"},{"version":"77e094bec16664a4339d01fe5a20f3e3318359a9aec41929f84c2e76d106a72f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"bb049f90acda293fd6336343f6727c79af2dfda1e7cbd55c6507fc9865c07ab9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e231b1f3bd383553738a4f9d1c37fb38a6ec1a61d29908e2f858ab728fa99340","signature":"a5444f8249c073edf9937a03893f496cf74a6d8f691bac0ce17c7565f0c5a3c5"},{"version":"13fa7357dc3b7abcf08a437c46fb5a444d99a779942c6afc2a6303dc2b7257fe","signature":"48be45ecf1ad85e94f806efa606cc2991c02cca46895696cba5e9f058f3d1cd5"},{"version":"2066ee0ec59b85e1f16a62326e18c7025cc94b9f8349a0a7f7d4c3697558d818","signature":"8638caa7167f1bb81b30b59c0da6a1dcbd809dd04883d89246994f8a8aa1c348"},{"version":"b2ab26c8419e899ece3b2589ad6c4179c2af8011271d0be8852b861adc32d306","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe3776209eeb9972e5f9f450cbcd0c452c576173b96d834735e64d9c6468c0e9","signature":"4f8a91b5e8be0d4560eff5eccccf7d8d798e5cb4eb643ffa6ada14bc2e436b44"},{"version":"ed9d0e5d83217df43ff976e26293330e3416b8d06e5b76fe0908260970de2893","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e235a1ef92da219ceb298bf9311ea8d1b393f0b0dc05ef187af5c6cd766601fb","signature":"76d77cf2ed1415a49288a8024a0bf511b040eab4f7749e6f5335680472699d54"},{"version":"aa85087b2f51d80f81401cd324157e2d3bc4044f712b4a3cd26d57b11d46b276","signature":"0d9e44fab4f8bca16f048f312c56a137595f3dc9a085ba824afc1801c6fa45af"},{"version":"6428e922c22088722ac9e96dc72d61f04d38932840ad609477c53b63f75ec727","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2a7fd719f20a6400d7e5b10396c8d81d91d6b5b34d5a14b7c13bb0801be3d01c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e1c4ab7fac150f2ec5bab09514f17903f8499b4dce81a4afd1a53fa108f77a4c","signature":"95342456a2528e79e342d4673e89992d36c83031aed802b5700d9bc17cd97b7b"},{"version":"9205a9f881a5fa4cc31aa437b8a78b15ac8ca1f97b49b8618e4efdc968a4fc6b","signature":"657be8c89278f99da66fcb86b28ddf3fda8f256c46dd49a9cebe0fc1bdcf9dcd"},{"version":"fdb25849c9d3961f3f6be3b837938534349c7150cc2bec167bdee40f86b4e648","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"9dca669d1fd58e76dc9e78585da98ce21478d24484868077e80e4f9807c35c8f","signature":"57b0b61b3dc0afa371946ad39627e8bde74fdd71ec37868b08a459fba4a93806"},{"version":"2777b65f59b3218c4cb8209d83d4ef371ed35d7ab56fd7ec3dc9108688c0d887","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7cfee12174fab88d0701cf65ccc5bbb7de677641f9d0bc521b7bec9a16d31db3","signature":"21e37be884f8363a08685b18be7592e606e157cf606b15a55214cc145cdef69f"},{"version":"ffaa587ac1ee88ece7db8f34137d886762ddb9f4cc4d4c9061d1748b867f92aa","signature":"8638caa7167f1bb81b30b59c0da6a1dcbd809dd04883d89246994f8a8aa1c348"},{"version":"f067498e3d6df6eaf8ca3f1b6092c47996af845dbd173bc68408b9c77618e10c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"eb946bcde9164c41577d440211ab4d87c5c75d589ec4ce6205ea56d64faa1dfb","signature":"8638caa7167f1bb81b30b59c0da6a1dcbd809dd04883d89246994f8a8aa1c348"},{"version":"293251c704198f95152bf2760277aa02e935a34180dff857cdf95c40f10008f7","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"abf0daff74105407f320d3ae718c4eb3787635c73734643419bb214cb0688b51","signature":"30d397b5c94a50b22b114db9e9a9e1d235efd97086b1d6973f2a4fe45eba1869"},{"version":"531f5dd8239b8a0912b95a6b751780f057a05196c144a6c4c8db7e830e606a52","signature":"feb55a4c3666721c912d079543ae5b26d179dd80ce803a4dd766c48bc77a8069"},{"version":"10aacf18df08990f74cf1266911d7b972df69338c8ebb185b1e0475621dc8483","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"960d782010936029a9d31c7362ddc205e95b7250700391154e8d1d9efafcd9c6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6f582802df0d4f361063ddbe97523397e622cee3a8a1b1cf041c2d0c4da7862a","signature":"65015195782037ef329d29d106d3876be1d835bb448883f2fc3aa4e95b49b452"},{"version":"b380c7e35a736dfdd4ea776a3fa892569be22c40a1c47755d2826a1ad4891d54","signature":"30d397b5c94a50b22b114db9e9a9e1d235efd97086b1d6973f2a4fe45eba1869"},{"version":"da1e938c57b0535fc919e9158d86335886e8e57dc32156a2ffd42aabfe364f78","signature":"64c8b13b86f3ff2614b8511a5d99e78ab68dc878ca65a15b226085333e41c1ff"},{"version":"a24826d56dc00d53b6e525484d0053130bac884a5f51e954f307dd534c5da385","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"b7c1011cb60297d45ae18d407e5405299621e04d56209a16f8ca7709b65022a2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"f123246a7b6c04d80b9b57fadfc6c90959ec6d5c0d4c8e620e06e2811ae3a052","impliedFormat":1},{"version":"a346701ad6dcdaa58e388fe0995fc5304c09c395b8cba68ed872780f8c102004","impliedFormat":99},{"version":"c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","impliedFormat":99},{"version":"2fbe402f0ee5aa8ab55367f88030f79d46211c0a0f342becaa9f648bf8534e9d","impliedFormat":1},{"version":"b94258ef37e67474ac5522e9c519489a55dcb3d4a8f645e335fc68ea2215fe88","impliedFormat":1},{"version":"26c57c9f839e6d2048d6c25e81f805ba0ca32a28fd4d824399fd5456c9b0575b","impliedFormat":1},"7c8c3dfc0cdd370d44932828eb067ef771c8fe7996693221d5d4b90af6d54f2d","c2b999a96781e6c932632bd089095368e973bf5602e1b1a62156b7d2b43f1e84","6299a6a387dc55e528aec4342deaea0b83f1ea3a365c135a31a18ee55334f441",{"version":"caf4af98bf464ad3e10c46cf7d340556f89197aab0f87f032c7b84eb8ddb24d9","impliedFormat":99},{"version":"71acd198e19fa38447a3cbc5c33f2f5a719d933fccf314aaff0e8b0593271324","impliedFormat":99},"e69cfc27d78c9ef31b248ab8ea4fa54327c1038843f70efb5cd85d54c0bf1e0e","525c4bb2c051987be64df0e92e1d90174912b219bf541e24ffbc4a3406de49e8","dab689d836ad3292b41e7f4986b4e68e5d45c6903e4aeaae8972a82d4aebec29",{"version":"a9373d52584b48809ffd61d74f5b3dfd127da846e3c4ee3c415560386df3994b","impliedFormat":99},{"version":"caf4af98bf464ad3e10c46cf7d340556f89197aab0f87f032c7b84eb8ddb24d9","impliedFormat":99},{"version":"8085954ba165e611c6230596078063627f3656fed3fb68ad1e36a414c4d7599a","impliedFormat":99},"fb33bc4865b74d1f0239b1782dbdc4cc2d38690ba6e245e9e3b024c256b14c2b",{"version":"caf4af98bf464ad3e10c46cf7d340556f89197aab0f87f032c7b84eb8ddb24d9","impliedFormat":99},{"version":"9c580c6eae94f8c9a38373566e59d5c3282dc194aa266b23a50686fe10560159","impliedFormat":99},"995c54f1c5c688f712a675fe35d55bcada2b31dba561dcc71553a1ad601e59ec","87608e7cc815ad3d88e0b9de6c402bb37b58ea1b38636cf69709da1baff6e334",{"version":"91b4ce96f6ad631a0a6920eb0ab928159ff01a439ae0e266ecdc9ea83126a195","impliedFormat":1},{"version":"88efe27bebddb62da9655a9f093e0c27719647e96747f16650489dc9671075d6","impliedFormat":1},{"version":"e348f128032c4807ad9359a1fff29fcbc5f551c81be807bfa86db5a45649b7ba","impliedFormat":1},{"version":"8ee6b07974528da39b7835556e12dd3198c0a13e4a9de321217cd2044f3de22e","impliedFormat":1},{"version":"deefd8c43b40f9797c3921d78d3f9243959621a17b817be7f5d95c149f23a9dd","impliedFormat":1},{"version":"5f12132800d430adbe59b49c2c0354d85a71ada7d756e34250a655baa8ad4ae5","impliedFormat":1},{"version":"1996d1cd7d585a8359a35878f67abdd73cc35b1f675c9c6b147b202fdd8dfc3f","impliedFormat":1},{"version":"b16e757e4c35434065120a2b3bf13a518fc9e621dc9c2ed668f91635a9dc4e75","impliedFormat":1},{"version":"7c18088ccbca1cfe297c22f4cf598a3a36e798efe63f572e39442e9b6af7ccf9","impliedFormat":1},{"version":"d02ced7accb512e6198b796b8d284e7979abde0f089b0a77969747a5f27bfb23","impliedFormat":1},{"version":"4374cefdde5c6e9bad52b0436e887b8325b8f407c12035194ad02c28f1553a3a","impliedFormat":1},{"version":"9b70cad270593f676aecfe4d1611dc766464f0b8138527b0ebbf1ff773578d69","impliedFormat":1},{"version":"b4f85bfb7e831703ac81737361842f1ae4d924b42c5d1af2bff93cca521de4d1","impliedFormat":1},{"version":"ee933420aacba1f60aa70fb8ba47c5e69001b005073b71973114587089a13c7f","impliedFormat":1},{"version":"0a0714999d0a5bdfacd15c7b34cffbcc6f263f6cb0ccb42076cdc541c6987797","impliedFormat":1},{"version":"56584bfc655f9df64afc0f22f7d1122c29e5b74b342c203b891e19de9fa37de8","impliedFormat":1},{"version":"40ec58f0fadd0b3981b3d383e1c12fa0680115ae9f018387fc2cfc0bbcf23204","impliedFormat":1},{"version":"849b9e7283b7309a4556c9b90bb8e2dfc27751f157798065bbc513dcddb09a8c","impliedFormat":1},{"version":"76bba0c97594248c1be19af32d5799f7eff51cec2926d8e4dd59267d7636a0b4","impliedFormat":1},{"version":"10e109212c7be8a9f66e988e5d6c2a8900c9d14bf6beadf5fa70d32ada3425cf","impliedFormat":1},{"version":"2b821aeb31e690092f8eae671dd961a9d0fd598ff4883ce0a600c90e9e8fa716","impliedFormat":1},{"version":"26602933b613e4df3868a6c82e14fffa2393a08531cb333ed27b151923462981","impliedFormat":1},{"version":"f57a588d8f6b3ce5c8b494f2dc759a8885eaee18e80a4952df47de45403fedbe","impliedFormat":1},{"version":"34735727b3fe7a0ed0651a0f88d06449163d1989a2b2de7f047473adc7c1c383","impliedFormat":1},{"version":"a5b13abc88ab3186e713c445e59e2f6eee20c6167943517bc2f56985d89b8c55","impliedFormat":1},{"version":"c8a206a6ba4e32710ebb4a389187772423de0f4f6180b95a7ef1a5a1934c1be6","impliedFormat":1},{"version":"7ae65fe95b18205e241e6695cb2c61c0828d660aca7d08f68781b439a800e6b8","impliedFormat":1},{"version":"c2c8c166199d3a7bd093152437d1f6399d05e458a9ca9364456feecba920cda4","impliedFormat":1},{"version":"369b7270eeeb37982203b2cb18c7302947b89bf5818c1d3d2e95a0418f02b74e","impliedFormat":1},{"version":"94f95d223e2783b0aef4d15d7f6990a6a550fe17d099c501395f690337f7105e","impliedFormat":1},{"version":"039bd8d1e0d151570b66e75ee152877fb0e2f42eca43718632ac195e6884be34","impliedFormat":1},{"version":"d565d66b38d54de037c9d46dede1f12630010d9b45fd9c6b432c7a40b2e30502","impliedFormat":1},{"version":"d7386a1ebe9a3eae227a5561c898c10cacb61a49f941c5a18cdf593f979c693c","impliedFormat":1},"7514a59057759a26fb9ad5d3ff76cdcd83b9eb87e66218c88ecf36967f3e9ece",{"version":"a9373d52584b48809ffd61d74f5b3dfd127da846e3c4ee3c415560386df3994b","impliedFormat":99},{"version":"caf4af98bf464ad3e10c46cf7d340556f89197aab0f87f032c7b84eb8ddb24d9","impliedFormat":99},{"version":"7ec047b73f621c526468517fea779fec2007dd05baa880989def59126c98ef79","impliedFormat":99},{"version":"8dd450de6d756cee0761f277c6dc58b0b5a66b8c274b980949318b8cad26d712","impliedFormat":99},{"version":"6b5f886fe41e2e767168e491fe6048398ed6439d44e006d9f51cc31265f08978","impliedFormat":99},{"version":"56a87e37f91f5625eb7d5f8394904f3f1e2a90fb08f347161dc94f1ae586bdd0","impliedFormat":99},{"version":"6b863463764ae572b9ada405bf77aac37b5e5089a3ab420d0862e4471051393b","impliedFormat":99},{"version":"904d6ad970b6bd825449480488a73d9b98432357ab38cf8d31ffd651ae376ff5","impliedFormat":99},{"version":"1179ef8174e0e4a09d35576199df04803b1db17c0fb35b9326442884bc0b0cce","impliedFormat":99},{"version":"3cdb61f1d741264a9d27bbd3e88a9e1ad614ee6ff042df983f99de3a034d5ba4","impliedFormat":1},"b8936f21d1af9539d43453a96ac1b65cb188f5d2f8d52e05d6eaaded282b794b",{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"2c57db2bf2dbd9e8ef4853be7257d62a1cb72845f7b976bb4ee827d362675f96","impliedFormat":99},"c9e19d480a43172f9504ac9b22f4a9c149de1d916162f24c62395533b7be19f6",{"version":"68b6a7501a56babd7bcd840e0d638ee7ec582f1e70b3c36ebf32e5e5836913c8","impliedFormat":99},{"version":"9f7a3c434912fd3feb87af4aabdf0d1b614152ecb5e7b2aa1fff3429879cdd51","impliedFormat":99},"9ba7808b7404cdf2159c81883a39290033bc4308f2978eb80797c92b87421301",{"version":"4a5aa16151dbec524bb043a5cbce2c3fec75957d175475c115a953aca53999a9","impliedFormat":99},"ab2d009e0fa7366f47ae1a6e0ca35d0aac55c6264c5f61718e12366c196163b4","ec7c92aaed80f6923a7caa4bfe4eead395b50a7001504fd7fbb0b9381804dae9",{"version":"cc3738ba01d9af5ba1206a313896837ff8779791afcd9869e582783550f17f38","impliedFormat":99},"234e38fef59169bd02d8f5b56ca02e5ec13a0bd6846c328927b924e1299f7fb0",{"version":"dfcf16e716338e9fe8cf790ac7756f61c85b83b699861df970661e97bf482692","impliedFormat":99},"cbcb138217c5bc95c400201059163ad42d7238de8f7864e0323f1420400ccb05",{"version":"31c30cc54e8c3da37c8e2e40e5658471f65915df22d348990d1601901e8c9ff3","impliedFormat":99},"311bede35f785d7b1ecd7398986757e26409d1049352a94ccf83586b8603c92d",{"version":"89783bd45ab35df55203b522f8271500189c3526976af533a599a86caaf31362","impliedFormat":99},{"version":"26e6c521a290630ea31f0205a46a87cab35faac96e2b30606f37bae7bcda4f9d","impliedFormat":99},"dc109123ecd59af01d07aa9f3a8e8a7085bd3f337388c5369799ab1ce6c2d45f",{"version":"2535fc1a5fe64892783ff8f61321b181c24f824e688a4a05ae738da33466605b","impliedFormat":99},"04cf38bf94abd3fe1b51e90227e6e235ca74776f6fc6af718bfc149e7424f582",{"version":"233267a4a036c64aee95f66a0d31e3e0ef048cccc57dd66f9cf87582b38691e4","impliedFormat":99},"ce6afa34fb9dae51053a863b4c3f7c6e55f3da23b00149f31a8e4402bc963be0",{"version":"c5013d60cbff572255ccc87c314c39e198c8cc6c5aa7855db7a21b79e06a510f","impliedFormat":99},"d3c7ad5738d28011b414c43fd3a1bb6b5d4d96036967285cfac496f5bcb79b07","03e892344ad170438ccfc156b4ee7ff0be4e535a2939e038f64556ce03b934ed","1348f1a1f9820e2f1394b93cecc156a7e22f03636ab9270753985549aae2be74","5950ac01377e7eedc94b00eb3fee678745e4cc1a72b5343867f0733d07db6660",{"version":"7a14bf21ae8a29d64c42173c08f026928daf418bed1b97b37ac4bb2aa197b89b","impliedFormat":99},"6f74706bc6b53f9e4bcebb5e7ab8743b616aef181edc7758b8ee905f9b2fdcd7",{"version":"0943a6e4e026d0de8a4969ee975a7283e0627bf41aa4635d8502f6f24365ac9b","impliedFormat":99},{"version":"1461efc4aefd3e999244f238f59c9b9753a7e3dfede923ebe2b4a11d6e13a0d0","impliedFormat":99},"00dd6eef660f08ce85154106fa0fa4d943ed699c5ca7b06bb08732978bcebb49",{"version":"2a00cea77767cb26393ee6f972fd32941249a0d65b246bfcb20a780a2b919a21","impliedFormat":99},{"version":"440cb5b34e06fabe3dcb13a3f77b98d771bf696857c8e97ce170b4f345f8a26b","impliedFormat":99},"a06d96a582ac207ffcd38445d773c05e841d646efb185b5e9b65f73e5bd388c7","c3d3dcb0d82fc5e91d8830bac7fead905686fe876f1f42c3ed872bb0a6b6584e","0d59f0ca0526d6100430c807c59dc2004728b8d38804b278fa0ab3cc7e3a9cf0","4d3ecfe7df96f773dc0e1c0fb18d6d72db9f38d1b41f34a4fa1a427a6f4bd9d6","a4a6972c2d47d465d7f02c1dc4a6cbfeda7a97e46479c1b0cebdaf26bf9b497a",{"version":"57ae71d27ee71b7d1f2c6d867ddafbbfbaa629ad75565e63a508dbaa3ef9f859","impliedFormat":99},{"version":"60924ca0c60f0674f208bfa1eaaa54e6973ced7650df7c7a81ae069730ef665a","impliedFormat":99},{"version":"e3181c7595a89dd03ba9a20eb5065fa37e0b0a514261bed774f6ae2241634470","impliedFormat":99},{"version":"c42d5cbf94816659c01f7c2298d0370247f1a981f8ca6370301b7a03b3ced950","impliedFormat":99},{"version":"18c18ab0341fd5fdfefb5d992c365be1696bfe000c7081c964582b315e33f8f2","impliedFormat":99},{"version":"dafbd4199902d904e3d4a233b5faf5dc4c98847fcd8c0ddd7617b2aed50e90d8","impliedFormat":99},{"version":"9fc866f9783d12d0412ed8d68af5e4c9e44f0072d442b0c33c3bda0a5c8cae15","impliedFormat":99},{"version":"5fc13d24a2d0328eac00c4e73cc052a987fbced2151bc0d3b7eb8f3ba4d0f4e2","impliedFormat":99},{"version":"2cef84bf00cbdb452fdc5d8ecfe7b8c0aa3fa788bdc4ad8961e2e636530dbb60","impliedFormat":99},{"version":"24104650185414f379d5cc35c0e2c19f06684a73de5b472bae79e0d855771ecf","impliedFormat":99},{"version":"799003c0ab928582fca04977f47b8d85b43a8de610f4eef0ad2d069fbb9f9399","impliedFormat":99},{"version":"b13dd41c344a23e085f81b2f5cd96792e6b35ae814f32b25e39d9841844ad240","impliedFormat":99},{"version":"17d8b4e6416e48b6e23b73d05fd2fde407e2af8fddbe9da2a98ede14949c3489","impliedFormat":99},{"version":"6d17b2b41f874ab4369b8e04bdbe660163ea5c8239785c850f767370604959e3","impliedFormat":99},{"version":"04b4c044c8fe6af77b6c196a16c41e0f7d76b285d036d79dcaa6d92e24b4982b","impliedFormat":99},{"version":"30bdeead5293c1ddfaea4097d3e9dd5a6b0bc59a1e07ff4714ea1bbe7c5b2318","impliedFormat":99},{"version":"e7df226dcc1b0ce76b32f160556f3d1550124c894aae2d5f73cefaaf28df7779","impliedFormat":99},{"version":"f2b7eef5c46c61e6e72fba9afd7cc612a08c0c48ed44c3c5518559d8508146a2","impliedFormat":99},{"version":"00f0ba57e829398d10168b7db1e16217f87933e61bd8612b53a894bd7d6371da","impliedFormat":99},{"version":"126b20947d9fa74a88bb4e9281462bda05e529f90e22d08ee9f116a224291e84","impliedFormat":99},{"version":"40d9e43acee39702745eb5c641993978ac40f227475eacc99a83ba893ad995db","impliedFormat":99},{"version":"8a66b69b21c8de9cb88b4b6d12f655d5b7636e692a014c5aa1bd81745c8c51d5","impliedFormat":99},{"version":"ebbb846bdd5a78fdacff59ae04cea7a097912aeb1a2b34f8d88f4ebb84643069","impliedFormat":99},{"version":"7321adb29ffd637acb33ee67ea035f1a97d0aa0b14173291cc2fd58e93296e04","impliedFormat":99},{"version":"320816f1a4211188f07a782bdb6c1a44555b3e716ce13018f528ad7387108d5f","impliedFormat":99},{"version":"b2cc8a474b7657f4a03c67baf6bff75e26635fd4b5850675e8cad524a09ddd0c","impliedFormat":99},{"version":"0d081e9dc251063cc69611041c17d25847e8bdbe18164baaa89b7f1f1633c0ab","impliedFormat":99},{"version":"a64c25d8f4ec16339db49867ea2324e77060782993432a875d6e5e8608b0de1e","impliedFormat":99},{"version":"0739310b6b777f3e2baaf908c0fbc622c71160e6310eb93e0d820d86a52e2e23","impliedFormat":99},{"version":"37b32e4eadd8cd3c263e7ac1681c58b2ac54f3f77bb34c5e4326cc78516d55a9","impliedFormat":99},{"version":"9b7a8974e028c4ed6f7f9abb969e3eb224c069fd7f226e26fcc3a5b0e2a1eba8","impliedFormat":99},{"version":"e8100b569926a5592146ed68a0418109d625a045a94ed878a8c5152b1379237c","impliedFormat":99},{"version":"594201c616c318b7f3149a912abd8d6bdf338d765b7bcbde86bca2e66b144606","impliedFormat":99},{"version":"03e380975e047c5c6ded532cf8589e6cc85abb7be3629e1e4b0c9e703f2fd36f","impliedFormat":99},{"version":"fae14b53b7f52a8eb3274c67c11f261a58530969885599efe3df0277b48909e1","impliedFormat":99},{"version":"c41206757c428186f2e0d1fd373915c823504c249336bdc9a9c9bbdf9da95fef","impliedFormat":99},{"version":"e961f853b7b0111c42b763a6aa46fc70d06a697db3d8ed69b38f7ba0ae42a62b","impliedFormat":99},{"version":"3db90f79e36bcb60b3f8de1bc60321026800979c150e5615047d598c787a64b7","impliedFormat":99},{"version":"639b6fb3afbb8f6067c1564af2bd284c3e883f0f1556d59bd5eb87cdbbdd8486","impliedFormat":99},{"version":"49795f5478cb607fd5965aa337135a8e7fd1c58bc40c0b6db726adf186dd403f","impliedFormat":99},{"version":"7d8890e6e2e4e215959e71d5b5bd49482cf7a23be68d48ea446601a4c99bd511","impliedFormat":99},{"version":"d56f72c4bb518de5702b8b6ae3d3c3045c99e0fd48b3d3b54c653693a8378017","impliedFormat":99},{"version":"4c9ac40163e4265b5750510d6d2933fb7b39023eed69f7b7c68b540ad960826e","impliedFormat":99},{"version":"8dfab17cf48e7be6e023c438a9cdf6d15a9b4d2fa976c26e223ba40c53eb8da8","impliedFormat":99},{"version":"38bdf7ccacfd8e418de3a7b1e3cecc29b5625f90abc2fa4ac7843a290f3bf555","impliedFormat":99},{"version":"9819e46a914735211fbc04b8dc6ba65152c62e3a329ca0601a46ba6e05b2c897","impliedFormat":99},{"version":"50f0dc9a42931fb5d65cdd64ba0f7b378aedd36e0cfca988aa4109aad5e714cb","impliedFormat":99},{"version":"894f23066f9fafccc6e2dd006ed5bd85f3b913de90f17cf1fe15a2eb677fd603","impliedFormat":99},{"version":"abdf39173867e6c2d6045f120a316de451bbb6351a6929546b8470ddf2e4b3b9","impliedFormat":99},{"version":"aa2cb4053f948fbd606228195bbe44d78733861b6f7204558bbee603202ee440","impliedFormat":99},{"version":"6911b41bfe9942ac59c2da1bbcbe5c3c1f4e510bf65cae89ed00f434cc588860","impliedFormat":99},{"version":"7b81bc4d4e2c764e85d869a8dd9fe3652b34b45c065482ac94ffaacc642b2507","impliedFormat":99},{"version":"895df4edb46ccdcbce2ec982f5eed292cf7ea3f7168f1efea738ee346feab273","impliedFormat":99},{"version":"8692bb1a4799eda7b2e3288a6646519d4cebb9a0bddf800085fc1bd8076997a0","impliedFormat":99},{"version":"239c9e98547fe99711b01a0293f8a1a776fc10330094aa261f3970aaba957c82","impliedFormat":99},{"version":"34833ec50360a32efdc12780ae624e9a710dd1fd7013b58c540abf856b54285a","impliedFormat":99},{"version":"647538e4007dcc351a8882067310a0835b5bb8559d1cfa5f378e929bceb2e64d","impliedFormat":99},{"version":"992d6b1abcc9b6092e5a574d51d441238566b6461ade5de53cb9718e4f27da46","impliedFormat":99},{"version":"938702305649bf1050bd79f3803cf5cc2904596fc1edd4e3b91033184eae5c54","impliedFormat":99},{"version":"1e931d3c367d4b96fe043e792196d9c2cf74f672ff9c0b894be54e000280a79d","impliedFormat":99},{"version":"05bec322ea9f6eb9efcd6458bb47087e55bd688afdd232b78379eb5d526816ed","impliedFormat":99},{"version":"4c449a874c2d2e5e5bc508e6aa98f3140218e78c585597a21a508a647acd780a","impliedFormat":99},{"version":"dae15e326140a633d7693e92b1af63274f7295ea94fb7c322d5cbe3f5e48be88","impliedFormat":99},{"version":"c2b0a869713bca307e58d81d1d1f4b99ebfc7ec8b8f17e80dde40739aa8a2bc6","impliedFormat":99},{"version":"6e4b4ff6c7c54fa9c6022e88f2f3e675eac3c6923143eb8b9139150f09074049","impliedFormat":99},{"version":"69559172a9a97bbe34a32bff8c24ef1d8c8063feb5f16a6d3407833b7ee504cf","impliedFormat":99},{"version":"86b94a2a3edcb78d9bfcdb3b382547d47cb017e71abe770c9ee8721e9c84857f","impliedFormat":99},{"version":"e3fafafda82853c45c0afc075fea1eaf0df373a06daf6e6c7f382f9f61b2deb3","impliedFormat":99},{"version":"a4ba4b31de9e9140bc49c0addddbfaf96b943a7956a46d45f894822e12bf5560","impliedFormat":99},{"version":"d8a7926fc75f2ed887f17bae732ee31a4064b8a95a406c87e430c58578ee1f67","impliedFormat":99},{"version":"9886ffbb134b0a0059fd82219eba2a75f8af341d98bc6331b6ef8a921e10ec68","impliedFormat":99},{"version":"c2ead057b70d0ae7b87a771461a6222ebdb187ba6f300c974768b0ae5966d10e","impliedFormat":99},{"version":"46687d985aed8485ab2c71085f82fafb11e69e82e8552cf5d3849c00e64a00a5","impliedFormat":99},{"version":"999ca66d4b5e2790b656e0a7ce42267737577fc7a52b891e97644ec418eff7ec","impliedFormat":99},{"version":"ec948ee7e92d0888f92d4a490fdd0afb27fbf6d7aabebe2347a3e8ac82c36db9","impliedFormat":99},{"version":"03ef2386c683707ce741a1c30cb126e8c51a908aa0acc01c3471fafb9baaacd5","impliedFormat":99},{"version":"66a372e03c41d2d5e920df5282dadcec2acae4c629cb51cab850825d2a144cea","impliedFormat":99},{"version":"ddf9b157bd4c06c2e4646c9f034f36267a0fbd028bd4738214709de7ea7c548b","impliedFormat":99},{"version":"3e795aac9be23d4ad9781c00b153e7603be580602e40e5228e2dafe8a8e3aba1","impliedFormat":99},{"version":"98c461ec5953dfb1b5d5bca5fee0833c8a932383b9e651ca6548e55f1e2c71c3","impliedFormat":99},{"version":"5c42107b46cb1d36b6f1dee268df125e930b81f9b47b5fa0b7a5f2a42d556c10","impliedFormat":99},{"version":"7e32f1251d1e986e9dd98b6ff25f62c06445301b94aeebdf1f4296dbd2b8652f","impliedFormat":99},{"version":"2f7e328dda700dcb2b72db0f58c652ae926913de27391bd11505fc5e9aae6c33","impliedFormat":99},{"version":"3de7190e4d37da0c316db53a8a60096dbcd06d1a50677ccf11d182fa26882080","impliedFormat":99},{"version":"a9d6f87e59b32b02c861aade3f4477d7277c30d43939462b93f48644fa548c58","impliedFormat":99},{"version":"2bce8fd2d16a9432110bbe0ba1e663fd02f7d8b8968cd10178ea7bc306c4a5df","impliedFormat":99},{"version":"798bedbf45a8f1e55594e6879cd46023e8767757ecce1d3feaa78d16ad728703","impliedFormat":99},{"version":"62723d5ac66f7ed6885a3931dd5cfa017797e73000d590492988a944832e8bc2","impliedFormat":99},{"version":"03db8e7df7514bf17fc729c87fff56ca99567b9aa50821f544587a666537c233","impliedFormat":99},{"version":"9b1f311ba4409968b68bf20b5d892dbd3c5b1d65c673d5841c7dbde351bc0d0b","impliedFormat":99},{"version":"2d1e8b5431502739fe335ceec0aaded030b0f918e758a5d76f61effa0965b189","impliedFormat":99},{"version":"e725839b8f884dab141b42e9d7ff5659212f6e1d7b4054caa23bc719a4629071","impliedFormat":99},{"version":"4fa38a0b8ae02507f966675d0a7d230ed67c92ab8b5736d99a16c5fbe2b42036","impliedFormat":99},{"version":"50ec1e8c23bad160ddedf8debeebc722becbddda127b8fdce06c23eacd3fe689","impliedFormat":99},{"version":"9a0aea3a113064fd607f41375ade308c035911d3c8af5ae9db89593b5ca9f1f9","impliedFormat":99},{"version":"8d643903b58a0bf739ce4e6a8b0e5fb3fbdfaacbae50581b90803934b27d5b89","impliedFormat":99},{"version":"19de2915ccebc0a1482c2337b34cb178d446def2493bf775c4018a4ea355adb8","impliedFormat":99},{"version":"9be8fc03c8b5392cd17d40fd61063d73f08d0ee3457ecf075dcb3768ae1427bd","impliedFormat":99},{"version":"a2d89a8dc5a993514ca79585039eea083a56822b1d9b9d9d85b14232e4782cbe","impliedFormat":99},{"version":"f526f20cae73f17e8f38905de4c3765287575c9c4d9ecacee41cfda8c887da5b","impliedFormat":99},{"version":"d9ec0978b7023612b9b83a71fee8972e290d02f8ff894e95cdd732cd0213b070","impliedFormat":99},{"version":"7ab10c473a058ec8ac4790b05cae6f3a86c56be9b0c0a897771d428a2a48a9f9","impliedFormat":99},{"version":"451d7a93f8249d2e1453b495b13805e58f47784ef2131061821b0e456a9fd0e1","impliedFormat":99},{"version":"21c56fe515d227ed4943f275a8b242d884046001722a4ba81f342a08dbe74ae2","impliedFormat":99},{"version":"d8311f0c39381aa1825081c921efde36e618c5cf46258c351633342a11601208","impliedFormat":99},{"version":"6b50c3bcc92dc417047740810596fcb2df2502aa3f280c9e7827e87896da168a","impliedFormat":99},{"version":"18a6b318d1e7b31e5749a52be0cf9bbce1b275f63190ef32e2c79db0579328ca","impliedFormat":99},{"version":"6a2d0af2c27b993aa85414f3759898502aa198301bc58b0d410948fe908b07b0","impliedFormat":99},{"version":"2da11b6f5c374300e5e66a6b01c3c78ec21b5d3fec0748a28cc28e00be73e006","impliedFormat":99},{"version":"0729691b39c24d222f0b854776b00530877217bfc30aac1dc7fa2f4b1795c536","impliedFormat":99},{"version":"ca45bb5c98c474d669f0e47615e4a5ae65d90a2e78531fda7862ee43e687a059","impliedFormat":99},{"version":"c1c058b91d5b9a24c95a51aea814b0ad4185f411c38ac1d5eef0bf3cebec17dc","impliedFormat":99},{"version":"3ab0ed4060b8e5b5e594138aab3e7f0262d68ad671d6678bcda51568d4fc4ccc","impliedFormat":99},{"version":"e2bf1faba4ff10a6020c41df276411f641d3fdce5c6bae1db0ec84a0bf042106","impliedFormat":99},{"version":"80b0a8fe14d47a71e23d7c3d4dcee9584d4282ef1d843b70cab1a42a4ea1588c","impliedFormat":99},{"version":"a0f02a73f6e3de48168d14abe33bf5970fdacdb52d7c574e908e75ad571e78f7","impliedFormat":99},{"version":"c728002a759d8ec6bccb10eed56184e86aeff0a762c1555b62b5d0fa9d1f7d64","impliedFormat":99},{"version":"586f94e07a295f3d02f847f9e0e47dbf14c16e04ccc172b011b3f4774a28aaea","impliedFormat":99},{"version":"cfe1a0f4ed2df36a2c65ea6bc235dbb8cf6e6c25feb6629989f1fa51210b32e7","impliedFormat":99},{"version":"8ba69c9bf6de79c177329451ffde48ddab7ec495410b86972ded226552f664df","impliedFormat":99},{"version":"15111cbe020f8802ad1d150524f974a5251f53d2fe10eb55675f9df1e82dbb62","impliedFormat":99},{"version":"782dc153c56a99c9ed07b2f6f497d8ad2747764966876dbfef32f3e27ce11421","impliedFormat":99},{"version":"cc2db30c3d8bb7feb53a9c9ff9b0b859dd5e04c83d678680930b5594b2bf99cb","impliedFormat":99},{"version":"46909b8c85a6fd52e0807d18045da0991e3bdc7373435794a6ba425bc23cc6be","impliedFormat":99},{"version":"e4e511ff63bb6bd69a2a51e472c6044298bca2c27835a34a20827bc3ef9b7d13","impliedFormat":99},{"version":"2c86f279d7db3c024de0f21cd9c8c2c972972f842357016bfbbd86955723b223","impliedFormat":99},{"version":"112c895cff9554cf754f928477c7d58a21191c8089bffbf6905c87fe2dc6054f","impliedFormat":99},{"version":"8cfc293b33082003cacbf7856b8b5e2d6dd3bde46abbd575b0c935dc83af4844","impliedFormat":99},{"version":"d2c5c53f85ce0474b3a876d76c4fc44ff7bb766b14ed1bf495f9abac181d7f5f","impliedFormat":99},{"version":"3c523f27926905fcbe20b8301a0cc2da317f3f9aea2273f8fc8d9ae88b524819","impliedFormat":99},{"version":"9ca0d706f6b039cc52552323aeccb4db72e600b67ddc7a54cebc095fc6f35539","impliedFormat":99},{"version":"a64909a9f75081342ddd061f8c6b49decf0d28051bc78e698d347bdcb9746577","impliedFormat":99},{"version":"7d8d55ae58766d0d52033eae73084c4db6a93c4630a3e17f419dd8a0b2a4dcd8","impliedFormat":99},{"version":"b8b5c8ba972d9ffff313b3c8a3321e7c14523fc58173862187e8d1cb814168ac","impliedFormat":99},{"version":"9c42c0fa76ee36cf9cc7cc34b1389fbb4bd49033ec124b93674ec635fabf7ffe","impliedFormat":99},{"version":"6184c8da9d8107e3e67c0b99dedb5d2dfe5ccf6dfea55c2a71d4037caf8ca196","impliedFormat":99},{"version":"4030ceea7bf41449c1b86478b786e3b7eadd13dfe5a4f8f5fe2eb359260e08b3","impliedFormat":99},{"version":"7bf516ec5dfc60e97a5bde32a6b73d772bd9de24a2e0ec91d83138d39ac83d04","impliedFormat":99},{"version":"e6a6fb3e6525f84edf42ba92e261240d4efead3093aca3d6eb1799d5942ba393","impliedFormat":99},{"version":"45df74648934f97d26800262e9b2af2f77ef7191d4a5c2eb1df0062f55e77891","impliedFormat":99},{"version":"3fe361e4e567f32a53af1f2c67ad62d958e3d264e974b0a8763d174102fe3b29","impliedFormat":99},{"version":"28b520acee4bc6911bfe458d1ad3ebc455fa23678463f59946ad97a327c9ab2b","impliedFormat":99},{"version":"121b39b1a9ad5d23ed1076b0db2fe326025150ef476dccb8bf87778fcc4f6dd7","impliedFormat":99},{"version":"f791f92a060b52aa043dde44eb60307938f18d4c7ac13df1b52c82a1e658953f","impliedFormat":99},{"version":"df09443e7743fd6adc7eb108e760084bacdf5914403b7aac5fbd4dc4e24e0c2c","impliedFormat":99},{"version":"eeb4ff4aa06956083eaa2aad59070361c20254b865d986bc997ee345dbd44cbb","impliedFormat":99},{"version":"ed84d5043444d51e1e5908f664addc4472c227b9da8401f13daa565f23624b6e","impliedFormat":99},{"version":"146bf888b703d8baa825f3f2fb1b7b31bda5dff803e15973d9636cdda33f4af3","impliedFormat":99},{"version":"b4ec8b7a8d23bdf7e1c31e43e5beac3209deb7571d2ccf2a9572865bf242da7c","impliedFormat":99},{"version":"3fba0d61d172091638e56fba651aa1f8a8500aac02147d29bd5a9cc0bc8f9ec2","impliedFormat":99},{"version":"a5a57deb0351b03041e0a1448d3a0cc5558c48e0ed9b79b69c99163cdca64ad8","impliedFormat":99},{"version":"9bcecf0cbc2bfc17e33199864c19549905309a0f9ecc37871146107aac6e05ae","impliedFormat":99},{"version":"d6a211db4b4a821e93c978add57e484f2a003142a6aef9dbfa1fe990c66f337b","impliedFormat":99},{"version":"bd4d10bd44ce3f630dd9ce44f102422cb2814ead5711955aa537a52c8d2cae14","impliedFormat":99},{"version":"08e4c39ab1e52eea1e528ee597170480405716bae92ebe7a7c529f490afff1e0","impliedFormat":99},{"version":"625bb2bc3867557ea7912bd4581288a9fca4f3423b8dffa1d9ed57fafc8610e3","impliedFormat":99},{"version":"d1992164ecc334257e0bef56b1fd7e3e1cea649c70c64ffc39999bb480c0ecdf","impliedFormat":99},{"version":"a53ff2c4037481eb357e33b85e0d78e8236e285b6428b93aa286ceea1db2f5dc","impliedFormat":99},{"version":"4fe608d524954b6857d78857efce623852fcb0c155f010710656f9db86e973a5","impliedFormat":99},{"version":"b53b62a9838d3f57b70cc456093662302abb9962e5555f5def046172a4fe0d4e","impliedFormat":99},{"version":"9866369eb72b6e77be2a92589c9df9be1232a1a66e96736170819e8a1297b61f","impliedFormat":99},{"version":"43abfbdf4e297868d780b8f4cfdd8b781b90ecd9f588b05e845192146a86df34","impliedFormat":99},{"version":"582419791241fb851403ae4a08d0712a63d4c94787524a7419c2bc8e0eb1b031","impliedFormat":99},{"version":"18437eeb932fe48590b15f404090db0ab3b32d58f831d5ffc157f63b04885ee5","impliedFormat":99},{"version":"0c5eaedf622d7a8150f5c2ec1f79ac3d51eea1966b0b3e61bfdea35e8ca213a7","impliedFormat":99},{"version":"fac39fc7a9367c0246de3543a6ee866a0cf2e4c3a8f64641461c9f2dac0d8aae","impliedFormat":99},{"version":"3b9f559d0200134f3c196168630997caedeadc6733523c8b6076a09615d5dec8","impliedFormat":99},{"version":"932af64286d9723da5ef7b77a0c4229829ce8e085e6bcc5f874cb0b83e8310d4","impliedFormat":99},{"version":"adeb9278f11f5561157feee565171c72fd48f5fe34ed06f71abf24e561fcaa1e","impliedFormat":99},{"version":"2269fef79b4900fc6b08c840260622ca33524771ff24fda5b9101ad98ea551f3","impliedFormat":99},{"version":"73d47498a1b73d5392d40fb42a3e7b009ae900c8423f4088c4faa663cc508886","impliedFormat":99},{"version":"7efc34cdc4da0968c3ba687bc780d5cacde561915577d8d1c1e46c7ac931d023","impliedFormat":99},{"version":"3c20a3bb0c50c819419f44aa55acc58476dad4754a16884cef06012d02b0722f","impliedFormat":99},{"version":"4569abf6bc7d51a455503670f3f1c0e9b4f8632a3b030e0794c61bfbba2d13be","impliedFormat":99},{"version":"98b2297b4dc1404078a54b61758d8643e4c1d7830af724f3ed2445d77a7a2d57","impliedFormat":99},{"version":"952ba89d75f1b589e07070fea2d8174332e3028752e76fd46e1c16cc51e6e2af","impliedFormat":99},{"version":"b6c9a2deefb6a57ff68d2a38d33c34407b9939487fc9ee9f32ba3ecf2987a88a","impliedFormat":99},{"version":"f6b371377bab3018dac2bca63e27502ecbd5d06f708ad7e312658d3b5315d948","impliedFormat":99},{"version":"31947dd8f1c8eeb7841e1f139a493a73bd520f90e59a6415375d0d8e6a031f01","impliedFormat":99},{"version":"95cd83b807e10b1af408e62caf5fea98562221e8ddca9d7ccc053d482283ddda","impliedFormat":99},{"version":"19287d6b76288c2814f1633bdd68d2b76748757ffd355e73e41151644e4773d6","impliedFormat":99},{"version":"fc4e6ec7dade5f9d422b153c5d8f6ad074bd9cc4e280415b7dc58fb5c52b5df1","impliedFormat":99},{"version":"3aea973106e1184db82d8880f0ca134388b6cbc420f7309d1c8947b842886349","impliedFormat":99},{"version":"765e278c464923da94dda7c2b281ece92f58981642421ae097862effe2bd30fa","impliedFormat":99},{"version":"de260bed7f7d25593f59e859bd7c7f8c6e6bb87e8686a0fcafa3774cb5ca02d8","impliedFormat":99},{"version":"b5c341ce978f5777fbe05bc86f65e9906a492fa6b327bda3c6aae900c22e76c6","impliedFormat":99},{"version":"686ddbfaf88f06b02c6324005042f85317187866ca0f8f4c9584dd9479653344","impliedFormat":99},{"version":"7f789c0c1db29dd3aab6e159d1ba82894a046bf8df595ac48385931ae6ad83e0","impliedFormat":99},{"version":"8eb3057d4fe9b59b2492921b73a795a2455ebe94ccb3d01027a7866612ead137","impliedFormat":99},{"version":"1e43c5d7aee1c5ec20611e28b5417f5840c75d048de9d7f1800d6808499236f8","impliedFormat":99},{"version":"d42610a5a2bee4b71769968a24878885c9910cd049569daa2d2ee94208b3a7a5","impliedFormat":99},{"version":"f6ed95506a6ed2d40ed5425747529befaa4c35fcbbc1e0d793813f6d725690fa","impliedFormat":99},{"version":"a6fcc1cd6583939506c906dff1276e7ebdc38fbe12d3e108ba38ad231bd18d97","impliedFormat":99},{"version":"ed13354f0d96fb6d5878655b1fead51722b54875e91d5e53ef16de5b71a0e278","impliedFormat":99},{"version":"1193b4872c1fb65769d8b164ca48124c7ebacc33eae03abf52087c2b29e8c46c","impliedFormat":99},{"version":"af682dfabe85688289b420d939020a10eb61f0120e393d53c127f1968b3e9f66","impliedFormat":99},{"version":"0dca04006bf13f72240c6a6a502df9c0b49c41c3cab2be75e81e9b592dcd4ea8","impliedFormat":99},{"version":"79d6ac4a2a229047259116688f9cd62fda25422dee3ad304f77d7e9af53a41ef","impliedFormat":99},{"version":"64534c17173990dc4c3d9388d16675a059aac407031cfce8f7fdffa4ee2de988","impliedFormat":99},{"version":"ba46d160a192639f3ca9e5b640b870b1263f24ac77b6895ab42960937b42dcbb","impliedFormat":99},{"version":"5e5ddd6fc5b590190dde881974ab969455e7fad61012e32423415ae3d085b037","impliedFormat":99},{"version":"1c16fd00c42b60b96fe0fa62113a953af58ddf0d93b0a49cb4919cf5644616f0","impliedFormat":99},{"version":"eb240c0e6b412c57f7d9a9f1c6cd933642a929837c807b179a818f6e8d3a4e44","impliedFormat":99},{"version":"4a7bde5a1155107fc7d9483b8830099f1a6072b6afda5b78d91eb5d6549b3956","impliedFormat":99},{"version":"3c1baaffa9a24cc7ef9eea6b64742394498e0616b127ca630aca0e11e3298006","impliedFormat":99},{"version":"87ca1c31a326c898fa3feb99ec10750d775e1c84dbb7c4b37252bcf3742c7b21","impliedFormat":99},{"version":"d7bd26af1f5457f037225602035c2d7e876b80d02663ab4ca644099ad3a55888","impliedFormat":99},{"version":"2ad0a6b93e84a56b64f92f36a07de7ebcb910822f9a72ad22df5f5d642aff6f3","impliedFormat":99},{"version":"523d1775135260f53f672264937ee0f3dc42a92a39de8bee6c48c7ea60b50b5a","impliedFormat":99},{"version":"e441b9eebbc1284e5d995d99b53ed520b76a87cab512286651c4612d86cd408e","impliedFormat":99},{"version":"76f853ee21425c339a79d28e0859d74f2e53dee2e4919edafff6883dd7b7a80f","impliedFormat":99},{"version":"00cf042cd6ba1915648c8d6d2aa00e63bbbc300ea54d28ed087185f0f662e080","impliedFormat":99},{"version":"f57e6707d035ab89a03797d34faef37deefd3dd90aa17d90de2f33dce46a2c56","impliedFormat":99},{"version":"cc8b559b2cf9380ca72922c64576a43f000275c72042b2af2415ce0fb88d7077","impliedFormat":99},{"version":"1a337ca294c428ba8f2eb01e887b28d080ee4a4307ae87e02e468b1d26af4a74","impliedFormat":99},{"version":"5a15362fc2e72765a908c0d4dd89e3ab3b763e8bc8c23f19234a709ecfd202fe","impliedFormat":99},{"version":"2dffdfe62ac8af0943853234519616db6fd8958fc7ff631149fd8364e663f361","impliedFormat":99},{"version":"5dbdb2b2229b5547d8177c34705272da5a10b8d0033c49efbc9f6efba5e617f2","impliedFormat":99},{"version":"6fc0498cd8823d139004baff830343c9a0d210c687b2402c1384fb40f0aa461c","impliedFormat":99},{"version":"8492306a4864a1dc6fc7e0cc0de0ae9279cbd37f3aae3e9dc1065afcdc83dddc","impliedFormat":99},{"version":"c011b378127497d6337a93f020a05f726db2c30d55dc56d20e6a5090f05919a6","impliedFormat":99},{"version":"f4556979e95a274687ae206bbab2bb9a71c3ad923b92df241d9ab88c184b3f40","impliedFormat":99},{"version":"50e82bb6e238db008b5beba16d733b77e8b2a933c9152d1019cf8096845171a4","impliedFormat":99},{"version":"d6011f8b8bbf5163ef1e73588e64a53e8bf1f13533c375ec53e631aad95f1375","impliedFormat":99},{"version":"693cd7936ac7acfa026d4bcb5801fce71cec49835ba45c67af1ef90dbfd30af7","impliedFormat":99},{"version":"195e2cf684ecddfc1f6420564535d7c469f9611ce7a380d6e191811f84556cd2","impliedFormat":99},{"version":"1dc6b6e7b2a7f2962f31c77f4713f3a5a132bbe14c00db75d557568fe82e4311","impliedFormat":99},{"version":"add93b1180e9aaac2dae4ef3b16f7655893e2ecbe62bd9e48366c305f0063d89","impliedFormat":99},{"version":"594bd896fe37c970aafb7a376ebeec4c0d636b62a5f611e2e27d30fb839ad8a5","impliedFormat":99},{"version":"b1c6a6faf60542ba4b4271db045d7faea56e143b326ef507d2797815250f3afc","impliedFormat":99},{"version":"8c8b165beb794260f462679329b131419e9f5f35212de11c4d53e6d4d9cbedf6","impliedFormat":99},{"version":"ee5a4cf57d49fcf977249ab73c690a59995997c4672bb73fcaaf2eed65dbd1b2","impliedFormat":99},{"version":"f9f36051f138ab1c40b76b230c2a12b3ce6e1271179f4508da06a959f8bee4c1","impliedFormat":99},{"version":"9dc2011a3573d271a45c12656326530c0930f92539accbec3531d65131a14a14","impliedFormat":99},{"version":"091521ce3ede6747f784ae6f68ad2ea86bbda76b59d2bf678bcad2f9d141f629","impliedFormat":99},{"version":"202c2be951f53bafe943fb2c8d1245e35ed0e4dfed89f48c9a948e4d186dd6d4","impliedFormat":99},{"version":"c618aead1d799dbf4f5b28df5a6b9ce13d72722000a0ec3fe90a8115b1ea9226","impliedFormat":99},{"version":"9b0bf59708549c3e77fddd36530b95b55419414f88bbe5893f7bc8b534617973","impliedFormat":99},{"version":"7e216f67c4886f1bde564fb4eebdd6b185f262fe85ad1d6128cad9b229b10354","impliedFormat":99},{"version":"cd51e60b96b4d43698df74a665aa7a16604488193de86aa60ec0c44d9f114951","impliedFormat":99},{"version":"b63341fb6c7ba6f2aeabd9fc46b43e6cc2d2b9eec06534cfd583d9709f310ec2","impliedFormat":99},{"version":"be2af50c81b15bcfe54ad60f53eb1c72dae681c72d0a9dce1967825e1b5830a3","impliedFormat":99},{"version":"be5366845dfb9726f05005331b9b9645f237f1ddc594c0def851208e8b7d297b","impliedFormat":99},{"version":"5ddd536aaeadd4bf0f020492b3788ed209a7050ce27abec4e01c7563ff65da81","impliedFormat":99},{"version":"e243b24da119c1ef0d79af2a45217e50682b139cb48e7607efd66cc01bd9dcda","impliedFormat":99},{"version":"5b1398c8257fd180d0bf62e999fe0a89751c641e87089a83b24392efda720476","impliedFormat":99},{"version":"1588b1359f8507a16dbef67cd2759965fc2e8d305e5b3eb71be5aa9506277dff","impliedFormat":99},{"version":"4c99f2524eee1ec81356e2b4f67047a4b7efaf145f1c4eb530cd358c36784423","impliedFormat":99},{"version":"b30c6b9f6f30c35d6ef84daed1c3781e367f4360171b90598c02468b0db2fc3d","impliedFormat":99},{"version":"79c0d32274ccfd45fae74ac61d17a2be27aea74c70806d22c43fc625b7e9f12a","impliedFormat":99},{"version":"1b7e3958f668063c9d24ac75279f3e610755b0f49b1c02bb3b1c232deb958f54","impliedFormat":99},{"version":"779d4022c3d0a4df070f94858a33d9ebf54af3664754536c4ce9fd37c6f4a8db","impliedFormat":99},{"version":"e662f063d46aa8c088edffdf1d96cb13d9a2cbf06bc38dc6fc62b4d125fb7b49","impliedFormat":99},{"version":"d1d612df1e41c90d9678b07740d13d4f8e6acec2f17390d4ff4be5c889a6d37d","impliedFormat":99},{"version":"c95933fe140918892d569186f17b70ef6b1162f851a0f13f6a89e8f4d599c5a1","impliedFormat":99},{"version":"1d8d30677f87c13c2786980a80750ac1e281bdb65aa013ea193766fe9f0edd74","impliedFormat":99},{"version":"4661673cbc984b8a6ee5e14875a71ed529b64e7f8e347e12c0db4cecc25ad67d","impliedFormat":99},{"version":"7f980a414274f0f23658baa9a16e21d828535f9eac538e2eab2bb965325841db","impliedFormat":99},{"version":"20fb747a339d3c1d4a032a31881d0c65695f8167575e01f222df98791a65da9b","impliedFormat":99},{"version":"dd4e7ebd3f205a11becf1157422f98db675a626243d2fbd123b8b93efe5fb505","impliedFormat":99},{"version":"43ec6b74c8d31e88bb6947bb256ad78e5c6c435cbbbad991c3ff39315b1a3dba","impliedFormat":99},{"version":"b27242dd3af2a5548d0c7231db7da63d6373636d6c4e72d9b616adaa2acef7e1","impliedFormat":99},{"version":"e0ee7ba0571b83c53a3d6ec761cf391e7128d8f8f590f8832c28661b73c21b68","impliedFormat":99},{"version":"072bfd97fc61c894ef260723f43a416d49ebd8b703696f647c8322671c598873","impliedFormat":99},{"version":"e70875232f5d5528f1650dd6f5c94a5bed344ecf04bdbb998f7f78a3c1317d02","impliedFormat":99},{"version":"8e495129cb6cd8008de6f4ff8ce34fe1302a9e0dcff8d13714bd5593be3f7898","impliedFormat":99},{"version":"0345bc0b1067588c4ea4c48e34425d3284498c629bc6788ebc481c59949c9037","impliedFormat":99},{"version":"e30f5b5d77c891bc16bd65a2e46cd5384ea57ab3d216c377f482f535db48fc8f","impliedFormat":99},{"version":"f113afe92ee919df8fc29bca91cab6b2ffbdd12e4ac441d2bb56121eb5e7dbe3","impliedFormat":99},{"version":"49d567cc002efb337f437675717c04f207033f7067825b42bb59c9c269313d83","impliedFormat":99},{"version":"1d248f707d02dc76555298a934fba0f337f5028bb1163ce59cd7afb831c9070f","impliedFormat":99},{"version":"5d8debffc9e7b842dc0f17b111673fe0fc0cca65e67655a2b543db2150743385","impliedFormat":99},{"version":"5fccbedc3eb3b23bc6a3a1e44ceb110a1f1a70fa8e76941dce3ae25752caa7a9","impliedFormat":99},{"version":"f4031b95f3bab2b40e1616bd973880fb2f1a97c730bac5491d28d6484fac9560","impliedFormat":99},{"version":"dbe75b3c5ed547812656e7945628f023c4cd0bc1879db0db3f43a57fb8ec0e2b","impliedFormat":99},{"version":"b754718a546a1939399a6d2a99f9022d8a515f2db646bab09f7d2b5bff3cbb82","impliedFormat":99},{"version":"2eef10fb18ed0b4be450accf7a6d5bcce7b7f98e02cac4e6e793b7ad04fc0d79","impliedFormat":99},{"version":"c46f471e172c3be12c0d85d24876fedcc0c334b0dab48060cdb1f0f605f09fed","impliedFormat":99},{"version":"7d6ddeead1d208588586c58c26e4a23f0a826b7a143fb93de62ed094d0056a33","impliedFormat":99},{"version":"7c5782291ff6e7f2a3593295681b9a411c126e3736b83b37848032834832e6b9","impliedFormat":99},{"version":"3a3f09df6258a657dd909d06d4067ee360cd2dccc5f5d41533ae397944a11828","impliedFormat":99},{"version":"ea54615be964503fec7bce04336111a6fa455d3e8d93d44da37b02c863b93eb8","impliedFormat":99},{"version":"2a83694bc3541791b64b0e57766228ea23d92834df5bf0b0fcb93c5bb418069c","impliedFormat":99},{"version":"b5913641d6830e7de0c02366c08b1d26063b5758132d8464c938e78a45355979","impliedFormat":99},{"version":"46c095d39c1887979d9494a824eda7857ec13fb5c20a6d4f7d02c2975309bf45","impliedFormat":99},{"version":"f6e02ca076dc8e624aa38038e3488ebd0091e2faea419082ed764187ba8a6500","impliedFormat":99},{"version":"4d49e8a78aba1d4e0ad32289bf8727ae53bc2def9285dff56151a91e7d770c3e","impliedFormat":99},{"version":"63315cf08117cc728eab8f3eec8801a91d2cd86f91d0ae895d7fd928ab54596d","impliedFormat":99},{"version":"a14a6f3a5636bcaebfe9ec2ccfa9b07dc94deb1f6c30358e9d8ea800a1190d5e","impliedFormat":99},{"version":"21206e7e81876dabf2a7af7aa403f343af1c205bdcf7eff24d9d7f4eee6214c4","impliedFormat":99},{"version":"cd0a9f0ffec2486cad86b7ef1e4da42953ffeb0eb9f79f536e16ff933ec28698","impliedFormat":99},{"version":"f609a6ec6f1ab04dba769e14d6b55411262fd4627a099e333aa8876ea125b822","impliedFormat":99},{"version":"6d8052bb814be030c64cb22ca0e041fe036ad3fc8d66208170f4e90d0167d354","impliedFormat":99},{"version":"851f72a5d3e8a2bf7eeb84a3544da82628f74515c92bdf23c4a40af26dcc1d16","impliedFormat":99},{"version":"59692a7938aab65ea812a8339bbc63c160d64097fe5a457906ea734d6f36bcd4","impliedFormat":99},{"version":"8cb3b95e610c44a9986a7eab94d7b8f8462e5de457d5d10a0b9c6dd16bde563b","impliedFormat":99},{"version":"f571713abd9a676da6237fe1e624d2c6b88c0ca271c9f1acc1b4d8efeea60b66","impliedFormat":99},{"version":"16c5d3637d1517a3d17ed5ebcfbb0524f8a9997a7b60f6100f7c5309b3bb5ac8","impliedFormat":99},{"version":"ca1ec669726352c8e9d897f24899abf27ad15018a6b6bcf9168d5cd1242058ab","impliedFormat":99},{"version":"bffb1b39484facf6d0c5d5feefe6c0736d06b73540b9ce0cf0f12da2edfd8e1d","impliedFormat":99},{"version":"f1663c030754f6171b8bb429096c7d2743282de7733bccd6f67f84a4c588d96e","impliedFormat":99},{"version":"dd09693285e58504057413c3adc84943f52b07d2d2fd455917f50fa2a63c9d69","impliedFormat":99},{"version":"d94c94593d03d44a03810a85186ae6d61ebeb3a17a9b210a995d85f4b584f23d","impliedFormat":99},{"version":"c7c3bf625a8cb5a04b1c0a2fbe8066ecdbb1f383d574ca3ffdabe7571589a935","impliedFormat":99},{"version":"7a2f39a4467b819e873cd672c184f45f548511b18f6a408fe4e826136d0193bb","impliedFormat":99},{"version":"f8a0ae0d3d4993616196619da15da60a6ec5a7dfaf294fe877d274385eb07433","impliedFormat":99},{"version":"2cca80de38c80ef6c26deb4e403ca1ff4efbe3cf12451e26adae5e165421b58d","impliedFormat":99},{"version":"0070d3e17aa5ad697538bf865faaff94c41f064db9304b2b949eb8bcccb62d34","impliedFormat":99},{"version":"53df93f2db5b7eb8415e98242c1c60f6afcac2db44bce4a8830c8f21eee6b1dd","impliedFormat":99},{"version":"d67bf28dc9e6691d165357424c8729c5443290367344263146d99b2f02a72584","impliedFormat":99},{"version":"932557e93fbdf0c36cc29b9e35950f6875425b3ac917fa0d3c7c2a6b4f550078","impliedFormat":99},{"version":"e3dc7ec1597fb61de7959335fb7f8340c17bebf2feb1852ed8167a552d9a4a25","impliedFormat":99},{"version":"b64e15030511c5049542c2e0300f1fe096f926cf612662884f40227267f5cd9f","impliedFormat":99},{"version":"1932796f09c193783801972a05d8fb1bfef941bb46ac76fbe1abb0b3bfb674fa","impliedFormat":99},{"version":"d9575d5787311ee7d61ad503f5061ebcfaf76b531cfecce3dc12afb72bb2d105","impliedFormat":99},{"version":"5b41d96c9a4c2c2d83f1200949f795c3b6a4d2be432b357ad1ab687e0f0de07c","impliedFormat":99},{"version":"38ec829a548e869de4c5e51671245a909644c8fb8e7953259ebb028d36b4dd06","impliedFormat":99},{"version":"20c2c5e44d37dac953b516620b5dba60c9abd062235cdf2c3bfbf722d877a96b","impliedFormat":99},{"version":"875fe6f7103cf87c1b741a0895fda9240fed6353d5e7941c8c8cbfb686f072b4","impliedFormat":99},{"version":"c0ccccf8fbcf5d95f88ed151d0d8ce3015aa88cf98d4fd5e8f75e5f1534ee7ae","impliedFormat":99},{"version":"1b1f4aba21fd956269ced249b00b0e5bfdbd5ebd9e628a2877ab1a2cf493c919","impliedFormat":99},{"version":"939e3299952dff0869330e3324ba16efe42d2cf25456d7721d7f01a43c1b0b34","impliedFormat":99},{"version":"f0a9b52faec508ba22053dedfa4013a61c0425c8b96598cef3dea9e4a22637c6","impliedFormat":99},{"version":"d5b302f50db61181adc6e209af46ae1f27d7ef3d822de5ea808c9f44d7d219fd","impliedFormat":99},{"version":"19131632ba492c83e8eeadf91a481def0e0b39ffc3f155bc20a7f640e0570335","impliedFormat":99},{"version":"4581c03abea21396c3e1bb119e2fd785a4d91408756209cbeed0de7070f0ab5b","impliedFormat":99},{"version":"ebcd3b99e17329e9d542ef2ccdd64fddab7f39bc958ee99bbdb09056c02d6e64","impliedFormat":99},{"version":"4b148999deb1d95b8aedd1a810473a41d9794655af52b40e4894b51a8a4e6a6d","impliedFormat":99},{"version":"1781cc99a0f3b4f11668bb37cca7b8d71f136911e87269e032f15cf5baa339bf","impliedFormat":99},{"version":"33f1b7fa96117d690035a235b60ecd3cd979fb670f5f77b08206e4d8eb2eb521","impliedFormat":99},{"version":"01429b306b94ff0f1f5548ce5331344e4e0f5872b97a4776bd38fd2035ad4764","impliedFormat":99},{"version":"c1bc4f2136de7044943d784e7a18cb8411c558dbb7be4e4b4876d273cbd952af","impliedFormat":99},{"version":"5470f84a69b94643697f0d7ec2c8a54a4bea78838aaa9170189b9e0a6e75d2cf","impliedFormat":99},{"version":"36aaa44ee26b2508e9a6e93cd567e20ec700940b62595caf962249035e95b5e3","impliedFormat":99},{"version":"f8343562f283b7f701f86ad3732d0c7fd000c20fe5dc47fa4ed0073614202b4d","impliedFormat":99},{"version":"a53c572630a78cd99a25b529069c1e1370f8a5d8586d98e798875f9052ad7ad1","impliedFormat":99},{"version":"4ad3451d066711dde1430c544e30e123f39e23c744341b2dfd3859431c186c53","impliedFormat":99},{"version":"8069cbef9efa7445b2f09957ffbc27b5f8946fdbade4358fb68019e23df4c462","impliedFormat":99},{"version":"cd8b4e7ad04ba9d54eb5b28ac088315c07335b837ee6908765436a78d382b4c3","impliedFormat":99},{"version":"d533d8f8e5c80a30c51f0cbfe067b60b89b620f2321d3a581b5ba9ac8ffd7c3a","impliedFormat":99},{"version":"33f49f22fdda67e1ddbacdcba39e62924793937ea7f71f4948ed36e237555de3","impliedFormat":99},{"version":"710c31d7c30437e2b8795854d1aca43b540cb37cefd5900f09cfcd9e5b8540c4","impliedFormat":99},{"version":"b2c03a0e9628273bc26a1a58112c311ffbc7a0d39938f3878837ab14acf3bc41","impliedFormat":99},{"version":"a93beb0aa992c9b6408e355ea3f850c6f41e20328186a8e064173106375876c2","impliedFormat":99},{"version":"efdcba88fcd5421867898b5c0e8ea6331752492bd3547942dea96c7ebcb65194","impliedFormat":99},{"version":"a98e777e7a6c2c32336a017b011ba1419e327320c3556b9139413e48a8460b9a","impliedFormat":99},{"version":"ea44f7f8e1fe490516803c06636c1b33a6b82314366be1bd6ffa4ba89bc09f86","impliedFormat":99},{"version":"c25f22d78cc7f46226179c33bef0e4b29c54912bde47b62e5fdaf9312f22ffcb","impliedFormat":99},{"version":"d57579cfedc5a60fda79be303080e47dfe0c721185a5d95276523612228fcefc","impliedFormat":99},{"version":"a41630012afe0d4a9ff14707f96a7e26e1154266c008ddbd229e3f614e4d1cf7","impliedFormat":99},{"version":"298a858633dfa361bb8306bbd4cfd74f25ab7cc20631997dd9f57164bc2116d1","impliedFormat":99},{"version":"921782c45e09940feb232d8626a0b8edb881be2956520c42c44141d9b1ddb779","impliedFormat":99},{"version":"06117e4cc7399ce1c2b512aa070043464e0561f956bda39ef8971a2fcbcdbf2e","impliedFormat":99},{"version":"daccf332594b304566c7677c2732fed6e8d356da5faac8c5f09e38c2f607a4ab","impliedFormat":99},{"version":"4386051a0b6b072f35a2fc0695fecbe4a7a8a469a1d28c73be514548e95cd558","impliedFormat":99},{"version":"78e41de491fe25947a7fd8eeef7ebc8f1c28c1849a90705d6e33f34b1a083b90","impliedFormat":99},{"version":"3ccd198e0a693dd293ed22e527c8537c76b8fe188e1ebf20923589c7cfb2c270","impliedFormat":99},{"version":"2ebf2ee015d5c8008428493d4987e2af9815a76e4598025dd8c2f138edc1dcae","impliedFormat":99},{"version":"0dcc8f61382c9fcdafd48acc54b6ffda69ca4bb7e872f8ad12fb011672e8b20c","impliedFormat":99},{"version":"9db563287eb527ead0bcb9eb26fbec32f662f225869101af3cabcb6aee9259cf","impliedFormat":99},{"version":"068489bec523be43f12d8e4c5c337be4ff6a7efb4fe8658283673ae5aae14b85","impliedFormat":99},{"version":"838212d0dc5b97f7c5b5e29a89953de3906f72fce13c5ae3c5ade346f561d226","impliedFormat":99},{"version":"ddc78d29af824ad7587152ea523ed5d60f2bc0148d8741c5dacf9b5b44587b1b","impliedFormat":99},{"version":"019b522e3783e5519966927ceeb570eefcc64aba3f9545828a5fb4ae1fde53c6","impliedFormat":99},{"version":"b34623cc86497a5123de522afba770390009a56eebddba38d2aa5798b70b0a87","impliedFormat":99},{"version":"d2a8cbeb0c0caaf531342062b4b5c227118862879f6a25033e31fad00797b7eb","impliedFormat":99},{"version":"14891c20f15be1d0d42ecbbd63de1c56a4d745e3ea2b4c56775a4d5d36855630","impliedFormat":99},{"version":"e55a1f6b198a39e38a3cea3ffe916aab6fde7965c827db3b8a1cacf144a67cd9","impliedFormat":99},{"version":"f7910ccfe56131e99d52099d24f3585570dc9df9c85dd599a387b4499596dd4d","impliedFormat":99},{"version":"9409ac347c5779f339112000d7627f17ede6e39b0b6900679ce5454d3ad2e3c9","impliedFormat":99},{"version":"22dfe27b0aa1c669ce2891f5c89ece9be18074a867fe5dd8b8eb7c46be295ca1","impliedFormat":99},{"version":"684a5c26ce2bb7956ef6b21e7f2d1c584172cd120709e5764bc8b89bac1a10eb","impliedFormat":99},{"version":"93761e39ce9d3f8dd58c4327e615483f0713428fa1a230883eb812292d47bbe8","impliedFormat":99},{"version":"c66be51e3d121c163a4e140b6b520a92e1a6a8a8862d44337be682e6f5ec290a","impliedFormat":99},{"version":"66e486a9c9a86154dc9780f04325e61741f677713b7e78e515938bf54364fee2","impliedFormat":99},{"version":"d211bc80b6b6e98445df46fe9dd3091944825dd924986a1c15f9c66d7659c495","impliedFormat":99},{"version":"8dd2b72f5e9bf88939d066d965144d07518e180efec3e2b6d06ae5e725d84c7d","impliedFormat":99},{"version":"949cb88e315ab1a098c3aa4a8b02496a32b79c7ef6d189eee381b96471a7f609","impliedFormat":99},{"version":"bc43af2a5fa30a36be4a3ed195ff29ffb8067bf4925aa350ace9d9f18f380cc2","impliedFormat":99},{"version":"b9beb5d678e6cf67901f1154f91dff455378e6aa89b20da56ed1400f3fb1f3cf","impliedFormat":99},{"version":"8428e71f6d1b63acf55ceb56244aad9cf07678cf9626166e4aded15e3d252f8a","impliedFormat":99},{"version":"11505212ab24aa0f06d719a09add4be866e26f0fc15e96a1a2a8522c0c6a73a8","impliedFormat":99},{"version":"8228186214a5d7da60bd1dd91387a725e19c6c31a7ed4e114cf68d5ce6629c52","impliedFormat":99},{"version":"c44bb0071cededc08236d57d1131c44339c1add98b029a95584dfe1462533575","impliedFormat":99},{"version":"7a4935af71877da3bbc53938af00e5d4f6d445ef850e1573a240447dcb137b5c","impliedFormat":99},{"version":"4e313033202712168ecc70a6d830964ad05c9c93f81d806d7a25d344f6352565","impliedFormat":99},{"version":"8a1fc69eaf8fc8d447e6f776fbfa0c1b12245d7f35f1dbfb18fbc2d941f5edd8","impliedFormat":99},{"version":"afb9b4c8bd38fb43d38a674de56e6f940698f91114fded0aa119de99c6cd049a","impliedFormat":99},{"version":"1d277860f19b8825d027947fca9928ee1f3bfaa0095e85a97dd7a681b0698dfc","impliedFormat":99},{"version":"6d32122bb1e7c0b38b6f126d166dff1f74c8020f8ba050248d182dcafc835d08","impliedFormat":99},{"version":"cfac5627d337b82d2fbeff5f0f638b48a370a8d72d653327529868a70c5bc0f8","impliedFormat":99},{"version":"8a826bc18afa4c5ed096ceb5d923e2791a5bae802219e588a999f535b1c80492","impliedFormat":99},{"version":"73e94021c55ab908a1b8c53792e03bf7e0d195fee223bdc5567791b2ccbfcdec","impliedFormat":99},{"version":"5f73eb47b37f3a957fe2ac6fe654648d60185908cab930fc01c31832a5cb4b10","impliedFormat":99},{"version":"cb6372a2460010a342ba39e06e1dcfd722e696c9d63b4a71577f9a3c72d09e0a","impliedFormat":99},{"version":"1e289698069f553f36bbf12ee0084c492245004a69409066faceb173d2304ec4","impliedFormat":99},{"version":"f1ca71145e5c3bba4d7f731db295d593c3353e9a618b40c4af0a4e9a814bb290","impliedFormat":99},{"version":"ac12a6010ff501e641f5a8334b8eaf521d0e0739a7e254451b6eea924c3035c7","impliedFormat":99},{"version":"97395d1e03af4928f3496cc3b118c0468b560765ab896ce811acb86f6b902b5c","impliedFormat":99},{"version":"7dcfbd6a9f1ce1ddf3050bd469aa680e5259973b4522694dc6291afe20a2ae28","impliedFormat":99},{"version":"6e545419ad200ae4614f8e14d32b7e67e039c26a872c0f93437b0713f54cde53","impliedFormat":99},{"version":"efc225581aae9bb47d421a1b9f278db0238bc617b257ce6447943e59a2d1621e","impliedFormat":99},{"version":"8833b88e26156b685bc6f3d6a014c2014a878ffbd240a01a8aee8a9091014e9c","impliedFormat":99},{"version":"7a2a42a1ac642a9c28646731bd77d9849cb1a05aa1b7a8e648f19ab7d72dd7dc","impliedFormat":99},{"version":"4d371c53067a3cc1a882ff16432b03291a016f4834875b77169a2d10bb1b023e","impliedFormat":99},{"version":"99b38f72e30976fd1946d7b4efe91aa227ecf0c9180e1dd6502c1d39f37445b4","impliedFormat":99},{"version":"df1bcf0b1c413e2945ce63a67a1c5a7b21dbbec156a97d55e9ea0eed90d2c604","impliedFormat":99},{"version":"6e2011a859fa435b1196da1720be944ed59c668bb42d2f2711b49a506b3e4e90","impliedFormat":99},{"version":"b4bfa90fac90c6e0d0185d2fe22f059fec67587cc34281f62294f9c4615a8082","impliedFormat":99},{"version":"036d363e409ebe316a6366aff5207380846f8f82e100c2e3db4af5fe0ad0c378","impliedFormat":99},{"version":"5ae6642588e4a72e5a62f6111cb750820034a7fbe56b5d8ec2bcb29df806ce52","impliedFormat":99},{"version":"6fca09e1abc83168caf36b751dec4ddda308b5714ec841c3ff0f3dc07b93c1b8","impliedFormat":99},{"version":"2f7268e6ac610c7122b6b416e34415ce42b51c56d080bef41786d2365f06772d","impliedFormat":99},{"version":"9a07957f75128ed0be5fc8a692a14da900878d5d5c21880f7c08f89688354aa4","impliedFormat":99},{"version":"8b6f3ae84eab35c50cf0f1b608c143fe95f1f765df6f753cd5855ae61b3efbe2","impliedFormat":99},{"version":"992491d83ff2d1e7f64a8b9117daee73724af13161f1b03171f0fa3ffe9b4e3e","impliedFormat":99},{"version":"12bcf6af851be8dd5f3e66c152bb77a83829a6a8ba8c5acc267e7b15e11aa9ab","impliedFormat":99},{"version":"e2704efc7423b077d7d9a21ddb42f640af1565e668d5ec85f0c08550eff8b833","impliedFormat":99},{"version":"e0513c71fd562f859a98940633830a7e5bcd7316b990310e8bb68b1d41d676a3","impliedFormat":99},{"version":"712071b9066a2d8f4e11c3b8b3d5ada6253f211a90f06c6e131cff413312e26d","impliedFormat":99},{"version":"5a187a7bc1e7514ef1c3d6eaafa470fc45541674d8fca0f9898238728d62666a","impliedFormat":99},{"version":"0c06897f7ab3830cef0701e0e083b2c684ed783ae820b306aedd501f32e9562d","impliedFormat":99},{"version":"56cc6eae48fd08fa709cf9163d01649f8d24d3fea5806f488d2b1b53d25e1d6c","impliedFormat":99},{"version":"57a925b13947b38c34277d93fb1e85d6f03f47be18ca5293b14082a1bd4a48f5","impliedFormat":99},{"version":"9d9d64c1fa76211dd529b6a24061b8d724e2110ee55d3829131bca47f3fe4838","impliedFormat":99},{"version":"c13042e244bb8cf65586e4131ef7aed9ca33bf1e029a43ed0ebab338b4465553","impliedFormat":99},{"version":"54be9b9c71a17cb2519b841fad294fa9dc6e0796ed86c8ac8dd9d8c0d1c3a631","impliedFormat":99},{"version":"10881be85efd595bef1d74dfa7b9a76a5ab1bfed9fb4a4ca7f73396b72d25b90","impliedFormat":99},{"version":"925e71eaa87021d9a1215b5cf5c5933f85fe2371ddc81c32d1191d7842565302","impliedFormat":99},{"version":"faed0b3f8979bfbfb54babcff9d91bd51fda90931c7716effa686b4f30a09575","impliedFormat":99},{"version":"53c72d68328780f711dbd39de7af674287d57e387ddc5a7d94f0ffd53d8d3564","impliedFormat":99},{"version":"51129924d359cdebdccbf20dbabc98c381b58bfebe2457a7defed57002a61316","impliedFormat":99},{"version":"7270a757071e3bc7b5e7a6175f1ac9a4ddf4de09f3664d80cb8805138f7d365b","impliedFormat":99},{"version":"ea7b5c6a79a6511cdeeedc47610370be1b0e932e93297404ef75c90f05fc1b61","impliedFormat":99},"787a19c855cf2b826942d25440b63150c45094154c6a40e95abdb4109298b8b4",{"version":"bb703864a1bc9ca5ac3589ffd83785f6dc86f7f6c485c97d7ffd53438777cb9e","impliedFormat":1},"13dc2d1e35226de85458034417bfc0e781211044fad520bac53b7858a290d004","622f95b2d77382fec591bd2c01f60d36c7868edc636d8da291387633ed96ec52","378bedf0c1f287aad6dccfd17135502cc771e6a38fdfd3981030ada1e5a47f7b","7a29ecaed92b8c39d1e11fd11a73a204e3badb7ef48bfd817fb963d66bc01446","abb7dce8e50a2ec4a168ba511d8f98f9519c8b5870c6e4f84c7934f43b4d9597","bc609bfde2b132508718aafd010975dbffcdb93f372457c21231d983d6bfb9da","aab05ca0acd4a51c37a8154cce2b75479d3d62f90341823905631f0a726baa22","79ed3ad7f3ffce96118b23245b494e4779095c248ea6a35565f28fbbc2ec9284","4b9a81535d7d2901fc91f32a2ef52f7d89fb28854a9f242a58e220083d50bdc2","4d6cdb41f5e5eda58fcd4fa2cfe08e057023cec21583202bcb828e5b98a5bcd4","d379b551673ab2ec8ff77f14be81964b9528ead97601978f4333f6a1a777b8fd","ed06668f35fda8824685dafae8b372a34b26e165d96a7c10453992029e0ca4ee","e99dde146350573cb8bedf360690f1e1c0e111500765faa884849af30511cf91","e8288f355bb77b1ecbf31b48ef74e56184fb19ed8bc3be07ed33d7d97830fcee","81374257c87db982d891f53b9f1caf0cfe011d943be775ea3f903952f81fab69","097fc392369de9744117595a3c18edc1acd0651d4f908c47153b5d04310a3878","16e91472c0861115036548fcd36a7b00f5f98f9f1dfb033dae4175fabb1409d2","9f752ffefe86f1263bc3bbfe4f2da80f52e159225ed698a03485a6770b55b33a","15f49a4ccf8a98a461a83ea0f01288c5a73610bfb65afdd0ef25c1a5ec2ee9a8","10c4200cc040e99f22f3d18bb86f57d4ae5380adae9143321cb2b54938fde5fb",{"version":"ec9ea5789e2433ad476c3f082220c6dd079abe800e053802f84f156403d4ec3a","impliedFormat":99},{"version":"bc7a7fa8205df8b450ffb186c0c6f93d72fefe44913280e6b6bdc4b4e8f1fff9","impliedFormat":99},{"version":"62bb2984db8c13e1ed99bdbb3bfd0740847229b726534f3b56e91dd49e13dd21","impliedFormat":99},{"version":"196356f6ae68edfb4c783f574977fee6d02acce16ca5c08a8b7833e866304cbe","impliedFormat":99},{"version":"dcd00ba5b2b49174a773f38af2ceee024a2c88f94f380a038df6de47ca07003f","impliedFormat":99},{"version":"a15f4dcfb928fa747df964c0d13390d527b9bc81dffa46d99b5154e839ba0010","impliedFormat":99},{"version":"267be29634d9a5c4a2e749ed4a267b1af57c50afbea509895bd95bfcca0ed4a3","impliedFormat":99},"57fc0bc85399c8d1573cb1fdebc43d81aeeafb4f81046a6648a23581916a20a2","061fa6f111f265d081b60b433344dd15d296deb8a73fa88aeaa4dc0e6f2b3835",{"version":"e7c2f40dc99121500ad108a4f86541d29cac105ed018f994c7c5a2836e77b257","impliedFormat":1},{"version":"90e930283286ab117ab89f00589cf89ab5e9992bc57e79f303b36ee14649bdd9","impliedFormat":1},{"version":"6d48a6c907c668a6d6eda66acec4242e367c983e073100e35c1e234c424ad1a4","impliedFormat":1},{"version":"68a0e898d6c39160f1326ef922508914498c7a2d0b5a0d9222b7928d343214eb","impliedFormat":1},{"version":"69d96a8522b301a9e923ac4e42dd37fc942763740b183dffa3d51aca87f978d5","impliedFormat":1},{"version":"ff2fadad64868f1542a69edeadf5c5519e9c89e33bec267605298f8d172417c7","impliedFormat":1},{"version":"2866ae69517d6605a28d0c8d5dff4f15a0b876eeb8e5a1cbc51631d9c6793d3f","impliedFormat":1},{"version":"f8c4434aa8cbd4ede2a75cbc5532b6a12c9cac67c3095ed907e54f3f89d2e628","impliedFormat":1},{"version":"0b8adc0ae60a47acf65575952eee568b3d497f9975e3162f408052a99e65f488","impliedFormat":1},{"version":"ede9879d22f7ce68a8c99e455acab32fc45091c6eed9625549742b03e1f1ac1a","impliedFormat":1},{"version":"0e8c007c6e404da951c3d98a489ac0a3e9b6567648b997c03445ac69d7938c1c","impliedFormat":1},{"version":"f2a4866bed198a7c804b58ee39efe74c66ecdcf2dfebef0b9895d534a50790c4","impliedFormat":1},{"version":"ad72538d0c5e417ee6621e1b54691c274bcacaa1807c9895c5fa6d40b45fb631","impliedFormat":1},{"version":"4f851c59f3112702f6178e76204f839e3156daa98b5b7d7e3fc407a6c5764118","impliedFormat":1},{"version":"57511f723968d2f41dd2d55b9fbc5d0f3107af4e4227db0fb357c904bd34e690","impliedFormat":1},{"version":"9585df69c074d82dda33eadd6e5dccd164659f59b09bd5a0d25874770cf6042d","impliedFormat":1},{"version":"f6f6ce3e3718c2e7592e09d91c43b44318d47bca8ee353426252c694127f2dcb","impliedFormat":1},{"version":"4f70076586b8e194ef3d1b9679d626a9a61d449ba7e91dfc73cbe3904b538aa0","impliedFormat":1},{"version":"6d5838c172ff503ef37765b86019b80e3abe370105b2e1c4510d6098b0e84414","impliedFormat":1},{"version":"1876dac2baa902e2b7ebed5e03b95f338192dc03a6e4b0731733d675ba4048f3","impliedFormat":1},{"version":"8086407dd2a53ce700125037abf419bddcce43c14b3cf5ea3ac1ebded5cad011","impliedFormat":1},{"version":"c2501eb4c4e05c2d4de551a4bace9c28d06a0d89b228443f69eb3d7f9049fbd6","impliedFormat":1},{"version":"1829f790849d54ea3d736c61fdefd3237bede9c5784f4c15dfdafb7e0a9b8f63","impliedFormat":1},{"version":"5392feeda1bf0a1cc755f7339ea486b7a4d0d019774da8057ddc85347359ed63","impliedFormat":1},{"version":"c998117afca3af8432598c7e8d530d8376d0ca4871a34137db8caa1e94d94818","impliedFormat":1},{"version":"4e465f7e9a161a5a5248a18af79dbfbf06e8e1255bfdc8f63ab15475a2ba48bd","impliedFormat":1},{"version":"e0353c5070349846fe9835d782a8ce338d6d4172c603d14a6b364d6354957a4e","impliedFormat":1},{"version":"323133630008263f857a6d8350e36fb7f6e8d221ec0a425b075c20290570c020","impliedFormat":1},{"version":"c04e691d64b97e264ca4d000c287a53f2a75527556962cdbe3e8e2b301dac906","impliedFormat":1},{"version":"3733dba5107de9152f98da9bcb21bf6c91ac385f3b22f30ed08d0dc5e74c966f","impliedFormat":1},{"version":"d3ec922ddd9677696ee0552f10e95c4e59f85bb8c93fd76cd41b2dd93988ff39","impliedFormat":1},{"version":"0492c0d35e05c0fdd638980e02f3a7cdec18b311959fc730d85ed7e1d4ff38a7","impliedFormat":1},{"version":"c7122ba860d3497fa04a112d424ee88b50c482360042972bcf0917c5b82f4484","impliedFormat":1},{"version":"838f52090a0d39dce3c42e0ccb0db8db250c712c1fa2cd36799910c8f8a7f7bf","impliedFormat":1},{"version":"116ec624095373939de9edb03619916226f5e5b6e93cd761c4bda4efecb104fc","impliedFormat":1},{"version":"8e6b8259bfd8c8c3d6ed79349b7f2f69476d255aede2cd6c0acb0869ad8c6fdd","impliedFormat":1},"b4fb5ced80f4d483ee01e178f59cdc0a484629e56fed3384adab535107634da1","5babad7b05cb460fbaa04a3ef544518bfb8bcc4115d968bb943a56b1e3641923","cb1f4e899b3220086cbd5439dd821b792399f2e3a7d88070dc81102dcb1c22e9","e90e26e28de8859b6a7aa7a3c600d691e1f4f6ead014cacb5e431094397abec3","524e28981b37d1598d04b83039191dadbe7312086e73d9d7c6bfd9234b149ac6","187e2f405d45f10bb5a130973097f1e5f16b062375b5ad27ae32615668782c67","38117351cf455962805c15add0223141433d8830db3bce8243ad6b75982107ae","ff5499d46d9ea3e68ee609b049b704ce0045ad794a86133740de9f90db112750","2bc893a88ca99769ddd3d6994c45938bce723e440ac071b6025cf4267e7040bc","eeb5a5d8175e1722856652dedeba516a4bda4d9c7a6f80cb1534b3f5db5f27fa","d54ba7e18f1c88ff492a76a055f8d2bd1eb89e0e7f6f92ac6d0fd923341c1d32","ab1207b585b38d232b3bf1d4bf9a13ea6ed950457a628323a7b3d3e87aa102e3","b6b990c62909bef18f2beba4f2eef533f33f796b89a79485f5f30b163f35b687","083d34dd695a5523c5c2b02043616225c0438a7b5c18028dad0155e2a6cf1b9b","d0022295c68a72515d437c870672376db19845be90c5f2325565ee3491d7736d","95799184faa0ed49546724de9e7e3c70847ccd7ece420003ba465fc3ceeb28eb","45a03d43e8483c79ab95fa2052aa7a83291a6c5695081ae85afd78bcfd534743","68cd5ee509e2eda95c6c5240efd21553534386acea232283542c6ea9a9cbb95c","b5f38a6d4197eadab8960bc3e580d720d8f0c93ce68bffb431c626a86888e50b","70d901591f34ea379b79b4bd252255e97baf37a626c748ec8c482c506e772778","f1017429da46fb1c8744e18b3c8bfda91a47bf0adac08f0fc02e920286fe2991","37fbcb8aa4d50ae8263b04636bc1ec7ac2d0a322fd32e8a2995152a18d9599ea","fa18c7342121bbc37fd866fac395b6dd7e463e91ba2043e24462ca78274d6795","3b94e320dafcc7f29850a2de37e8d93d5790e7a8bbc9687bf925bb0c78cf9d48","135514a624e0ae1eea9431a2d1e0e38c5c6f604e3be423115632908a86af0af5",{"version":"54e76a6612d9b83fde2b1cc0569f20c5b8d38f7a860b88a1d9d805399bfeead3","impliedFormat":99},{"version":"5a4ddf80b1bdab540fe5d3f837921e9e8dc559a1a319e75451c30f0d5f62ac0f","impliedFormat":99},{"version":"97e0a23ac45763f990b704b66cabbb48df07eddc5bf46054a34d72e350f1088e","impliedFormat":99},{"version":"fe9dd679e568dc2a0e5e6959f77b53f8bc1f126d46b0d17631347ba57470b808","impliedFormat":99},{"version":"86245b010961138b1c4ce2e0610b8b9577157dac3f7eeaf3d20017ee01e7760b","impliedFormat":99},{"version":"0c6ef3deba595b7dc7b4ee09342435c7a2392fe7752e335acdedfe2476529638","impliedFormat":99},{"version":"00fab36b3130e6d7a2316d0583a2e2a4d328a6f4e01817d90d8b07baad69b4e1","impliedFormat":99},{"version":"e9549a400fa6ed33871effcd70b9bc5ab77f24ecc6349c97d8da7ae078e6a25a","impliedFormat":99},{"version":"b6299cb4477935a9feaf12efb768d832186f55a7a6703cbd17f64d4cf6be88bc","impliedFormat":99},{"version":"126eac20336c7374782d571be802e7b7adb9fc5b24c0dd0dfc37bfc9774d9182","impliedFormat":99},{"version":"9001790195bf5cf382c676ded6da44833812e677bb9f31fcb22fa47d389039f4","impliedFormat":99},{"version":"bd4c0145ff68e1587491b52d7a70d55d27e1bc795c75076994731a0966dbe1b6","impliedFormat":1},{"version":"ac0a5934880104cae6cd5d1a4a379078322a336cbdf0d974a151adc482eeb8ac","impliedFormat":1},"503733739da6d0859d0e7655a7ddce238f75e5de2f574938a7ca9254d0182c9d","850dd9520a583b6cb831d43b6059d9371f88b777d84963bee8fc423c3108a490","689823d4644b38e87cff42b37ac62bdf05aac676dbe5aad82953c24bece5a97b","8380b67b781e5f47c540b9a8f61261718a67abe707a8023d2943e584cea71995",{"version":"07c859c5e9a953cb9f6f6d796f68911c1e0e0709187fdd2326822a3c14ee9965","impliedFormat":99},{"version":"337a57006982a97cef4fc8b8ae60c5f0d3c821dbe23aecaf7f372bef569c92ab","impliedFormat":99},{"version":"3a6b10911970b0588c5a287642e4c6be91c16b96407a499c6dc81a96daf1085a","impliedFormat":99},{"version":"5964182f2a04bf1343710b40c73877124fdae476d588ade8883e05be3616a5e0","impliedFormat":99},{"version":"32aa20fd978847e617304582657723f0dcd1809de9b087ed0ad5b7090b1a47c1","impliedFormat":99},{"version":"d506c22df30f41fc14199ad23fd4b093e69876c3d1af20358856b2d0769d5b7a","impliedFormat":99},{"version":"c07898a85c15b3b636506443e88fe6d85bbd568c0bb504a9ae5cb371d58f6319","impliedFormat":99},{"version":"576e16db43be11f9c63f88f9dacea43ea236b0ac8d69fb415564add001dbc516","impliedFormat":99},{"version":"44c5d9f47e85552ea141ddc1b0af65903297624f0ff2227372d5ce31ff0380c6","impliedFormat":99},{"version":"126c84b38fb99188436b4c61e4cc5d8008247f687f9ddb5517358f2128c938d6","impliedFormat":99},{"version":"1f3952b74b8c766a2e602a0ba2db19d3d872d00bab4e01746c6b7229c585086c","impliedFormat":99},"f8710a95c7e326c399c702308ee4832a218b64bd1efd17ec6270b32f44587e8b","cd4072a3cb2f470137072459fd067b4ef554337fb48b829db5ed4689a233f5f6","db1d8c0112f13e96f3f49f076745696d49527c54aea2b7bedd0879599ebce2ae","c8351b50cef3bf121d64f6a987c03cc14f672e38ef2340f689f093ac54b1799d","4e45561716d155908b8ab182e595e052373af0f07170565f3ff6f5e8092e4483","7a93e65a587704261eb2035d701d1b0d5c4cdcffc11a4b26bdfeb3bf4789f1c3","81151aa77414989e0814618081fa0c06042877d9ada7ff9f6edf08e409311662","e95722ce8ddcb69d7d04a74e2bef956b9986196e132716a5290db78533c74651","d1abad7d12313afa419452f935e2b61c94d2229dd2153d6f1db807cc7b89718a","0bce329115fcf035178389096ed3a1beb1e60f35be275e4f444308e7eefea336","59ec083fb9459a8b7d2a3da439be4269197ebc21bbe5104190046529d8e21c20",{"version":"08bd56e0588ca86f196ebcc9fa2692cdc54a33f9898eaa96d07fcb08e469a194","impliedFormat":1},{"version":"aeb3aaa10886b6546660b705197ed5ed9b291c3723e6f58d3df69feeeabb878b","impliedFormat":1},{"version":"638262138fd431dc3253891dbd7fad0aa50037096c1e4423a30719b896f8f9ce","impliedFormat":1},{"version":"80ac8ee26de343b7ca9da72cefdb2672ed2b0d3d89da28fff4beb8e76a7d2037","impliedFormat":1},{"version":"4aa7fdc017a0a097c71ada2ca187e1475c987b4f933960c0792eb143997e4709","impliedFormat":1},{"version":"3c546afeef41bb1f9461ab8fa2c03a47efe7270624fd45073ab3942ee9713959","impliedFormat":1},{"version":"e2c8e88d98dc73c922d7bfae116a2213750e8356344f1475cf5609191e9554e5","impliedFormat":1},{"version":"022b875826f17cae23d8c42346f71567dd3641eac42de92707f2cd9e22af0e2e","impliedFormat":1},{"version":"9c99366141847b2d0e47278f799bf652ee21d6c0948f570665dda5d57c24a616","impliedFormat":1},{"version":"5fbe5df6723eb54ad15c4e6572c378eced978e9938da1dcd7d8e1120994e231b","impliedFormat":1},{"version":"cad354bd9addfe6641096887f6eeac3209624a971dd300510d3157e9dd949e18","impliedFormat":1},{"version":"b6d492805801eb5f74311758be130c73b854b787842c932ae1985c7ec90386cc","impliedFormat":1},{"version":"374993f45883f2a59d96dc2040a15da6475f28426167ae2c581708a2801537af","impliedFormat":1},{"version":"d48d487df0c516a79f1ed7161c24957ef7c5fe9daa6b65ce9c3ad53b722fb7dc","impliedFormat":1},{"version":"47bcd4882c5b6fdf44b594d5cc8c35d79bedfb02345589ffe2c37cf9b53ce1ea","impliedFormat":1},{"version":"53ff686121f6095df3a4ed9bad160a23b3d06f8a4396e5d55e333c70bae70fdd","impliedFormat":1},{"version":"bb65ffa4af326524e0ffa0721d9f2d9b50e17a84379ee9f4fdc260164aac495f","impliedFormat":1},{"version":"15645b5a9f19802397a2c8454aa79ed80dbe196f1d9860c846f9ccc7e74140a7","impliedFormat":1},{"version":"918f62963d8acdf74442cbfe8707ffeb00bb9fdea46c9f002be0acdc52871711","impliedFormat":1},{"version":"201750f32c5eeb46ca683b6bdcedc5732e1f7b6565172488529f7327ac28f0f1","impliedFormat":1},{"version":"1d567d12f550acc452d0585b43ba1cc99119eef69bc9f54777a546f86b29ffbf","impliedFormat":1},{"version":"c474a8f49174bb27c05cef03a22259c8e4559c1fe39431e3cfaeb713ecb024ed","impliedFormat":1},{"version":"efb40e9f34f6fef8b8252035f150ad34d63155df5d843a9efa14ecb293ec4e41","impliedFormat":1},{"version":"1ffbc2f979a8ec11a126314d693ea79637e9cfd1388159a41aee45fe42c71fdb","impliedFormat":1},{"version":"6d02f48cb96396733e20ac466903d3fa9947a16bc421f268a187c5e8e476fd3a","impliedFormat":1},{"version":"a70e640de41b5c58911da48c3490201a305555fd829ef80159c4393023a50c4b","impliedFormat":1},{"version":"b83112b5965cd9bb1d70605a321a50262a3904cf6bec0baff097569c1761ba04","impliedFormat":1},{"version":"9ebbf1aa81848c437e3a147319a569b9ae62f58c8e6cf369edb5ed847afb036d","impliedFormat":1},{"version":"12c83647be78c827ac5d76506832bb2ff724940335ab5ef58eb612b6078bbc87","impliedFormat":1},{"version":"1f9121bb8d3b31113e95fb44cc506c756c8d6db7c06fbb26f9a536de376662cb","impliedFormat":1},{"version":"fb4b133415a7e8238ea049926a23c300e048fa8046a53c1ff9b59406af386fac","impliedFormat":1},{"version":"c4aac5d09d46f6d569ffd391365250ee22cc055dc62c0d270367f46691f55f92","impliedFormat":1},{"version":"0bb370c6b404f6fd6190ccf5006f441b2c383d7c5f8efe1215eb2dce6ffd948f","impliedFormat":1},{"version":"01ea993e1b2831936d08c321c84839dd232ecd63d041e2aaadbbe124d7740e20","impliedFormat":1},{"version":"81a6b55cc52b775adad47f0d86073ca1dcd07992df5b1ae6d65a237d5574ca2f","impliedFormat":1},{"version":"49d5de13372a76069a08ae800ace5b23be17dd57d8b44211e28394defdf8ee80","impliedFormat":1},{"version":"6c1c479e7287e53b8dee6a9054d2096edf4fa97e65db3a69b09620a245cda043","impliedFormat":1},{"version":"ec2c3edf7cd39a72164e1cb032c4869d04b31670c77028b75eb6ca1f479833e4","impliedFormat":1},{"version":"cc8a30aee57adcdcc414d28ca014fd9630b4f233ffe2ea5af8fb06044a1d9ded","impliedFormat":1},{"version":"d54a9b317f57afc5faedd216f56aac9899f6d1349ebd01c2154e18eabb8c5749","impliedFormat":1},{"version":"b10470e7e904bc2b1c06b7c3ad769a3f5ebf0d10ce1e483d970f6ab0aa763ae4","impliedFormat":1},{"version":"c6bfd4ae8f9c297603a5451afd545ab2bcada266ea1566951a022f0a23ce2e32","impliedFormat":1},{"version":"25f912ec6cca1c5fe09514a3a8ffc7ff8e5add689bbd8171daeaa7798902b0ff","impliedFormat":1},{"version":"f3e3bd42ba0e0de28405bfb1b99c7a389e6387ff46e985a428d22948180a647a","impliedFormat":1},{"version":"5e1543db1bddecd840231311145bdfa20e4ef7cb5a7b7b1bf62939a1112f0be2","impliedFormat":1},{"version":"d7552881688adb3d1ebacdc34f286b5ab16174ff14be914c011c8c4c091f56fb","impliedFormat":1},{"version":"e223b9379dc8faef3a2109f91b0e447fd69f61b99eeb54a49c26602b0b2264ae","impliedFormat":1},{"version":"4ff051a3535d98a64099359b15ae0a71c129f1f5c9ff2386f179fc443ad8a292","impliedFormat":1},{"version":"60969b4b3429267c2d8cc8b4d72f810662712bd57c982c07fca19c4dc6267a2f","impliedFormat":1},{"version":"eaa9088bdceb60bd1282fe92cafd8bbedce2ffabcee4848564f82531c4f0918f","impliedFormat":1},{"version":"3f361222b9efcd94ec3a3298c552a65cbc5a07ef0841791dcbba252103746f51","impliedFormat":1},{"version":"6e4f7983e80803ef22c3fe2613f36a096e046b990a8f73636763e60332c58af0","impliedFormat":1},{"version":"dd0660556f2d728dde0cb85b9f2f28b54a90a89b8a83b3ff93a0948125237e09","impliedFormat":1},{"version":"04399d897b48a07a4e62617a34fafd9d035e22ce941625f908dbca874284beb8","impliedFormat":1},{"version":"9fa921f6d869589739d0452e4bffa5f73c64311f757974c98af07e05be0449a7","impliedFormat":1},{"version":"5d67354078b66418c05d378a7ccabfd040692cccd02351efccc2f1ada473a00c","impliedFormat":1},{"version":"fba164f651974e6a41b8c8259d66e5a642a5235f45a9584bc037371810092738","impliedFormat":1},{"version":"8de28ca8b0a0544359461f433f5cc7d9d3f5f9eb07b5c54a20c47e80dd52e351","impliedFormat":1},{"version":"19606a6077e2ec02292fc10f4a5d974a23ae4548092fb9c6f2b11f6d678b87bc","impliedFormat":1},{"version":"4a937967fa75e08dd9f4e8999f36c7c99f69556f94147602ce9d065d2cb3d222","impliedFormat":1},{"version":"9061248ddc3ababcabe72c13b4e3ffa932c8cb3199b6a205f1e5ce8f344bdbdc","impliedFormat":1},{"version":"5d0637ff3f01a71665d89ff827b52802c962737f3394888e504730a42c6c3f96","impliedFormat":1},{"version":"00400a37f08853f36b6ffce0150094aa832b534eeec5eb960b9c1ac48f84d06b","impliedFormat":1},{"version":"50de4a87b7a4833126c84def8f08669b6d8aa298b94745be769969c998ab73d4","impliedFormat":1},{"version":"97fc391ea531e7cf09c22fae61a9a10af2bdeb08047eee455c1de857df55fd83","impliedFormat":1},{"version":"f12e5f4c39f9d7d3cab6c75a1fba633e73911766194d1c393be6a31bb4a8cf06","impliedFormat":1},{"version":"e1e77c898296d762e4d90d1ad5b26074bf4f0b8e3f55c8dda8615ab1af1c6e66","impliedFormat":1},{"version":"073ca26c96184db9941b5ec0ddea6981c9b816156d9095747809e524fdd90e35","impliedFormat":1},{"version":"e41d17a2ec23306d953cda34e573ed62954ca6ea9b8c8b74e013d07a6886ce47","impliedFormat":1},{"version":"241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","impliedFormat":1},{"version":"2ae3787e1498b20aad1b9c2ee9ea517ec30e89b70d242d8e3e52d1e091039695","impliedFormat":1},{"version":"c7c72c4cffb1bc83617eefed71ed68cc89df73cab9e19507ccdecb3e72b4967e","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","impliedFormat":1},{"version":"38b38db08e7121828294dec10957a7a9ff263e33e2a904b346516d4a4acca482","impliedFormat":1},{"version":"a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","impliedFormat":1},{"version":"8a2aaea564939c22be05d665cc955996721bad6d43148f8fa21ae8f64afecd37","impliedFormat":1},{"version":"e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","impliedFormat":1},{"version":"e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","impliedFormat":1},{"version":"95950a187596e206d32d5d9c7b932901088c65ed8f9040e614aa8e321e0225ef","impliedFormat":1},{"version":"89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","impliedFormat":1},{"version":"e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","impliedFormat":1},{"version":"71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","impliedFormat":1},{"version":"7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","impliedFormat":1},{"version":"78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","impliedFormat":1},{"version":"5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","impliedFormat":1},{"version":"f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","impliedFormat":1},{"version":"9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","impliedFormat":1},{"version":"3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","impliedFormat":1},{"version":"2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","impliedFormat":1},{"version":"4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","impliedFormat":1},{"version":"61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","impliedFormat":1},{"version":"64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","impliedFormat":1},{"version":"0521108c9f8ddb17654a0a54dae6ba9667c99eddccfd6af5748113e022d1c37a","impliedFormat":1},{"version":"c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","impliedFormat":1},{"version":"ee764e6e9a7f2b987cc1a2c0a9afd7a8f4d5ebc4fdb66ad557a7f14a8c2bd320","impliedFormat":1},{"version":"0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","impliedFormat":1},{"version":"5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","impliedFormat":1},{"version":"e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","impliedFormat":1},{"version":"b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","impliedFormat":1},{"version":"6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","impliedFormat":1},{"version":"d7058e75920120b142a9d57be25562a3cd9a936269fd52908505f530105f2ec4","impliedFormat":1},{"version":"6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","impliedFormat":1},{"version":"0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","impliedFormat":1},{"version":"91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","impliedFormat":1},{"version":"db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","impliedFormat":1},{"version":"758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","impliedFormat":1},{"version":"2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","impliedFormat":1},{"version":"6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","impliedFormat":1},{"version":"a472a1d3f25ce13a1d44911cd3983956ac040ce2018e155435ea34afb25f864c","impliedFormat":1},{"version":"b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","impliedFormat":1},{"version":"792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","impliedFormat":1},{"version":"a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","impliedFormat":1},{"version":"93181bac0d90db185bb730c95214f6118ae997fe836a98a49664147fbcaf1988","impliedFormat":1},{"version":"8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","impliedFormat":1},{"version":"b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","impliedFormat":1},{"version":"4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","impliedFormat":1},{"version":"cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","impliedFormat":1},{"version":"75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","impliedFormat":1},{"version":"b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","impliedFormat":1},{"version":"c54166a85bd60f86d1ebb90ce0117c0ecb850b8a33b366691629fdf26f1bbbd8","impliedFormat":1},{"version":"0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","impliedFormat":1},{"version":"80f23f1d60fbed356f726b3b26f9d348dddbb34027926d10d59fad961e70a730","impliedFormat":1},{"version":"cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","impliedFormat":1},{"version":"cc20bb2227dd5de0aab0c8d697d1572f8000550e62c7bf5c92f212f657dd88c5","impliedFormat":1},{"version":"06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","impliedFormat":1},{"version":"860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","impliedFormat":1},{"version":"f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","impliedFormat":1},{"version":"d0da80c845999a16c24d0783033fb5366ada98df17867c98ad433ede05cd87fd","impliedFormat":1},{"version":"bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","impliedFormat":1},{"version":"fd9a991b51870325e46ebb0e6e18722d313f60cd8e596e645ec5ac15b96dbf4e","impliedFormat":1},{"version":"c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","impliedFormat":1},{"version":"a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","impliedFormat":1},{"version":"d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","impliedFormat":1},{"version":"fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","impliedFormat":1},{"version":"063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","impliedFormat":1},{"version":"314e402cd481370d08f63051ae8b8c8e6370db5ee3b8820eeeaaf8d722a6dac6","impliedFormat":1},{"version":"9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","impliedFormat":1},{"version":"4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","impliedFormat":1},{"version":"656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","impliedFormat":1},{"version":"3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","impliedFormat":1},{"version":"1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","impliedFormat":1},{"version":"af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","impliedFormat":1},{"version":"70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","impliedFormat":1},{"version":"af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","impliedFormat":1},{"version":"cefc20054d20b85b534206dbcedd509bb74f87f3d8bc45c58c7be3a76caa45e1","impliedFormat":1},{"version":"ad6eee4877d0f7e5244d34bc5026fd6e9cf8e66c5c79416b73f9f6ebf132f924","impliedFormat":1},{"version":"4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","impliedFormat":1},{"version":"f4749c102ced952aa6f40f0b579865429c4869f6d83df91000e98005476bee87","impliedFormat":1},{"version":"56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","impliedFormat":1},{"version":"8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","impliedFormat":1},{"version":"05f56cd4b929977d18df8f3d08a4c929a2592ef5af083e79974b20a063f30940","impliedFormat":1},{"version":"547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","impliedFormat":1},{"version":"b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","impliedFormat":1},{"version":"3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","impliedFormat":1},{"version":"140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","impliedFormat":1},{"version":"0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","impliedFormat":1},{"version":"cb46b38d5e791acaa243bf342b8b5f8491639847463ac965b93896d4fb0af0d9","impliedFormat":1},{"version":"7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","impliedFormat":1},{"version":"af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","impliedFormat":1},{"version":"006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","impliedFormat":1},{"version":"7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","impliedFormat":1},{"version":"339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","impliedFormat":1},{"version":"34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","impliedFormat":1},{"version":"9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","impliedFormat":1},{"version":"18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","impliedFormat":1},{"version":"5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","impliedFormat":1},{"version":"5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","impliedFormat":1},{"version":"907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","impliedFormat":1},{"version":"ce60a562cd2a92f37a88f2ddd99a3abfbc5848d7baf38c48fb8d3243701fcb75","impliedFormat":1},{"version":"a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","impliedFormat":1},{"version":"f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","impliedFormat":1},{"version":"75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","impliedFormat":1},{"version":"9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","impliedFormat":1},{"version":"b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","impliedFormat":1},{"version":"b6e2b0448ced813b8c207810d96551a26e7d7bb73255eea4b9701698f78846d6","impliedFormat":1},{"version":"8ae10cd85c1bd94d2f2d17c4cbd25c068a4b2471c70c2d96434239f97040747a","impliedFormat":1},{"version":"9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","impliedFormat":1},{"version":"b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","impliedFormat":1},{"version":"e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","impliedFormat":1},{"version":"ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","impliedFormat":1},{"version":"8776a368617ce51129b74db7d55c3373dadcce5d0701e61d106e99998922a239","impliedFormat":1},{"version":"5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","impliedFormat":1},{"version":"9108ab5af05418f599ab48186193b1b07034c79a4a212a7f73535903ba4ca249","impliedFormat":1},{"version":"bb4e2cdcadf9c9e6ee2820af23cee6582d47c9c9c13b0dca1baaffe01fbbcb5f","impliedFormat":1},{"version":"6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","impliedFormat":1},{"version":"423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","impliedFormat":1},{"version":"fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","impliedFormat":1},{"version":"2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","impliedFormat":1},{"version":"c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","impliedFormat":1},{"version":"02ae43d5bae42efcd5a00d3923e764895ce056bca005a9f4e623aa6b4797c8af","impliedFormat":1},{"version":"db6e01f17012a9d7b610ae764f94a1af850f5d98c9c826ad61747dca0fb800bd","impliedFormat":1},{"version":"8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","impliedFormat":1},{"version":"24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","impliedFormat":1},{"version":"33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","impliedFormat":1},{"version":"0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","impliedFormat":1},{"version":"16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","impliedFormat":1},{"version":"8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","impliedFormat":1},{"version":"d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","impliedFormat":1},{"version":"97f9169882d393e6f303f570168ca86b5fe9aab556e9a43672dae7e6bb8e6495","impliedFormat":1},{"version":"7c9adb3fcd7851497818120b7e151465406e711d6a596a71b807f3a17853cb58","impliedFormat":1},{"version":"6752d402f9282dd6f6317c8c048aaaac27295739a166eed27e00391b358fed9a","impliedFormat":1},{"version":"9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","impliedFormat":1},{"version":"fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","impliedFormat":1},{"version":"85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","impliedFormat":1},{"version":"84794e3abd045880e0fadcf062b648faf982aa80cfc56d28d80120e298178626","impliedFormat":1},{"version":"053d8b827286a16a669a36ffc8ccc8acdf8cc154c096610aa12348b8c493c7b8","impliedFormat":1},{"version":"3cce4ce031710970fe12d4f7834375f5fd455aa129af4c11eb787935923ff551","impliedFormat":1},{"version":"8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","impliedFormat":1},{"version":"62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","impliedFormat":1},{"version":"c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","impliedFormat":1},{"version":"8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","impliedFormat":1},{"version":"132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","impliedFormat":1},{"version":"df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","impliedFormat":1},{"version":"33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","impliedFormat":1},{"version":"ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","impliedFormat":1},{"version":"a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","impliedFormat":1},{"version":"eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","impliedFormat":1},{"version":"0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","impliedFormat":1},{"version":"aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","impliedFormat":1},{"version":"0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","impliedFormat":1},{"version":"40f06693e2e3e58526b713c937895c02e113552dc8ba81ecd49cdd9596567ddb","impliedFormat":1},{"version":"4ed5e1992aedb174fb8f5aa8796aa6d4dcb8bd819b4af1b162a222b680a37fa0","impliedFormat":1},{"version":"d7f4bd46a8b97232ea6f8c28012b8d2b995e55e729d11405f159d3e00c51420a","impliedFormat":1},{"version":"d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","impliedFormat":1},{"version":"e4f4f9cf1e3ac9fd91ada072e4d428ecbf0aa6dc57138fb797b8a0ca3a1d521c","impliedFormat":1},{"version":"12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","impliedFormat":1},{"version":"340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","impliedFormat":1},{"version":"c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","impliedFormat":1},{"version":"7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","impliedFormat":1},{"version":"5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","impliedFormat":1},{"version":"9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","impliedFormat":1},{"version":"1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","impliedFormat":1},{"version":"8018dd2e95e7ce6e613ddd81672a54532614dc745520a2f9e3860ff7fb1be0ca","impliedFormat":1},{"version":"b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","impliedFormat":1},{"version":"0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","impliedFormat":1},{"version":"3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","impliedFormat":1},{"version":"032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","impliedFormat":1},{"version":"69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","impliedFormat":1},{"version":"0e704ee6e9fd8b6a5a7167886f4d8915f4bc22ed79f19cb7b32bd28458f50643","impliedFormat":1},{"version":"06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","impliedFormat":1},{"version":"904a96f84b1bcee9a7f0f258d17f8692e6652a0390566515fe6741a5c6db8c1c","impliedFormat":1},{"version":"11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","impliedFormat":1},{"version":"2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","impliedFormat":1},{"version":"1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","impliedFormat":1},{"version":"1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","impliedFormat":1},{"version":"07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","impliedFormat":1},{"version":"619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","impliedFormat":1},{"version":"f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","impliedFormat":1},{"version":"f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","impliedFormat":1},{"version":"350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","impliedFormat":1},{"version":"eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","impliedFormat":1},{"version":"45b74185005ed45bec3f07cac6e4d68eaf02ead9ff5a66721679fb28020e5e7c","impliedFormat":1},{"version":"0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","impliedFormat":1},{"version":"c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","impliedFormat":1},{"version":"5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","impliedFormat":1},{"version":"ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","impliedFormat":1},{"version":"9bf18d0ce20f7a353aaa10f3bb5e30c848c07f7047336e924d085459c00c993a","impliedFormat":1},{"version":"89ef5d771ac372abd1f5edc3d33109f31c134d5a872abd7b79b03f992bb707d0","impliedFormat":1},{"version":"0646812335695e5bb3e79527ceee0fa0cabfda07d70cdf2fbca99a9bad45273f","impliedFormat":1},{"version":"1f19c96e0b107c9235e952bf4934eb7b8be55df04ed4ce0427ed5d4a52bd165b","impliedFormat":1},{"version":"7b3664e21e08e631e99c43c38ac512b0d6939729df86ca66c58bef8e910ce5d4","impliedFormat":1},{"version":"c034ed577f9e54eec587a9460e18de99042d2d46d2fce55a166993100de706f9","impliedFormat":1},{"version":"bb0ea48e9a828b1d522218e815c2f3a969571908e082f57f6f0cf24b5b589453","impliedFormat":1},{"version":"45dc6c23327bce116ff2a9fa2f0429b50a0d62ef6eb6c601e6b7824927edd273","impliedFormat":1},{"version":"31f1ecd8bf0fbdd95553b23ac129c8039507e4c615e757eec727d8c316a0aa87","impliedFormat":1},{"version":"afde78a3b377e0e82df76dd72e383829dcb33c51a84990bfdedc825644d3ae43","impliedFormat":1},{"version":"ebcaa3f55b788b8fc04d7c9e3c41a736748373f3fdd3ae5e55fb06cc385e8123","impliedFormat":1},{"version":"d210cc1986d1787ad00b8235168f3a16e28aeeab05f74e334f9f3e2d6ba94c9d","impliedFormat":1},{"version":"c1bdcb2bce6c1c9601f35cc397fcac1988d3644d86d52e9214bddc96d5356b34","impliedFormat":1},{"version":"d4cc344020cc5995cb16916027dbb48a4659de3d96ed3a2f37869376b4819a8a","impliedFormat":1},{"version":"d2d8b08f2a96400fc93aca226293603e03982d6d87336edbdc1a8bcb9d893f8c","impliedFormat":1},{"version":"17b25e5eaa4436940e7e86315ee3bcc7359938e51646d5421e45dd44aeb1ff10","impliedFormat":1},{"version":"694c2ccda8c028ffc9eed496acff36f08f1fcd4bb1f00f5a3f66e757d136cccf","impliedFormat":1},{"version":"ab0f92c242726fc5bcb917067bdebeea53fd9004d46f676ec057f0d5b66dc476","impliedFormat":1},{"version":"d34d618328653e883cab33d24606bb94397fdb68fb7e38e011f85df2fd3cc845","impliedFormat":1},{"version":"d31f80c5a66c2347e8cb53d6f49445eab7f7c2d6a662d800c7b9a9fe1f2d9c47","impliedFormat":1},{"version":"5b9172039d573cab240aae6b71e1e93772a3f4c45341845c6cf1a85d8aa36df2","impliedFormat":1},{"version":"fae38e81445b9d17eb0f4920f4550b8ecf48f2432da619b3e08b8609d6e6cb0f","impliedFormat":1},{"version":"75dd20f711b026dec3b234bbab5a4bd4340e19345b25a4a4b7d2f647519cce80","impliedFormat":1},{"version":"018ea95d86bdbb345b943639aabcb324af2398082d0d54a618c75250e52a749c","impliedFormat":1},{"version":"af1ec9c12553b1da20d8ec24678c89221aefb8309cd7bbe62ba160c2dea1c9ad","impliedFormat":1},"ecc2f66f233fde1c6f1979066ec0584ad52ba7f9e1c34e336f4a172ba6bf2675",{"version":"d30e67059f5c545c5f8f0cc328a36d2e03b8c4a091b4301bc1d6afb2b1491a3a","impliedFormat":1},{"version":"a356d9a0ba90d10ec6c0fa33386c0b0e2843fd6f0a49513c44f7809926ac25ff","impliedFormat":1},"e521ae8ec82c7c831b76935602e00291983d3353512e8687b9a05412302b61b7","6401b86b7406dbabf202e849bc5d1fc62dc163777a1bdd843aa66bc590d78143","6206b472fe17ea64c81313beb540655ac01081d22982319cf21f5211e4a9b71c","781bb211e885a0c3c9f2fc6decb1dc2f134d2608ec445a2e93d26b32b06eb4d1","cec34e971d7a4e23252019ca1deedb77af5b3a42c5d62f61095dfe82aa2a848a","a0a2dbe59b46d1eb4351817661d5a56bc8f7d1554fd7e153a38e66cacd156e24","a3baee44bc31bf8e91300a47cec243a23421efe90b7c099c93d6b714873095e6","23fea8bad58c63e1a9058d779587f091521c525c8a0945247636f24c6e073503","218e00e649509c6d8e8176eece29790b11881532adc596c7f7b6b2334a249c2e",{"version":"4d7d964609a07368d076ce943b07106c5ebee8138c307d3273ba1cf3a0c3c751","impliedFormat":99},{"version":"0e48c1354203ba2ca366b62a0f22fec9e10c251d9d6420c6d435da1d079e6126","impliedFormat":99},{"version":"0662a451f0584bb3026340c3661c3a89774182976cd373eca502a1d3b5c7b580","impliedFormat":99},{"version":"4781142e27cfd19d75a2c0ee432826153fcdf670bdc52631a6078330c9133e6f","impliedFormat":99},{"version":"fa7b2a99713734f303c1d88360ee4affe6a81fea624a6bbd56e727b910f8d460","signature":"760169ac1f87359d2f6d96a14ace0baf9000eeb59c0a0857c0bf9569def90124"},{"version":"3b1f3e57163b2541cf00984780a6417c0b7ea82e72f55fa26d149cb943867498","signature":"a5d30845d783ed03dc9718ba178a480b157d3432c7e6c9129223b9fdbabcc6bb"},{"version":"6d7cd1205e15b287ecdfb2d00c51bab80033a2a9ee37ced6c9310f71f0290f45","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"753358ddfa1f14ed3c7c1be76b938cdd05b3e2a643177c809deea6c780b1a685","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"b53f45e0efb59a34f6110535e0b4909484ac01f01c07f9e11d9011d8b9163e72","signature":"b3773398b038e5776a9aed6ac693eb5651de53372a7a11bd71503835cee9e915"},{"version":"33dab8c26a9caf099df839615fd74617ec74ebba2ee4e44ed4576e13fb0f7a31","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"50cf7a23fc93928995caec8d7956206990f82113beeb6b3242dae8124edc3ca0","impliedFormat":99},{"version":"352031ac2e53031b69a09355e09ad7d95361edf32cc827cfe2417d80247a5a50","impliedFormat":99},{"version":"9971931daaf18158fc38266e838d56eb5d9d1f13360b1181bb4735a05f534c03","impliedFormat":99},{"version":"06d635a90365afe107c7e2daaa9851f5d3f062d78ebe4524b1b23b122469a1e2","impliedFormat":99},{"version":"aa103fbc4677b71d3deda20d37088cc2f39c3db8c2566ddf516b56ce7532d00a","impliedFormat":99},{"version":"0c5b705d31420477189618154d1b6a9bb62a34fa6055f56ade1a316f6adb6b3a","impliedFormat":99},{"version":"853b8bdb5da8c8e5d31e4d715a8057d8e96059d6774b13545c3616ed216b890c","impliedFormat":99},{"version":"430f4fa4e99e5e0a7ca2bbdde84abc8536bdfde4fd0de26009db508b8f571bb5","impliedFormat":99},{"version":"fe3c64bf61fcfec9b9861725c6d92de03f33748a01d982760ccfa798d777cf9d","impliedFormat":99},{"version":"1120a39f36c968298e2ca1d8cb1405389f9696f6b49e13b335626a94c16930bb","impliedFormat":99},{"version":"0a049adb920f3b42e1933c037052bcbc5e78b4704ad080bf078353c7f8ed6225","impliedFormat":99},{"version":"af9753433dec6dc41a2d3141804113a4d34f09fb19eb9eea063bd8800aa28db6","impliedFormat":99},{"version":"832f2fd6cf5eeaac22e2bdb0e3d7e2498cd8dd4058b853cd6b42033f126680ee","impliedFormat":99},{"version":"22fe66950a6308b2c6a0e11ed74930e90ba9d8a5fd2910666565007678875c13","impliedFormat":99},{"version":"084c09a35a9611e1777c02343c11ab8b1be48eb4895bbe6da90222979940b4a6","impliedFormat":99},{"version":"4b3049a2c849f0217ff4def308637931661461c329e4cf36aeb31db34c4c0c64","impliedFormat":99},{"version":"6245aa515481727f994d1cf7adfc71e36b5fc48216a92d7e932274cee3268000","impliedFormat":99},{"version":"3550708c55e4b79c5c13870f994461bcec97208e1d6758395a178913bbf05de3","impliedFormat":99},{"version":"660ce583eaa09bb39eef5ad7af9d1b5f027a9d1fbf9f76bf5b9dc9ef1be2830e","impliedFormat":99},{"version":"b7d9ca4e3248f643fa86ff11872623fdc8ed2c6009836bec0e38b163b6faed0c","impliedFormat":99},{"version":"904a01fef87360fa2fd0c2e934af92995b669565fe0bfb546ed0ff23769999cb","impliedFormat":99},{"version":"d4f7a7a5f66b9bc6fbfd53fa08dcf8007ff752064df816da05edfa35abd2c97c","impliedFormat":99},{"version":"1f38ecf63dead74c85180bf18376dc6bc152522ef3aedf7b588cadbbd5877506","impliedFormat":99},{"version":"82fb33c00b1300c19591105fc25ccf78acba220f58d162b120fe3f4292a5605f","impliedFormat":99},{"version":"facde2bec0f59cf92f4635ece51b2c3fa2d0a3bbb67458d24af61e7e6b8f003c","impliedFormat":99},{"version":"4669194e4ca5f7c160833bbb198f25681e629418a6326aba08cf0891821bfe8f","impliedFormat":99},{"version":"db185b403e30e91c5b90f3f2cfa062832d764c9d7df3ad7f5db7e17596344fe8","impliedFormat":99},{"version":"669b62a7169354658d4ae1e043ad8203728655492a8f70a940a11ca5ed4d5029","impliedFormat":99},{"version":"a95cd11c5c8bc03eab4011f8e339a48f9a87293e90c0bf3e9003d7a6f833f557","impliedFormat":99},{"version":"e9bc0db0144701fab1e98c4d595a293c7c840d209b389144142f0adbc36b5ec2","impliedFormat":99},{"version":"9d884b885c4b2d89286685406b45911dcaab03e08e948850e3e41e29af69561c","impliedFormat":99},{"version":"a1dfe23f227218894bb6e7e900042e12931a6c46a25140a65ad9ff9cc0fd4f20","signature":"9aa87086373bfb09cb3eaac18ad5f92ba89a60f6404fc39103cd22eb4c7095c1"},{"version":"d81da9428bdc67daa07026cab899676d7c926d2c8479490f977075b80641438d","signature":"8b0a49392bc374f425ca5fe0481bd3a6d7367526cc7bc4f3a94a275860564b81"},{"version":"47e830b4aa9517c0a9cd861c5285294a963b229f55fb5a1741a1d43cfae42a1c","signature":"f04353f2414b1b082451ef2227c7a39b186d9a08a79526a09a1f2810f149e40b"},{"version":"0c4a271c60dbb7f6d86f5de56bb15346116376b486c6316c549e1f35b8a416a5","signature":"0dae3d242db51e2ef475883baa090ada156f523f5884ec58e4e53038add780e4"},{"version":"a791672c9d94b9463ee78b4f59941ed01d8b0723916ee831a0b59fb88056fae3","signature":"f5ca117f178bfc7fe194eb1a3bdcaed8a477d960bddbf0506bb8fbcec9e0cdc4"},{"version":"b53ec7332ae7a821ffc0c3d8e2c051e62f3edde59f99881206503594437e0f25","signature":"4694f1f14da89086f105fac1e727ae291d08083e554513ee1eec633f1f14a96a"},{"version":"2a5f44ab9ef476d4f20e780988896755dbfb01250db2849215f62ea01906f510","signature":"b11b07cc479c43751320d88671fc2cae2506fa9e0a4fad6f468f56b45685c0c1"},{"version":"c1f193c94272dc0d85568688e812e5baf7da91858cc0fec08aa01289e80a571e","signature":"8424f2d79f428e49d8a2d2b89e8d379ba1cd8d26849db3a75f35e7d43ad52c45"},{"version":"7cb4075a9a9de85db70491f1d6a58143fda02b11e9f35da99cbe4ddc27bb2f4d","signature":"cad55be229df46931ec430742df5bd6eca49afc48220c3a02906a74607f46dbf"},"9e5c2d6808ffa847749410c03bb00230fea275e9b88285c70b379ca745654d43",{"version":"e3ee51212698a619028e525d3df876b692fced06d3be687a7bb1050dfa4da077","signature":"2c8640060c137890ee9ef29204f399d1533fb36ae5efe6d07ca8e7b5bb537b3c"},{"version":"097f7156bf1f3bf27a15a39d9082f6e7a8539d55db4da767f7447550d963ac7d","signature":"7631a9825156de310b1b9630c3e207ec56efcf7b1898413a32b4ceca2a55264b"},"aecbd57591e5813689b3799dda24d6ceb10f5267d415430b753604538a060b6a","9871d5b22b48e054cd2a87e53dcc105b87757353ff6fcfef10478ed3fdd5d4b7",{"version":"7184b4a5629357445709dff32ba458883c826c09b2e013d8fa5743073827d2c4","signature":"a7a1f4267e921ab3c1f34f46ac71070d54211c34ec987d4834d8185ba30769ae"},{"version":"3f37ef758e00bd0754bc0d1d225377898f9cb9ea3013a8408859a61065e9cd15","signature":"1c094d143f1f02c5c0d85d2ba8b058bc95f5acbb288be5d57cc54edc6d0b42ab"},{"version":"204b8a4af3742532a879253194e624caac77d9e6763584a4a49ca8b1b08c8aed","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a5fdfd6ccff466633808366382eb31ceaffbfe67cac54420eecaa64aaa6da7de","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"3cfb7c0c642b19fb75132154040bb7cd840f0002f9955b14154e69611b9b3f81","impliedFormat":1},{"version":"8387ec1601cf6b8948672537cf8d430431ba0d87b1f9537b4597c1ab8d3ade5b","impliedFormat":1},{"version":"d16f1c460b1ca9158e030fdf3641e1de11135e0c7169d3e8cf17cc4cc35d5e64","impliedFormat":1},{"version":"a934063af84f8117b8ce51851c1af2b76efe960aa4c7b48d0343a1b15c01aedf","impliedFormat":1},{"version":"e3c5ad476eb2fca8505aee5bdfdf9bf11760df5d0f9545db23f12a5c4d72a718","impliedFormat":1},{"version":"462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","impliedFormat":1},{"version":"5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","impliedFormat":1},{"version":"d0570ce419fb38287e7b39c910b468becb5b2278cf33b1000a3d3e82a46ecae2","impliedFormat":1},{"version":"3aca7f4260dad9dcc0a0333654cb3cde6664d34a553ec06c953bce11151764d7","impliedFormat":1},{"version":"a0a6f0095f25f08a7129bc4d7cb8438039ec422dc341218d274e1e5131115988","impliedFormat":1},{"version":"b58f396fe4cfe5a0e4d594996bc8c1bfe25496fbc66cf169d41ac3c139418c77","impliedFormat":1},{"version":"45785e608b3d380c79e21957a6d1467e1206ac0281644e43e8ed6498808ace72","impliedFormat":1},{"version":"bece27602416508ba946868ad34d09997911016dbd6893fb884633017f74e2c5","impliedFormat":1},{"version":"2a90177ebaef25de89351de964c2c601ab54d6e3a157cba60d9cd3eaf5a5ee1a","impliedFormat":1},{"version":"82200e963d3c767976a5a9f41ecf8c65eca14a6b33dcbe00214fcbe959698c46","impliedFormat":1},{"version":"b4966c503c08bbd9e834037a8ab60e5f53c5fd1092e8873c4a1c344806acdab2","impliedFormat":1},{"version":"3d3208d0f061e4836dd5f144425781c172987c430f7eaee483fadaa3c5780f9f","impliedFormat":1},{"version":"34a8a5b4c21e7a6d07d3b6bce72371da300ec1aed58961067e13f1f4dc849712","impliedFormat":1},{"version":"474c97a4f3c70d8ff164c352b5918a36e65e9568de71855066a201e6e8952f3e","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"21d1de9e6c40d79f9122d0158b97c62c03cab5a3060eeb0696830475e7060f17",{"version":"5a4308a27bc95b4d8b7596325abe01a0a7e15a6d6350dc9ff001932259861725","signature":"08070110f6963aaa99ddd59742ef67da601c36c2d607f087870c6850de9dd0ca"},{"version":"af0fe9821160d514e19fbf8409a509f48b6c7ac187aa7c8b740ed7d7a535e88a","signature":"cfb03122d3296fc7960c283ce37cac6adf8791bfc8dd5ac8ad524229c81b0493"},{"version":"19110f1633292d89b215c30fba37d05107c2d8eb601854e87102d09c0c512cd8","signature":"14cc966519b7de516392e1dc09103a0c035a1bb66f7333d1e07b5f49aa291c80"},"3de4a8524e8c5199e8e6435f9f64d64101b7f7912e18fa525b131d6910c4336a",{"version":"129de4a3b796279f5e3227e78ca0fa59dbf7bf1bc1fd329fcc76150297478d0f","signature":"39a16aa34fc956a305fbf041a21c01b44990f122e74b5a2dd4d22406e508f394"},{"version":"e9a802fbb7f1706a98a8ed4f6b8196bced25383b6078630a5003dc77cd746f46","signature":"3ecb4ed313cd7cf0583a500b22fc61673a03815df10078e35ac620cae116b422"},{"version":"dd02e824c0aaa811947a17b2c396c815b0f0d3ccff3879ad0450542fc8cd30ee","signature":"01ff16421b8c72f4443c95538c9b875e8a12f76a282c3e68115930adf27dbf16"},{"version":"14c4dd0a56578dc569ef708da2d60ddbe00a009bc0760684d9cd36b04a296fc7","signature":"3763c07411d78b70fc66479a5a068acdd0ec4d62ee0eb76006f792ddb4092d03"},{"version":"98e54e75d9ff55930e9edb347a7bc75b845d654816a5f94ca60361035ba81dcb","signature":"01723de39f277d5ee69a7b2f15838fcd6e02b7fbc7bf0099e7038c190173a757"},{"version":"eb8758e2e7e84b83d7208dd8ec94a76db4b603009f7fa58f1d917a2fade570a4","signature":"acaeab5c4273e255d64c8bc4216a4eec82f7c14357f0f48015f4e5a9d9e32154"},{"version":"bcc029f882c873c97fbd934e39ff6a3419f75389fa43535b966d85e05ff83776","signature":"c8b06ac86dbd025d371196fda0a07e7bc974e3e61dc86da7352ebedf12c72903"},{"version":"4ff0b443bfaee4e537a64c4d45ec3e0740957c1ba60facedd05aabbc691b678f","signature":"d908d903a664da4b1f9a5ec64ef790a09c920984baf44960b869a86f9206a6f8"},{"version":"ae5319ff02451b0d853d38f26a9622a145a852df699fa54bb62137fd03c1e344","signature":"60bea022c13559794166204b7f2f9b50545bd747ca9ec987ea66c076ff961040"},{"version":"88d1ca2ac57613b86c7dfc01a3bd37452a7faf9093568c9c9e5642d35068eb68","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"9e5d0da569f601820459b53d1c108ee663242027abd7d3e3aa90f8d184a16bfb","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"527a3da9f82427c1ec44d62310458971ca89bbd42115cd775b41fd6b6e773aac","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"22af236bfddaf599772f4cbf08dce5715d3deafc554a63b054d6d279e06483a8","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"43811aa13f8aa3f73fd98a4b1a4be0221a5a51255af9cd3413835ed1141a507f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"7749a12774aec31660b01e975ff1db221cbbf57a9a589d6652ffdd842516bd6d","8bf6d05029045b7412a7b53031daf64413df17dd76e16f70d0639123ddaf6e39",{"version":"0622fc5f8619214660ca03a4bd02a086f4c37c61ae2e1450c3c4f2598d4f70c6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"d56e959076cf8cb2ca48490c7d0643d74cd257a700c28a25aec1209820951001","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"63096bdd94ec9aa2d78c55c5555061449ac779a04dd04f93f3aa569fae090bbe","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e49e78bd1d3e1853d0f9383cd7359c7e19ac6fd3ab4576a166f2a48ad73190ea","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2cb6f03f759fba58d6c7fcb7f678ea227ac87aa892b8a6c7921282b151ce0dd5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"120565597209a07683d5f7ad7a0503ab5cdcd3c237d92446574a77d3711444c8",{"version":"42c6d1a3e2f496d1b035f3fc35720b3e4a389330c82071bf05159bc3e61e7c4b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"9b3805cd540bcf067f5d36a08ef4f34c0fe3ccb9261dc1562ed46d0bc68997d6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"aa4ea57b6ea9522b865460dc5cd1dc1a9896cd51d58a28c9aeb43c291fb00fc3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"890e9a8a8c8b5dece8429daa458c11f28b75ae878ccd0f079becdd78e7a3708c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"38248c29c2981b276816fbab4d6c9cff096a48f4e5926f1e2112fac270d34a3c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f654f8eeeb145dae3e05f4e8f515fdaeb4794aee8e52dae9c5a4cb9042a84226","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1b2901ff87fff90e5b6b33f93f1c8599da56512153ef4496236a1de06f847a5f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2a3d8cd0ba12e9d42bffd49f419a9e88cccda9c2dc809211a8f4fcfc09787d20","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7ddbddf826b3628fcf57f332bed85885870249fe217498739e33e7e00b7e7c4f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1bf8f0ec4333800b299a28eac0f92b3f6504d930aee00e488744541ebd226755","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4f08b57e079b9b6c31a9e5252b0d9d283e98330cae1efcc4b745af1976166a38","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"d6805363104f64a5431a3de7454536b156d31f1fee4bf9ee0d47b3d1f4821c74","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7b1872aa4ccfa359c601baae478ceb3028f814036dc4824432fa9362866f213b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1f84bf74fb4d7c4501d3b720f23964c14e3c04abe985088409a7d9a75cf1c811","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3f3b2a750113281706e4aaf6b78d9db8021c86896fd746074b9609c31b2f1aa8","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1c26ef21b5532f7d1601ce837a7888f634172d6e6c0de842975234cdb39fd87d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a3dd7172db966e29dbda5a63d63195dad0dddef033c1b75935712059a6395c12","impliedFormat":1},{"version":"27c79103b3eddd641481f5e04e766adfaa52c6252e5e9fad369a808890291186","impliedFormat":1},{"version":"c32bcfd472e509a021990489cb750319a849c85932f562e3bcc9d72a8f5ad4ce","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e62cc8dc7ed6c75139993da3014d4119645617e9610979b5bf8826121db4678a","signature":"5a4bb46daa590e8b617d84286f738dc02ddc607233ce59d96dc5bb3a67209f11"},{"version":"10aa7d5bf677d1dbcea9bc4d755f767d895b14e5b66c1bccc8436fb0934d8c5b","signature":"af766774d91280243fb8a228fa2c16450cba846c5c53493ef9f63d6e25bf074c"},"945cbeea4f66887ce6d79ea7ceb03bfe33475c53c4fa6941ad89967585106fc3",{"version":"8c0d3c01bf1f459feb2cbcd4e84ef55de085100e4ff6e28b52bf324b05e34ab0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"369f190a2ae0467f597e8657441a6e9dfe834a971db0eb69a243d9437993c4a6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"df44bc17fc7ac1395656df5488dc363ff71806f540bc6317d272e156a850151b",{"version":"de438ac2a3c7070d097a1b41fc1d81fa17e597c031bf44a59fdad8af6d4c0374","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fdbfe86229806e56fd2eb2aead03a3e95d41b0fcf9043636c4de193baa4f7fdc","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"fdd49dd9264c35b4a27153ff3fcc68084b76a28890602d5d9cfd2ac697b3998f","bc25cb26503dd558cead2c02413e9a7dd0a14a38568821f81f23391d33f107f9",{"version":"2514dceb2e759f4ae71cd71b99cd0aba597d086f98ee55a658e5086bcaea9a0b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"476e83e2c9e398265eed2c38773ae9081932b08ea5597b579a7d2e0c690ead56","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"d6056b480feb3370ff004ca083aed2b9dd36b391fc3cef6da7038574bcdb5577","impliedFormat":99},{"version":"d00b7ef279b5e11236738e99e985ced45d75dbf417eab19110519d7fcf029be9","impliedFormat":99},"52844bb4893076de3d60e804334a824bcde07147640e8bd5cf67f0e2cb734ad5","c071e363c6b59101bde8e4f4375e3c729662f7d101b221851ad6c29110ed066f","ec742e2e34f91b21a061818aaa97bfff535d01152c2e109b12d67d6ab08e65bd","3d9cddeca909259681fc398e5f198a8b7a6c359575024182ec8b478b76ac01c2",{"version":"4c54300bb2670678e16cb98079486f3f2bfa061dd1b954e7e4a8999959420507","impliedFormat":1},"42c86de6e8fd278497c32e03f012f3d14019e742c2afd90a03a2d1e4b89437f2","8afa4ff221558194878ed6ae567a22dac60d34aab4d98477a94d002bc17315b2","904c69311a147514fdcfa68893c13f5e44a1a8717a65078a3891cb8f5a94b0cb","e320cefa4edad8e5b3af95758726edfbb1b673d116b03e801e08c36f14f8d32b",{"version":"5f2030ce41f8e9b14f58bfc9bfdaa72e0e309da613ff928681149eb488cfa931","signature":"e9765aeaf4547c97126abaea9a8613ace300b5b1ed01343c3e5d9908ba3451ed"},{"version":"8e6b8259bfd8c8c3d6ed79349b7f2f69476d255aede2cd6c0acb0869ad8c6fdd","impliedFormat":1},"ede1e6178dbb8a30a16a794eca81b4fd0bd428215fa7c9d97ba69635c5a6fcf0","e5ad6faeec6643c23cb7cddada64138f93a6291cc8a3267f19dbcdf0536635b3","2f16e93fdb3707ad67659962b02ea82ba8a2af09a3972fd2d92fbbf9b18682c8","32fb39e0f7a2b976524b6f90ed5372654407235816bc60095186ce6ab94ad3c0","0216ee4ac5c18b36fd36d8737144a9ce4e6930f5552446602a4e3d9380f80bb0","088bb47b98092b56b9de5a0f87ae7d9fb0c6bdc0812613e9430105d9875f0d4a","993b67e0b38e84c737bc2cf76d9cde51fb089e4682d183a4cddfd4c808d03b96","775c44175f08f5827343d1647d0cffe520039d033806b7a2961778c84bed55d3","e2cef883825d5766485fb573e78ba151ad3412605e21d7cd20142c4368a47fcf",{"version":"dd332252bb45677533cd5553e0c35340cee4c485c90c63360f8e653901286a4f","impliedFormat":1},{"version":"dddde95f3dea44dc49c9095a861298e829122a54a3f56b3b815e615501e2ed16","impliedFormat":1},{"version":"794a88237c94d74302df12ebb02f521cf5389a5bf046a3fdbdd3afb21dc02511","impliedFormat":1},{"version":"66a08d30c55a7aefa847c1f5958924a3ef9bea6cd1c962a8ff1b2548f66a6ce0","impliedFormat":1},{"version":"0790ae78f92ab08c9d7e66b59733a185a9681be5d0dc90bd20ab5d84e54dcb86","impliedFormat":1},{"version":"1046cd42ec19e4fd038c803b4fc1aff31e51e6e48a6b8237a0240a11c1c27792","impliedFormat":1},{"version":"8f93c7e1084de38a142085c7f664b0eb463428601308fb51c68b25cb687e0887","impliedFormat":1},{"version":"83f69c968d32101f8690845f47bcae016cbea049e222a5946889eb3ae37e7582","impliedFormat":1},{"version":"59c3f3ed18de1c7f5927e0eafcdc0e545db88bfae4168695a89e38a85943a86d","impliedFormat":1},{"version":"32e6c27fd3ef2b1ddbf2bf833b2962d282eb07d9d9d3831ca7f4ff63937268e1","impliedFormat":1},{"version":"406ebb72aa8fdd9227bfce7a1b3e390e2c15b27f5da37ea9e3ed19c7fb78d298","impliedFormat":1},{"version":"197109f63a34b5f9379b2d7ba82fc091659d6878db859bd428ea64740cb06669","impliedFormat":1},{"version":"059871a743c0ca4ae511cbd1e356548b4f12e82bc805ab2e1197e15b5588d1c4","impliedFormat":1},{"version":"8ccefe3940a2fcb6fef502cdbc7417bb92a19620a848f81abc6caa146ab963e9","impliedFormat":1},{"version":"44d8ec73d503ae1cb1fd7c64252ffa700243b1b2cc0afe0674cd52fe37104d60","impliedFormat":1},{"version":"67ea5a827a2de267847bb6f1071a56431aa58a4c28f8af9b60d27d5dc87b7289","impliedFormat":1},{"version":"e33bb784508856827448a22947f2cac69e19bc6e9d6ef1c4f42295f7bd4ce293","impliedFormat":1},{"version":"383bb09bfeb8c6ef424c7fbce69ec7dc59b904446f8cfec838b045f0143ce917","impliedFormat":1},{"version":"83508492e3fc5977bc73e63541e92c5a137db076aafc59dcf63e9c6ad34061c7","impliedFormat":1},{"version":"ef064b9a331b7fc9fe0b368499c52623fb85d37d8972d5758edc26064189d14d","impliedFormat":1},{"version":"d64457d06ab06ad5e5f693123ee2f17594f00e6d5481517058569deac326fea0","impliedFormat":1},{"version":"e92ea29d716c5fe1977a34e447866d5cfbd94b3f648e3b9c550603fdae0e94fb","impliedFormat":1},{"version":"3d10f47c6b1e9225c68c140235657a0cdd4fc590c18faf87dcd003fd4e22c67f","impliedFormat":1},{"version":"13989f79ff8749a8756cac50f762f87f153e3fb1c35768cc6df15968ec1adb1a","impliedFormat":1},{"version":"e014c2f91e94855a52dd9fc88867ee641a7d795cfe37e6045840ecf93dab2e6b","impliedFormat":1},{"version":"74b9f867d1cc9f4e6122f81b59c77cbd6ff39f482fb16cffdc96e4cda1b5fdb1","impliedFormat":1},{"version":"7c8574cfc7cb15a86db9bf71a7dc7669593d7f62a68470adc01b05f246bd20ff","impliedFormat":1},{"version":"c8f49d91b2669bf9414dfc47089722168602e5f64e9488dbc2b6fe1a0f6688da","impliedFormat":1},{"version":"3abee758d3d415b3b7b03551f200766c3e5dd98bb1e4ff2c696dc6f0c5f93191","impliedFormat":1},{"version":"79bd7f60a080e7565186cfdfd84eac7781fc4e7b212ab4cd315b9288c93b7dc7","impliedFormat":1},{"version":"4a2f281330a7b5ed71ebc4624111a832cd6835f3f92ad619037d06b944398cf4","impliedFormat":1},{"version":"ea8130014cb8ee30621bf521f58d036bff3b9753b2f6bd090cc88ac15836d33c","impliedFormat":1},{"version":"c740d49c5a0ecc553ddfc14b7c550e6f5a2971be9ed6e4f2280b1f1fa441551d","impliedFormat":1},{"version":"886a56c6252e130f3e4386a6d3340cf543495b54c67522d21384ed6fb80b7241","impliedFormat":1},{"version":"4b7424620432be60792ede80e0763d4b7aab9fe857efc7bbdb374e8180f4092a","impliedFormat":1},{"version":"e407db365f801ee8a693eca5c21b50fefd40acafda5a1fa67f223800319f98a8","impliedFormat":1},{"version":"529660b3de2b5246c257e288557b2cfa5d5b3c8d2240fa55a4f36ba272b57d18","impliedFormat":1},{"version":"0f6646f9aba018d0a48b8df906cb05fa4881dc7f026f27ab21d26118e5aa15de","impliedFormat":1},{"version":"b3620fcf3dd90a0e6a07268553196b65df59a258fe0ec860dfac0169e0f77c52","impliedFormat":1},{"version":"08135e83e8d9e34bab71d0cf35b015c21d0fd930091b09706c6c9c0e766aca28","impliedFormat":1},{"version":"96e14f2fdc1e3a558462ada79368ed49b004efce399f76f084059d50121bb9a9","impliedFormat":1},{"version":"56f2ade178345811f0c6c4e63584696071b1bd207536dc12384494254bc1c386","impliedFormat":1},{"version":"e484786ef14e10d044e4b16b6214179c95741e89122ba80a7c93a7e00bf624b1","impliedFormat":1},{"version":"4763ce202300b838eb045923eaeb32d9cf86092eee956ca2d4e223cef6669b13","impliedFormat":1},{"version":"7cff5fff5d1a92ae954bf587e5c35987f88cacaa006e45331b3164c4e26369de","impliedFormat":1},{"version":"c276acedaadc846336bb51dd6f2031fdf7f299d0fae1ee5936ccba222e1470ef","impliedFormat":1},{"version":"426c3234f768c89ba4810896c1ee4f97708692727cfecba85712c25982e7232b","impliedFormat":1},{"version":"ee12dd75feac91bb075e2cb0760279992a7a8f5cf513b1cffaa935825e3c58be","impliedFormat":1},{"version":"3e51868ea728ceb899bbfd7a4c7b7ad6dd24896b66812ea35893e2301fd3b23f","impliedFormat":1},{"version":"781e8669b80a9de58083ca1f1c6245ef9fb04d98add79667e3ed70bde034dfd5","impliedFormat":1},{"version":"cfd35b460a1e77a73f218ebf7c4cd1e2eeeaf3fa8d0d78a0a314c6514292e626","impliedFormat":1},{"version":"452d635c0302a0e1c5108edebcca06fc704b2f8132123b1e98a5220afa61a965","impliedFormat":1},{"version":"bbe64c26d806764999b94fcd47c69729ba7b8cb0ca839796b9bb4d887f89b367","impliedFormat":1},{"version":"b87d65da85871e6d8c27038146044cffe40defd53e5113dbd198b8bce62c32db","impliedFormat":1},{"version":"c37712451f6a80cbf8abec586510e5ac5911cb168427b08bc276f10480667338","impliedFormat":1},{"version":"ecf02c182eec24a9a449997ccc30b5f1b65da55fd48cbfc2283bcfa8edc19091","impliedFormat":1},{"version":"0b2c6075fc8139b54e8de7bcb0bed655f1f6b4bf552c94c3ee0c1771a78dea73","impliedFormat":1},{"version":"49707726c5b9248c9bac86943fc48326f6ec44fe7895993a82c3e58fb6798751","impliedFormat":1},{"version":"a9679a2147c073267943d90a0a736f271e9171de8fbc9c378803dd4b921f5ed3","impliedFormat":1},{"version":"a8a2529eec61b7639cce291bfaa2dd751cac87a106050c3c599fccb86cc8cf7f","impliedFormat":1},{"version":"bfc46b597ca6b1f6ece27df3004985c84807254753aaebf8afabd6a1a28ed506","impliedFormat":1},{"version":"7fdee9e89b5a38958c6da5a5e03f912ac25b9451dc95d9c5e87a7e1752937f14","impliedFormat":1},{"version":"b8f3eafeaf04ba3057f574a568af391ca808bdcb7b031e35505dd857db13e951","impliedFormat":1},{"version":"30b38ae72b1169c4b0d6d84c91016a7f4c8b817bfe77539817eac099081ce05c","impliedFormat":1},{"version":"c9f17e24cb01635d6969577113be7d5307f7944209205cb7e5ffc000d27a8362","impliedFormat":1},{"version":"685ead6d773e6c63db1df41239c29971a8d053f2524bfabdef49b829ae014b9a","impliedFormat":1},{"version":"b7bdabcd93148ae1aecdc239b6459dfbe35beb86d96c4bd0aca3e63a10680991","impliedFormat":1},{"version":"e83cfc51d3a6d3f4367101bfdb81283222a2a1913b3521108dbaf33e0baf764a","impliedFormat":1},{"version":"95f397d5a1d9946ca89598e67d44a214408e8d88e76cf9e5aecbbd4956802070","impliedFormat":1},{"version":"74042eac50bc369a2ed46afdd7665baf48379cf1a659c080baec52cc4e7c3f13","impliedFormat":1},{"version":"1541765ce91d2d80d16146ca7c7b3978bd696dc790300a4c2a5d48e8f72e4a64","impliedFormat":1},{"version":"ec6acc4492c770e1245ade5d4b6822b3df3ba70cf36263770230eac5927cf479","impliedFormat":1},{"version":"4c39ee6ae1d2aeda104826dd4ce1707d3d54ac34549d6257bea5d55ace844c29","impliedFormat":1},{"version":"deb099454aabad024656e1fc033696d49a9e0994fc3210b56be64c81b59c2b20","impliedFormat":1},{"version":"80eec3c0a549b541de29d3e46f50a3857b0b90552efeeed90c7179aba7215e2f","impliedFormat":1},{"version":"a4153fbd5c9c2f03925575887c4ce96fc2b3d2366a2d80fad5efdb75056e5076","impliedFormat":1},{"version":"6f7c70ca6fa1a224e3407eb308ec7b894cfc58042159168675ccbe8c8d4b3c80","impliedFormat":1},{"version":"4b56181b844219895f36cfb19100c202e4c7322569dcda9d52f5c8e0490583c9","impliedFormat":1},{"version":"5609530206981af90de95236ce25ddb81f10c5a6a346bf347a86e2f5c40ae29b","impliedFormat":1},{"version":"632ce3ee4a6b320a61076aeca3da8432fb2771280719fde0936e077296c988a9","impliedFormat":1},{"version":"8b293d772aff6db4985bd6b33b364d971399993abb7dc3f19ceed0f331262f04","impliedFormat":1},{"version":"4eb7bad32782df05db4ba1c38c6097d029bed58f0cb9cda791b8c104ccfdaa1f","impliedFormat":1},{"version":"c6a8aa80d3dde8461b2d8d03711dbdf40426382923608aac52f1818a3cead189","impliedFormat":1},{"version":"bf5e79170aa7fc005b5bf87f2fe3c28ca8b22a1f7ff970aa2b1103d690593c92","impliedFormat":1},{"version":"ba3c92c785543eba69fbd333642f5f7da0e8bce146dec55f06cfe93b41e7e12f","impliedFormat":1},{"version":"c6d72ececae6067e65c78076a5d4a508f16c806577a3d206259a0d0bfeedc8d1","impliedFormat":1},{"version":"b6429631df099addfcd4a5f33a046cbbde1087e3fc31f75bfbbd7254ef98ea3c","impliedFormat":1},{"version":"4e9cf1b70c0faf6d02f1849c4044368dc734ad005c875fe7957b7df5afe867c9","impliedFormat":1},{"version":"7498b7d83674a020bd6be46aeed3f0717610cb2ae76d8323e560e964eb122d0c","impliedFormat":1},{"version":"b80405e0473b879d933703a335575858b047e38286771609721c6ab1ea242741","impliedFormat":1},{"version":"7193dfd01986cd2da9950af33229f3b7c5f7b1bee0be9743ad2f38ec3042305e","impliedFormat":1},{"version":"1ccb40a5b22a6fb32e28ffb3003dea3656a106dd3ed42f955881858563776d2c","impliedFormat":1},{"version":"8d97d5527f858ae794548d30d7fc78b8b9f6574892717cc7bc06307cc3f19c83","impliedFormat":1},{"version":"ccb4ecdc8f28a4f6644aa4b5ab7337f9d93ff99c120b82b1c109df12915292ac","impliedFormat":1},{"version":"8bbcf9cecabe7a70dcb4555164970cb48ba814945cb186493d38c496f864058f","impliedFormat":1},{"version":"7d57bdfb9d227f8a388524a749f5735910b3f42adfe01bfccca9999dc8cf594c","impliedFormat":1},{"version":"3508810388ea7c6585496ee8d8af3479880aba4f19c6bbd61297b17eb30428f4","impliedFormat":1},{"version":"56931daef761e6bdd586358664ccd37389baabeb5d20fe39025b9af90ea169a5","impliedFormat":1},{"version":"abb48247ab33e8b8f188ef2754dfa578129338c0f2e277bfc5250b14ef1ab7c5","impliedFormat":1},{"version":"beaba1487671ed029cf169a03e6d680540ea9fa8b810050bc94cb95d5e462db2","impliedFormat":1},{"version":"1418ef0ba0a978a148042bc460cf70930cd015f7e6d41e4eb9348c4909f0e16d","impliedFormat":1},{"version":"56be4f89812518a2e4f0551f6ef403ffdeb8158a7c271b681096a946a25227e9","impliedFormat":1},{"version":"bbb0937150b7ab2963a8bc260e86a8f7d2f10dc5ee7ddb1b4976095a678fdaa4","impliedFormat":1},{"version":"862301d178172dc3c6f294a9a04276b30b6a44d5f44302a6e9d7dc1b4145b20b","impliedFormat":1},{"version":"cbf20c7e913c08cb08c4c3f60dae4f190abbabaa3a84506e75e89363459952f0","impliedFormat":1},{"version":"0f3333443f1fea36c7815601af61cb3184842c06116e0426d81436fc23479cb8","impliedFormat":1},{"version":"421d3e78ed21efcbfa86a18e08d5b6b9df5db65340ef618a9948c1f240859cc1","impliedFormat":1},{"version":"b1225bc77c7d2bc3bad15174c4fd1268896a90b9ab3b306c99b1ade2f88cddcc","impliedFormat":1},{"version":"ca46e113e95e7c8d2c659d538b25423eac6348c96e94af3b39382330b3929f2a","impliedFormat":1},{"version":"03ca07dbb8387537b242b3add5deed42c5143b90b5a10a3c51f7135ca645bd63","impliedFormat":1},{"version":"ca936efd902039fda8a9fc3c7e7287801e7e3d5f58dd16bf11523dc848a247d7","impliedFormat":1},{"version":"2c7b3bfa8b39ed4d712a31e24a8f4526b82eeca82abb3828f0e191541f17004c","impliedFormat":1},{"version":"5ffaae8742b1abbe41361441aa9b55a4e42aee109f374f9c710a66835f14a198","impliedFormat":1},{"version":"ecab0f43679211efc9284507075e0b109c5ad024e49b190bb28da4adfe791e49","impliedFormat":1},{"version":"967109d5bc55face1aaa67278fc762ac69c02f57277ab12e5d16b65b9023b04f","impliedFormat":1},{"version":"36d25571c5c35f4ce81c9dcae2bdd6bbaf12e8348d57f75b3ef4e0a92175cd41","impliedFormat":1},{"version":"fde94639a29e3d16b84ea50d5956ee76263f838fa70fe793c04d9fce2e7c85b9","impliedFormat":1},{"version":"5f4c286fea005e44653b760ebfc81162f64aabc3d1712fd4a8b70a982b8a5458","impliedFormat":1},{"version":"e02dabe428d1ffd638eccf04a6b5fba7b2e8fccee984e4ef2437afc4e26f91c2","impliedFormat":1},{"version":"60dc0180bd223aa476f2e6329dca42fb0acaa71b744a39eb3f487ab0f3472e1c","impliedFormat":1},{"version":"b6fdbecf77dcbf1b010e890d1a8d8bfa472aa9396e6c559e0fceee05a3ef572f","impliedFormat":1},{"version":"e1bf9d73576e77e3ae62695273909089dbbb9c44fb52a1471df39262fe518344","impliedFormat":1},{"version":"d2d57df33a7a5ea6db5f393df864e3f8f8b8ee1dfdfe58180fb5d534d617470f","impliedFormat":1},{"version":"fdcd692f0ac95e72a0c6d1e454e13d42349086649828386fe7368ac08c989288","impliedFormat":1},{"version":"5583eef89a59daa4f62dd00179a3aeff4e024db82e1deff2c7ec3014162ea9a2","impliedFormat":1},{"version":"b0641d9de5eaa90bff6645d754517260c3536c925b71c15cb0f189b68c5386b4","impliedFormat":1},{"version":"9899a0434bd02881d19cb08b98ddd0432eb0dafbfe5566fa4226bdd15624b56f","impliedFormat":1},{"version":"4496c81ce10a0a9a2b9cb1dd0e0ddf63169404a3fb116eb65c52b4892a2c91b9","impliedFormat":1},{"version":"ecdb4312822f5595349ec7696136e92ecc7de4c42f1ea61da947807e3f11ebfc","impliedFormat":1},{"version":"42edbfb7198317dd7359ce3e52598815b5dc5ca38af5678be15a4086cccd7744","impliedFormat":1},{"version":"8105321e64143a22ed5411258894fb0ba3ec53816dad6be213571d974542feeb","impliedFormat":1},{"version":"d1b34c4f74d3da4bdf5b29bb930850f79fd5a871f498adafb19691e001c4ea42","impliedFormat":1},{"version":"9a1caf586e868bf47784176a62bf71d4c469ca24734365629d3198ebc80858d7","impliedFormat":1},{"version":"35a443f013255b33d6b5004d6d7e500548536697d3b6ba1937fd788ca4d5d37b","impliedFormat":1},{"version":"b591c69f31d30e46bc0a2b383b713f4b10e63e833ec42ee352531bbad2aadfaa","impliedFormat":1},{"version":"31e686a96831365667cbd0d56e771b19707bad21247d6759f931e43e8d2c797d","impliedFormat":1},{"version":"dfc3b8616bece248bf6cd991987f723f19c0b9484416835a67a8c5055c5960e0","impliedFormat":1},{"version":"03b64b13ecf5eb4e015a48a01bc1e70858565ec105a5639cfb2a9b63db59b8b1","impliedFormat":1},{"version":"c56cc01d91799d39a8c2d61422f4d5df44fab62c584d86c8a4469a5c0675f7c6","impliedFormat":1},{"version":"5205951312e055bc551ed816cbb07e869793e97498ef0f2277f83f1b13e50e03","impliedFormat":1},{"version":"50b1aeef3e7863719038560b323119f9a21f5bd075bb97efe03ee7dec23e9f1b","impliedFormat":1},{"version":"0cc13970d688626da6dce92ae5d32edd7f9eabb926bb336668e5095031833b7c","impliedFormat":1},{"version":"3be9c1368c34165ba541027585f438ed3e12ddc51cdc49af018e4646d175e6a1","impliedFormat":1},{"version":"7d617141eb3f89973b1e58202cdc4ba746ea086ef35cdedf78fb04a8bb9b8236","impliedFormat":1},{"version":"ea6d9d94247fd6d72d146467070fe7fc45e4af6e0f6e046b54438fd20d3bd6a2","impliedFormat":1},{"version":"d584e4046091cdef5df0cb4de600d46ba83ff3a683c64c4d30f5c5a91edc6c6c","impliedFormat":1},{"version":"ce68902c1612e8662a8edde462dff6ee32877ed035f89c2d5e79f8072f96aed0","impliedFormat":1},{"version":"d48ac7569126b1bc3cd899c3930ef9cf22a72d51cf45b60fc129380ae840c2f2","impliedFormat":1},{"version":"e4f0d7556fda4b2288e19465aa787a57174b93659542e3516fd355d965259712","impliedFormat":1},{"version":"756b471ce6ec8250f0682e4ad9e79c2fddbe40618ba42e84931dbb65d7ac9ab0","impliedFormat":1},{"version":"ce9635a3551490c9acdbcb9a0491991c3d9cd472e04d4847c94099252def0c94","impliedFormat":1},{"version":"b70ee10430cc9081d60eb2dc3bee49c1db48619d1269680e05843fdaba4b2f7a","impliedFormat":1},{"version":"9b78500996870179ab99cbbc02dffbb35e973d90ab22c1fb343ed8958598a36c","impliedFormat":1},{"version":"c6ee8f32bb16015c07b17b397e1054d6906bc916ab6f9cd53a1f9026b7080dbf","impliedFormat":1},{"version":"67e913fa79af629ee2805237c335ea5768ea09b0b541403e8a7eaef253e014d9","impliedFormat":1},{"version":"0b8a688a89097bd4487a78c33e45ca2776f5aedaa855a5ba9bc234612303c40e","impliedFormat":1},{"version":"188e5381ed8c466256937791eab2cc2b08ddcc5e4aaf6b4b43b8786ed1ab5edd","impliedFormat":1},{"version":"8559f8d381f1e801133c61d329df80f7fdab1cbad5c69ebe448b6d3c104a65bd","impliedFormat":1},{"version":"00a271352b854c5d07123587d0bb1e18b54bf2b45918ab0e777d95167fd0cb0b","impliedFormat":1},{"version":"10c4be0feeac95619c52d82e31a24f102b593b4a9eba92088c6d40606f95b85d","impliedFormat":1},{"version":"e1385f59b1421fceba87398c3eb16064544a0ce7a01b3a3f21fa06601dc415dc","impliedFormat":1},{"version":"bacf2c0f8cbfc5537b3c64fc79d3636a228ccbb00d769fb1426b542efe273585","impliedFormat":1},{"version":"3103c479ff634c3fbd7f97a1ccbfb645a82742838cb949fdbcf30dd941aa7c85","impliedFormat":1},{"version":"4b37b3fab0318aaa1d73a6fde1e3d886398345cff4604fe3c49e19e7edd8a50d","impliedFormat":1},{"version":"bf429e19e155685bda115cc7ea394868f02dec99ee51cfad8340521a37a5867a","impliedFormat":1},{"version":"72116c0e0042fd5aa020c2c121e6decfa5414cf35d979f7db939f15bb50d2943","impliedFormat":1},{"version":"20510f581b0ee148a80809122f9bcaa38e4691d3183a4ed585d6d02ffe95a606","impliedFormat":1},{"version":"71f4b56ed57bbdea38e1b12ad6455653a1fbf5b1f1f961d75d182bff544a9723","impliedFormat":1},{"version":"b3e1c5db2737b0b8357981082b7c72fe340edf147b68f949413fee503a5e2408","impliedFormat":1},{"version":"396e64a647f4442a770b08ed23df3c559a3fa7e35ffe2ae0bbb1f000791bda51","impliedFormat":1},{"version":"698551f7709eb21c3ddec78b4b7592531c3e72e22e0312a128c40bb68692a03f","impliedFormat":1},{"version":"662b28f09a4f60e802023b3a00bdd52d09571bc90bf2e5bfbdbc04564731a25e","impliedFormat":1},{"version":"e6b8fb8773eda2c898e414658884c25ff9807d2fce8f3bdb637ab09415c08c3c","impliedFormat":1},{"version":"528288d7682e2383242090f09afe55f1a558e2798ceb34dc92ae8d6381e3504a","impliedFormat":1},"afe38dfb2e6612d0ef3c8bb931424b3a7963d366592a25a11aaab160bc88490e","61e3d1d5b68c19f6c72b7cb260d9a80bda1019264c4f2116f932d58e833b5974","683be6dd9193ca614df5fa26b099128396f79f563fd0862163cb1199a9355417","87921aae4f4dcd04df1c0847cdd122b7ad5ad601b2f128859f73c3e2ec3bb508","4da1068f7cdb75179c7e28aaa9ae135f3b1eee9d7464c4aa3d031acf2f0447d2","c96a31670ecd37c84a868810ec5527ec80a9c25380cfa427d661c75044478280","c4a69b7535f327535e41c309f9c4a197afe30be9c8099ca911bc48c367254926","f8bc975826b9e10e386beee456a3dbd6b0d919f0fdd5a312ffd59a41b66ebbe9","fe3174926fe6328920581978a088a1ddd61494d3d115c67ef77f006169704790","b7bcb8665e825491e1b8298d8c738285e377f398a2529b1167efeb8050c2e112","08bee6534dd83615f858a01c4b0bd318cd57da8518b9c0dc0d74b1d28fd9e384",{"version":"a827c04987a53acd81b692bda49ac2a14b56835aa9b6a1ebafe0a5a88f19b7ab","signature":"291a05e5bfba762bcf3172303e8b08ec91fe88ab1b3b761958ffbbd6b39ecb3b"},"4b244a86a86ccfac9962843d13ab8fdf2bf35320d40869f6aa6e4dc816fe8a09","3aac5d679566daf7ac6d5151a518e4edd0f5d4b506a7345d17d7b6b27266c9c4","1c2250ee80be8a065f292be6233626563f18d90a8022ac0447349eb30957d8fa","8a3ae4d577e7e92f29181a3980c79bd278c92cc1edfb41181a90460233f428ba","aa7afba26d4c638807643d427a6b1b2a0899c5ae6ace7d54709086188e41748d",{"version":"932ec5cadd5bdf13c4a1a1fa6abec792e95f27282c513b38f5fe02ac0c381f43","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"2552a31fad45a9ed1bde87e51b038dc0e786cd364b597162263abbf57018949b","eb7091fb898cad6631cbc318c6035c3df9a39926cad5064228c78c520208a1ab","95b40b68ed59aa7c82c3ebdaed873051e11d14fe6c95e938e46a8171de986a53","3f61dd0abfe1cd3d6c343e7f1e1f385a337d4b24e15e86ea8c372b74f64a09e4","23061791a175bb03951af6183f21dc51d6857e4a298c750d82fdbb88a98a970e","430e7c9820732772c9852f0b6c152554e1978cd450f338f983bad8c624472229","3e177533c35e217dd8daf481516b2c83ac91c22d4f71b57646772011da8c6fc2","8c8688d34a3248cf3200b12c0ce4b9ce52b7b41e82e60bcbdd27e7e4c5c0045c","669f3a478c78a8d297c2cd68f877da0ffd3618041bc393155e46c4105dd6658c","7651182821226132d806cac35d06b79aaae206d86c2ae0f8d100ac68d180cce0","1f2a7b89594570d58e68428dd7bb2b0610bcb24315b759ed54fd998acd830433","cb4e10dca24645f1b30b967860dec21c5505459ba89a4ca6f3a3c3c41993abbb",{"version":"fea6553ab05ca916e993023c7a65414d57fe6378e7531e9c5db86988cf57176c","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"25502916657b647990163167d6125fceba57acb21cda652e686c7a1e5c02f076","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"575bdde143bf2b6d78e7e374bc67de44521252fb30b8bbafa75f9718169d00c9","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"235ff6d01a3a8d2af90e478e0e5ef4c039e8778be06eed5c53fb911dc6d73f28","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"5a9c68e18d49f1464179db057d72f42a627c0ab05ca45fb12ee44e19d1f1be99","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"fbafb6a470c6946ec893c2d2593fd4ea21ee57802beebeb7be6461ccfdcc5b70","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"67e7dcd7fa2cf9211cc0425cd38064f5442aabeac2ef0aa3283bd510e780c55a","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"449b6ae802c4f68611b14d01bfa4eae0ef43ae857b54ae0c98d24fdfb8642001","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"82a90bad3a8a5d3ee824fe0acbfa5c94fd279fa2415373cbac47bd4e73009d1b","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"ee37673e7eb5879b0facf1151e0ead7e12cbb458aaf03c71519f0dcdfdf6a291","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"1c35d61f488978ecd981006ff90573378337b98bb02cef25cf8438d57529468c","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"45f38748ea036810e33852cb7ca4c2a855efd3f085047fff5c49f94da81b24d9","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"fc5f70133e7e34c7afbe0b5295f7e1aef0e91af423d3ad2c448967eb157112a2","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"ba454f248ec9940f73a886792361f22eaae2c4b273f284261c69afc4ed45c452","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"e4e1522c877424d2c8674aaec49d1565719257c3028e0e9d768e56e3c3570c80","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"12f524383a401ad99e802504aff48c0d1d7989134d54687ede48a2b0c99b0511","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"db6c303e5ba5b5756d88bce9432c06e8ea06f84538ebd04427d02389f9982f8d","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"9d54f8cddfa747bfa3b310c3a3bfd9e28843cf7e39bfcec49092b13b7ebbf140","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"3683134e49e553601dff0232b3dda6423c53577c94caebbb6dfa5498cb24103d","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"c8b5e334d4cee35a44cca7aa218f53f0e8f0ff54dc60d9418ecf77ae17a26ebb","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"3023bb938c83ec38067ef184c5938fb9166eead16161fc443fe108ffec4cf8f1","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"c828b323b67d8bb3a0469115556c41d038566a111c086d75099c1c81d9897a7e","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"1d6b45cd4639e21989a35f20057d8a88e1ed44554ad5607b6f95c5b35d9cd765","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"941c9f83847d2eeb27f141a0020f5f8b292f4bda72c1403faf03630e82f486ad","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"2e23be37a190953f60cdc4a62f89e5dfe4d6c64f38c71564bc0fb63c7810c9a1","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1}],"root":[60,479,482,483,493,519,581,[583,602],[902,914],[940,943],965,[975,978],[1003,1067],2032,2033,[2038,2043],[2075,2092],[2112,2155],[2158,2169],[2175,2178],[2180,2184],[2186,2194],[2369,2422]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[2390,1],[2391,2],[2394,3],[2393,4],[2395,5],[2392,6],[2396,7],[2397,8],[2398,9],[2399,10],[2400,11],[2402,12],[2403,13],[2404,14],[2401,15],[2405,16],[2408,17],[2409,18],[2407,19],[2410,20],[2411,21],[2406,22],[2412,23],[2414,24],[2413,25],[2416,26],[2415,27],[2417,28],[2418,29],[2420,30],[2419,31],[2422,32],[2421,33],[2389,34],[2387,35],[60,36],[2388,37],[482,38],[586,39],[587,39],[588,39],[589,39],[590,39],[591,40],[592,40],[593,39],[594,39],[595,39],[596,41],[597,39],[598,39],[599,39],[600,40],[601,39],[585,42],[602,39],[902,43],[903,44],[904,39],[905,39],[583,45],[584,45],[906,40],[907,40],[908,39],[909,39],[910,40],[911,40],[912,40],[913,39],[914,39],[479,46],[483,47],[939,48],[926,49],[924,50],[922,51],[921,36],[925,52],[919,52],[923,53],[927,54],[929,55],[917,36],[933,56],[936,57],[938,58],[935,59],[937,60],[934,36],[928,48],[930,61],[920,36],[988,62],[984,63],[985,64],[986,65],[987,66],[2283,67],[2285,68],[2284,36],[2286,69],[2287,70],[2282,71],[2317,72],[2318,73],[2316,74],[2320,75],[2323,76],[2319,77],[2321,78],[2322,78],[2324,79],[2325,80],[2330,81],[2327,82],[2326,83],[2329,84],[2328,85],[2334,86],[2333,87],[2331,88],[2332,77],[2335,89],[2336,90],[2340,91],[2338,92],[2337,93],[2339,94],[2275,95],[2257,77],[2258,96],[2260,97],[2274,96],[2261,98],[2263,77],[2262,36],[2264,77],[2265,99],[2272,77],[2266,36],[2267,36],[2268,36],[2269,77],[2270,100],[2271,101],[2259,79],[2273,102],[2341,103],[2314,104],[2315,105],[2313,106],[2251,107],[2249,108],[2250,109],[2248,110],[2247,111],[2244,112],[2243,113],[2237,111],[2239,114],[2238,115],[2246,116],[2245,113],[2240,117],[2241,118],[2242,118],[2278,98],[2276,98],[2279,119],[2281,120],[2280,121],[2277,122],[2228,100],[2229,36],[2252,123],[2256,124],[2253,36],[2254,125],[2255,36],[2231,126],[2232,126],[2235,127],[2236,128],[2234,126],[2233,127],[2230,96],[2288,77],[2289,77],[2290,77],[2291,129],[2312,130],[2300,131],[2299,36],[2292,132],[2295,77],[2293,77],[2296,77],[2298,133],[2297,134],[2294,77],[2308,36],[2301,36],[2302,36],[2303,77],[2304,77],[2305,36],[2306,77],[2307,36],[2311,135],[2309,36],[2310,77],[2348,136],[2347,137],[2351,138],[2352,139],[2349,140],[2350,141],[2368,142],[2360,143],[2359,144],[2358,102],[2353,145],[2357,146],[2354,145],[2355,145],[2356,145],[2343,102],[2342,36],[2346,147],[2344,140],[2345,148],[2361,36],[2362,36],[2363,102],[2367,149],[2364,36],[2365,102],[2366,145],[2205,36],[2207,150],[2208,151],[2206,36],[2209,36],[2210,36],[2213,152],[2211,36],[2212,36],[2214,36],[2215,36],[2216,36],[2217,153],[2218,36],[2219,154],[2204,155],[2195,36],[2196,36],[2198,36],[2197,83],[2199,83],[2200,36],[2201,83],[2202,36],[2203,36],[2227,156],[2225,157],[2220,36],[2221,36],[2222,36],[2223,36],[2224,36],[2226,36],[226,36],[490,158],[533,36],[2045,159],[2047,160],[2054,161],[2048,162],[2049,36],[2050,159],[2051,162],[2046,36],[2053,162],[2044,36],[2052,36],[2067,163],[2074,164],[2064,165],[2073,83],[2071,165],[2065,163],[2066,166],[2057,165],[2055,167],[2072,168],[2068,167],[2070,165],[2069,167],[2063,167],[2062,165],[2056,165],[2058,169],[2060,165],[2061,165],[2059,165],[2185,170],[2157,171],[2156,172],[2107,36],[2104,36],[2103,36],[2098,173],[2109,174],[2094,175],[2105,176],[2097,177],[2096,178],[2106,36],[2101,179],[2108,36],[2102,180],[2095,36],[2111,181],[2093,36],[536,182],[534,36],[618,183],[619,184],[541,36],[123,185],[124,185],[125,186],[77,187],[126,188],[127,189],[128,190],[72,36],[75,191],[73,36],[74,36],[129,192],[130,193],[131,194],[132,195],[133,196],[134,197],[135,197],[136,198],[137,199],[138,200],[139,201],[78,36],[76,36],[140,202],[141,203],[142,204],[176,205],[143,206],[144,36],[145,207],[146,208],[147,209],[148,210],[149,211],[150,212],[151,213],[152,214],[153,215],[154,215],[155,216],[156,36],[157,217],[158,218],[160,219],[159,220],[161,221],[162,222],[163,223],[164,224],[165,225],[166,226],[167,227],[168,228],[169,229],[170,230],[171,231],[172,232],[173,233],[79,36],[80,36],[81,36],[120,234],[121,36],[122,36],[174,235],[175,236],[180,237],[336,83],[181,238],[179,239],[338,240],[337,241],[2110,83],[177,242],[334,36],[178,243],[61,36],[63,244],[333,83],[244,83],[2423,245],[617,246],[537,247],[563,248],[564,249],[562,36],[520,36],[530,250],[526,251],[529,252],[572,253],[553,36],[555,254],[575,254],[554,255],[531,36],[528,256],[521,257],[568,258],[523,259],[525,260],[567,36],[565,259],[524,36],[527,257],[522,36],[535,36],[916,261],[915,36],[82,36],[62,36],[492,262],[480,263],[481,264],[734,265],[665,266],[890,267],[669,268],[659,36],[735,269],[712,270],[737,271],[661,269],[660,36],[732,272],[670,273],[695,274],[702,275],[671,275],[672,275],[673,276],[701,277],[674,278],[689,275],[675,279],[676,279],[677,275],[678,275],[679,276],[680,275],[703,280],[681,275],[682,275],[683,281],[684,275],[685,275],[686,281],[687,276],[688,275],[690,282],[691,281],[692,275],[693,276],[694,275],[727,283],[723,284],[700,285],[739,286],[696,287],[697,285],[724,288],[715,289],[725,290],[722,291],[720,292],[726,293],[719,294],[731,295],[721,296],[733,297],[728,298],[717,299],[699,300],[698,285],[738,301],[718,302],[729,36],[730,303],[662,304],[793,305],[740,306],[778,307],[891,308],[744,309],[745,309],[746,310],[747,309],[743,311],[748,312],[749,313],[750,314],[751,309],[799,315],[892,316],[752,309],[754,317],[755,308],[757,318],[758,319],[759,319],[760,310],[761,309],[762,309],[763,319],[764,310],[765,310],[766,319],[767,309],[768,308],[769,309],[770,310],[771,320],[756,321],[772,309],[773,310],[774,309],[775,309],[776,309],[777,309],[897,322],[893,323],[741,324],[804,325],[742,326],[780,327],[781,324],[894,328],[794,329],[798,330],[796,331],[789,332],[895,333],[896,334],[797,335],[788,336],[792,337],[795,338],[779,269],[800,339],[753,269],[787,340],[785,341],[783,342],[782,324],[801,343],[802,36],[803,344],[784,302],[790,36],[791,345],[899,346],[900,347],[901,348],[898,349],[711,350],[667,351],[714,269],[713,352],[716,353],[786,354],[852,355],[830,356],[836,357],[805,357],[806,357],[807,358],[835,359],[808,360],[823,357],[809,361],[810,361],[811,357],[812,357],[813,362],[814,357],[837,363],[815,357],[816,357],[817,364],[818,357],[819,357],[820,364],[821,358],[822,357],[824,365],[825,364],[826,357],[827,358],[828,357],[829,357],[849,366],[841,367],[855,368],[831,369],[832,370],[844,371],[838,372],[848,373],[840,374],[847,375],[846,376],[851,377],[839,378],[853,379],[850,380],[845,381],[834,382],[833,370],[854,383],[843,384],[842,385],[704,386],[706,387],[705,386],[707,386],[709,388],[708,389],[710,390],[668,391],[888,392],[856,393],[881,394],[885,395],[884,396],[857,397],[886,398],[877,399],[878,400],[879,400],[880,401],[865,402],[873,403],[883,404],[889,405],[858,406],[859,404],[861,407],[868,408],[872,409],[870,410],[874,411],[862,412],[866,413],[871,414],[887,415],[869,416],[867,417],[863,418],[882,419],[860,420],[876,421],[864,302],[875,422],[666,302],[663,423],[664,424],[736,36],[971,425],[973,426],[972,427],[970,428],[969,36],[2179,83],[982,429],[964,430],[2173,431],[980,432],[979,433],[957,434],[981,36],[959,435],[963,436],[948,437],[947,36],[958,438],[945,438],[949,439],[960,440],[961,441],[944,36],[950,442],[953,443],[956,444],[952,445],[954,446],[951,36],[955,434],[962,447],[946,36],[983,448],[2174,449],[70,450],[425,451],[430,35],[432,452],[202,453],[230,454],[408,455],[225,456],[213,36],[194,36],[200,36],[398,457],[261,458],[201,36],[367,459],[235,460],[236,461],[332,462],[395,463],[350,464],[402,465],[403,466],[401,467],[400,36],[399,468],[232,469],[203,470],[282,36],[283,471],[198,36],[214,472],[204,473],[266,472],[263,472],[187,472],[228,474],[227,36],[407,475],[417,36],[193,36],[308,476],[309,477],[303,83],[453,36],[311,36],[312,166],[304,478],[459,479],[457,480],[452,36],[394,481],[393,36],[451,482],[305,83],[346,483],[344,484],[454,36],[458,36],[456,485],[455,36],[345,486],[446,487],[449,488],[273,489],[272,490],[271,491],[462,83],[270,492],[255,36],[465,36],[2171,493],[2170,36],[468,36],[467,83],[469,494],[183,36],[404,495],[405,496],[406,497],[216,36],[192,498],[182,36],[324,83],[185,499],[323,500],[322,501],[313,36],[314,36],[321,36],[316,36],[319,502],[315,36],[317,503],[320,504],[318,503],[199,36],[190,36],[191,472],[245,505],[246,506],[243,507],[241,508],[242,509],[238,36],[330,166],[352,166],[424,510],[433,511],[437,512],[411,513],[410,36],[258,36],[470,514],[420,515],[306,516],[307,517],[298,518],[288,36],[329,519],[289,520],[331,521],[326,522],[325,36],[327,36],[343,523],[412,524],[413,525],[291,526],[295,527],[286,528],[390,529],[419,530],[265,531],[368,532],[188,533],[418,534],[184,456],[239,36],[247,535],[379,536],[237,36],[378,537],[71,36],[373,538],[215,36],[284,539],[369,36],[189,36],[248,36],[377,540],[197,36],[253,541],[294,542],[409,543],[293,36],[376,36],[240,36],[381,544],[382,545],[195,36],[384,546],[386,547],[385,548],[218,36],[375,533],[388,549],[374,550],[380,551],[206,36],[209,36],[207,36],[211,36],[208,36],[210,36],[212,552],[205,36],[360,553],[359,36],[365,554],[361,555],[364,556],[363,556],[366,554],[362,555],[252,557],[353,558],[416,559],[472,36],[441,560],[443,561],[290,36],[442,562],[414,524],[471,563],[310,524],[196,36],[292,564],[249,565],[250,566],[251,567],[281,568],[389,568],[267,568],[354,569],[268,569],[234,570],[233,36],[358,571],[357,572],[356,573],[355,574],[415,575],[302,576],[340,577],[301,578],[335,579],[339,580],[397,581],[396,582],[392,583],[349,584],[351,585],[348,586],[387,587],[342,36],[429,36],[341,588],[391,36],[254,589],[287,495],[285,590],[256,591],[259,592],[466,36],[257,593],[260,593],[427,36],[426,36],[428,36],[464,36],[262,594],[300,83],[69,36],[347,595],[231,36],[220,596],[296,36],[435,83],[445,597],[280,83],[439,166],[279,598],[422,599],[278,597],[186,36],[447,600],[276,83],[277,83],[269,36],[219,36],[275,601],[274,602],[217,603],[297,214],[264,214],[383,36],[371,604],[370,36],[431,36],[328,605],[299,83],[423,606],[64,83],[67,607],[68,608],[65,83],[66,36],[229,609],[224,610],[223,36],[222,611],[221,36],[421,612],[434,613],[436,614],[438,615],[2172,616],[440,617],[444,618],[478,619],[448,619],[477,620],[450,621],[460,622],[461,623],[463,624],[473,625],[476,498],[475,36],[474,626],[491,36],[582,45],[918,36],[487,627],[484,36],[485,627],[486,628],[489,629],[488,630],[510,631],[508,632],[509,633],[497,634],[498,632],[505,635],[496,636],[501,637],[511,36],[502,638],[507,639],[513,640],[512,641],[495,642],[503,643],[504,644],[499,645],[506,631],[500,646],[658,647],[932,648],[931,649],[2100,650],[2099,36],[543,651],[542,652],[372,245],[494,36],[518,36],[516,653],[515,36],[514,36],[517,654],[606,36],[603,36],[604,36],[612,655],[605,36],[607,656],[608,647],[609,36],[610,36],[611,36],[614,657],[613,36],[627,658],[616,659],[628,36],[615,660],[622,661],[620,36],[624,662],[625,663],[626,36],[623,36],[629,664],[640,665],[637,36],[639,666],[638,667],[641,668],[642,669],[643,670],[644,671],[636,672],[657,673],[634,674],[645,675],[646,676],[635,677],[647,36],[621,678],[632,679],[648,36],[649,36],[631,36],[630,36],[652,680],[650,680],[653,680],[654,681],[651,681],[656,682],[633,683],[655,684],[573,36],[532,36],[58,36],[59,36],[10,36],[11,36],[13,36],[12,36],[2,36],[14,36],[15,36],[16,36],[17,36],[18,36],[19,36],[20,36],[21,36],[3,36],[22,36],[23,36],[4,36],[24,36],[28,36],[25,36],[26,36],[27,36],[29,36],[30,36],[31,36],[5,36],[32,36],[33,36],[34,36],[35,36],[6,36],[39,36],[36,36],[37,36],[38,36],[40,36],[7,36],[41,36],[46,36],[47,36],[42,36],[43,36],[44,36],[45,36],[8,36],[51,36],[48,36],[49,36],[50,36],[52,36],[9,36],[53,36],[54,36],[55,36],[57,36],[56,36],[1,36],[98,685],[108,686],[97,685],[118,687],[89,688],[88,689],[117,626],[111,690],[116,691],[91,692],[105,693],[90,694],[114,695],[86,696],[85,626],[115,697],[87,698],[92,699],[93,36],[96,699],[83,36],[119,700],[109,701],[100,702],[101,703],[103,704],[99,705],[102,706],[112,626],[94,707],[95,708],[104,709],[84,647],[107,701],[106,699],[110,36],[113,710],[580,711],[539,712],[552,713],[545,714],[546,36],[540,712],[538,36],[544,715],[550,36],[548,36],[549,36],[547,36],[551,716],[570,717],[579,718],[569,719],[574,720],[561,721],[558,722],[566,36],[559,251],[968,723],[966,724],[577,725],[576,726],[557,727],[967,728],[556,36],[560,729],[578,730],[974,731],[571,36],[1002,732],[994,733],[1001,734],[996,36],[997,36],[995,735],[998,736],[989,36],[990,36],[991,732],[993,737],[999,36],[1000,738],[992,739],[2036,740],[2035,741],[2037,36],[2034,36],[493,742],[976,36],[977,36],[978,36],[975,743],[2177,744],[2178,745],[2379,746],[2192,747],[2381,748],[2180,749],[2181,750],[2382,751],[2383,752],[2385,753],[1004,754],[1008,755],[1007,756],[1020,757],[1019,758],[1022,759],[1021,760],[1024,761],[1023,762],[1025,763],[1018,758],[1027,764],[1026,765],[1030,766],[1032,767],[1031,768],[1035,769],[1034,770],[1029,771],[1037,772],[1036,771],[1038,773],[1042,774],[1041,775],[1028,771],[1044,776],[1043,36],[1047,777],[1046,778],[1048,779],[1045,780],[1053,781],[1052,782],[1051,783],[1050,782],[1056,784],[1055,785],[1058,786],[1057,787],[1061,788],[1060,771],[1062,789],[1059,790],[1066,791],[1065,792],[1067,793],[1064,792],[1063,794],[2176,795],[2033,796],[2040,797],[2386,798],[2041,799],[2189,800],[2188,801],[2377,802],[2190,803],[2384,802],[2380,83],[2182,804],[2187,805],[2184,806],[2191,807],[2183,808],[2175,809],[2378,810],[2186,811],[2376,812],[2043,813],[2373,814],[2193,815],[2372,816],[2369,817],[2370,818],[2371,819],[2194,820],[2375,821],[2042,83],[2374,816],[2091,822],[2092,823],[2112,824],[2113,825],[2075,826],[2077,827],[2078,83],[2079,828],[2080,827],[2083,829],[2084,830],[2085,83],[2086,828],[2088,831],[2089,828],[2090,827],[943,832],[2127,833],[2128,834],[2129,835],[2130,836],[2131,837],[2132,838],[2133,838],[2134,839],[2135,840],[2136,841],[2137,842],[2138,843],[2139,844],[2140,845],[2141,846],[2142,847],[2143,848],[2144,849],[2145,850],[2146,851],[2147,852],[2148,853],[2149,854],[2150,855],[2151,856],[2152,857],[2076,36],[1006,433],[1017,858],[2153,859],[2154,860],[2155,861],[1009,862],[1003,863],[1010,864],[1005,865],[942,866],[2115,867],[2114,36],[2117,868],[2118,869],[1012,36],[1011,609],[1033,869],[1039,870],[2119,869],[2087,816],[2158,871],[941,872],[940,873],[2032,816],[2120,874],[2039,874],[2121,875],[2122,869],[2123,869],[1040,876],[2116,36],[1049,36],[1014,877],[1054,609],[1013,36],[2124,36],[2125,869],[1015,878],[2081,36],[1016,879],[2126,36],[965,880],[2162,881],[2163,882],[2164,883],[2165,798],[2166,884],[2159,885],[2160,886],[2161,887],[2038,888],[2082,889],[2169,890],[2167,36],[2168,891],[519,892],[581,893],[1709,894],[1711,895],[1710,896],[1708,897],[1704,36],[1712,898],[1706,899],[1176,36],[1177,900],[1178,901],[1183,902],[1179,901],[1182,36],[1180,36],[1181,36],[1702,36],[1707,903],[1703,903],[1714,904],[1713,36],[2006,905],[1746,906],[1744,907],[1747,908],[1748,909],[1742,906],[1743,910],[1749,36],[1741,907],[1750,911],[2004,912],[2005,913],[2017,914],[2008,915],[2009,916],[2010,916],[2011,916],[2012,916],[2013,916],[2014,916],[2015,916],[2016,916],[2007,917],[2021,918],[2019,919],[2018,920],[2020,921],[1167,922],[1150,923],[1130,924],[1086,925],[1084,926],[1085,926],[1138,927],[1166,928],[1126,926],[1148,929],[1128,924],[1153,930],[1129,924],[1080,931],[1079,926],[1152,932],[1170,933],[1155,934],[1132,935],[1133,924],[1127,926],[1141,936],[1140,928],[1134,934],[1089,931],[1088,926],[1146,928],[1071,926],[1143,928],[1164,936],[1159,937],[1157,938],[1169,924],[1131,36],[1676,170],[1655,939],[1665,940],[1662,940],[1663,941],[1647,941],[1661,941],[1642,940],[1648,942],[1651,943],[1656,944],[1644,942],[1645,941],[1658,945],[1643,942],[1649,942],[1652,942],[1657,942],[1659,941],[1646,941],[1660,941],[1654,946],[1650,947],[1675,948],[1653,949],[1664,950],[1641,941],[1666,941],[1667,941],[1668,941],[1669,941],[1670,941],[1671,941],[1672,941],[1673,941],[1674,941],[2023,36],[2024,951],[1068,36],[1070,952],[1137,926],[1074,953],[1073,954],[1072,36],[1611,955],[1069,36],[1272,956],[1251,957],[1348,36],[1252,958],[1188,956],[1189,956],[1190,956],[1191,956],[1192,956],[1193,956],[1194,956],[1195,956],[1196,956],[1197,956],[1198,956],[1199,956],[1200,956],[1201,956],[1202,956],[1203,956],[1204,956],[1205,956],[1184,36],[1206,956],[1207,956],[1208,36],[1209,956],[1210,956],[1212,956],[1211,956],[1213,956],[1214,956],[1215,956],[1216,956],[1217,956],[1218,956],[1219,956],[1220,956],[1221,956],[1222,956],[1223,956],[1224,956],[1225,956],[1226,956],[1227,956],[1228,956],[1229,956],[1230,956],[1231,956],[1233,956],[1234,956],[1235,956],[1232,956],[1236,956],[1237,956],[1238,956],[1239,956],[1240,956],[1241,956],[1242,956],[1243,956],[1244,956],[1245,956],[1246,956],[1247,956],[1248,956],[1249,956],[1250,956],[1253,959],[1254,956],[1255,956],[1256,960],[1257,961],[1258,956],[1259,956],[1260,956],[1261,956],[1264,956],[1262,956],[1263,956],[1186,36],[1265,956],[1266,956],[1267,956],[1268,956],[1269,956],[1270,956],[1271,956],[1273,962],[1274,956],[1275,956],[1276,956],[1278,956],[1277,956],[1279,956],[1280,956],[1281,956],[1282,956],[1283,956],[1284,956],[1285,956],[1286,956],[1287,956],[1288,956],[1290,956],[1289,956],[1291,956],[1292,36],[1293,36],[1294,36],[1441,963],[1295,956],[1296,956],[1297,956],[1298,956],[1299,956],[1300,956],[1301,36],[1302,956],[1303,36],[1304,956],[1305,956],[1306,956],[1307,956],[1308,956],[1309,956],[1310,956],[1311,956],[1312,956],[1313,956],[1314,956],[1315,956],[1316,956],[1317,956],[1318,956],[1319,956],[1320,956],[1321,956],[1322,956],[1323,956],[1324,956],[1325,956],[1326,956],[1327,956],[1328,956],[1329,956],[1330,956],[1331,956],[1332,956],[1333,956],[1334,956],[1335,956],[1336,36],[1337,956],[1338,956],[1339,956],[1340,956],[1341,956],[1342,956],[1343,956],[1344,956],[1345,956],[1346,956],[1347,956],[1349,964],[1537,965],[1442,958],[1444,958],[1445,958],[1446,958],[1447,958],[1448,958],[1443,958],[1449,958],[1451,958],[1450,958],[1452,958],[1453,958],[1454,958],[1455,958],[1456,958],[1457,958],[1458,958],[1459,958],[1461,958],[1460,958],[1462,958],[1463,958],[1464,958],[1465,958],[1466,958],[1467,958],[1468,958],[1469,958],[1470,958],[1471,958],[1472,958],[1473,958],[1474,958],[1475,958],[1476,958],[1478,958],[1479,958],[1477,958],[1480,958],[1481,958],[1482,958],[1483,958],[1484,958],[1485,958],[1486,958],[1487,958],[1488,958],[1489,958],[1490,958],[1491,958],[1493,958],[1492,958],[1495,958],[1494,958],[1496,958],[1497,958],[1498,958],[1499,958],[1500,958],[1501,958],[1502,958],[1503,958],[1504,958],[1505,958],[1506,958],[1507,958],[1508,958],[1510,958],[1509,958],[1511,958],[1512,958],[1513,958],[1515,958],[1514,958],[1516,958],[1517,958],[1518,958],[1519,958],[1520,958],[1521,958],[1523,958],[1522,958],[1524,958],[1525,958],[1526,958],[1527,958],[1528,958],[1185,956],[1529,958],[1530,958],[1532,958],[1531,958],[1533,958],[1534,958],[1535,958],[1536,958],[1350,956],[1351,956],[1352,36],[1353,36],[1354,36],[1355,956],[1356,36],[1357,36],[1358,36],[1359,36],[1360,36],[1361,956],[1362,956],[1363,956],[1364,956],[1365,956],[1366,956],[1367,956],[1368,956],[1373,966],[1371,967],[1372,968],[1370,969],[1369,956],[1374,956],[1375,956],[1376,956],[1377,956],[1378,956],[1379,956],[1380,956],[1381,956],[1382,956],[1383,956],[1384,36],[1385,36],[1386,956],[1387,956],[1388,36],[1389,36],[1390,36],[1391,956],[1392,956],[1393,956],[1394,956],[1395,962],[1396,956],[1397,956],[1398,956],[1399,956],[1400,956],[1401,956],[1402,956],[1403,956],[1404,956],[1405,956],[1406,956],[1407,956],[1408,956],[1409,956],[1410,956],[1411,956],[1412,956],[1413,956],[1414,956],[1415,956],[1416,956],[1417,956],[1418,956],[1419,956],[1420,956],[1421,956],[1422,956],[1423,956],[1424,956],[1425,956],[1426,956],[1427,956],[1428,956],[1429,956],[1430,956],[1431,956],[1432,956],[1433,956],[1434,956],[1435,956],[1436,956],[1187,970],[1437,36],[1438,36],[1439,36],[1440,36],[1723,971],[1725,972],[1721,973],[1729,974],[1727,975],[1722,976],[1724,976],[1720,976],[1728,36],[1726,976],[1719,36],[1745,36],[1135,926],[1800,977],[1799,36],[1794,36],[1763,36],[1773,978],[1772,979],[1798,980],[1755,981],[1754,982],[1753,983],[1807,984],[1751,36],[1786,985],[1784,977],[1785,986],[1768,36],[1774,987],[1769,988],[1790,989],[1770,977],[1783,36],[1767,990],[1789,991],[1787,36],[1788,992],[1797,993],[1780,994],[1781,994],[1782,995],[1779,36],[1766,996],[1777,997],[1771,998],[1778,36],[1765,999],[1801,36],[1805,1000],[1752,36],[1803,36],[1804,1000],[1762,1001],[1759,981],[1760,36],[1757,1000],[1792,1002],[1761,1003],[1796,1004],[1791,1005],[1795,1006],[1758,996],[1756,996],[1793,1007],[1776,1008],[1775,1009],[1764,1010],[1806,36],[1802,36],[2001,1011],[2003,1012],[1998,1013],[1997,1014],[2000,1015],[2002,1016],[1999,1017],[1596,1018],[1557,1019],[1556,1020],[1595,1021],[1597,1022],[1538,926],[1539,926],[1540,926],[1584,1023],[1563,1024],[1564,1024],[1565,1025],[1566,926],[1567,926],[1568,1026],[1541,1027],[1569,926],[1570,926],[1571,1028],[1572,926],[1573,926],[1574,926],[1575,926],[1576,926],[1577,926],[1542,1027],[1578,926],[1579,926],[1580,1027],[1581,926],[1582,926],[1583,1028],[1598,1025],[1585,1018],[1586,1018],[1587,1018],[1588,1018],[1589,1018],[1590,36],[1591,1018],[1592,1029],[1599,1030],[1600,1031],[1609,1032],[1554,1033],[1543,1034],[1544,1018],[1545,1034],[1546,1018],[1547,36],[1548,1018],[1549,36],[1550,1018],[1551,1018],[1552,1018],[1553,1018],[1594,1018],[1561,1035],[1562,1036],[1558,1037],[1559,1038],[1593,1039],[1555,926],[1560,1040],[1601,1034],[1602,1034],[1608,1041],[1603,1018],[1604,1034],[1605,1034],[1606,1018],[1607,1034],[1635,1042],[1638,1043],[1634,1042],[1636,1044],[1637,1042],[1633,1045],[1632,36],[1092,36],[1108,1046],[1109,1046],[1110,1046],[1124,1047],[1111,1048],[1112,1048],[1113,1049],[1105,1050],[1103,1051],[1094,36],[1098,1052],[1102,1053],[1100,1054],[1107,1055],[1095,1056],[1096,1057],[1097,1058],[1099,1059],[1101,1060],[1104,1061],[1106,1062],[1114,1048],[1115,1048],[1116,1048],[1117,1046],[1118,1048],[1119,1048],[1093,1048],[1120,36],[1122,1063],[1121,1048],[1123,1046],[1996,1064],[1969,36],[1947,1065],[1945,1065],[1995,1066],[1960,1067],[1959,1067],[1860,1068],[1811,1069],[1967,1068],[1968,1068],[1970,1070],[1971,1068],[1972,1071],[1871,1072],[1973,1068],[1944,1068],[1974,1068],[1975,1073],[1976,1068],[1977,1067],[1978,1074],[1979,1068],[1980,1068],[1981,1068],[1982,1068],[1983,1067],[1984,1068],[1985,1068],[1986,1068],[1987,1068],[1988,1075],[1989,1068],[1990,1068],[1991,1068],[1992,1068],[1993,1068],[1810,1066],[1813,1071],[1814,1071],[1815,1071],[1816,1071],[1817,1071],[1818,1071],[1819,1071],[1820,1068],[1822,1076],[1823,1071],[1821,1071],[1824,1071],[1825,1071],[1826,1071],[1827,1071],[1828,1071],[1829,1071],[1830,1068],[1831,1071],[1832,1071],[1833,1071],[1834,1071],[1835,1071],[1836,1068],[1837,1071],[1838,1071],[1839,1071],[1840,1071],[1841,1071],[1842,1071],[1843,1068],[1845,1077],[1844,1071],[1846,1071],[1847,1071],[1848,1071],[1849,1071],[1850,1075],[1851,1068],[1852,1068],[1866,1078],[1854,1079],[1855,1071],[1856,1071],[1857,1068],[1858,1071],[1859,1071],[1861,1080],[1862,1071],[1863,1071],[1864,1071],[1865,1071],[1867,1071],[1868,1071],[1869,1071],[1870,1071],[1872,1081],[1873,1071],[1874,1071],[1875,1071],[1876,1068],[1877,1071],[1878,1082],[1879,1082],[1880,1082],[1881,1068],[1882,1071],[1883,1071],[1884,1071],[1889,1071],[1885,1071],[1886,1068],[1887,1071],[1888,1068],[1890,1071],[1891,1071],[1892,1071],[1893,1071],[1894,1071],[1895,1071],[1896,1068],[1897,1071],[1898,1071],[1899,1071],[1900,1071],[1901,1071],[1902,1071],[1903,1071],[1904,1071],[1905,1071],[1906,1071],[1907,1071],[1908,1071],[1909,1071],[1910,1071],[1911,1071],[1912,1071],[1913,1083],[1914,1071],[1915,1071],[1916,1071],[1917,1071],[1918,1071],[1919,1071],[1920,1068],[1921,1068],[1922,1068],[1923,1068],[1924,1068],[1925,1071],[1926,1071],[1927,1071],[1928,1071],[1946,1084],[1994,1068],[1931,1085],[1930,1086],[1954,1087],[1953,1088],[1949,1089],[1948,1088],[1950,1090],[1939,1091],[1937,1092],[1952,1093],[1951,1090],[1938,36],[1940,1094],[1853,1095],[1809,1096],[1808,1071],[1943,36],[1935,1097],[1936,1098],[1933,36],[1934,1099],[1932,1071],[1941,1100],[1812,1101],[1961,36],[1962,36],[1955,36],[1958,1067],[1957,36],[1963,36],[1964,36],[1956,1102],[1965,36],[1966,36],[1929,1103],[1942,1104],[1705,36],[1075,36],[1738,1105],[1732,1106],[1736,1107],[1733,36],[2022,1108],[2026,1109],[1737,1105],[2025,1110],[1739,1105],[1740,1111],[1734,36],[1731,36],[1730,1112],[1628,1113],[1686,1114],[1685,36],[1684,1115],[1682,1116],[1716,1113],[1717,1117],[1616,1118],[1620,1119],[1689,1120],[1688,1121],[1687,1122],[1617,1113],[1691,1123],[1639,1124],[1640,1125],[1678,1126],[1680,1127],[1679,1128],[1681,1129],[1677,1130],[1619,1131],[1621,1113],[1683,1123],[1700,1132],[1718,1133],[1624,1116],[1614,1134],[1622,1116],[1618,1135],[1626,1113],[1690,1136],[1699,1137],[1695,1138],[1696,1139],[1697,1140],[1698,1141],[1694,1142],[1693,1143],[1692,1144],[1615,1145],[1625,1146],[1715,1147],[1630,1148],[1629,1134],[1623,1149],[1631,1150],[1627,1151],[1168,1152],[1151,1153],[1163,1154],[1087,1155],[1083,1154],[1172,1156],[1077,1157],[1610,1158],[1082,1113],[1139,1159],[1612,1160],[1149,1161],[1154,1162],[1125,1163],[1613,1164],[1078,1113],[1081,1165],[1171,1166],[1173,1134],[1156,1167],[1142,1168],[1136,1169],[1090,1170],[1174,1161],[1091,1125],[1147,1171],[1144,1172],[1175,1113],[1165,1173],[1145,1113],[1160,1174],[1162,1175],[1158,1176],[2029,1177],[1161,1178],[1735,926],[2028,1179],[2027,926],[2031,1180],[1701,36],[1076,1181],[2030,1125],[2424,36]],"affectedFilesPendingEmit":[2390,2391,2394,2393,2395,2392,2396,2397,2398,2399,2400,2402,2403,2404,2401,2405,2408,2409,2407,2410,2411,2406,2412,2414,2413,2416,2415,2417,2418,2420,2419,2422,2421,2389,2388,482,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,585,602,902,903,904,905,583,584,906,907,908,909,910,911,912,913,914,483,493,976,977,978,975,2177,2178,2379,2192,2381,2180,2181,2382,2383,2385,1004,1008,1007,1020,1019,1022,1021,1024,1023,1025,1018,1027,1026,1030,1032,1031,1035,1034,1029,1037,1036,1038,1042,1041,1028,1044,1043,1047,1046,1048,1045,1053,1052,1051,1050,1056,1055,1058,1057,1061,1060,1062,1059,1066,1065,1067,1064,1063,2176,2033,2040,2386,2041,2189,2188,2377,2190,2384,2380,2182,2187,2184,2191,2183,2175,2378,2186,2376,2043,2373,2193,2372,2369,2370,2371,2194,2375,2042,2374,2091,2092,2112,2113,2075,2077,2078,2079,2080,2083,2084,2085,2086,2088,2089,2090,943,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2076,1006,1017,2153,2154,2155,1009,1003,1010,1005,942,2115,2114,2117,2118,1012,1011,1033,1039,2119,2087,2158,941,940,2032,2120,2039,2121,2122,2123,1040,2116,1049,1014,1054,1013,2124,2125,1015,2081,1016,2126,965,2162,2163,2164,2165,2166,2159,2160,2161,2038,2082,2169,519,581],"version":"5.9.3"} \ No newline at end of file diff --git a/claude_code_docs/plans/chart-improvements.md b/claude_code_docs/plans/chart-improvements.md new file mode 100644 index 00000000..e65f5953 --- /dev/null +++ b/claude_code_docs/plans/chart-improvements.md @@ -0,0 +1,1142 @@ +# Chart Improvements Plan -- Best-in-Class Quality for Every Widget Type + +**Date**: 2026-03-22 +**Author**: Claude Opus (planning agent) +**Scope**: All 18 chart/widget types across `component/` and `app/` packages +**Effort Estimate**: ~6-8 sprints (3-4 months), 35+ issues + +--- + +## Table of Contents + +1. [Summary](#summary) +2. [Architecture Decisions](#architecture-decisions) +3. [Cross-Cutting Improvements](#cross-cutting-improvements) +4. [Per-Chart-Type Analysis](#per-chart-type-analysis) + - [Bar Chart](#1-bar-chart) + - [Line Chart](#2-line-chart) + - [Pie Chart](#3-pie-chart) + - [Single Value](#4-single-value) + - [Table (DataGrid)](#5-table-datagrid) + - [Graph (Neo4j NVL)](#6-graph-neo4j-nvl) + - [Map (Leaflet)](#7-map-leaflet) + - [JSON Viewer](#8-json-viewer) + - [Markdown](#9-markdown) + - [iFrame](#10-iframe) + - [Gauge](#11-gauge) + - [Radar](#12-radar) + - [Sankey](#13-sankey) + - [Sunburst](#14-sunburst) + - [Treemap](#15-treemap) + - [Form Widget](#16-form-widget) + - [Parameter Widgets](#17-parameter-widgets) +5. [Testing Strategy](#testing-strategy) +6. [Risks](#risks) +7. [Suggested GitHub Issues](#suggested-github-issues) + +--- + +## Summary + +This plan audits every chart and widget type in NeoBoard against ECharts best practices, competitor feature sets (Grafana, Metabase, Apache Superset), and modern UX standards. Each chart type receives analysis across seven dimensions: current state, library best practices, UX improvements, click actions, rule-based styling, accessibility, and missing features. + +The improvements are organized into three tiers: +- **Tier 1 (High Impact / Low Effort)**: DataZoom for bar/line, export to CSV/PNG, tooltip improvements, keyboard navigation +- **Tier 2 (Medium Impact / Medium Effort)**: Advanced click actions (drill-down, multi-parameter), markLine/markPoint annotations, heatmap table cells, map clustering/heatmap layer +- **Tier 3 (High Impact / High Effort)**: Brush selection, dashboard-level cross-filtering bus, graph path highlighting, real-time streaming + +--- + +## Architecture Decisions + +### AD-1: DataZoom as a shared BaseChart feature +DataZoom (scroll-to-zoom on data axis) should be a shared option in `base-chart.tsx` via a `enableDataZoom` prop, not duplicated per chart. This keeps bundle size constant and provides a consistent interaction pattern. + +**Affected files**: +- `component/src/charts/base-chart.tsx` -- add `enableDataZoom` prop +- `component/src/charts/types.ts` -- add to `BaseChartProps` +- `component/src/components/composed/chart-options-schema.ts` -- add shared option +- Every ECharts chart component that builds its own `EChartsOption` + +### AD-2: Export functionality at the WidgetCard level +CSV and PNG export buttons belong in the `WidgetCard` header (next to refresh), not inside individual chart components. The chart instance exposes `getDataURL()` for image export; CSV export uses the raw data from `CardContainer`. + +**Affected files**: +- `component/src/components/composed/widget-card.tsx` -- add export actions +- `app/src/components/card-container.tsx` -- pass raw data + chart ref up + +### AD-3: Enhanced click action types +Current click actions support `set-parameter`, `navigate-to-page`, and the combination. We should add: +- `open-url` -- navigate to an external URL with template placeholders +- `drill-down` -- auto-navigate to a child page with context parameters +- `multi-parameter` -- set multiple parameters from different fields in one click + +**Affected files**: +- `app/src/lib/db/schema.ts` -- extend `ClickAction` type +- `app/src/lib/resolve-click-action.ts` -- handle new types +- `app/src/components/widget-editor-modal.tsx` -- UI for configuring new types + +### AD-4: Tooltip formatter factory +Instead of each chart defining its own tooltip, create a shared `buildTooltip()` utility that respects number formatting, prefix/suffix, and unit configuration. This ensures consistent tooltip UX across all ECharts chart types. + +**Affected files**: +- `component/src/charts/chart-utils.ts` -- new `buildTooltipFormatter()` function +- All ECharts chart components + +### AD-5: Accessibility layer enhancement +ECharts has a built-in `aria` component that generates screen-reader descriptions. We already enable it with `aria.enabled: true` and support decal patterns via `colorblindMode`. We should enhance this with: +- Custom `aria.label.description` templates per chart type +- Keyboard navigation via `keyboardNavigation` (ECharts v5.4+) +- High-contrast mode option (separate from colorblind mode) + +**Affected files**: +- `component/src/charts/base-chart.tsx` -- enhanced aria config +- `component/src/components/composed/chart-options-schema.ts` -- new accessibility options + +--- + +## Cross-Cutting Improvements + +### CC-1: DataZoom for axis-based charts (bar, line) [S] + +**Current state**: No data zoom. Users with >20 categories see cramped axis labels. + +**Proposed change**: Add `dataZoom` option to `chart-options-schema.ts` for bar and line charts. When enabled, renders both an `inside` (mouse wheel/pinch) and `slider` DataZoom component. + +**Files to modify**: +- `component/src/components/composed/chart-options-schema.ts`: + ```ts + // Before: barOptions and lineOptions have no dataZoom entry + // After: add to both arrays: + { key: "enableDataZoom", label: "Enable Data Zoom", type: "boolean", default: false, category: "Interaction", description: "Allow scrolling and zooming on the data axis for large datasets." } + ``` +- `component/src/charts/bar-chart.tsx`: Add `enableDataZoom` prop; when true, add `dataZoom: [{ type: 'inside' }, { type: 'slider', height: 20, bottom: 4 }]` to the ECharts option. +- `component/src/charts/line-chart.tsx`: Same pattern. +- `app/src/components/chart-renderer.tsx`: Pass `enableDataZoom` from settings. + +**Tests**: +- `component/src/charts/__tests__/bar-chart.test.tsx`: Test that dataZoom config appears in ECharts options when enabled. +- `component/src/charts/__tests__/line-chart.test.tsx`: Same. + +### CC-2: Export to CSV and PNG [M] + +**Current state**: No export. Users screenshot manually. + +**Proposed change**: Add export dropdown to `WidgetCard` header (next to refresh button). Two options: +- "Export as PNG" -- uses ECharts `getDataURL()` or `html2canvas` for non-ECharts widgets +- "Export as CSV" -- converts raw data array to CSV string, triggers download + +**Files to modify**: +- `component/src/components/composed/widget-card.tsx`: Add `onExportPng` and `onExportCsv` callback props; render download icon with dropdown. +- `app/src/components/card-container.tsx`: Implement `handleExportPng` (via chart ref) and `handleExportCsv` (from raw data). +- `app/src/lib/export-utils.ts` (new): Helper functions `dataToCsv(records)` and `downloadFile(content, filename, mime)`. + +**Tests**: +- `app/src/lib/__tests__/export-utils.test.ts`: Unit tests for CSV generation, edge cases (special chars, nested objects). +- `component/src/components/composed/__tests__/widget-card.test.tsx`: Test export buttons render when callbacks provided. + +### CC-3: Consistent empty state with action hints [S] + +**Current state**: `buildEmptyDataOption()` shows "No data" text in the center. No guidance. + +**Proposed change**: Enhance empty states per chart type with helpful hints (e.g., "Your query returned no rows" for data charts, "Query must return lat/lng columns" for map). + +**Files to modify**: +- `component/src/charts/chart-utils.ts`: `buildEmptyDataOption(hint?: string)` parameter. +- Each chart component: Pass chart-specific hint string. + +**Tests**: +- `component/src/charts/__tests__/bar-chart.test.tsx`: Verify hint text in empty state. + +### CC-4: Shared tooltip formatter with number formatting [S] + +**Current state**: Each chart hardcodes its tooltip format string. No support for user-configured number formats. + +**Proposed change**: Create `buildTooltipFormatter(options: { prefix?, suffix?, numberFormat? })` in `chart-utils.ts`. Charts that support tooltip customization use this factory. + +**Files to modify**: +- `component/src/charts/chart-utils.ts`: New `buildTooltipFormatter()` function. +- `component/src/charts/bar-chart.tsx`, `line-chart.tsx`, `pie-chart.tsx`: Use the formatter. +- `component/src/components/composed/chart-options-schema.ts`: Add `tooltipFormat` option for bar/line/pie. + +**Tests**: +- `component/src/charts/__tests__/chart-utils.test.ts` (new or extend existing): Unit tests for formatter output. + +### CC-5: Keyboard navigation and high-contrast mode [M] + +**Current state**: `colorblindMode` toggles decal patterns. No keyboard navigation. No high-contrast mode. + +**Proposed change**: +1. Add `keyboardNavigation` prop to `BaseChart`. When enabled, set `keyboardNavigation: { enabled: true }` in ECharts options. +2. Add `highContrast` option that applies a high-contrast theme override (thicker borders, larger labels, stronger contrast ratios). +3. Add these to `accessibilityOptions` in chart-options-schema. + +**Files to modify**: +- `component/src/charts/base-chart.tsx`: Handle `keyboardNavigation` and `highContrast` props. +- `component/src/charts/types.ts`: Add to `BaseChartProps`. +- `component/src/components/composed/chart-options-schema.ts`: Add options. + +**Tests**: +- `component/src/charts/__tests__/base-chart.test.tsx`: Verify keyboard nav config propagated. + +### CC-6: MarkLine / MarkPoint annotations for bar and line [M] + +**Current state**: No reference lines, thresholds, or annotations. + +**Proposed change**: Add `referenceLines` array option for bar and line charts. Each entry has `{ type: 'average' | 'min' | 'max' | 'value', value?: number, label?: string, color?: string }`. Rendered as ECharts `markLine`. + +**Files to modify**: +- `component/src/charts/bar-chart.tsx`: Accept `referenceLines` prop, map to `markLine.data`. +- `component/src/charts/line-chart.tsx`: Same. +- `component/src/components/composed/chart-options-schema.ts`: New `referenceLines` option (type: "text", JSON array). +- `app/src/components/chart-renderer.tsx`: Parse and pass. + +**Tests**: +- `component/src/charts/__tests__/bar-chart.test.tsx`: Test markLine appears in ECharts config. +- `component/src/charts/__tests__/line-chart.test.tsx`: Same. + +--- + +## Per-Chart-Type Analysis + +### 1. Bar Chart + +**Current state -- what works well**: +- Vertical/horizontal orientation +- Stacked mode for multi-series +- Show values on bars +- Responsive (compact mode below 300px) +- Rule-based styling with per-bar coloring +- Color palette selection and colorblind mode +- Emphasis focus on series hover + +**ECharts best practices not yet implemented**: +- `dataZoom` for large category lists (see CC-1) +- `markLine` for average/min/max reference lines (see CC-6) +- `selectedMode` for click-to-select bars +- `barBorderRadius` for rounded bars (modern look) +- `animation` config (entrance animation type/duration) +- `large: true` mode for >5000 data points (progressive rendering) +- Gradient fill via `LinearGradient` + +**UX improvements**: + +| # | Improvement | Effort | Priority | +|---|-----------|--------|----------| +| B-1 | Rounded bar corners option | S | P2 | +| B-2 | Y-axis auto-scaling with padding (nice round numbers) | S | P1 | +| B-3 | Category axis label rotation (auto/45/90) | S | P1 | +| B-4 | Negative value handling (diverging bar chart) | M | P2 | +| B-5 | Top-N filtering (show only top 10, group rest as "Other") | M | P3 | +| B-6 | Percentage mode (normalize stacked to 100%) | S | P2 | + +**Click actions (current + proposed)**: +- Current: `onClick` fires ECharts click event -> resolves to set-parameter or navigate. +- Proposed: Add `selectedMode: 'single'` support. Clicking a bar highlights it and triggers cross-filter. Clicking again deselects. + +**Rule-based styling**: +- Current: `resolveItemColor()` applies per-bar color from styling rules. +- Proposed: Support `borderColor` and `borderWidth` as styling targets. Add "gradient" color option (two-color interpolation based on value). + +**Accessibility**: +- Current: `colorblindMode` decal patterns, `aria.enabled`. +- Proposed: Add `aria.label.description` template: "Bar chart showing {seriesCount} series across {categoryCount} categories." + +**Missing vs competitors**: +- Grafana: Threshold bands (colored horizontal zones), annotations timeline +- Metabase: Auto-binning for continuous data, goal line +- Superset: Time-series bars with rolling average overlay + +**Files to modify**: +- `component/src/charts/bar-chart.tsx` +- `component/src/components/composed/chart-options-schema.ts` (barOptions) +- `app/src/components/chart-renderer.tsx` + +--- + +### 2. Line Chart + +**Current state -- what works well**: +- Smooth/stepped/straight line modes +- Area fill +- Multi-series with legend +- Data point markers toggle +- Line width customization +- Responsive compact mode + +**ECharts best practices not yet implemented**: +- `dataZoom` for time-series scrolling (see CC-1) +- `markLine` for goal/threshold reference lines (see CC-6) +- `markPoint` for min/max annotations +- `markArea` for colored bands (e.g., "danger zone" above 90%) +- `sampling: 'lttb'` for large datasets (Largest-Triangle-Three-Buckets downsampling) +- `connectNulls` option for handling missing data points +- `endLabel` for labeling the end of each series (Grafana-style) + +**UX improvements**: + +| # | Improvement | Effort | Priority | +|---|-----------|--------|----------| +| L-1 | Connect nulls option | S | P1 | +| L-2 | End labels (series name at line end) | S | P2 | +| L-3 | Min/max auto-annotations (markPoint) | S | P2 | +| L-4 | Time-axis detection and formatting | M | P1 | +| L-5 | Dual Y-axis support (two different scales) | M | P2 | +| L-6 | Large dataset sampling (LTTB at >1000 points) | S | P1 | + +**Click actions**: +- Current: Same as bar chart. +- Proposed: Click on a data point should include the x-value and series name in the click payload. Support `markArea` click for range selection. + +**Rule-based styling**: +- Current: `resolveItemColor()` colors entire line based on last value. +- Proposed: Per-segment coloring using ECharts `visualMap` (color line segments based on value ranges -- e.g., green below threshold, red above). + +**Accessibility**: +- Proposed: `aria.label.description` template: "Line chart with {seriesCount} series over {pointCount} data points." + +**Missing vs competitors**: +- Grafana: Threshold bands, alert state coloring, stacked percentage area, log scale Y-axis +- Metabase: Trend line overlay, goal line +- Superset: Predictive analytics overlay, annotation layers + +**Files to modify**: +- `component/src/charts/line-chart.tsx` +- `component/src/components/composed/chart-options-schema.ts` (lineOptions) +- `app/src/components/chart-renderer.tsx` + +--- + +### 3. Pie Chart + +**Current state -- what works well**: +- Donut mode +- Rose/Nightingale mode +- Label positioning (outside/inside/center) +- Percentage display +- Sort by value +- Scrollable legend + +**ECharts best practices not yet implemented**: +- `selectedMode: 'single'` for click-to-select slice +- `selectedOffset` for pulling out selected slice +- `padAngle` for gaps between slices (ECharts v5.5+) +- `minShowLabelAngle` to hide labels for tiny slices +- `labelLayout` for collision avoidance + +**UX improvements**: + +| # | Improvement | Effort | Priority | +|---|-----------|--------|----------| +| P-1 | Top-N slices with "Other" grouping | M | P1 | +| P-2 | Selected slice "pull out" on click | S | P2 | +| P-3 | Min-angle label hiding (auto-hide tiny slice labels) | S | P1 | +| P-4 | Center text for donut (total value or custom label) | S | P1 | +| P-5 | Semi-circle (half-donut) mode | S | P3 | +| P-6 | Nested donut (two-level hierarchy) | L | P3 | + +**Click actions**: +- Current: ECharts click -> set-parameter with `name` field. +- Proposed: `selectedMode: 'single'` -- clicking a slice visually selects it (pull-out) AND triggers the cross-filter. + +**Rule-based styling**: +- Current: Per-slice color from `resolveItemColor()`. +- Proposed: Support `borderColor` and `borderWidth` per slice. Support "highlight" target that controls the emphasis glow color. + +**Accessibility**: +- Proposed: `aria.label.description`: "Pie chart with {sliceCount} slices. Largest: {name} at {percent}%." + +**Missing vs competitors**: +- Grafana: N/A (pie is basic in Grafana) +- Metabase: "Other" grouping for small slices, percentage on hover +- Superset: Nested donut, label auto-adjustment + +**Files to modify**: +- `component/src/charts/pie-chart.tsx` +- `component/src/components/composed/chart-options-schema.ts` (pieOptions) +- `app/src/components/chart-renderer.tsx` + +--- + +### 4. Single Value + +**Current state -- what works well**: +- Title, prefix, suffix +- Number formatting (plain, comma, compact, percent) +- Font size options (sm/md/lg/xl) +- Trend indicator (up/down/neutral arrow) +- Rule-based styling for text color and background color +- Loading and error states + +**UX improvements**: + +| # | Improvement | Effort | Priority | +|---|-----------|--------|----------| +| SV-1 | Sparkline below the value (mini line/bar from secondary query) | L | P2 | +| SV-2 | Icon option (show an icon from lucide next to value) | S | P3 | +| SV-3 | Decimal places configuration | S | P1 | +| SV-4 | Animate value changes (count-up animation) | M | P2 | +| SV-5 | Goal progress indicator (value / goal as progress bar) | M | P2 | +| SV-6 | Comparison row (current vs previous with delta) | M | P1 | + +**Click actions**: +- Current: `supportsClickAction: false` in registry. +- Proposed: Enable click action. Clicking the entire card should trigger set-parameter or navigate. The value itself becomes the parameter value. + +**Rule-based styling**: +- Current: Text color and background color from rules. +- Proposed: Add "icon" target (change trend arrow color), add "border" target (border color changes with value). + +**Accessibility**: +- Current: Uses semantic HTML (``, `

`). +- Proposed: Add `role="status"` to the value element. Add `aria-live="polite"` so screen readers announce value changes. + +**Missing vs competitors**: +- Grafana: Sparkline, color mode (value/background/none), threshold-based icon +- Metabase: Comparison to previous period with auto-calculation +- Superset: Big number with trendline + +**Files to modify**: +- `component/src/charts/single-value-chart.tsx` +- `component/src/components/composed/chart-options-schema.ts` (singleValueOptions) +- `app/src/lib/chart-registry.ts`: Change `supportsClickAction` to `true` for `single-value` + +--- + +### 5. Table (DataGrid) + +**Current state -- what works well**: +- TanStack Table with sorting, filtering, pagination +- Dynamic page sizing from container height +- Row selection with checkbox +- Cell click actions with highlighted clickable cells +- Per-column filters (faceted) +- Global search +- Row styling via `getRowStyle` +- Custom toolbar/pagination render props + +**UX improvements**: + +| # | Improvement | Effort | Priority | +|---|-----------|--------|----------| +| T-1 | Column resizing (drag column borders) | M | P1 | +| T-2 | Column reordering (drag-and-drop headers) | M | P2 | +| T-3 | Cell-level conditional formatting (heatmap colors) | M | P1 | +| T-4 | Frozen/pinned columns (first N columns fixed on scroll) | M | P2 | +| T-5 | Column type detection and formatting (auto-format dates, numbers, URLs) | M | P1 | +| T-6 | Expandable rows (nested data preview) | L | P3 | +| T-7 | Multi-column sort | S | P2 | +| T-8 | CSV export from table toolbar | S | P1 | +| T-9 | Row count display in footer | S | P1 | + +**Click actions**: +- Current: Cell-click fires `{ _clickedColumn, _clickedValue }`. Multi-rule resolution by `triggerColumn`. +- Proposed: Add "row click" mode (entire row sets multiple parameters from different columns). Add "link column" mode (render a specific column as a clickable link that opens a URL). + +**Rule-based styling**: +- Current: `backgroundColor` and `textColor` targets. Applied per-row via `getRowStyle`. +- Proposed: + - Cell-level styling (color individual cells, not just entire rows) + - Heatmap mode (auto-color numeric columns on a gradient scale) + - Data bar (render a mini progress bar inside numeric cells, like Excel) + - Icon column (show icon based on value -- checkmark, X, warning) + +**Accessibility**: +- Current: Standard `` semantics with `aria-label` on checkboxes. +- Proposed: Add `aria-sort` on sorted columns. Add `aria-rowcount` and `aria-colcount` on the table. + +**Missing vs competitors**: +- Grafana: Cell heatmap, data bars, link columns, column width persistence +- Metabase: Mini bar charts in cells, row-level detail drill-down, pivot tables +- Superset: Pivot table mode, cell bars, cross-filtering on cell click + +**Files to modify**: +- `component/src/components/composed/data-grid.tsx` +- `component/src/components/composed/data-grid-column-header.tsx` +- `component/src/components/composed/chart-options-schema.ts` (tableOptions) +- `app/src/components/table-renderer.tsx` +- `app/src/lib/chart-registry.ts` (add cell-level styling targets) + +--- + +### 6. Graph (Neo4j NVL) + +**Current state -- what works well**: +- NVL rendering with force/circular/hierarchical layouts +- Label color palette (theme-aware) +- Overlay toolbar (fit, layout switcher, label settings) +- Node selection, double-click expansion +- Right-click context menu support +- Caption map per label type +- Node size scaling +- Physics toggle + +**UX improvements**: + +| # | Improvement | Effort | Priority | +|---|-----------|--------|----------| +| G-1 | Node property panel (click node -> side panel with all properties) | M | P1 | +| G-2 | Edge labels on hover (reduce clutter, show on hover) | S | P2 | +| G-3 | Path highlighting (click two nodes -> highlight shortest path) | L | P2 | +| G-4 | Node grouping/clustering by label | L | P3 | +| G-5 | Search nodes (text search within visible nodes) | M | P2 | +| G-6 | Node size by property (map a numeric property to node radius) | M | P2 | +| G-7 | Edge thickness by property (map weight to edge width) | S | P2 | +| G-8 | Zoom controls (+ / - buttons) | S | P1 | +| G-9 | Node count indicator in toolbar | S | P1 | +| G-10 | Fullscreen mode | S | P1 | + +**Click actions**: +- Current: Node click toggles selection; double-click fires `onExpandRequest`. Click action resolves `nodeId`. +- Proposed: Support click action on edges (set parameter from relationship type/property). Support right-click context menu with "expand neighbors", "hide node", "pin node". + +**Rule-based styling**: +- Current: `supportsStyling: false`. +- Proposed: Enable rule-based styling: + - Node color by property value (e.g., status = "active" -> green) + - Node border/badge by label + - Edge color by relationship type + +**Accessibility**: +- Current: Buttons have `aria-label`. Canvas-based rendering is inherently inaccessible. +- Proposed: Add text-based summary above the graph: "{nodeCount} nodes, {edgeCount} relationships across {labelCount} label types." Add keyboard support: Tab to focus toolbar, arrow keys to navigate nodes (requires NVL API). + +**Missing vs competitors**: +- Neo4j Browser/Bloom: Node inspector panel, expand/collapse, undo, path finding +- Grafana Node Graph: Click-to-drill, edge tooltip, stats overlay +- Superset: N/A (no graph) + +**Files to modify**: +- `component/src/charts/graph-chart.tsx` +- `component/src/components/composed/chart-options-schema.ts` (graphOptions) +- `app/src/components/graph-exploration-wrapper.tsx` +- `app/src/lib/chart-registry.ts` (enable styling) + +--- + +### 7. Map (Leaflet) + +**Current state -- what works well**: +- Circle markers with configurable size +- Tile layer presets (OSM, Carto Light, Carto Dark) +- Auto-fit bounds +- Tooltip and popup on click +- Theme-aware tile selection +- Marker size from value +- Cluster markers option +- ResizeObserver for container changes + +**UX improvements**: + +| # | Improvement | Effort | Priority | +|---|-----------|--------|----------| +| M-1 | Heatmap layer (density visualization using leaflet.heat) | M | P2 | +| M-2 | Custom marker icons (by category/label) | M | P3 | +| M-3 | Polyline/polygon support (draw routes or regions) | L | P3 | +| M-4 | Color markers by value (gradient from low to high) | S | P1 | +| M-5 | Legend overlay for marker colors | S | P2 | +| M-6 | Geocoding integration (resolve addresses to lat/lng) | L | P3 | +| M-7 | Draw tools (measure distance, draw area) | L | P3 | +| M-8 | Marker popup customization (template with row data) | M | P2 | + +**Click actions**: +- Current: Marker click fires `{ id, label, lat, lng }`. +- Proposed: Include all row properties in the click payload so any field can be used as a parameter. + +**Rule-based styling**: +- Current: `supportsStyling: false`. +- Proposed: Enable styling: + - Marker color by value (gradient or threshold-based) + - Marker size by value (proportional scaling) + - Marker opacity by value + +**Accessibility**: +- Current: No specific a11y beyond standard HTML. +- Proposed: Add ARIA roles. Add keyboard navigation (Tab through markers, Enter to open popup). Add `aria-label` on the map container: "Map showing {markerCount} locations." + +**Missing vs competitors**: +- Grafana Geomap: Heatmap layer, marker icons, route visualization, threshold coloring +- Metabase: Pin map, grid map, region map (choropleth) +- Superset: deck.gl 3D maps, choropleth, scatter plot on map + +**Files to modify**: +- `component/src/charts/map-chart.tsx` +- `component/src/components/composed/chart-options-schema.ts` (mapOptions) +- `app/src/components/chart-renderer.tsx` +- `app/src/lib/chart-registry.ts` (enable styling) + +--- + +### 8. JSON Viewer + +**Current state -- what works well**: +- Recursive tree rendering with expand/collapse +- Syntax coloring for types (string, number, boolean, null) +- Configurable initial expand depth +- Item count for collapsed arrays/objects +- Hover highlight + +**UX improvements**: + +| # | Improvement | Effort | Priority | +|---|-----------|--------|----------| +| J-1 | Search/filter within JSON (highlight matching keys/values) | M | P1 | +| J-2 | Copy individual value on click | S | P1 | +| J-3 | Copy path to clipboard (e.g., "data[0].name") | S | P2 | +| J-4 | Expand all / Collapse all buttons | S | P1 | +| J-5 | Line numbers | S | P3 | +| J-6 | Diff view (compare two query results) | L | P3 | + +**Click actions**: Not applicable (supportsClickAction: false). Keep as-is. + +**Rule-based styling**: Not applicable. Keep as-is. + +**Accessibility**: +- Current: Click to expand/collapse with no keyboard support. +- Proposed: Add `role="tree"` and `role="treeitem"`. Arrow keys to navigate, Enter/Space to expand/collapse. Focus indicator on current node. + +**Missing vs competitors**: +- Grafana: N/A (no dedicated JSON panel) +- Metabase: N/A +- Superset: N/A + +**Files to modify**: +- `component/src/components/composed/json-viewer.tsx` +- `component/src/components/composed/chart-options-schema.ts` (jsonOptions) + +--- + +### 9. Markdown + +**Current state -- what works well**: +- Custom parser (no heavy dependency) +- Headings, bold, italic, code, links, images, lists, blockquotes, fenced code, strikethrough, horizontal rules +- XSS protection (escapeHtml before inline processing) +- URL validation (blocks javascript: and other dangerous schemes) +- Parameter substitution ($param_xxx) +- Empty state with guidance + +**UX improvements**: + +| # | Improvement | Effort | Priority | +|---|-----------|--------|----------| +| MD-1 | Tables (GFM-style pipe tables) | M | P1 | +| MD-2 | Task lists (- [x] checkbox syntax) | S | P2 | +| MD-3 | Auto-linking bare URLs | S | P2 | +| MD-4 | Syntax highlighting in code blocks (consider lightweight highlight.js integration) | M | P3 | +| MD-5 | Math/LaTeX support (KaTeX) | L | P3 | + +**Click actions**: Not applicable. Keep as-is. + +**Rule-based styling**: Not applicable. Keep as-is. + +**Accessibility**: +- Current: Standard HTML semantics. +- Proposed: Ensure all generated HTML uses proper heading hierarchy. Add `lang` attribute on code blocks. + +**Missing vs competitors**: +- Grafana Text panel: HTML mode, full markdown, variable interpolation +- Metabase: Text card with limited formatting +- Superset: Markdown component with full CommonMark + +**Files to modify**: +- `component/src/components/composed/markdown-widget.tsx` + +--- + +### 10. iFrame + +**Current state -- what works well**: +- URL validation (http/https only) +- Sandbox policy with safe token allowlist +- `referrerPolicy: "no-referrer"` for privacy +- Lazy loading +- Empty state for missing/invalid URL +- Parameter substitution in URL + +**UX improvements**: + +| # | Improvement | Effort | Priority | +|---|-----------|--------|----------| +| IF-1 | Loading indicator while iframe loads | S | P1 | +| IF-2 | Refresh button (reload iframe content) | S | P2 | +| IF-3 | Height auto-sizing (listen for postMessage from child) | M | P3 | +| IF-4 | Error state when iframe fails to load (onerror handler) | S | P1 | + +**Click actions**: Not applicable. Keep as-is. + +**Rule-based styling**: Not applicable. Keep as-is. + +**Accessibility**: +- Current: `title` prop for `