From 0801820a238b649e6cfe9bae9e63ffa90bd6e527 Mon Sep 17 00:00:00 2001 From: Shaurya Saria Date: Sun, 4 Oct 2026 22:33:30 +0530 Subject: [PATCH] docs: publish source-reviewed architecture case study --- README.md | 42 ++++++++ TODO.md | 5 + docs/architecture/README.md | 104 ++++++++++++++++++ docs/architecture/coverage.md | 168 ++++++++++++++++++++++++++++++ docs/architecture/detail.mmd | 34 ++++++ docs/architecture/detail.png | Bin 0 -> 103943 bytes docs/architecture/overview.mmd | 34 ++++++ docs/architecture/overview.png | Bin 0 -> 40849 bytes docs/architecture/publication.md | 11 ++ docs/architecture/review.json | 43 ++++++++ docs/architecture/verification.md | 107 +++++++++++++++++++ docs/architecture/verify.mjs | 86 +++++++++++++++ 12 files changed, 634 insertions(+) create mode 100644 docs/architecture/README.md create mode 100644 docs/architecture/coverage.md create mode 100644 docs/architecture/detail.mmd create mode 100644 docs/architecture/detail.png create mode 100644 docs/architecture/overview.mmd create mode 100644 docs/architecture/overview.png create mode 100644 docs/architecture/publication.md create mode 100644 docs/architecture/review.json create mode 100644 docs/architecture/verification.md create mode 100644 docs/architecture/verify.mjs diff --git a/README.md b/README.md index c3fb131..8b3848e 100644 --- a/README.md +++ b/README.md @@ -369,3 +369,45 @@ Public `status` is one of: `matched` · `no_match` · `not_configured` · `inval ## License [MIT](LICENSE) — free to use and modify. + + +## Source-reviewed architecture overview + +```mermaid +%% Source-reviewed overview; 2026-10-03; commit 2671ccab1802f330083f122561e7ab6c2718dd9f +%% Solid edges: core flow. Dashed edges: optional or separately invoked services. +%%{init: {"theme":"base","securityLevel":"loose","fontFamily":"Arial, sans-serif","themeVariables":{"background":"#0b1220","primaryColor":"#17283d","primaryTextColor":"#edf4ff","primaryBorderColor":"#71c4ec","lineColor":"#9fadc1","secondaryColor":"#213548","tertiaryColor":"#17283d","edgeLabelBackground":"#0b1220","clusterBkg":"#101d2e","clusterBorder":"#456783","fontSize":"17px"},"flowchart":{"htmlLabels":true,"curve":"linear","nodeSpacing":35,"rankSpacing":50}}}%% +flowchart TD + I["Microphone / file input"] + W["CLI + Flask entry points"] + N["Validate + normalize audio"] + D["Matcher + fallback dispatch"] + L["Local hashes + fingerprint index"] + P["Optional remote providers"] + F["CLI FFT diagnostic"] + R["Status / result presentation"] + ART["External album-art URLs"] + I --> W + R -. optional album art .-> ART + W --> N + N --> D + N -.->|CLI diagnostic before matching| F + D -->|configured index| L + D -.->|configured audio/fingerprint request| P + L --> R + P -.->|provider response| R + N -->|invalid audio status| R + click ART "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/display.py" "Open source" + click I "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/main.py" "Open source" + click W "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/web/app.py" "Open source" + click N "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/recorder.py" "Open source" + click D "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/matcher.py" "Open source" + click L "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/fingerprint.py" "Open source" + click P "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/matcher.py" "Open source" + click F "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/fft_analyze.py" "Open source" + click R "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/web/static/app.js" "Open source" + classDef core fill:#17283d,stroke:#71c4ec,stroke-width:1.6px,color:#edf4ff; + class I,W,N,D,L,P,F,R,ART core; +``` + +See the [architecture case study](docs/architecture/README.md), [coverage](docs/architecture/coverage.md), and [publication evidence and rendered previews](docs/architecture/publication.md). diff --git a/TODO.md b/TODO.md index 355c210..ba1f16d 100644 --- a/TODO.md +++ b/TODO.md @@ -286,3 +286,8 @@ Record evidence here as work lands: | 2026-07-31 | Matcher correctness slice | Provider adapters now return stable `error_code` values with diagnostic detail; mocked RapidAPI, AudD, and AcoustID success/no-match/HTTP/timeout/malformed-output tests and temporary-WAV cleanup tests were added. | 36 pytest tests passed; branch coverage is 59%; real provider behavior and credentialed smoke tests remain open | | 2026-07-31 | Polishing roadmap | Added an ordered eight-task execution roadmap covering benchmark evidence, audio validation, web ownership, production security, test depth, CI/repository hygiene, documentation reconciliation, and distinctiveness evaluation. | Roadmap recorded; complete one main task at a time | | 2026-07-31 | CI quality-gate slice | `.github/workflows/ci.yml` runs pytest on every push and pull request across Python 3.10–3.12, enforces 50% branch coverage on Python 3.12, and uploads `coverage.xml`. | Workflow structure verified; later PR #4 evidence supersedes the pending remote/Codecov note | + + +## Architecture documentation publication — 2026-10-04 + +Goal: publish source-linked architecture documentation and diagram previews. Scope: README, this backlog and docs/architecture artifacts. Source snapshot: 2671ccab1802f330083f122561e7ab6c2718dd9f; no runtime, dependency, data or deployment changes. Acceptance: pinned inventory/source-map/embedding checks, ten intended negative cases, renderer checks, bounded Jev review, documentation-only commit and remotely verified PR. Jev remains advisory; pre-existing workspace changes are excluded. diff --git a/docs/architecture/README.md b/docs/architecture/README.md new file mode 100644 index 0000000..0e10078 --- /dev/null +++ b/docs/architecture/README.md @@ -0,0 +1,104 @@ +# Audio Recognition: architecture case study + +CLI and Flask inputs share a bounded audio contract and configurable recognition backends. + +Source snapshot: `2671ccab1802f330083f122561e7ab6c2718dd9f`. Reviewed on **2026-10-03**. This describes the selected committed source, excluding unrelated uncommitted work in the canonical checkout. It is not a runtime, provider, deployment or security certification. + +## Overview + +```mermaid +%% Source-reviewed overview; 2026-10-03; commit 2671ccab1802f330083f122561e7ab6c2718dd9f +%% Solid edges: core flow. Dashed edges: optional or separately invoked services. +%%{init: {"theme":"base","securityLevel":"loose","fontFamily":"Arial, sans-serif","themeVariables":{"background":"#0b1220","primaryColor":"#17283d","primaryTextColor":"#edf4ff","primaryBorderColor":"#71c4ec","lineColor":"#9fadc1","secondaryColor":"#213548","tertiaryColor":"#17283d","edgeLabelBackground":"#0b1220","clusterBkg":"#101d2e","clusterBorder":"#456783","fontSize":"17px"},"flowchart":{"htmlLabels":true,"curve":"linear","nodeSpacing":35,"rankSpacing":50}}}%% +flowchart TD + I["Microphone / file input"] + W["CLI + Flask entry points"] + N["Validate + normalize audio"] + D["Matcher + fallback dispatch"] + L["Local hashes + fingerprint index"] + P["Optional remote providers"] + F["CLI FFT diagnostic"] + R["Status / result presentation"] + ART["External album-art URLs"] + I --> W + R -. optional album art .-> ART + W --> N + N --> D + N -.->|CLI diagnostic before matching| F + D -->|configured index| L + D -.->|configured audio/fingerprint request| P + L --> R + P -.->|provider response| R + N -->|invalid audio status| R + click ART "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/display.py" "Open source" + click I "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/main.py" "Open source" + click W "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/web/app.py" "Open source" + click N "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/recorder.py" "Open source" + click D "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/matcher.py" "Open source" + click L "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/fingerprint.py" "Open source" + click P "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/matcher.py" "Open source" + click F "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/fft_analyze.py" "Open source" + click R "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/web/static/app.js" "Open source" + classDef core fill:#17283d,stroke:#71c4ec,stroke-width:1.6px,color:#edf4ff; + class I,W,N,D,L,P,F,R,ART core; +``` + +[Editable Mermaid](overview.mmd). Solid edges show the core flow; dashed edges show optional or separately invoked paths. Diagram connections summarize control/data flow rather than a complete import graph. + +## Main flow + +A user records or uploads audio through the CLI or Flask interface. The shared recorder validates duration and encoding, then normalizes samples. The dispatcher attempts RapidAPI, AcoustID, AudD, then the local matcher, skipping missing configuration and stopping on success or a terminal result: remote provider adapters send audio or derived fingerprints when enabled, while the local backend searches constellation hashes against a configured index. Results become stable public statuses and CLI or browser output. The CLI runs FFT diagnostics before matching and stops on diagnostic failure; the web route omits FFT. + +## Engineering decision + +Use one audio contract and one result contract across CLI, browser and recognition backends. This keeps validation and recovery behavior consistent while allowing provider fallback. The tradeoff is dependence on provider catalogs or a locally prepared fingerprint index rather than guaranteed recognition. + +## Source map + +| Component | Review path | +| --- | --- | +| Microphone / file input | [main.py](../../main.py) | +| CLI + Flask entry points | [web/app.py](../../web/app.py) | +| Validate + normalize audio | [shazam_project/recorder.py](../../shazam_project/recorder.py) | +| Matcher + fallback dispatch | [shazam_project/matcher.py](../../shazam_project/matcher.py) | +| Local hashes + fingerprint index | [shazam_project/fingerprint.py](../../shazam_project/fingerprint.py) | +| Optional remote providers | [shazam_project/matcher.py](../../shazam_project/matcher.py) | +| CLI FFT diagnostic | [shazam_project/fft_analyze.py](../../shazam_project/fft_analyze.py) | +| External album-art URLs | [shazam_project/display.py](../../shazam_project/display.py) | +| Status / result presentation | [web/static/app.js](../../web/static/app.js) | + +## Boundaries and limitations + +- The local matcher needs an index; remote providers need credentials and may receive the submitted audio when invoked. This differs from Launchpad browser-local audio processing. +- FFT output is diagnostic, not the recognition algorithm. Browser history is session-only; product accounts and persistent history are not implemented. +- No recognition accuracy, latency benchmark, credentialed provider result or public deployment was verified here. + +## GitDiagram provenance + +GitDiagram draft dated 2026-09-19 and the existing detailed Mermaid/PNG are retained. The reviewed overview emphasizes shared normalization, provider transmission and diagnostic boundaries. + +[GitDiagram reference](https://gitdiagram.com/icecold009/Audio-Recognition) · [Repository](https://github.com/icecold009/Audio-Recognition) + +The compact overview is a source-reviewed adaptation authored for this snapshot and rendered locally, not an unmodified GitDiagram export. Existing detailed assets remain at [Mermaid](audio-recognition.mmd) and [PNG](audio-recognition.png). + +## Interview explanation + +> The interesting part is the shared audio and result contracts, not an FFT picture. CLI and Flask normalize inputs consistently, and the matcher isolates local fingerprinting from optional provider adapters. Real accuracy still needs a lawful corpus and measured evaluation. + +## Verification and refresh + +Documentation-only acceptance: validate every relative source link and commit-specific diagram link, render Mermaid, inspect the dark PNG for readability, inspect the complete diff, and obtain a bounded Jev diff review. The repository proposal contains no new binary images; separately delivered PNG previews are independently checked because Jev reviews text. Results and Jev coverage are recorded in this task’s delivery report rather than treated as application test evidence. + +After an architecture change, inspect the new source, update this snapshot identifier, regenerate the overview from Mermaid, and recheck links and image appearance. Keep planned integrations explicitly separate from implemented paths. + +## Review status + +Integration is pending warning resolution. Earlier Jev uncertainty has not been accepted or waived. The proposed repository changes are text only, including embedded Mermaid; PNG previews are separate delivery outputs. Source claims describe this committed snapshot. The coverage register accounts for tracked paths and does not prove every execution path or deployed behavior. + +## Detailed coverage + +See [the subsystem diagram and complete tracked-file register](coverage.md) and [editable detail Mermaid](detail.mmd). This supplement records recovery, optional services, delivery boundaries and original-checkout drift beyond the overview. + +[Documentation verification record](verification.md). + +Source clarification: the CLI invokes FFT diagnostics before matching and stops on a diagnostic error. The web match route does not invoke FFT. When artwork is returned, the CLI display and browser can request its external image URL separately from recognition. diff --git a/docs/architecture/coverage.md b/docs/architecture/coverage.md new file mode 100644 index 0000000..e79e8ab --- /dev/null +++ b/docs/architecture/coverage.md @@ -0,0 +1,168 @@ +# Subsystem coverage register + +Snapshot: `2671ccab1802f330083f122561e7ab6c2718dd9f`. The overview is intentionally compact; this detail layer accounts for the selected Git-tracked tree. Inventory coverage is not proof of every behavior, dynamic dependency, ignored file or deployed system. Nodes group modules rather than reproducing every function. Credentials, local datasets and generated dependencies are excluded. + +```mermaid +flowchart TB + %% Solid arrows: runtime/data dependency; dotted arrows: optional, build or local-only boundary. + UI["CLI microphone/PCM and browser capture/upload"] + API["Flask validation, quotas and status/health routes"] + CONVERT["Bounded FFmpeg normalization and temp cleanup"] + DIAG["CLI FFT diagnostic before matching"] + FP["Local constellation fingerprints and index"] + MATCH["Dispatcher: RapidAPI, AcoustID, AudD, then local"] + CONFIG["Runtime configuration and provider policy"] + QUOTA["Atomic Supabase quota schema; in-memory mode"] + TOOLS["Fingerprint index construction and benchmarks"] + RUN["Gunicorn/container and deployment definitions"] + NORM["Shared validated AudioClip normalization"] + REMOTE["RapidAPI / AudD audio; AcoustID fingerprints"] + RESULT["Matched/no-match/not-configured/invalid/error results"] + SUPPORT["Supporting tests, assets, documentation and delivery config"] + ART["External album-art URLs"] + UI --> API + UI -. optional album art .-> ART + UI --> NORM + API --> CONVERT + CONVERT --> NORM + NORM --> MATCH + CONFIG --> API + CONFIG --> MATCH + API --> QUOTA + TOOLS --> FP + RUN -. configured entry .-> API + UI -. CLI diagnostic before matching .-> DIAG + MATCH -. local backend .-> FP + MATCH -. configured remotes .-> REMOTE + MATCH --> RESULT + RESULT --> UI + SUPPORT -. supports .-> UI +``` + +## Flow and boundary notes + +- The CLI captures PCM/WAV; the web upload path normalizes supported formats with bounded FFmpeg execution and temporary-file cleanup. Both paths reach the shared AudioClip normalization and matcher contract. The CLI always performs FFT diagnostics before matching and returns on diagnostic failure. The web match route skips FFT; FFT is not itself the song-identification algorithm. +- The dispatcher attempts RapidAPI, AcoustID, AudD, then the local matcher, skipping unavailable configuration and stopping on a match or other terminal result. It is not local-first. RapidAPI/AudD can receive audio; AcoustID receives derived fpcalc fingerprints. The local backend uses its constellation index. These are separate privacy and network boundaries. +- Status, health and readiness routes differ from recognition success. Quota enforcement can use memory or the atomic Supabase schema. Container/render configuration describes packaging, not verified hosting; benchmark/index scripts are offline tooling. + +## Original checkout differences + +Pre-existing changed paths at audit: `M supabase/config.toml`, `M web/templates/index.html`. This documentation targets the commit above; these unrelated changes remain in the original checkout. + +## File accounting + +69 tracked paths, each assigned exactly once below. Supporting items remain explicit without becoming runtime services. Root dependency/build/CI files and otherwise unassigned support files are in DELIVERY; that bucket must be inspected for misclassified runtime modules. + +### UI: CLI microphone/PCM and browser capture/upload (7) + +- `main.py` +- `shazam_project/display.py` +- `shazam_project/recorder.py` +- `web/static/app.js` +- `web/static/style.css` +- `web/static/typography.css` +- `web/templates/index.html` + +### API: Flask validation, quotas and status/health routes (1) + +- `web/app.py` + +### CONVERT: Bounded FFmpeg normalization and temp cleanup (0) + +External or cross-cutting concept; source is shared with other nodes. + +### DIAG: CLI FFT diagnostic before matching (1) + +- `shazam_project/fft_analyze.py` + +### FP: Local constellation fingerprints and index (1) + +- `shazam_project/fingerprint.py` + +### MATCH: Dispatcher: RapidAPI, AcoustID, AudD, then local (1) + +- `shazam_project/matcher.py` + +### CONFIG: Runtime configuration and provider policy (2) + +- `shazam_project/__init__.py` +- `shazam_project/config.py` + +### QUOTA: Atomic Supabase quota schema; in-memory mode (3) + +- `supabase/.gitignore` +- `supabase/config.toml` +- `supabase/migrations/20260801145213_production_rate_limits.sql` + +### TOOLS: Fingerprint index construction and benchmarks (7) + +- `evaluation/sources.example.csv` +- `scripts/__init__.py` +- `scripts/benchmark.py` +- `scripts/build_fingerprint_index.py` +- `scripts/evaluation.py` +- `scripts/record_benchmark.py` +- `scripts/update_readme.py` + +### RUN: Gunicorn/container and deployment definitions (4) + +- `Dockerfile` +- `compose.yaml` +- `gunicorn.conf.py` +- `render.yaml` +### TEST (16) + +- `tests/__init__.py` +- `tests/conftest.py` +- `tests/test_audio_pipeline.py` +- `tests/test_benchmark.py` +- `tests/test_ci_hardening.py` +- `tests/test_config.py` +- `tests/test_core.py` +- `tests/test_deployment.py` +- `tests/test_display.py` +- `tests/test_fingerprint.py` +- `tests/test_providers.py` +- `tests/test_rate_limits.py` +- `tests/test_recorder.py` +- `tests/test_reproducible_benchmark.py` +- `tests/test_web.py` +- `tests/test_web_pipeline.py` + +### DOC (17) + +- `LICENSE` +- `README.md` +- `TODO.md` +- `docs/01-product-requirements.md` +- `docs/02-technical-requirements.md` +- `docs/03-app-flow.md` +- `docs/04-ui-ux-design-brief.md` +- `docs/05-backend-schema.md` +- `docs/architecture/audio-recognition.mmd` +- `docs/architecture/audio-recognition.png` +- `docs/screenshots/fft-output.png` +- `evaluation/README.md` +- `showcase/audio-recognition/case-study.md` +- `showcase/audio-recognition/diy-shazam-showcase.pptx` +- `showcase/audio-recognition/evidence-checklist.md` +- `showcase/audio-recognition/presentation-outline.md` +- `showcase/audio-recognition/presentation-script.md` + +### ASSET (0) + +None in this snapshot. + +### DELIVERY (9) + +- `.dockerignore` +- `.env.example` +- `.gitattributes` +- `.github/container_smoke_wsgi.py` +- `.github/workflows/ci.yml` +- `.gitignore` +- `pyproject.toml` +- `requirements-dev.txt` +- `requirements.txt` + +Source clarification: the CLI invokes FFT diagnostics before matching and stops on a diagnostic error. The web match route does not invoke FFT. When artwork is returned, the CLI display and browser can request its external image URL separately from recognition. diff --git a/docs/architecture/detail.mmd b/docs/architecture/detail.mmd new file mode 100644 index 0000000..6d0ed7b --- /dev/null +++ b/docs/architecture/detail.mmd @@ -0,0 +1,34 @@ +flowchart TB + %% Solid arrows: runtime/data dependency; dotted arrows: optional, build or local-only boundary. + UI["CLI microphone/PCM and browser capture/upload"] + API["Flask validation, quotas and status/health routes"] + CONVERT["Bounded FFmpeg normalization and temp cleanup"] + DIAG["CLI FFT diagnostic before matching"] + FP["Local constellation fingerprints and index"] + MATCH["Dispatcher: RapidAPI, AcoustID, AudD, then local"] + CONFIG["Runtime configuration and provider policy"] + QUOTA["Atomic Supabase quota schema; in-memory mode"] + TOOLS["Fingerprint index construction and benchmarks"] + RUN["Gunicorn/container and deployment definitions"] + NORM["Shared validated AudioClip normalization"] + REMOTE["RapidAPI / AudD audio; AcoustID fingerprints"] + RESULT["Matched/no-match/not-configured/invalid/error results"] + SUPPORT["Supporting tests, assets, documentation and delivery config"] + ART["External album-art URLs"] + UI --> API + UI -. optional album art .-> ART + UI --> NORM + API --> CONVERT + CONVERT --> NORM + NORM --> MATCH + CONFIG --> API + CONFIG --> MATCH + API --> QUOTA + TOOLS --> FP + RUN -. configured entry .-> API + UI -. CLI diagnostic before matching .-> DIAG + MATCH -. local backend .-> FP + MATCH -. configured remotes .-> REMOTE + MATCH --> RESULT + RESULT --> UI + SUPPORT -. supports .-> UI diff --git a/docs/architecture/detail.png b/docs/architecture/detail.png new file mode 100644 index 0000000000000000000000000000000000000000..717108e6c0da7077581604c8d2b734cfe78de700 GIT binary patch literal 103943 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 SbYnjDJLRO5CCkK3-u(~y*M=Pc literal 0 HcmV?d00001 diff --git a/docs/architecture/overview.mmd b/docs/architecture/overview.mmd new file mode 100644 index 0000000..b678dc7 --- /dev/null +++ b/docs/architecture/overview.mmd @@ -0,0 +1,34 @@ +%% Source-reviewed overview; 2026-10-03; commit 2671ccab1802f330083f122561e7ab6c2718dd9f +%% Solid edges: core flow. Dashed edges: optional or separately invoked services. +%%{init: {"theme":"base","securityLevel":"loose","fontFamily":"Arial, sans-serif","themeVariables":{"background":"#0b1220","primaryColor":"#17283d","primaryTextColor":"#edf4ff","primaryBorderColor":"#71c4ec","lineColor":"#9fadc1","secondaryColor":"#213548","tertiaryColor":"#17283d","edgeLabelBackground":"#0b1220","clusterBkg":"#101d2e","clusterBorder":"#456783","fontSize":"17px"},"flowchart":{"htmlLabels":true,"curve":"linear","nodeSpacing":35,"rankSpacing":50}}}%% +flowchart TD + I["Microphone / file input"] + W["CLI + Flask entry points"] + N["Validate + normalize audio"] + D["Matcher + fallback dispatch"] + L["Local hashes + fingerprint index"] + P["Optional remote providers"] + F["CLI FFT diagnostic"] + R["Status / result presentation"] + ART["External album-art URLs"] + I --> W + R -. optional album art .-> ART + W --> N + N --> D + N -.->|CLI diagnostic before matching| F + D -->|configured index| L + D -.->|configured audio/fingerprint request| P + L --> R + P -.->|provider response| R + N -->|invalid audio status| R + click ART "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/display.py" "Open source" + click I "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/main.py" "Open source" + click W "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/web/app.py" "Open source" + click N "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/recorder.py" "Open source" + click D "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/matcher.py" "Open source" + click L "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/fingerprint.py" "Open source" + click P "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/matcher.py" "Open source" + click F "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/shazam_project/fft_analyze.py" "Open source" + click R "https://github.com/icecold009/Audio-Recognition/blob/2671ccab1802f330083f122561e7ab6c2718dd9f/web/static/app.js" "Open source" + classDef core fill:#17283d,stroke:#71c4ec,stroke-width:1.6px,color:#edf4ff; + class I,W,N,D,L,P,F,R,ART core; diff --git a/docs/architecture/overview.png b/docs/architecture/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f9ec932358d65456a283e318cc83fb3f7b8c29 GIT binary patch literal 40849 zcmc$`bzGG1w>CPqh>D1WAfO=K(yfFbAt2q|rF0Eo&?VgNL!!u){9$8zqlaC`16GO>7)BO z*Y6oWjn$FNdVs9i^^G z`k-Rpn3l@N{Cl_P0?jU8p}EJ)9Q5g-sfh^mB8mIR5dR z<}%;~Mf%q`KX(|4O&<(V*l2R~+^c~Y*(Jm74EAK4%zC%M4IA^_*q%EMSajXe{*uaP znm-m0E-u9mAq$H<|HGik4$XHXe(v}KpTt-6gaI_b&Xs@E+Z|7`_@~)GwtDjQJ^+ z89tYlY|DJGXt7yZ_;t+Ub84v|bX?3iqRc2)?%;>Alh!^19(Dd#Fr!9;qjpc2PUKiw zxaCBv$mQ-b$kaCSn6q*hDyODoOY+#a?Vi~6Kp9_{7PC8v!A_fI^?p_x=e-kXBVfj6 zU5!v<@xq&UpabUhvW_>6&)+|vAzO~BylfKC0)kNg}vK_&*h=qT}yfw%rM2H2%(kn1M@cPb-$`1 z2gL~^C%ZvjP4^ahso>xoreDrV)~=aZ-_@eY^{U$L$FCj^=B)gBt*NI@RE%-{GUC1c zris$83Qf#DZsnqht}poN?U^w5T+<%fxdDCccrC0+cXgn?>hIgEq@-eXRHJQ*S@hi8 z6cwFm3KLgHbO4Z-i&ez2Vn#**PbA>i*^H{Cb8%`uLcyk@c z6Db+c(kz{cLJoXSivO(0UmQ1WM((>K$e8TIVr;PA!l>Dx2d#D#q;ifju zgGYekR+iWHibRR@U6%<9mOV%jh(Nj(BO==3w%??yHzlH;WsVdXI;HPwg~|SU^s$)C z7IPPFLK6eMkytVMq;hd56(h>(A)vux@13S-6{+i;Edc#?r9}gqom18k_bylQsTEB4 z>u6C}8o^U>s8X>MJ7p6dmj*CfBa>(Gx)WuEGqWQ-$LBHuYac59pf8(EeCy9?Z!=9( z%@n1ZUhjEMW3uM3^>x-IQTEf+C~Tl0n#sehR`hm=OUCx{uiaZ_{nO8j!RFN|<9)O( z@J*9zN;qs`x%;kNufd}ye|Yb9sX3H|&@)>6mPGX&_^H58Y?jMIG=DyAeb@^2#Z_~W z{!=r(!5tp11PhKxE8z{=Ac5RoJn}z+H>L-Kjd@%~pPGD&UHwo&lP+2ET&kHn!uozW zbCgFfkAtXdzWzLqF=RijByWCdzg`N3&#vZY#LEO(-`Kl6?fOky9m} z%HD&9&!X^!%keLb-J)oLg_*L)U?jmTt}Rz>ulLd=I23;(C|7D6J7_MzjvKGW96S%_ zX%wh)zhBzWHc0T%op$v1M~+r{A(Bf*O-_4k39PpqAAZqPY4*q+T^&7s_MP<$Xu?BD zJi0h)Z=GZ>lrXU7NB!}f50mIP)BT!XrX${CSGdT_+<5Q!q;1P0)SF1XBPZloU^~2b z?2h{xG0!P|J~E3;F;jgUZx(Z!UaNnfIx7g1H~GNZ-)n_PGKz>QB{Rj1<=w+59$nrt zJi>;>i#@g4vO0AdRlSES-i~tB6;!)icoHkEI~skhrMqJT8daUp^DVU{;g8qyyRJsG z{XX#}-Y7zP-uC8?6Co^)uiSZ&8t0X0&*({`v8Em_sqoEW=C|P2G|jb=lo7k(wa+!J zgEy@O`!6UWCI3+QXExYpw&CGNRfY0xWL=K3tCUq_ds#Vt`UK#w-%X~J)-tv))#>qPmyX?!*H?|6T>2y!Sn5n*nLnhKJ7&qm61)Du zvdVO&FOb26=nZp*!`U`I$HluOVxz0qx^9uX%+NrL_I%7ITU!cO8llfH9eKTjF!N8N z1rltJjNDiRJiC&FDz9>A9qzAZKJq=EPKjLCL?yfnjFkS5Q>{&l9rB&Ao$F}?(xIHI zv)Y($67CzQ@xSfdQ&d5Lqn)6=hU3@1t&QfTJwEGI9;7@O9JdQ9eSC^AgX4~c`T-Y7 zBAz>^zpiyFk|6Q7si~2fhq)+840CIyzxE44n_f^nEFtnq(L5))jvSnz%d0EL%8Of+%g}dnIh4`~o zLm=(~J(>-&obq0(E+RITz=5{YfdW#FA+<)=g&lLkG9B*@f>RYtC}$Q9Uiq$RwPZP4 z_J;l%B@p+4pW7ole|+MT#$1LNNu=(!92Rn06zKJe+;mzUJLd|WZDS&(PTph#gpX!cTjeoMv+sEZY^}ihe8qxfk(p5EfI}_AP+c^IP zVBjzbfpv>IFR}Xg?Voi%@7w2Asr(KWLxW{ueR>G^Q%t^6X1)8<&`032U5Ccj=@qWH zM=-K}^gw9w@rjtp?WAlsU<2lPIP6kT1{{?mXUK?OfThLox~@URvm6&5eCu(d%na@n z(nnl@F?qB7<{B%j`QhgIS?iixZ%Z^*=Lx4NjvaM-d7f_Vfe)H%0Fx(yhj8Zh8 zViOVVAWe*h-hvJM@^1n#$={NaT*?v~xno8`i5g8Zcj_z1Vup5R6qcO7P3NzTjI5`G@*bFqZdPEC zUoQV0gmjRVRBg{eH(l$gglS>BjDdhD_$#D#?R-s|IY zRT}bkZqtOX57PQ-4L4aF!JJ#Z#&cxa75F$j!=NaUa9+Jzdp}wa+5PxUHM6fRQZd)H zQEVz+r-{g=J7D|O@nLRmVrpr2i1sS^D+?{yfNb%oJ82O;AKKH%xb&%6&C74*o2Bgv zpKB$S(6p+@l5yjeOkt5s@=&^xz9^M&Ze zv6&=Muu`eC#+9+Ya%9{S8i}v+vUmSwKvWPtbk;LOtJ*5>s-d_ZOVysA*Y$94$FR6E zgioNhaokbxj~x|@=$H`^z=kp|xF~^^ZC?!kUUa2sj~nk?ASG_+{2Zl;X~3MzMn(O_ zY*uqrJCrdKRm#=H078CA5<>xqbl+Nd!zUbIQmBP;I6VjgXDrD0OI&!Qh|${8dUu%5 znkl_WlbkaTpF-=3=ep!0pS*HZqN;i6tQb(!iXOILt{QntQ#0*O;kpLEvq>?_I^16m zn(Gnt#9PN{iCMS6JlK7+rhsWqHq|OSp&%qUmm{Lz%Pd{2&6U5pku!bce#mdq;O48g zb>cB;$9&OWY8p0N7$1%SIK(_#DA)KagyIEmZq>aiRj=C=Jq+s)Ene?7VwxQqEA{d& z$OxvL$MrP!v$-R~Zij(RM5_%V#JyPEaAQaSE;1Z7Gb-uz^YQe=pJm-g-!xUc+;{j~ zMmM`T`8^mDSEAr%8ns+pxSawZ{y{38cOmX9@GaT$uobU)GCX29oKbX}PN~_(KJtko zm7}&$yn{lx`yJDMkMMx|wwR%2bCw&cQA8(6K_Hy zJ0+j|0sWusKW?bDK5G-*uqL+Gqc4=#2X1`JQgGisJ4Am#SO;g&oscs_{#+MR6Y=^_ z{IFh+i;5d2KKxR|FlJk#zE8__m5XEtRk9vMz1wCRm5hmmsgk?}4T?M}wp5Y*#~$K? zABU@1u*(&J?5V}J{V*eyYFX?Gp;sGc+qXvZ38ecmC0N@-2T1fXo}??G4qlW!})Jv<9gq$l4H&!G6!G)#AXbD0t2Z13PD(<`ma#h-9os+RU(2wM`6OtkRDhFw z<0Qb1%%@Rr786BhNCQW3e3_}jZ(gNfGr0=HKCI$t$)C&N&Hdi=%yWV9t$I0vc};0F ze|81;XbT$Hcv}P))Wzcyb%*GhU;T`}bS146rW4c6+YVjj&?BCnf9DROuw07tmz^HD zNA1-kgDIg4NL?cSk~sU5as-GEB9%nxk3R@qwzwvJ+n68XPcw9i-DLOO>zgIr8Dziu z(>!x!5W8L?Ic|I^2lZ`BcDL#9I|v8Nhc&>m5Kf=bFj^7%wadp}ObH?Wvu{gonw3tb z$o5hmwbg>0$s5o{ok;#n)v8eJI6a52t(k?m%k^u=o7GUPBzyuLxxd96fvqmKJ2kIT;dt1S14cWspJJ_nt)k~8$hv>bF1o~LU4O$OXC`$EYZh9d81dlBk{ev!t zP8N>`sD0j^9q(h;qTJomG*OQftQ78Fg2>&vskNVT@dg!)XTR8`yIHpeQ^k}fau{l$ z5<)tUXIDZqFHmFZU+r+5qQ5x)%_JU6mD4#6_+Ra7{ht%mZi zz3<~_m;@BKN#%+5s;NWUl?!#$t>=`T{AX6H;VU+pSz`bH#U7jvY)3bo6Yi=Q;Y3mzEuc_`sI`j%hVjpmI1~`Aa{4ZU~M-@SN_M(GMz$-4ei$A zCiQJe@4;0r2d&YQpsP7y06LO2b}f+L4p^-97iO&o?10dDWQ z^diHYiD?3P?%@1XibkD?LK^q@`Vqu8$1jiHnH| z32p853$P8>@Cm`fk!Y zv^EjdIi6DeW4>N;nguYSmaST=LUSgx(#;y0hcP0_#N*nPhHui8@?9IJe$Ut86YA>E zK6C$>1=ro61M}zvz+>~BKVl(4Bum`Uz^T(sl%Y?U8ytpQX;M#618b?~eusa=;$@Kb zXe2ZvqxkTN=7(qr5LAU*=23L&N>gAzFOj9=_#|tVX(K1;OE@-A?3JOKWrQr1*)J7X zUm7t>q+})EvI(uI80%j=OFY&~(uf=*`OiR)ax@!oqc~pjKonag^)yNuU&CXSXvYNC zWZ}0VfDv8pnD4%mjw&-BtJY$Y?{8yRNgt(ows8LXq{kc_rFO9P+k$^YG>B3$C6$@F z8&OQA+A(w1<4SZim9_dkw{37B);UAY1aTr5&rK!RgD6ms{mdI@tOXco9QcjA()siW zOzGG;qtTu2_U;=hV5O~9IJmUcvhiXsa6u@dBE?y%ziN_t<(B~s%qQRb%SE#hqc%Bv zWi2UXP|~vmjN?0K5^mLXBCAs*6&}ir`MB8%rH;A@=$hQpj7PqbDvydj{~HM{rrdH? zwD|DyDb48mVR_?KqhjB775{fX%SfU>3to4(H)pAbeGSo{tIg)dR#$g+@>d1RuKCJH z#yy~NB*x1~_m!+#-!-Os9T`_C8u>Y~p8oaRJK}#qS+VAe(PcwXa5v-S(eJ{VQnN>Vri+|H9L4DqKA7b{*Y&0cY_5wUVAm7wDuP| zx*+O-bs@GI)t_@mshR$&3|4SZlx!NIgh2HA*24uDWOFgqGUYrOD?O3;tM!Is>z@s( zrXA_XUIG6_wyCg?;EMMSo0$9RWg&FNC*66buI)K&=*&yf_L??_MlV)OpRYtd${(-HHm z?uv<-T!3JUcP~4&jQ8#Na-8{o{!>&k@&f*lsDyCkU<{Dva+x-+FUFo+6$r=WdBVM0 z@3ajKK5b*=4Ho$ZwnT>>ZDA}elmNRSvohMly8T)okd8fCpKTQ)w#e|rf+=b?z8yLA zJZzvqnHN<2DT;d=B_>50rLuK}>f9`?b*u~DQxu}OPwr+fG)b3XT92>L9(^TE!Y6#?K&06tUsps@64qzB zdes_m&-9F~=h8TaG(_QDx0NG~`5d=|oX9%W)ztKOwyf7P%|e5^roX;-9A%K{%#IQy zz2&~|+wyF5ZQ(kpd=;Aeejc&-%F!R=h8k(W-&=a8HSen&XW*J^@cg~@d{a(j%7PQe zuI_8&y?g)+{#0V6?|N$R2)W4h(j~I>UHp;hOC?%UNaVL6>|i0)(rA*F8Uu)8B;Vx0 z#(1?v#Ptn_@?Cw+494`e)Rt^?%d712gi`IDZiDQ{pE?%{iDBRRCT?+0LoUHwx3!yk z@4o9EJSp|?{1p7DKxhi(a#|)%1Tgh+dF8JMZLNbdwGx?7cpe2&*lGzZkstA)V-8zY zEvYrj9Ho@#Za+D&x_|GWLI|Egj8-0BL?~>^JtL|;Sd%Fu^=P`4M9iaQasx6^;{PhP zaktTtH*WLf?~zXO??-z6W~mD5UVLB2f02#+??S@=Q^wQ(0(H^=zdFUMgkgrbPVn)c z#%?&{00*!f#^qYQi$fRP=g+@)jXO}gEcyHU7pfL0rt`V34qC_3E7qPKE%Bwgs&(vH zUb+VSk%sc8FP$3;^lnLm}^}u zUwN;+LfZcLN&_+>R;gU37I6;7dre88C1vGrE&adktgUS9M4XSWAmw+JVha>%ycR;o z)T_JG-LbT`+^;ij{LGg+ZH7Pe;c`)ZoY3Pv@aW**2HwhAA@Y9okAOA=prJ{;FQEJ9 zjZibpT%NEzbCmj5ef*bKz}Ad&>SP7sC(1>LlzUf?o%wn@;zx{d2VdVBp^C4da8(8AUXNYn$Er$If_VSjR0eZ zud^O~saM4G)5Bg}ibb<$8G;u#Ey;*go`=xO|13uN=C}ze-@~Or^}sTO4Y7p}O%mnl z3Y@?MyAxXJFj z{Z*d7Ow)E~(s&ju^kQq^G{!e?e;yC8#LD^&PTH9J4&OuaTd5b$*FO4TvEtD4 zB`^h3=e7}J#Kva7fwj~trtmO%W##a)h|rX`5A}T=4VtpU`Yqu7g}&ai{mtTZb0%rkx@5;FWK|PR8skWftqVD2Db;r&jXi z)UNiP_%_O5bU0bTX-1R+ZfDe2FjK3rElW?ZFiE%|b2qK=IX>op6O+KsF{! znoGq-#&Q6DjtduCw<63}61mpIh+n-wq|2fAtx&&JR_ExqI8@O1)k;rHD|T8HMRJ=s z8sFbAMDHGD-rqI1nrwZVY z?%Sf}ls%g5#ReWvNrM6>WDybOSt}L_)$f&71Wzd7wbAlYB@1n&dnjw`@C_4Jip3 z+l~49#4;Ud*tL4FJHiExX9-nm$xigPKsII4tc>8jMJvP?0hsy&qi4gu2{FWP&)+-MSl#q?( zyXHvS_rPWN+bm8}F6s<@n>!T*_a)-wA=X>ez~p{B$x5eO0xt8KVf}?8wf2bzShx;T zVqmW{r2c)tZ%l$61;W)7);kAylwv30Nv=O(`Y1l8$In3;qE^=tErMJz^ovU^b$e3e z>Cv6z-koggwZLyFF2cK&F$^=zt}T6nLy=`vg5o)sqV<+Ft-=oY28Y_O^?yY!tG zU#>hV)z+|$%G(CZV+vePOIYSt{S?1Hq)%Uxh^vGG4^5UZ>fT+ZltNs;MU{#y811)G z(#iC3dV%Rbr3No7|L29@@1UFy^uZcTHYG7mHYu^|y?wp>`z?scfh#2OePLp@O_aw7 z=Hp4tT+isi5bI=zM7T1n7ey(b*%KnJKFzEZOx|cfpRWwvI zfF#M9JEfzec!TYkGOTPt`K0|oQdiG!b2DvKyQ+A~m1E5fjVhwdo}Cy>kc{N>Vk&)s1=(lX1E zx^B!q%MMANz2<6mD%I`r+`$@0oxU9T%X$6VEs?xoZsB9`!<#yUbPR4mP&V5^c0sbA zDKZok(|*|WDl~huIM~3lva(;D%hHoN6FK;G$-6d(8V^v@2R;g2J4(_)d>nXt=jM%~ z_R(=eOLSuOwvz|EIi$k$<=&FWep6p1%rgN(kp33EdN*WYS=NtJhtZ3M<82vWeAfd?IrItXMB^JbCacTOzQ6Y-sN+Aq z`K_TsjDt&AO3I75SZIRUPH@oSW~q-uG;O~<_;0Wibj0qK_wUK;8ZOK8Hf@#+Zkq|{ zVo8==68I=PnDk!V{xV^>X~4;S7*VaxW?I37=*5d+MK865W2-aRoTq#RP5IMJvlAWF zk&lb|`>Ba8)hzEYzn3KHO9TcRMpYb@;@#!5mh5#f?z3fFT<|lqjJYZ3#>$8`bFoC? z)9ba=YJS25otBxt$Ne0YzO!Li(cN`t;0+8fBu8(iJ$N0yaGCz|mzfzjYt2PpTVuNB zw*_w{d!2iEwjR@`)VjW>69{ou-icltR{n@m*q^@%%(N0WlUTA5N?oIrXz?RgY%@Skre%}5@(K7>%{bRj+7p0GFfcUR>pB@si3Lsb;nDT>CCHs-G~ zpd&;1H-0W|I*_ascHpN{AI#7jdS|#yB?ik5-mf1u2-!@RapD<4ZPumlek{mWNRH9` zW-_fUwv+Du!%51; z*Y!Sj&)SO3SD{1n*ALVdJTXivEFuSXVl&Jh%LSB?(8g)R{!u2Y;Wl=yVYiptqU%wg zvyw94xqX)bRt0dPuQmW2i^)7pUvO?{u#1a)f;({;9apG~TPONxp%k@X zt=31{5RGt|w2&>SbQ$=PH{}r8pkP^GfrV|Kl007B-NaRGxo)3E+qJv+PS4cOtUI$+ z1w2s$HMSc$1wYrzrZ4Rdgvgr!=D{vb7O_;i?lE~f7(cqo)?@don-iX7 zx>eVrYJFAo9#CKx>Zlz(&j`$e&iC4)8=9IW<}aT%gQJrwFD%4>4ETQm^Nzv%RxE&? z@XhIQ^eES-9Ip3v;^=4w{Fmog1UI|q_`4!g1YBP$61rU zMYKxCX(N(GU#FsVj*%-rz9~uvy@o|TtEi&L?fqT$WK!n9*Qitvh z^hT;urrx-15wkzzbFwhBDU?yw{M%PHaO@8+Sth}N!}k|h_J;AxH#jQ>B69&+wO=R; zl^L?|8JtwNVXbjm*s(I06z5F9C$p>=`_9qgXWpF?C7yaQw<(S|n&R*&t4HoP`kkLH zT9*4F&+qhhK!lN4QHFJ5O1CBl{`O&b*=~A91g8-Ib8`5($d64{@cB z#1sfgku-ZfaCiLb#yIQ?|H=IR81AiyVsv}oYan|f%Y>KC|9z$a15fpqT0@g)xqNFB zl)oamzrisC|9wNwd6K@(`GD$N-DTO#8#?_$Q~0%Ou$1T2UM+kLITiKG9PD4?rQY;O zoxRxWyD0IKDAL#jcFjW@-{4=@!mp5*9>{OwO`i^#3Lc4{zj!^B-GYVwp2E4qbHK&# z6k|Bfjz%abmqN6wFKH8qX^tX{ke2>$!wa1VIvSWFf6OTfPp`8GnQfsx5OZol9<8+S z$#P%)QCgK^0-+t5z8`3nv&iY43TXFxi)}J#1DCf*TlR3=8B4_hff;5I#8K_O$I$E; z$ZT3I2a%(hCvNrM8%o}3;BGaWENBEje@wdXvDJEsi!n^AIT{=(r|2s+7;P|6g;uQ zq8Y|D)fU) zqI(0(t$Q8trLKBmHqp7RLIOGWgz!~l8(RYMdh2I^45d~`UapyBleSKH73a728!725 ziHYR6S(Am)|DtKeowft1@p>UQ@A7XGA?MF?L0|%3_c`iqn^G=e7YB)GH9qH|605e< zKrV87BZR00FJBs+g)!&(!epa|3N44f+)Vi z8NqtrZ=x0wRt}hEa!99$?%y9Xv$iX*n>Mo+IeUQ`%lk3?_sJ~= zn-_5#(R<asEqOy6ZzsupXH< z?K#o@%=FpWaAS0N-eY)dd>eS7?9pNsRjONO1%C$t2#|{0*pe7=H_M$$UAqzFi!Chi zyQs2!c~CJ&cu{(p)^s(FDIpNst_zu20SI&Q8HNN|Oh)v7q;>u$>c~$SIPR?M7uYeU zuV-dwFxLh#ovPwCIRL{f(YdW>Q2&FZMmC7v%kxn)-)}$G0jMfUc6Z~*IIO=? zm?rv3(Wu$9v-|D`G*vRw+mI)F-+h)ANJ`uacs8>W>>^7Mn-(@CQIlW~FVV>@I3I8) z?FZ7m&)NUNnSqmz6$zJ}{7|H!DW7vis5k2zNsPG>5{{nN*2q+3VMG7oi1os;^;t+{ zmC*RM>sK1xN<6cQEI(yjKBd4Vi*43cJREO&n~Mre6Tbh)xJFh@YvyqWhtO+#cgN8^ zqY?V3;^cZPL3)*e8EUWJl3y5V^<__u>g{I3nVL+-@1B4cxFsWF(4+mT!LbZ{6YF}7 z+%!i1SXuhMG7ev?Ed?A*Ic$7M#+Q5!Qu5*WYi^?HWFxBP)N@Fy2st7laQqi&D`tJV z;Ro0;aQ*oA^UaN>eU`ljL{EOLg-mMPz|GgrHXF;)&(CgQ+o2WSm&9-><+%?vIWkX~ zheQj04uotpBhS==WS2$SDt5Gmivj%FO?zm21}jLos>9;$u=8$+qSCbcJ<!|4(mV+2rhK*(w-ZAn%LkQ6&(N{gfXduj^-c@b&_bf;v19`vX9!&}D8 zDTUKS{HJ;ovd(LeInD3;Yc`3Ti;Ag2Y{u==kBS9K+@8#Rca4T1ZMRHuITSeP;>o+W z1C|O(2Kxk#RCG>v*dO~ha9rDddkJ#BKAp z?sWh6&#QxlhI)^R|0NS;_w_1su?zuv2kEJrzAL+(*J^qJ?+77`Zdc9!B-5q&w|}>L+o=6`HaEWc`$Gt8%xi-um}wjz z34L|bhdjc)`{MivAH3{$+0EO%vmfDpzDMOt3A;-@R7~Pu45T4-dO#d7cmwmdKmN0Y zFdxL+gmy36X6iIX!0&Z^D8wUK(0NGwBGXUhpZAStU4a|cy0o8Tok1&thYU!T%QJkQ zJM%TW8yf%IqU(w-+qI;;qkm`7UAQNca{VSGXDL>R{q$5EFsIjm8NO`F`iN^~<+R4x z@sZgBQqD@y5zKm!B@k%LL`eI+n_hLT>JC#zh2oVeI&1bKA0Epz7HgtnLP{{D{IAcC zK98w`;v`<%q2oK#C%sF4MQ%@$mV@5^*xq|@xFHVvs)GLQ96x_i&x4ll@viS7P4uPXrWR&E6TKL? z4Aus>iMMP4SG>8gq4uwRfujP?EcuH6jtD5PUd7T+x}D&r5`bvPOjN_J8CbxE2akdJ z*Xiuo@4UD35)I9z>60E)z*gghf~>wj_1H;c{+y?ez7XQ{*jOg57I6_!Xi+D+)|4jgVz5);t$SE8& z`W=ks74b(IH27#^vN_-3T)c1bsnQ9mwpJ>4ZemoN8Y+o#`j>1N_Z0b5qst1Sh@XWW z@swPxT4L~BqlhwqNl*c)W=mL$%2-9hr> zvXBywuS=04MsCJ&L+>zP<^6jb&Dl&~uAJ=1VGX`VUrO<5?b@p{Q@jo9#?%iP{@B?R`Q&zGcP9VK_z3?i8(O&zTR)ZD+WmR5A1G0V zeUkr4*v-z>p<;ko6WweBh0eSBMn&~kVLFHYDcq`td(Yjb3*si?p~-$#S||&WpP)SJ z0TWO%ysSR>M{qn6vgj~w={7X_W)ZEkxJxJqv?}j-A00P*o_lL)5Alx%D)d2%e=4d@ zNbYpHPPWybOyXV=xi&?VnH!}9lnfYa^i#8k_)_5%8mpaSQn-0I_#6icI0WhH^12$9 z&J%*omcB3&_C3wL8b7Y|2B)y7jEcS=eOXo7Eo}sKdi;nkJ4EsG*)dR%o^~&=5ptQc z$}^WBLn=U?yC1cq@m4=;F27P^yh-&2HHsu-#_O)ReKgaC8}ghgT0mzehE^9VEPhJ~ z!%g3nQB{J}-JfTJC|{4px54ROcb9b)ydURxu1{W%1wsSUQfN1lYY8n>{E6eBFU)e< zxfp>dc&o0RDz&V?ot@V;TC3_+@q>PB#)>ey;?Dx1N$KQlxavVpjHnl$JsM6D$^k0n zMuUE)B217p(M*wj+Xf-sAmzP4*zeRF?}*b)G_!aen}G_xDG6U(zE;mh$@+?D_J<%- zWM!>{B}zZi*e?t_;Ji@Ud?)`!$92dAs}M<+kZO&&{)e8vDy^-zc9zhX;H704(D6i8 z&x{fck75<95t33uy&m&{r!MuVA6-M%+f(AWvLe=q{?O9n;3bvCgt#rBz92kl^}S&P zq?0aY`5+NrGSXB2Br1$!GHF?$ptx5>>N;iPqWY`XP+c3jztvE8w}Njwf0VB6@v6`l zbbn1mh^Jl4p_>Eb#kg5~P^zb#35tjij$9xaKfWzi*n&=qBR4K)m+L1*YeO?+NptJl z?}H+?p6f+G71I5AI`L89<=8WwWW1D0QJ|FBm58|Ggg_2Sf(TqUX@JDPPDk$Ah+mfvQ1c zfdW^%$jbJ**YYvQx&~;lhhNKg3R5ih{$i%$ArH+|QLTMk>h5j~68zJp+DD5xX$n<( zjARn(hevJ=_Sd)6B-#oW(?1bimGNQ>Uo~Yce`IgHzx(!P%35^ZEs}t+(waJ#85uQ? zI`nA3>Wm<|D4l68PpFvwpxu57;R=Dgyc>;g`TpED_2vZGw8PwS0C@a%!=pugG z`$=z~ZntRDk!cz#Re3NAYCr(`%5O^5hV=4R)738R;;N0)HJIVh z>2c#AO!{4l@KXL+udUyi{i~nvhX-NT&Mp4&=RWNzjg*B%Haug1gt%BI$fPPHiZr~P zc>}Wd)0yoC;ie`}XmPnoUgpZgU*|(KUCir|Indp(D*3mjA?im;Wo?r=MT>1nfWdVr zUh7{0+WHy`+1~kpEcNrr`W;OV;*Q5&hE%J;z$`8yHXDxmAC5<|kxvb*L$0+P%S$4K>W25Xc4YF-t3?iD}!dsR%M+dgcRx}rBQ^}-}Kv`nW=e|YG+ zYC9{0I;V%=lxtsWm$hUQ*6tgK#v8D7dqd}I7C-IMTKX09lCnn7f}EsDLH)DZgN9aK%uQ_TN`Z)F2xS1$Eo4$CnW2gpX+Sz1pAUKk~=FDprmN_ zsH%*T#;Y^~fYZR9u1;kY`2`gr3g?h6IPqq6&j&!^ZAWxM-~;)pi5UUe0ml4=)<&oTKm3K6`6P#{OLN?Ntc< z%~mJl4-d!Ws&ES0;7U=LxdR>FxG7lzAG=^{Ir=Qx`;vf+m9vu5veshdTlLc+n^d5s zgw~1b;J_M(y{;Aup7uu7Hu7Ej6B(b9Z}>p!8?2Y46XGUU+8ri0^&maC zQg3vbPHCt8E9yKWEGP9LSz7fzTEDJpl# zPKraG(@C)_Fp6o`Vo<5z&#}Q~h$WHFR3-X~8ys@IZlO}_9hJT5b6T8FORJ0WoAl=T zcvslywP-6HqCDMkUC>)Q^h!50`trnPa7V7{0Q-~DwC12HxYfBN9vk{- zgG|#%F7mkyB}xZ76cs-|$F)etKQmq<7gxFdoAi=g0&K~kaD3uyhM`VsfG z>?lH=YxKk6B@l?X)O=I(vx;~J(Slr3LMEV(?suEu6;+ZdcZQCx*Ml;xHX9@;Y@tc{ zy3o`5?Q(3J9pQn}N6YbE>xs7|(jo@ZUA*}(WjhIb+rf8y_y%~^aQ59c&(j4ZJxqdW z$@;3ZX%Cxhomg${(+_nF`Px1|%@0+J3b4aR4Vkw|vndgo7S0b=<>fb946BvkD&!2S znH$>Y?&H1!APUExoCp32!28-502Qf9eU@XaurX zeh=0Ss)rQ~fu?d<>*{}0IRM|vpWFEQ6$Ek}CxZS@-{bLb^k-o2mG9LLY(3T+f~Zwd zw+>VNUtLNRM}2i8J`Vv0!d%yak~r7JwmXPW8(sHzTfs#V)?R z=y&F_${I1IJ`w(PIe_Kd*L)$B*wqgx1WA4Y8Pt9iPz?bg9m;FJXbd?Kj=vm2S8WkL@M#}=MTv8}O9-(ojG z$c#9M{n~bj+dDO%UMy;kPeYgNfl4KjMUy>K_+&N!zjA>krjq~^c0Yn_5lOL!R|X$N zPkXJ8Z=$I$hBqyX^zo0?eT^;#tp}v$si_TigX%9%j`HMfG_OMDC}O3I)Jl(rOfUAj z9nYM`!(4PCpo!uadQx4R4ZDL_1Q6XoT19C{U%t|l__NE=;IgWAvMYYpSA(z|WWOP4 zZtZhndCik%X94cxx-n^NlXwL(2Lw!^C`{#eBZ_Nnii7q1N9$&T_B$zz)7#i7{$X)I z@XdTyM&e)ce-~1wr#uAc^&S3K@_uJK2mhvk>b#bU0j-XGAGhd9AubIQG|((|lZJ3+ z+^hK#cdf4$8Rd7vfmTn=Y=46y2`97dZKJu5U63l}+ghdw0^NeN-k~9Vu)RFD_EA#8 zkoEjRSXc-kK3c~Ud5)fBVI`@JlQ*a1UB>tj$?sb1;oq9!Q;qwLRX~kVMRFEbx6lTJ ze{?h;hkOXqgJVd@cY)_Dq%Rd@mnoyf8XD$KkGd`#>&K8racT{ods5D^!Jh(TDyoo0 z`gbAW`V~&bW+gt$nGLDQNGx*t3@jO##GF;2%cF7H{?oGLciwMbb)yh>vx*e^?cpZx z4d@1gw5C|&=|tn%mQ<`X#_3CBPvow+$7=ic@8eQWK_=$!s2&NCyxYxJNZ+wKKGr7h z-W5OU0|Z(w&=`)!vm}n|=t|A6C<=m1_z9dBjay&So27cyudobkXDj#|4Z41(q%G3( zY#tq*qdY*@M~GKH_Zn$?$-nG_2K&S}p!_)+np;zyl;TY-2!)<8>z2T%qD9w?&T{*tg1eO7+Ml0F^mpQ9_W!b0kx9 zaoiq&4|I&%OJLp_FVe01NH>dN#|W?*{z4$%(mXA8=+2^gzCFxwv2!@?rw%rPDH}tI z&TF2KUswcxs=<-#T05XBuR?M{e+Bq<!MVL5)^*~U&WMfl$lqFtq-B|dmJj)(nM#RW$$)MtQwjK z!;#IUpep!>vmlht7-?-l3kr*zxIhi6>m)-U;=8j)ok)fsv&nCB*MirjDYI`qvv z65H&g#P1rCcvTY|oWHy=iK6z~o0SOF_RP=EpTB#_=!ay-wFjh`hg~r0hKs39?54ND zh8A$qO+;_l^H|QO2!>$#*d6iu!)+Pr4och?D~(8W_x;e(CGjSG=L zb^W;O$-i%z`H7MPyc#w=max*h$T7cbNr!+r3Z z63RwR9#(1vvWdEK47=;HcE22zU@G2xSh+VC-$??2e7f4@#1u@geWGCP+2(iN_M`DA zdZG*>TU6q!OOs52_B@%7ybAe#i7AmrN{aP(ilBo!H1a%%)K^T*SAXLzB)7Hsf6(@p zVO4(JyXZm$6a+y^C8fIs0V$;wknRu=kZzC`1?lcoI;3;a(v9SzyJOK^doF(O`+wgr zd+&43bsfH~XRYU%^OECan(j%Ntg6qzN?fAnm+`Z6<1pbR*|?A|%G8wHAGzX<5&)hl^a^%RPu zWe_0CK6b3;s~Oba;S(!3xmcG5UgLA&nw&YiOM9>G%;8G8c_dsL*$d@9z3MAXlEcnJ zp}Ziu>Afr6tK#%)p=B(zrXL42q=B*qmP+|cqnl@_cKSG}7f&^PF?mOf{8SOw#LL8K z83KmZPli}WH=QdktP_=^4NSP7gnQ&`%$U%WR+6aXFC8AGz4J%qDt<5TsPt2wW|i%? z2+8hKMdGqw!M2aw##T;j>G)~q%^<>0-*)3yItm^irK)bbFWtHp6jo}0dA?#7j3oJF z!L#R}dQm6NNu5RH-@R4&xpTU>WPD%MSy!ipT*QeE_ykCokTCX9uyyF!1k91k3h($dnd+{CmrD^#-hnrsKm^L%sv zGW}k`^gZ50y9-LkW^FHMx|>)xpdVcradF)4Wj|V8Q4oq-DO*JP#&Zh0SUuE&RbsRB zoH!-;ieD=FBE?Vh$jHc2Pw(DyPsPZ{D$AJ&fk*T=7$=7;y*+E7LHzLmho6nRoqwb$ zD7Xr~p?LZGQyj!ZMHK};w53yipVydO|7e`wh*|p40mJLye*Hmzvgd~vwk{p!Vt*R& zK4kfc;W^%#d!C#d3-PNxOG%XwX~<%e1IHRI@{e-?(u6q=>$vBsoQn6#LVH4cZ z^66M*$d61qSiWx^9fGZb$Af$y^1_I$N{ue3*>*Zuvfe;Nfqkk+YvAedOHl*W*SN_| z&X3luDEj8?E^B)6+RSlPLY`?>U(1>m2H|`jLU9s|K@reIgDgCtCxmpqzm=|i$uQMq z1(Daeb(4)M*ok&m(jGF*%1K%~za|W+#G{U=xW=!aTez|&Dz3A%3h7qQP<9WgP*|*V zVR^xrKex4OBwiKQHLjImGXk?)xfM%`!D?lQ z!ClAA%Dw6jn>jmnRZR9tX$;~0eXq(&U&kyz8=vq=b9z3#5@K=+yOxDY3pCq%!4qRf zeoiy$xim1vu@i1PM=Y8e2p+4xn0?YTyQF0N%HcsmQi29v%%=zpw3|t^KjY@~6vn=2 z4fCv{S8+*cVrOf13vn5_KjBVIp?`a$Mo%9dUVb36D0y@`5{qITBYNM}F!0NE774li zf)AUr4vg~Rv%sW66y5A!Bw@!0kE{o%JlwAKGT0=m#|EGJpC&R35()LXY!es<`tkDH z%IbZz5f7T{@h`1-c1H62_{Ah&RgE*HqX>#M4l7B2mo#;g)>LeEO6&mMwTgquRV8}| znevLm6c^Xn%WR2$oD3~ad3cEfC4}kGi$iu~h;(|KkC;JOReyCF^&62Y4cK;mNn63F zrMmk-@e2vDC^f?cmAPq}uRc5Gp$DhI7;sm@AIk|UJGuE*``i6Jk5?*tRdrx3LZga} z{jflS-mwcf(l)jEDNEh#CAuAZ^}VIpE_mauR=$Qq%g-#yBUMg@HDMP*PXcO! zNks6e> zg~?d_fM%=F@c#{T-a&e;O{l}_?gMoys-Y_Q7?uW3eT(JY{m#QRNz=7nqT{yt8T<

UUN)IFg?TbY&ZkMW z-kK8U#Jk#Lb#5nLm=76>wro&(-QApEvA7#md6+vY6n4nBNIQ&r1C-Z|LWMci+$Ws$ zf{Jgt9ggCOqk+?=7`*(52!vJgAHQ64V`6f@nlrl|L**1(aT_=mOdv`&t{-ZD`Qfl5 zJ=r3i*YA~uMbRtRZm3{n`V+1CtTP|Sd`c*N{#*>*=4v9rp0e8!5v`)$glJsnTc`vCeDuqysqSK$hQZ%e; z3Vzh6%M^I@%NPLVpGqznl&4eZOo9j$5h8lw$eqS%8?*V#5hilPB<09 zY+1As(E_S6)2ntNpNTp&#=mZGFJUekP@nzruXBjX*0ECEyQ*_^KY_Llexgwh`FJtK zVEnZBX_cJq;O|{3W#R7V=SxdF$s&YU@`_I$2X#biL3|Ia>Fk~ zD>fb<;Wxr1jWNI$Ps5dawdID1Ut4kK@@bmr2g?2J#!d?)5VR@q`& zp|{YS|5H%Kn`9b>pI5K_XKk$_+x-hzd^us-vt`n*l}N6lnh{xo(?*#&Nysg|6co=aPJJAd|YrR9G6GFYStT?<6bhRi6zM zVNk?zB4e3eQSa)o#ohX+^fPAJs}A0BWYPBPpP~&oR_f4%X~~~SMI{MIvh=&EjkD)# z3Tb<)#>M0&8Cfj`WG4M z>!-D*8mvskeHNs=cdPc$)cOy33iD>YtckK6nS^(5t{V~VOZRX&hke$m-#Ub8Mthd8 z0Gjxs58u>P9i9|&Pk{x_nzz2n1xlIZ~jn8no@sYq^hdO4L76&^~yR*jF!BPk5>GxeN;byXcv3 zb&!<&WV=+fzc)xzqo9FfHNkkFsCXR_$9lGE#faWIk7=TbKcpvACbU}S_Oiwk3x0Xv z^c~(~H~p=f`KZ18nGw&vns!9HMYfo|@DYtRM{qn()LEG*8<-wyJm78?Ksqv3h za>9Qk{6i+|Jny-j*PXan{q)G+ql}nZ@V-5pg?(BLC`Bip93QFi}9p%4TB5%n!YteEYOnH}CvwoZ~dTgA@v7=1%qm zHP2lhwycwu%`=_Gj%f`v?h#PhFs}vc5Y@X96HESZF61FTpT@Z~3H(%@nKBnWIJ!Ej znyxk2vzEq8c%R&vzqQKp{MoRk?(9Z0su%CKC=6ls?yXu(UW5J}3!>h-(NC*Pv-sw`5_Tx^}YfN zL~Nm^y@oq=i97Pp_3{;tE}YV&sCM+P(V^osm-c5x10^I&qos=IBIBpcwSQ-xm#Y%q z4q5!rv5VBST-!9=eRcK>#ueJ}=bj*6E81RO(xvi6V5J*BC7g@QWXr|VpkH2B2NG8T z5>EnV4Xz5dOu?JXoSbM|33gmjMO)9QKcVhl++Y|T2T30%EuQ$l7A$smkW4IO+!?eF zHo=~&t2#J-^!D%LBf2X7U&SJqz;orQjAT6ABE+YPJd zA1gwUA8LrQB}O$}F&6D|zZ$!5Vc{FxrUWzSOgZ^I@)SS(RmUbt8NrvM7Rg|LTOrw| zxI%WPl|CkToWsg&a}LO-$wi(%Pi|YRd{(rplegHL>(ooIev!-{%~^mU`(d!(ws$k4 ze6#c-1(}x@jVT6M)X+k4EaodlbDH&Z^ww9j7=hy>r@5U6Es6TyWZ0U8zyT?-2Q~G) z41>lNdW`xyLpVjuLoOY^XD^+xVJ#!m6)&s3vN2i;Fg2_{i}u#oQW%e|P!~kSg_`ti z3g{;u#}UJrN84i-(vpw`j=%rL(3|~!-b?}Uvo8DK?bCR$F*Z_Qs z-^DW18?O}ERoxqm28Q|8eE9dNKmolh?ss`nOiXXKR`(UC`0O_1nA)NTD z76pWbYYazyGRBuO=8%qiesp=rHecMUzJA2iaXd-zE%{VUm*tL1+x_Om1phb|eO1LU zW3xku_b8HVH<};&d_m#?gaE55c??>Mw5oUT2qJ7-4Gvc#z`9mxsj+-JSnOj(va3OY z40&K733hQWa#?0y(b{QT)SaP35AE(`drUJ5y)6C5REop-kr5FiQviYTXl=ufm9at{)954<9sQfZ9TU+_Dx zFWx?4kPmdYQ-SW_*4evTYq<0x`0qnLV1q&Ndh&ow=JxH@=3)#UY`J;L(RxrTb!G+{_jMbly2@_3&6-7ZLbhNORxMFT!wa zh_Fa;@ly?!_zOQjit1Z2rnCo%qmJ-xBHIoWY~Q$!#;6Rj7BWa2tt9l#JG(t2eRf7c*#~QbS&b#L6>X?+eUSt1R&+w_D79`>+32B|}#6M#Q8tNZqjP1L27q!2> z7;kKJkOfdvv&v*Ut66-<-P<=`HtWAv*o?R&i#ye8`sI2gt+hI$JVjWg^4pDx`7PW! zYHK(@oySTmmLEM#TFdRKFOf%P8_gE&9wcC1V5NKbmT9x(_>lBbwVPTQU7nFyRtm_eIxE;%VK>dpvKR}NEko}JJ4njI2763$V(`EV55s7d35N6w6g z80>?1+nI6?(=VsV=a{JEN;#yOKcX17GmYI=`jh$V1!nHr^*Z&m3to}&3Q4J4Aq}(Kc<}(8Yg+7Bf1$-v))lsCo?GIGQ!Xt#y z^o)-?SOjo;n|2jRB#{_h){`!*YY_7?2F#D8%K)-EaA^ ztQcg^o{>I(UPq-X3ib>`bXJ=Y-DiZ z*9*?9YT(C+pZh0x9%jv0R(V_iwAM}>KwQE&)*TdHNn^%WHdiq29ul87+97WC`ucC` z(?yw`sJgkvUErptwZP}tJi}~}IzKDFDLo;Yi?8Eh$7iQ@VhXTJ^z-9>{e;npJOGy+ zzr>_#asMNy0?P+H;CctH*F~xI=Np*7#N%kgLx0o1I*6E-hxGCQBmeIp0iOJS_-H5v zwWsZ`DqRbW?(b=n4o&^YZx-tOCF{W6*zD3~W?I{{A1x_*XvuiIU!}4v+Tv;rcTIDm zT^dSx(0|I)ITIfBf;H>kT7dSkVYIauh?C%;Kir`}LSZAGv9lOBQA@NEV)(qG)@cOQ zR;#Oo*~Y$J;=&8`iptBU%}0{w`nPgddcJ?5F2=DN0_T14#x`b4k6E*+YQES>*Tar#X{@3ibvC6WPIl3IqlUW=ZumHw*K=V z&F_L}RC%vw;#0AYyhQB83mHs4VQiDMKX<95FuP((&tKG6bKh^PQc>PhJvz?YA<6EY z^gi0kwsj(1Ou=h7=UR5D1H&Mwy{(ZPUPzG^UPepbXsrzELX!DqM+XaZ5UMu4^6w5J zqUC&dYPS?>7wRXsd@G%Ut}!7~=I#kzZ&kOm&o-J=sD+>vE4ljoWW%3zU}Zy8NQp}uw=!Tm%3Y}^4smg(ghOzd_~7&Uda^c6@_edSUH-t0Vdy9 zQcb5T)RTCe$-+WjCl{s-MqY($?WqrtGA26;XGa+9Xz{uki>Xk_Yc-_v2^LSN&u0NBYZCRcQ$zW z%Rl!{3S)_nje~1hf}V&KG4I<@K_E@dIQsOl#wZFiQ#Aa!Di-7vJ9(0&b8OHQv*`+6 z9#lC?QE&o-GfszGApX@7Xg z@bL|IpO<%)zFegpO|NXLTpW8^MNfRaDFuaefJ*p`{h#Ain2sH{#+Zdv09EZdvq(yL zqeRqWXej-StTqX4fI-rE{3+zs5}E!J;0eugextV3V)=fBuAZ`0j?n{$qWF^SB(>{m zwSw;4U(cQuJD!G2f`Pg?VsdB9f1G8>#FDzxODJS-pn}{Vzg|JDR6{d)z3`QYJHWyH zS-j4~1cS~&d2Q+L*Xh@zh@{_bH$Cgt67ZyU~64vl%jTgC#0kEIbo z?`L6as{Ov)8W}H)z*!V_z0rQf zbfn%^C5O;3h7G9&cu~l_F~`qcm!gTM)gLJfx%)-fcH0U(IGWQ+K3B5gyJt^tjsge6 zqit1SDNNvJNo~ZJby}RT#}96(s15fsb!w!ns}I2%BWNG|>myKs%wygxTChBBSJ+2l z)H>${*IXl$3Z#C%BgoYkhA>hwbW1UNRH0#{HJzE1DsjnZ`Bgf4yE@a$W2A$FReqX# zx~IuvZ3G9bCz1wYDjD@l6%#9d4rDsC8uc_v+^1*|$b$ekjKCBh5lZ7{+R8g{k_t4l z32&83FHh^T!}JkEhbXv{<%k5q{$$YAW!49|N zMkFT-8j(jSiB{*NWrYX!*>>-Z_kuZzKis=?fM$W9mrVUByQUoF`HfT+k8U+Wu9WnGnD5(&+yIH6m9E;z~FEalu%5*Q?}dRkJO!hDsqkZ)RS{*v{34P~G8xXGg;X`G(I;PR{H6BUag)^&dP!Vg*EWV#}0f=pl7S zwXvRqt{1w1aib!9mV2=;hjqQ&;ktq)>hY_x_`v}^?-+||kM@@uasm{!g*Q%%Zj6oL zntxrP4~YWMW_{hn@0l3AOvM`W{lNAH&CK1B(XKdVM-jR#?6O(t)=7}NgXekQ5 zxiQMA7g#plcRIECZrJQZ+&4SQ>=;mTth9VsyalcP<^0p4v*jziHB0Te@d{Q;;@iwe z1TP>2&oi{h*(7d5c3~^}mP|@f#Aa&;%zu~*-P#P>HogVlpdWzBI5@~19~fsQay82; zvi#859ajpk*ihT}B~amZo*XN?Op4joHRuslw0Ai8eReQ&#MuC24*JJJmrtJYRM@ik z6&Sq_9c}BsgCt=yL^nkq0qEz(KV(ZcRSyMl+6V;SvGSsp=W{S5p@@eN zF>%zt^g5;G4h*$kdts$Yi1|dbdP6)qomqeyue|hPz3MD$+gq>h$jnNpkTP#_WAk_0 zC+=Z;M<PS72yRS9R26@fk;j@(a z>qmWj++HXc^n}7sr;7PF_9~-2_`_Wnia?jbe?E5EfjjvoP31)sPc4o|g$V68=g^%W z%2=x)vVr2jtHRh?^YD#Doz>WSG%bq zwS?;!q$o^~31Z8@{HHM*W!C-u*4vefWb%Q58Qb<~Ub#o1AXT2*n)kjFwGWdbx4FTY zA8jkopEgFCxu`hI+TCWMsj2y__4*f`r1v!{`Q}Aa0Zy$|#P(ot%2XF`QydEBD%5P{ zvJU5oUKUL@O_6pz$j)CNRcJvzZVx%|Q~O+SZLVv4$au?nxrOAvDjXQyJu(R*g3XlE@9UA$F)3fslpXLE_;utc!U?_3-AQ zoOxi6W^Z=oHWEw*pZrQMG6};fdArE6EgGFI=6a6W>fSYg6SS6QSe!f~h5=6Ig=4rO zq5Z7}Cmpr1({g`S@o9cm4)`wKB>cUUcilmKSoZx}h0l#Dn|ocM%V{n7A@05E8dtX3xo2se zzm3l)Pr$b}t*2&Ib$sx+D-2*%X1ySHL|tXX4z@1ySi zu|-8F|6`QV3HNdX;U$OOpZDgm)=9hM{BU8NfpciK4(Zvy0<|lH?8&}e`a^ACMo&n2 zC1%!wac$(|33K z*{3Ykx?7FP8pQT}v1(j8IUo$T0u6r$(fLs3ujc77mhrn+mb%g~#Y|Vkv>5{D)UU5z&xw#XiOIcQmnHKwyv^(d~;-D(G(faPi! zBPjHBn}l_V2ISgaA3(H(7Pyp;mJ?^dc{0rL5U+};;xC(_~ zde5sOr(((r#Xk>M?yhLMwXUQJs`$gG)Y1p2k)^NqHz))PO z@ClXy97H0z2N@rk5re>!q4jIwLoVG%2HumTtq`%s9aj=3`myc2^y`|kx8D7&;78be z06<_k*|NcHOoRVzbX#lqfJ4!+` zXiU!Ra-wkXHD1CenI`}KnZufguRXz$pGn!SfdEAb1OojCC~@#>#MTr1QT+g0+5h`T zu&oyM@XWZpsh_F>FpFLalXk-!0CX670iaqIs1zbkY4kZ$!}zhO1N_J-5)vZ#vBVO< ze)J_TVi$ghPEY8SRHMs3cs=TpvP4@Nw0~?LH!ME|?s`tIly}@hY zZLapQ0>Kaj?>-2zKR@T~BFf;9Vpr5IU4Q6t6!8 zD3}oF7h4Y)zzV}I_rTbBnCu z1yslbo$u2~y*?@MImPO_7`89?kdK&+`2Qz(1Q?Vs9YfJ>rCLI;PAVt2CQ}RZY$||g zB8+pLhnL-Ufq%bl!$Z;EFI-1<`#pyA7WPvoJb#?XW@%Vy+H+i z#mWQM@{JXL-X~ai4|teeGKQ?>)OjTOq7n^B=b@lU0JVdp=!NRk?+mH6HIMEpc6mei zlQnUK_QlZRGL!OgK8uvuQ+omRMwz#jm4u?-%mVIn8k0Uu@*|f$#Taa;^A#Cd*9a2L z1veTDjADD@SGc6>sgYTUeVO6Lj0byT)SzyUcDh&Lp>;s{@E)(MFet}d`%ySFFf<=9 zlDVs$Y1+JL+lqEWawZ z#udJ>k=B@L)u3na-9LSfWLV+6|AY&&G9S{0eLQA05ECO*yW=9_scYq_tJ|2%;}r>6 z4SyAQClY&V)e&8Acu{=VYPUU`v~5orK3kHv9%B>jnxgCesh9kWgJDYV8Mj|ZG0GXm z>m1uhEd={&DimozyxhSZN!$nzstRRXfqWy)u(?b06J|zcIsNL(>X$y4w6@@^zrgy)V2o zE`?4_F`wS@IhBmdwIhwRnmYBXIcWx?+MinVFKN2>X$NblI_608JP=xhG!2gq?SK^5 zLKVW>(mn<^WVbr}lyIUuRi5dz#E~&V6%@`u6RjDG_gGRwv$cxvUN2`f!zQC{-xniT z>dleW?ahw?LBhkmmYqhk>qIi;y1he6s}w$ew|5Wd!GXC}o9;`7ORP5?zgljuJG2{j zl{(sQtLiVYZnk#=ZkI1Tk5-Ca7n{dVBY6+y*q+pItI!RF0h#62@;kuSsavx>OAG|w z=Q7&tIjdj@1~bJS_0?Cf3ixw`#V(o!3b+XZi`=SHRmN|CSKZ95)F zvyHcNxZy+>^kMJ1R+#CgBoyrO&R@<0!ZcZ&l0};^hhU=2o6HTmB2W-f38xEX=1_uJ4H|+k6xB?f$<58lM12L zZ*Fvol1ieHSx#*)-q^6}7rZ`FvLDCtm#W{y;@%z%cvd?q!>b8`{O|{DY&#%!Z%K$! zlOiIL4$ge3EPy{Z`tR_Rs4}GkK5D_p*7iV-$mJ2Qfk$^rRC-+lKi+JBRD#xbWsI;U z1G6!j&%mgGacflu9i5f{%lW%)_+FL#ev9}vQ*lqixviQXc`ddXsMVd-j z>&cVB05r1qLmXWiMw&PMU0q!_4LWeAD9tL%ZW2(2^gST+T`Y}Rd-l5YO`lO2sx|lh`xt@frF^U5c)n6YSu|#ff>-O0k=@;C6pNs9R8CsOP48u8^$l7+ zeDe{Di*Lp3nohwogB3V2`Nxfi-dM}Ps}T}%pMc;%xv?x7&i83FUC;yP$2YQBv zr7;T{T+{WgKk_d);>Y=`th&I>;7i2K&Na6;Xx03fkqU8{r_3t^m}nPjweIaCC3-4h zwqKpt9}A^@A_cvt%Fei1*u;OyXY`^Srm*$eDEN;->Z)d42qqaxX5`EMfj~ zLf4{zB=uI=OU|~Mt($NIJSH+yod3FVeniFlh!`nZsS1w^|3mSdt}ZF)Tjbp^+dq%Q z#PcHJl`L2GPYN`rLtQ*|=aTuWR7Fd9Wj*JSav=W{g9XRkNC+@6S6E^2ZQ1w1^1B2*o%m=EF|PP}|$4 zlhfl6_p6d=8xd>7eeWbktTCY@Hv7PUvKnSRa4%n6q`X=850*=+b~^3;6bM>%F0rgn zm};N}-tnBxX3IAw{39@xc#u*lsN2pxDcocPcDncnAKd>{u(Gjez*KC3@caD{Tag^~ z3O?T{K1Qh?H(P_c#?Y6?$5?UWxw-Vvx8HcdrfT(@G=6mNtAvc%x^tiO-pHML*T*sn zBHX=8x;0L_aIaiBxUleG46`nLI+V|wqFR9DLS~yV)sw}^gslT~-_7-?VrYThn2mh5zG|__h1rTos=3T5G~B9g zmVWAa?_Q6b)c{;Kv5&#Y1iSJ>56YpQLvM@L7nRZ&sNhLSZYT&p$TTYOYGG7KDEYFe zm_VzAV`@^fo8|5Ax#jip;FEl|s`B2YQ~2yl-8V#xaRxoAzyD@s*!E#&)6kOOYS5gl z66yk<>I5RW@8un1zu(D9Ng;f;cYW`JP|r!?_`-{_X&WSnpQxzlt39f9>!5WOi>z5}Sw9 zX&?0!4j^;3Xo>Y-RVAT%3+gpT9?UINpPyMsZ@RzRC1X2IxETK`IA&P|T$PC`XT>|- z|H~Q9+O;p4`_T)YUkykg>cBri}S;JfVW-1X+=cU+)c}8aCKf z&ns)WQB+wzP0e{`eH3O?qyuFFQF8vpiZ@%;(G8kHoD$15crcFYoayG47$;^MpVB9- z3YX&%Jo#27gaqPm>&VEN1R2TAu22j=S6E+5=L`R*rerYhfa|Wa;SVhz-Tz^Bbn2wb1pdycXisW_c)mAzdcF%ZS%)1P${>Xm{GlF zy1{Ph{Bk^b3gPdF$b3ijYo&G=GIRd5dcMB(^4Fm+$8Tr016I$gNC{H+k@L=qeAN(A zUV9K1)R(-^iw(OXsF)*@noSfH$lTb5)KiW(XnB^w)5ySfOB%7zh$njAluExyS_l7+ z7fwV=)X!rOz?jrVYg+y0Z2auI2QL5Lj)V)BTkD-X5DH7dR@hp-(v7!jJ1(gi8>ed9 z1Pn}K2wRz3+qa9xo84(q7+InA<@o>>2;i#lpL!tz2jkD-s<~9mcE_bYiGQDSJ?%S=*gn`a`Z4~^+7X!**f0udm89E9Hzho56p}>Nrl5l>G?ehhWobSf$6s#bhV#-=Xy$7G&--*9och^ikJ9B;lVEc*zS zlLfLuDQwE7X*CKb2n6H(-R5DJXr$P!4c&6W2C=I9ORWiA=n#4R)~>y28t~9LWNrM@ zla~#FkP%6ViYV2*=Gb=IgYRgP)!h^w5(x@Fm^jmw_R$qD(l|DDJvwD|pP$#g&4ewH zX_k#aUB}it_q_bwmtetfzs0UH>VW^-+l|8ZR@d$33#`qlmZjmHC|DGeGGzMBq)$#8 zbm0|!7GQ105xqTTWq5wO%edR<6z*!h*q_{x1zT}NfpENIyuw{e9kqElce_v)DtIw& zVKXz@9sQVkUm!#1_Nweg@FaQc@OJAAD4G^R(A4z6sP%p=2^Au}JX@NpNTH>0(5mC6 zK2DswII$bp-CDzF^vm+2NFxil@oZ=`TX{QJu;$6=)CqY(wbY}|?;ys`{up;~2&6VF z+MCndyEka0>$?U(T2s_`V#S@P43|VQ!U6!6g1?_1h=DYjY>AbYjaL3!utZkD+ifS1 zrZe4yj#*x97M;V65rT-y6|XUU7emqew`KE7uTu21*LgZMU(Jg!9S1#AQ)br()4Yn`Wje zLI~&p)Fuf(DM(D65K2r+IBOZrk6HNhSmn*5{;wp{D?0epLMg~Y1M2t+9bZf+q|xYQ7~ zoC$y;1mG9}6esH8FFj(qdL6EufV$#mw8d}x*PeU1zdM`68F(wHWxXMhY08w_9uHBm zyhT|tA#Wan5efUSu}}NN>g|341yu&c zg!Pr*bNY`R5G=E(sFKUo`%mIjIG;8&C$a}PY8V#2iHaKT0(wzd!oE0$*^in+S%k4R zH{bMdO0!?pFqmKVg)K3gJ%iKQi^Z`G^yEWvz)tkJn$~xyK-n$JHP_Co;jQQBJHoKz zpriY+2Q`4WPO`J@H^Zso%av0Nzf?r9u}0Ic;?=tc(v(x+y>d@+zRRSr_NnGTiimT#N6RD$ZI7x4=Jca8IcGWPenO9v!Z&HZ;dxv18FVfy-29@-PbJ;V* z#qm;aP8oU26>S*yRY(I3FHnfHV#lrOJH8ZhX? z8;gP7(Zj;|!*rdos1OW9JPuO;Fu7v7XhwI=e9zkTNS-QzvFIcVILYDnc36`H6>{j`@Ux0ts`RS&7pPf6`y5V#S&H^Hy7stCGBD?#_`=g9+A zOmW9yAMwRheGaGXyu+7tKvRflZTy#lpTC$&?J_bL^${~d^Kc`)p6OS#YvbixM zqgnxm+L9)+V?d8Fe|ECzkcAY5YTokas}>Ddc(@@?Bei74$!QSZ*!#yNZ}H+YPmj~U zW($FgrB2T96EnIyrd7KYxl%*{8Ig=He)|M}5Og|V>OG6$_96k-M88TZRJAKo81`%$pPf-Tr<;9M7JfH7rsWEBe?lAfS2G5^Dl@=;c zh~Sf{QFp7`qzBsxz>}N{-sR6|4}YZ9I5x>$W1|i&#M*X&V0!?s^!k3X)sH1_{)_Hq z?&|_M)!-zD?P50Tmet-LsFve?PlnEvp@@z@sFW%II+MZ8m($6iT3AQl4cb1~X8;3M zIk{ptZnvXijxi~}#P+vPBiT6rDOZ7D2FKs56^A^8!cOgKUq7fCVf~^&B&DV7v4c_; ztY7sCJ~oovLIh0D=m zFdNsVif#xniP6agZg6gf@n?ZfVNy>&I-#DvVR`t&VW-C-C+e3*<M4FUB?b9@44TqpMsnb2h5GdyUvob*|Pn z=JBKoORHU9ig)rIw8%{R@dfx^hp;L^v zSz4xNVDeibea07Edx(81fgoWgzZPyi+jt1#UEX9}b_|d*sv3$#bo>zo!norNhJzEl zyZB^%H8J~fx+K5<_-r$fwV@&}jV;90@W{|;!vm%~#K^B1c>XJdtMcFnZ|JhloBxTW ze2eY9voq^%__O!M5c1UXXb$ISFIG9IC+LkQ`99v_Lo?DB%_ z`J#IaS2=)^Lg8N#>)>_uGSF-#vov&8rz{5MgV^P?N*k24l9E>=sqSJtgYV=Y5G;Ur zP~;a!5J-SVDzjZX(M~P|d!jav1Lb^-;bthF)o~n3nd^9pwK_r4`e+nhxKS)&B*0kR+Ntibnwxi%hEVXO zu*VQjJ&|}zc=k?lsSqO_FLy#=@k`FTe^#(%Bl#wv;n4aLUB5-$VW@`qh3KH!HP!>j z0ul&por~?te@qiTPqRpWY8P5ABc6%LkStA{dqP~-_(M(+$Ok|ewE9HE*!E4;GKli| z$J1KU&u(VIQK}Q|tTJQL2ZGcU)i>9F3j?SwF(c=3RGZ*MSpU$3ilDL@vBKM8vo1#$?k9FUz@>i-R9VyJDjWNp z(a+A!DcSibC=&DI+_MnMGida(T>k#1GYU$w1CsDr3kW2gZ^7eL-;A{DXNC?{f28zbi?}p*wL242^fA)^yN&{(3nmda{M=Ei#m)t7flD z<&Z?JA&CM(0h=;NsWpCCEN~FIJO#qsnQJUhi5ECH(ZsGSltYgD$Je4D2iU=z-c&mP zdKq(ME7%hNj`k45>umhqUtG<1(|Xg%1!p+Vt9SfHr%>zPII*W!pjY)E4RGjIX5NT! z`20I#sbrtZNU)61WW}vbq{!v4K zyLDm+1KwvJV|U*8{oM}Aq203$pX35fmWH_cM50FTo!{h^k!=6gN#vPj)Ktj~WEta^ zmnPQaaeJ=w&kKX(Xn`3NXlp@!AT<$B9jGds@pv4=Ts_I1$T_UdeG=3I{K^K7js;?ljxaLD|JWG0x$@I{;6up zDjlSIs~CVc27gpP5M>%Uosy#g_>a5q2xX8VeaMl~YzRLTExdaaLW+;qZF+rlvNQEh z&%pE``iu}X;F+#;n<$S+|3?aNyqwjiKB4Sc>@(+)F*Q}7o!PYZ%-G8c8{<$~U-EHlJMs4djqF4+A@>#xc;@SoKD$di^id;s2GWZgK;y3gnfcwuSF6Q5}J+O*5eYA zg4DiKV|ab|k*aX_O8?h2*6aL}d1X1V!}Y|Fwl2$PCMXqTjxjQ@ri}(gg8URrMO)zD zkNaP4UNhwHhVRWFdqI7Cg&=IH-J4a^Lu#>0jMpj^I;&m;Y)hxMX*n`rX2^yAy>fyf zh@%I^?i|}^McMt(rWLh*+}AxteIyno#GU>WL+iv_{(yXz&`d%`CvzgEaUO$mZPcVy z;a>lk<6wH#b9%8tbUw4wdPg#+ zr?T=it7wj+@)2QMInjvQ)mSTq$QWHlR~M;WT`xGnWG!arJVveDqIdp*KbKew!Q1z^ zWS&a>NW0YfD-HsvYb$lcxm_RC?z$%{tHSf>$;9NN{kf}QT@->R5Ck9z>1|?7>5^BU z!dl~HC@}>^?o|ql+^{GFV?DZ`;bHbIo@=U(mP@wXxHSFuj&Gg&bnIwbqj_0CKL^h% zG`EUAX?gZXI5;GLJpKfjGW91}pde1#f8)lk@Sw)xIR{Vlp1Q7#%`mwb`&7LTopb!< z!E;opGUj4+F3l;7ko{xrZ;NMlCy&&6Yw^{bYqVK+{?ZI@fa{qNONk?pDiB1tMyhpJk8y{9p zfQ~sKKisaX9g!6>FnoAQtKkdgvLOV&{yl*l6#CHZLmQxIpAd$74@E=r${?+VE-DF6E8xw z;^1nh1PbVDm=@`KUD|x^!`OB_~7G1P7~vL0YSs=gL(4 z=e3@0SX;G>?z3Tcqp-9zMuQq(^KIyJ)((^~RoNd4Ize0R40GJqfk^+-Ei{FKI`DAu zj=A@$Dvdng;F-iEMVXB53C%UFGe+CdJebxqyPgi>>e5q+8;_=gi#3o0@R)!M%s@`bIR^G)k%&CPtj{%N_@7p5HyFRQ`9 zE-DAaAbZviXP;pBkk_m5ESW2eB-__V6gj<)kH5^^N(-ZuG--C+puG89A}Qw8tx?;1 zYEd!mpHdZmZOPDjo^za9Che z2{R024LDooy%%Jo*yVknR2{3EWYWY&Q0P+5o|2$N*R;msQp*q&WmbL9(BDAL9`xtO z^9xA~5T5LciV6&d+2tLXAMUFwTSx_IWM{C=Et8Ze6){lx7RXn{|LnA z)DLJQx=8<5RvXy-I2u57B`zBXmVdS=_b9^!2*{B-i-_-dZ0qnw1HHN7v|WmBI+pVk z<4^H}L~9+C06Nguz$nT1Gbx`RB!Iip1t{)o(eg$s9lZj$BhZqg!HyWir7c-;Z_Do( z#K)fZ)Rdh661`pYmoTm;;5VS&{a(2~8LzmQ8k&3)sv|TKi`@cINr2e_R`N)Ff}Fx{ z2e^GpjHBx(z@}7>a=HKxC$8vQ{Fl_)Q_ssC6rrEQ5OoewB+9ErR*My1Y;{en7zPUA@C-O-~Ix(uK97Ot`5gF0&plt z9&Gr6P*T)Idg@^MqITdmh0@)j4}#&8_3Z(&?r}&Q2w;Iv(#)QsRK;T zRcJOzH;RK38`Ar@i=vCrJlJo?YZM$V_V&i&XS|(WpeiQk&UY*j7KRCz=?5d$J&>y} zGDGd6p;e^l*<$BzEw&~pvmeBOC)L9UminW`vh^V%n~yDIPC_%R9^kA!fC0RMpt>FW zu}Q<(gKL)F=MJMl0^ox)l^}}!KmJqT9=|^<{@-63FR%eJED_i*an%MjW=H16=9dM) zWAKLo^epwfl37N%`nHWrxLnw6cMeIxYWS(g>Iv$>BSgCCV&!B7>`J543u^+^@F810 zn?-6r{e2bL8E)b{9Xhd6Mui!YQcyw6l=o)$APU@29{ zN@cztw@bQ&GRkMl5S09-AM4a6Y5A<)g|QbO$c4px-LLj~E<~); zW~K#SG=z5F5}-Bvt(g}HB-|$o@s;qLG&q?u*vThdaF^8yQMAorAj^6c!!#~(T;h^8 zZ1op?_C1U4K;{@P1FWeMhxo?XRL&BP{3-2d9ICVDGnFYgB$c95sPKFVpT7IGBYtZ+ zZ8J@Py!B=O5bb$G3`y)(7uaEAYW)&_zhH1Fyuswre0`o}+t-PDrdH!HSR{F+VaQ;B z*Pr*PQQf<97jfZzO~P4P!+2*|!|hTQD)EzJ>!EQKO@yaHU1qpeT2)}8oO!et zE_>GeT-Td=N8%cvIo|vUaUqAKnPnF~iEzygt%DoU%=^68rrjd`Ffr4ZxP*J@+x?rQ z!UhbFbypf`Z$`$As(++7%-0tS?YHu8?OrCrl9d7qT77iOb}{-TWF+Y{Z_D7%b$F*5 zeY1p6lJ6skKM&Y&g|n5`x5x90r!7>{$?x5|<%XuwDda#B*~QO&xj=SS2%*uvC6)OJ z+3hvV<-V5~gp1Lx9}p}ler12DwkF={;XiVj)b(dhSGC+ehQ6s+;#;dy-G)#m82XXz zWj?-FzCW>1-nHt_^K~vJ6x7UX$$Sul^LTlyE}v{# zR*MfeSuORispBm1?sjYavhhl4+Y(Fw)?AzUBPFd=o4jMk`m#kNfC1qqBNd1EJ**z< zSVgUU+hFgNU`~@tI*#OVYFrLf92miEd<}@?;kuUIoK*Ia4?MeNLIvxlNBNDo<%LdS z{D!;bZKbAO+B1a@KO-&duoJH( z1=PpAjNnAZo9`pj@7zE#tK-rbM1w{|yaeP2%N5OB5?zE*nlo0pVD%N-C{&~i%uf}y zjEGNbuW4^$bw~Oi3|%WNFKSogXhQ8$3Zj13G-11~Z2wwnH5y}mbCSQb_-8nDjQHtd z6dP#VjCitXk>L51ee;hE-IU4Ih?KTdqfDWDTk=C~hJ(4)_7SV&(0RDk+SKBi&R}~T zW7$0uXfnPH|F*Iz!x$=N)!rC^Q)qF5X3?zIMXldZb5?5D2ts-!$I%eGrvsg;*|9R# zC0af+ZfBfqkuOen27Umy%GA$>kmz9!Q$LolEyI(@ts(d+ttERlY*!@1 zx2D*aHK{wx{bN(G;~#7DX3&w8v8uv0Y9%QK;zajvL81cag~%a`^k!C&K6){ENILk5 zK<_Ml(1Q$O{;i<10BCUlxuOc%O8q?->^G85KoFy1!V#!vBwfhE(V?MrmM9n)c#{{u zOwM9Y^s`|=P0y`nO~DvGN{I4)7NWY(XSGL$O@qSC;)m4wf39;z`F&EISzQTc1#_ka iHoOCr#os>Z!xJL+FBxk5z W | S1:27-50, S2:550-583 | supported (0.97) | +| O W --> N | S1:27-50, S3:453-483, S4:81-127, S4:147-203, S4:205-258 | insufficient (0.46) | +| O N --> D | S1:62-72, S3:569-593, S5:184-215 | supported (0.96) | +| O N -.-> F | S1:51-72, S3:569-593 | supported (0.92) | +| O D --> L | S5:199-244, S5:447-457 | supported (0.99) | +| O D -.-> P | S5:78-98, S5:246-307, S5:364-395 | supported (0.96) | +| O L --> R | S5:447-457, S1:64-72, S6:11-45 | supported (0.96) | +| O P -.-> R | S5:209-244, S3:584-594, S2:584-619 | supported (0.97) | +| O N --> R | S1:43-50, S3:497-503, S5:184-198 | supported (0.99) | +| D UI --> API | S2:550-583, S3:546-569 | supported (1) | +| D UI --> NORM | S1:27-42, S4:193-203, S4:243-258 | supported (0.94) | +| D API --> CONVERT | S3:453-495, S4:299-363 | supported (1) | +| D CONVERT --> NORM | S3:474-483, S4:193-203 | supported (0.8) | +| D NORM --> MATCH | S5:184-215 | supported (0.99) | +| D CONFIG --> API | S3:568-578, S7:26-59 | supported (0.95) | +| D CONFIG --> MATCH | S5:78-90, S5:246-254, S5:364-374, S5:447-457 | supported (1) | +| D API --> QUOTA | S3:364-390, S3:410-436, S3:546-589 | supported (0.99) | +| D TOOLS --> FP | S8:10-27, S8:45-67, S9:154-189 | supported (0.99) | +| D RUN .-> API | S10:1-45, S3:24-32 | supported (0.99) | +| D UI .-> DIAG | S1:51-72, S3:569-593 | supported (0.93) | +| D MATCH .-> FP | S5:447-457, S9:201-239 | supported (1) | +| D MATCH .-> REMOTE | S5:199-215, S5:78-98, S5:291-307, S5:364-395 | supported (0.9) | +| D MATCH --> RESULT | S5:184-244 | supported (0.85) | +| D RESULT --> UI | S1:64-72, S6:11-45, S2:584-619 | supported (0.99) | +| D SUPPORT .-> UI | S11:1-80, S12:1-42 | supported (0.88) | +| O R .-> ART | S6:46-50, S2:619-633 | supported (0.92) | +| D UI .-> ART | S6:46-50, S2:619-633 | supported (0.82) | + +## Specific source-concern diagnosis + +A subsequent bounded diagnostic on 2026-10-04 used jev-1.13.0 with 5693 input/147 output tokens and redacted pinned source. The three separately judged call chains (CLI file, CLI microphone and web upload to shared normalization) each returned yes probability 0.96. No listed concrete contradiction was selected (confidence 0.99). This supports those individual facts, not a new whole-arrow or complete-diff approval. Earlier insufficient judgments remain disclosed above; the full-review gates and integration condition are unchanged. + +## Focused local execution evidence + +On 2026-10-04, all 44 existing tests in [test_recorder.py](../../tests/test_recorder.py), [test_audio_pipeline.py](../../tests/test_audio_pipeline.py) and [test_web_pipeline.py](../../tests/test_web_pipeline.py) passed against this pinned source. A disposable Python environment supplied pytest 8.4.2, NumPy 2.5.3, SciPy 1.18.1 and Flask 3.1.3. The workspace harness blocked socket connections, disabled dotenv loading, removed credential environment variables and used workspace fixture/cache paths. Microphone and provider boundaries were mocked. Earlier fixture setup errors were caused by an inaccessible system temp folder and resolved by changing only the harness paths. This is focused local input/normalization/upload evidence, not full-suite, device, FFmpeg-installation, dependency-lock, live provider, quota database, deployment or Jev gate clearance. diff --git a/docs/architecture/verify.mjs b/docs/architecture/verify.mjs new file mode 100644 index 0000000..1b10695 --- /dev/null +++ b/docs/architecture/verify.mjs @@ -0,0 +1,86 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import {fileURLToPath} from 'node:url'; +import {execFileSync} from 'node:child_process'; +const dir=path.dirname(fileURLToPath(import.meta.url)),repo=path.resolve(dir,'../..'); +const remoteRepository='icecold009/Audio-Recognition'; +const read=f=>fs.readFileSync(path.join(repo,f),'utf8').replace(/\r\n/g,'\n'); +const fail=message=>{throw new Error(message);}; +const graphBlock=s=>s.match(/```mermaid\n([\s\S]*?)\n```/)?.[1]?.trim(); +function validate(c){ + const snapshot=c.coverage.match(/Snapshot: `([a-f0-9]{40})`/)?.[1]; + if(snapshot!==c.snapshot)fail('Snapshot mismatch'); + const listed=[...c.coverage.split('## File accounting')[1]?.matchAll(/^- `([^`]+)`$/gm)??[]].map(m=>m[1]); + if(new Set(listed).size!==listed.length)fail('Duplicate inventory path'); + if(JSON.stringify([...listed].sort())!==JSON.stringify([...c.paths].sort()))fail('Missing or extra inventory path'); + for(const f of listed)if(!c.exists(f))fail('Snapshot file missing: '+f); + if(graphBlock(c.caseStudy)!==c.overview.trim())fail('Case-study Mermaid differs from overview'); + const rootBlock=c.rootReadme.split('## Source-reviewed architecture overview')[1]; + if(!rootBlock||graphBlock(rootBlock)!==c.overview.trim().replaceAll('"../../','"'))fail('Root Mermaid differs from overview'); + if(graphBlock(c.coverage)!==c.detail.trim())fail('Coverage Mermaid differs from detail'); + let links=0,edges=0; + for(const [file,text] of [['docs/architecture/overview.mmd',c.overview],['docs/architecture/detail.mmd',c.detail]]){ + const nodes=[...text.matchAll(/^\s+(\w+)\[/gm)].map(m=>m[1]); + if(new Set(nodes).size!==nodes.length)fail('Duplicate diagram node'); + for(const m of text.matchAll(/^\s+(\w+)\s+(?:-->|<-->|-\.(?:->|[^\n]*?\.->))(?:\|[^|]*\|)?\s*(\w+)/gm)){ + if(!nodes.includes(m[1])||!nodes.includes(m[2]))fail('Dangling diagram endpoint');edges++; + } + for(const m of text.matchAll(/click \w+ "([^\"]+)"/g)){ + const target=m[1],remote=target.match(/^https:\/\/github\.com\/([^/]+\/[^/]+)\/(?:blob|tree)\/([^/]+)\/(.+)$/); + if(remote){if(remote[1]!==remoteRepository||remote[2]!==c.snapshot||!c.exists(decodeURIComponent(remote[3])))fail('Unpinned or missing source target');} + else if(/^https?:/.test(target))fail('Unrecognized diagram source URL'); + else if(!c.exists(path.relative(repo,path.resolve(repo,path.dirname(file),decodeURIComponent(target)))))fail('Missing diagram link'); + links++; + } + } + for(const [file,text] of [['docs/architecture/README.md',c.caseStudy],['docs/architecture/coverage.md',c.coverage],['docs/architecture/verification.md',c.verification]]){ + for(const m of text.matchAll(/\]\(([^)]+)\)/g)){ + if(/^https?:|^#/.test(m[1]))continue; + const local=path.relative(repo,path.resolve(repo,path.dirname(file),decodeURIComponent(m[1]))); + if(!c.exists(local))fail('Missing documentation link');links++; + } + } + const key=s=>s.match(/^\s*(\w+)/)?.[1]+(s.includes('<-->')?'<-->':'->')+s.match(/(\w+)\s*$/)?.[1]; + const expected=[...c.overview.split('\n').filter(s=>/^\s+\w+\s+(?:-->|<-->|-\.)/.test(s)).map(s=>'O:'+key(s)),...c.detail.split('\n').filter(s=>/^\s+\w+\s+(?:-->|<-->|-\.)/.test(s)).map(s=>'D:'+key(s))].sort(); + const sources=new Map([...c.verification.matchAll(/^- \[(S\d+)\]\(\.\.\/\.\.\/([^)]+)\)$/gm)].map(m=>[m[1],m[2]])); + const rows=[...c.verification.matchAll(/^\| ([OD]) ([^|]+) \| ([^|]+) \|/gm)]; + if(JSON.stringify(rows.map(m=>m[1]+':'+key(m[2])).sort())!==JSON.stringify(expected))fail('Source map misses or duplicates an arrow'); + for(const row of rows){ + const ranges=[...row[3].matchAll(/\b(S\d+):(\d+)-(\d+)/g)]; + if(!ranges.length)fail('Missing source range'); + for(const range of ranges){ + const file=sources.get(range[1]);if(!file||!c.paths.includes(file))fail('Unknown source key'); + if(/(?:^|\/)(?:\.env|secrets|credentials)(?:\.|\/|$)|\.(?:pem|key|db|sqlite)$/i.test(file))fail('Sensitive source range refused'); + if(Number(range[2])<1||Number(range[3])c.sourceLines(file))fail('Invalid source range'); + } + } + return {snapshot,inventoryPaths:listed.length,links,edges,sourceMappedArrows:rows.length}; +} +try{ + const coverage=read('docs/architecture/coverage.md'),snapshot=coverage.match(/Snapshot: `([a-f0-9]{40})`/)?.[1]; + if(!snapshot)fail('Missing full snapshot commit'); + const paths=execFileSync('git',['-c',`safe.directory=${repo.replaceAll('\\','/')}`,'-C',repo,'ls-tree','-rz','--name-only',snapshot],{encoding:'utf8',stdio:['ignore','pipe','pipe']}).split('\0').filter(Boolean); + const exists=f=>{const full=path.resolve(repo,f);return full.startsWith(repo+path.sep)&&fs.existsSync(full);}; + const lineCache=new Map(); + const sourceLines=file=>{if(!lineCache.has(file)){const content=execFileSync('git',['-c',`safe.directory=${repo}`,'-C',repo,'show',`${snapshot}:${file}`],{encoding:'utf8',maxBuffer:2*1024*1024,stdio:['ignore','pipe','pipe']});lineCache.set(file,content.split(/\r?\n/).length);}return lineCache.get(file);}; + const c={snapshot,paths,coverage,overview:read('docs/architecture/overview.mmd'),detail:read('docs/architecture/detail.mmd'),caseStudy:read('docs/architecture/README.md'),rootReadme:read('README.md'),verification:read('docs/architecture/verification.md'),exists,sourceLines}; + const result=validate(c); + let negativeChecks=0; + if(process.argv.includes('--self-test')){ + const brokenDetail=c.detail+'\n SUPPORT --> MISSING_NODE\n'; + const mutants=[ + [{...c,paths:c.paths.slice(1)},'Missing or extra inventory path'], + [{...c,coverage:c.coverage+'\n- `'+c.paths[0]+'`\n'},'Duplicate inventory path'], + [{...c,exists:f=>f!==c.paths[0]&&exists(f)},'Snapshot file missing:'], + [{...c,detail:brokenDetail,coverage:c.coverage.replace(graphBlock(c.coverage),brokenDetail.trim())},'Dangling diagram endpoint'], + [{...c,rootReadme:c.rootReadme.replace('## Source-reviewed architecture overview','## Removed architecture overview')},'Root Mermaid differs from overview'], + [{...c,caseStudy:c.caseStudy+'\n[broken](missing-documentation-link.invalid)\n'},'Missing documentation link'], + [{...c,coverage:c.coverage.replace(c.snapshot,'0'.repeat(40))},'Snapshot mismatch'], + [{...c,verification:c.verification.replace(/^\| O I --> W \|[^\n]+\n/m,'')},'Source map misses or duplicates an arrow'], + [{...c,verification:c.verification.replace(/S\d+:(\d+)-/,'S999:$1-')},'Unknown source key'], + [{...c,verification:c.verification.replace(/S\d+:\d+-/,'S1:0-')},'Invalid source range'], + ]; + for(const [m,expected] of mutants){let reason='';try{validate(m);}catch(error){reason=error.message;}if(!reason.startsWith(expected))fail('Negative fixture did not fail at its intended check: '+expected);negativeChecks++;} + } + console.log(JSON.stringify({...result,negativeChecks,scope:'read-only documentation structure; not semantic, runtime, hosted or renderer proof'})); +}catch(error){console.error('Architecture verification failed: '+error.message);process.exitCode=1;}