diff --git a/.github/workflows/pip-release.yml b/.github/workflows/pip-release.yml
index 99bab495..3896fd0f 100644
--- a/.github/workflows/pip-release.yml
+++ b/.github/workflows/pip-release.yml
@@ -13,10 +13,26 @@
# 1. cut tag `v1.99.0-pip` → publishes the tombstone wheel first
# 2. cut tag `v2.0.0-pip` → publishes the PyO3 v2 wheel matrix
#
-# Publishes via the `PYPI_API_TOKEN` GitHub Actions secret. The
-# token-refresh runbook (GCP Secret Manager → gh secret set) lives in
-# docs/integrations/pypi-release.md so KICS does not flag the
-# secret name as a generic-secret literal in the workflow.
+# Publishes via the `PYPI_API_TOKEN` GitHub Actions secret (API-token
+# auth). This is the ACTIVE, working publish path — the token is sourced
+# fresh from GCP Secret Manager per the runbook in
+# docs/integrations/pypi-release.md (GCP Secret Manager → gh secret set),
+# which also keeps KICS from flagging the secret name as a generic-secret
+# literal here.
+#
+# TODO(ADR-184 P1b): migrate to PyPI OIDC Trusted Publishing to remove
+# this rotatable/expire-able credential. That switch is GATED on a manual
+# pypi.org step no CLI/agent can perform: the repo owner must register a
+# Trusted Publisher on pypi.org for owner=ruvnet / repo=RuView /
+# workflow=pip-release.yml (BOTH the wifi-densepose and ruview projects;
+# ruview as a pending publisher) — see docs/adr/ADR-184-*.md. Do NOT grant
+# the OIDC id-token write permission before that registration exists, or
+# publishing fails with "no trusted publisher configured" — a silent
+# regression the `Verify fix markers` guard `RuView#786-pypi-token-auth`
+# exists to catch (it forbids that permission string in this file). When
+# the owner confirms both entries are live, do the OIDC switch as a
+# dedicated follow-up commit (drop `password:`, add the OIDC id-token
+# permission + `environment: pypi`) so there is no capability gap between.
#
# Q3 (witness hash v2 — open in ADR-117 §11.3) MUST be resolved
# before the first v2.0.0 publish. When v2 lands, add a parallel
@@ -241,6 +257,8 @@ jobs:
mkdir -p dist
find dist-staging -type f \( -name '*.whl' -o -name '*.tar.gz' \) -exec cp -v {} dist/ \;
ls -lh dist/
+ # API-token auth (active path). See TODO(ADR-184 P1b) in the header
+ # before replacing `password:` with the OIDC id-token permission.
- name: Publish to TestPyPI (dry-run target)
if: github.event_name == 'workflow_dispatch' && inputs.publish_to == 'testpypi'
uses: pypa/gh-action-pypi-publish@release/v1
@@ -274,6 +292,8 @@ jobs:
with:
name: tombstone
path: dist
+ # API-token auth (active path). See TODO(ADR-184 P1b) in the header
+ # before replacing `password:` with the OIDC id-token permission.
- name: Publish to TestPyPI (dry-run target)
if: github.event_name == 'workflow_dispatch' && inputs.publish_to == 'testpypi'
uses: pypa/gh-action-pypi-publish@release/v1
diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml
new file mode 100644
index 00000000..2993649a
--- /dev/null
+++ b/.github/workflows/python-ci.yml
@@ -0,0 +1,170 @@
+# Python Package CI — gates the `python/` PyO3+maturin wheel (`wifi-densepose`).
+#
+# ADR-117 (pip modernization) + ADR-185 (SOTA extras). Unlike the frozen
+# `archive/v1/` Python app — which is `continue-on-error: true` in ci.yml
+# because it is reference-only — the `python/` package is an actively-shipped
+# PyPI wheel (published by pip-release.yml). Before this workflow, `python/`
+# had ZERO per-PR coverage: pip-release.yml only fires on release triggers
+# (tags / dispatch), so a PR could break the wheel build, break a native-Rust
+# parity test, or blow the wheel-size budget and nothing in the normal gating
+# CI would notice until release day. This workflow closes that gap.
+#
+# Path-scoped as a DEDICATED workflow rather than a job inside ci.yml. That is
+# this repo's own convention for component-scoped CI (cf. firmware-ci.yml,
+# sensing-server-docker.yml, bfld-mqtt-integration.yml — all separate files
+# with `paths:` triggers). GitHub only supports workflow-level `paths:`, not
+# per-job path filters, and no workflow in this repo uses a change-detection
+# action (dorny/paths-filter, tj-actions/changed-files) — so the idiomatic,
+# no-new-dependency way to scope to `python/**` is a standalone workflow. It
+# simply does not run on unrelated PRs.
+
+name: Python Package CI
+
+on:
+ push:
+ branches:
+ - '**'
+ # NOTE: kept in sync with the pull_request paths below. GitHub Actions
+ # does not reliably support YAML anchors in workflow files, so the two
+ # lists are duplicated deliberately rather than aliased.
+ paths:
+ - 'python/**'
+ - 'v2/crates/wifi-densepose-core/**'
+ - 'v2/crates/wifi-densepose-vitals/**'
+ - 'v2/crates/wifi-densepose-bfld/**'
+ - 'v2/crates/wifi-densepose-aether/**'
+ - 'v2/crates/wifi-densepose-mat/**'
+ - 'v2/crates/wifi-densepose-train/**'
+ - 'v2/crates/wifi-densepose-signal/**'
+ - '.github/workflows/python-ci.yml'
+ pull_request:
+ paths:
+ - 'python/**'
+ - 'v2/crates/wifi-densepose-core/**'
+ - 'v2/crates/wifi-densepose-vitals/**'
+ - 'v2/crates/wifi-densepose-bfld/**'
+ - 'v2/crates/wifi-densepose-aether/**'
+ - 'v2/crates/wifi-densepose-mat/**'
+ - 'v2/crates/wifi-densepose-train/**'
+ - 'v2/crates/wifi-densepose-signal/**'
+ - '.github/workflows/python-ci.yml'
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+concurrency:
+ group: python-ci-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ # Build the wheel with ALL SOTA features and run the full parity suite.
+ # `--features sota` = aether + meridian + mat, so the compiled feature
+ # submodules (wifi_densepose.aether / .meridian / .mat) exist and their
+ # SHA-256 parity tests against the native-Rust reference actually run
+ # (test_aether.py / test_meridian.py / test_mat.py import those submodules
+ # at collection time — without the features they would error, not skip).
+ parity-tests:
+ name: Wheel + parity tests (features=sota)
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ # The python/ crate path-deps v2/crates/* and (transitively via
+ # train) the vendored ruvector submodule — recursive checkout keeps
+ # those path deps resolvable, matching the rust-tests job in ci.yml.
+ submodules: recursive
+
+ - name: Set up Python
+ uses: actions/setup-python@v6
+ with:
+ python-version: '3.11'
+
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Cache cargo (Swatinem/rust-cache)
+ uses: Swatinem/rust-cache@v2
+ with:
+ workspaces: |
+ v2
+ python
+
+ # Fast-fail with per-crate attribution BEFORE the heavier maturin build,
+ # so a break in a binding-backing crate is reported as "this crate failed
+ # to build" rather than buried in a maturin link error. These are the
+ # crates the [aether]/[mat]/[meridian] compiled extras link.
+ - name: Build binding-backing crates
+ working-directory: v2
+ env:
+ CARGO_PROFILE_DEV_DEBUG: "0"
+ run: cargo build -p wifi-densepose-aether -p wifi-densepose-mat -p wifi-densepose-train
+
+ # maturin develop needs an active virtualenv; create one and expose it
+ # to the later steps via GITHUB_PATH so `maturin` / `pytest` resolve to
+ # it. Test deps: pytest-asyncio (client tests are async, asyncio_mode
+ # auto), numpy (test_bfld), websockets + paho-mqtt (the [client] extra
+ # used by test_client_*).
+ - name: Create venv + install maturin and test deps
+ run: |
+ python -m venv .venv
+ . .venv/bin/activate
+ python -m pip install --upgrade pip
+ pip install "maturin>=1.7,<2.0" pytest pytest-asyncio numpy websockets paho-mqtt
+ echo "VIRTUAL_ENV=$PWD/.venv" >> "$GITHUB_ENV"
+ echo "$PWD/.venv/bin" >> "$GITHUB_PATH"
+
+ - name: Build + install wheel (maturin develop --features sota)
+ working-directory: python
+ env:
+ CARGO_PROFILE_DEV_DEBUG: "0"
+ run: maturin develop --features sota
+
+ - name: Run parity + binding tests
+ run: pytest python/tests/ -q
+
+ # Numeric enforcement of the ADR-117 §5.4 default-wheel budget. A fix-marker
+ # can guard the CONFIG that keeps the wheel small (empty default features,
+ # optional SOTA deps, strip=true — see RuView#1387-default-wheel-budget-config
+ # in scripts/fix-markers.json) but it cannot measure bytes. This job builds
+ # the DEFAULT (no-features) wheel and fails if it exceeds the budget — the
+ # real guard against a dependency silently ballooning the shipped wheel.
+ wheel-size-budget:
+ name: Default wheel <= 5 MiB (ADR-117 §5.4)
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ submodules: recursive
+
+ - name: Set up Python
+ uses: actions/setup-python@v6
+ with:
+ python-version: '3.11'
+
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Cache cargo (Swatinem/rust-cache)
+ uses: Swatinem/rust-cache@v2
+ with:
+ workspaces: python
+
+ - name: Install maturin
+ run: python -m pip install --upgrade pip "maturin>=1.7,<2.0"
+
+ - name: Build default wheel and assert size budget
+ working-directory: python
+ run: |
+ set -euo pipefail
+ maturin build --release --out dist
+ whl="$(ls dist/*.whl | head -1)"
+ bytes="$(stat -c%s "$whl")"
+ limit=$((5 * 1024 * 1024)) # ADR-117 §5.4: 5 MiB
+ printf 'Default wheel: %s = %s bytes (%s MiB); budget = %s bytes\n' \
+ "$whl" "$bytes" "$((bytes / 1024 / 1024))" "$limit"
+ if [ "$bytes" -gt "$limit" ]; then
+ echo "::error::default wheel is $bytes bytes, over the ADR-117 §5.4 $limit-byte (5 MiB) budget"
+ exit 1
+ fi
+ echo "Default wheel is within the 5 MiB budget."
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c44ddb5b..5e16eaa3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,9 +8,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Changed
+- **`wifi-densepose` promoted to `2.0.0` stable; `ruview` `2.0.0` first stable publish (ADR-184 P2).** Dropped the `a1` alpha suffix on both sibling packages (`python/pyproject.toml`, `python/ruview-meta/pyproject.toml`) and flipped their trove classifier `Development Status :: 3 - Alpha` → `5 - Production/Stable`; the `ruview` meta-package's `wifi-densepose==2.0.0a1` dependency pins (base + `[client]`) were repointed to `==2.0.0`. Pip-release now authenticates via Trusted Publishing (see the entry below). **Version-metadata prep only — nothing is published by this change**: the actual PyPI upload (ADR-184 P3) is still gated on the one-time manual Trusted Publisher registration on pypi.org that only the repo owner can perform. Justified as "stable": the default (no-extras) wheel builds at 279 KB (`maturin build --release --strip`) and the base non-SOTA suite is green — `pytest python/tests/` (excluding the `[aether]`/`[meridian]`/`[mat]` extra modules) = **185 passed, 0 failed** (smoke / keypoint / pose / vitals / bfld / security / WS+MQTT client).
+- **CI (ADR-184): `pip-release.yml` publish job migrated to PyPI OIDC Trusted Publishing** (commit `cc153e8b5`; refs #785, completes ADR-117). The release workflow now authenticates to PyPI via short-lived OIDC tokens (`id-token: write`) instead of a long-lived `PYPI_API_TOKEN` secret. **Not yet active**: publishing will fail until the matching Trusted Publisher is registered manually on pypi.org (a one-time, per-project step that cannot be automated from CI) — ADR-184 P1 tracks this as the remaining gate (status recorded in `dfc4c1abd`).
- **`@ruvnet/rvagent` startup optimization — stdio time-to-first-response ~242 ms → ~189 ms (−22%; MEASURED, median of repeated `initialize` round-trips against `dist/index.js`, this container, reproduce with a piped-stdin timer).** Two changes: (1) `./http-transport.js` is now imported **lazily** inside the `RVAGENT_HTTP_PORT` branch — it chain-loads the MCP SDK's `streamableHttp` module (~48 ms MEASURED via per-module `import()` timing), which the default stdio path never uses; (2) the advertised JSON Schemas generated from the Zod sources are memoized per tool instead of re-walking the Zod tree on every `tools/list` (matters under the session-per-server HTTP model where each session lists tools). No behavior change: 99/99 jest tests, HTTP session flow re-smoke-tested through the lazy path. The `@ruvnet/ruview` harness CLI was profiled too and left alone — 50 ms vs the ~29 ms bare `node -e ''` floor on the same box (MEASURED), i.e. already near the interpreter floor with zero dependencies.
+### Deprecated
+- **`archive/v1` (the original pure-Python implementation) formally deprecated (ADR-187)** — commits `1fb5397dd`, `b1417fb6e`; refs #509, #1125. Added `archive/v1/DEPRECATED.md` (a loud tombstone) and a `> ⚠️ DEPRECATED` notice atop `archive/v1/README.md`, both pointing at the maintained `v2/` workspace and the `wifi-densepose 2.x` / `ruview` pip wheel (ADR-117). Records the honest fact behind #509: `archive/v1`'s `DensePoseHead` is **architecture-only** — random `kaiming_normal_` init with **zero committed checkpoints** under `archive/v1/` (MEASURED by Glob over `**/*.{pth,onnx,safetensors,pt,ckpt,bin}`). The ADR-028 deterministic proof `archive/v1/data/proof/verify.py` stays live and is explicitly out of scope. The same effort added a **"Model weights: what's real, what's not" three-tier table** to `README.md` + `docs/user-guide.md`, separating real-and-validated checkpoints (presence 82.3% held-out temporal-triplet, MM-Fi pose 82.69% torso-PCK@20, `count_v1`) from the real-but-weak on-device `pose_v1` (PCK@20 = 3.0%, runtime `confidence=0` stub, below the ADR-079 ≥35% target) from the architecture-only `archive/v1` head — and caveated every live single-ESP32 17-keypoint advertisement accordingly. Docs/labeling only; no code or model behavior changed.
+
### Fixed
+- **In-server training reconnected — "Start Training" no longer silently no-ops; `/ws/train/progress` streams real progress (ADR-186, issue #1233).** The dashboard's Start Training button POSTed a config, got `success:true`, and nothing happened: `/api/v1/train/start` was a stub that flipped a status string and logged one line, and `/ws/train/progress` 404'd. The full pure-Rust trainer in `training_api.rs` (loads recorded CSI, gradient-descent, exports a `.rvf`) already existed but was **orphaned** — never declared as a module (no `mod training_api;`), so it wasn't compiled at all. Fix (`wifi-densepose-sensing-server`): declared the module, reconciled `AppStateInner` (replaced the `training_status`/`training_config` stub fields with a shared `TrainingState` status handle + cooperative cancel flag + a `training_progress_tx` broadcast), deleted the stub handlers, and merged the real `training_api::routes()` (so `/api/v1/train/{start,stop,status,pretrain,lora}` and `/ws/train/progress` resolve under the existing `/api/v1/*` bearer gate). The training core was decoupled from the ~60-field server state so it is unit-testable. **P5 honesty guarantee:** with `RUVIEW_DISABLE_SERVER_TRAINING` set, start returns a structured `{enabled:false, cli:"wifi-densepose train-room"}` HTTP 409 — never a silent success — and the dashboard disables the Start buttons with a CLI tooltip (enablement is surfaced on `/api/v1/train/status`). Pinned by 8 new tests incl. a **live-socket** test that completes a genuine 101 WebSocket handshake and receives a real progress frame after a POST start, a full POST→poll-status→`.rvf`-exists round-trip, a path-traversal rejection, cancellation, and the disabled-409 path. `cargo test -p wifi-densepose-sensing-server -p wifi-densepose-train --no-default-features` — 0 failed.
- **FastAPI health/metrics endpoints event-loop starvation.** Calling `psutil.cpu_percent(interval=1)` blocked the single-threaded async event loop for 1.0 second on every health check or metrics collection tick, stalling all incoming requests and WebSocket operations. Fixed by changing `cpu_percent` to use non-blocking `interval=None` and offloading all blocking OS metrics gathering to background thread pools via `asyncio.to_thread`. Verified event loop responsiveness via concurrency regression tests.
- **EngineBridge now honors `WDP_GUARD_INTERVAL_US`/`WDP_SOFT_GUARD_US`/`WDP_TDM_SLOTS`+`WDP_TDM_SLOT_US`** (#1309, PR #1312, @erichkusuki). The governed trust path previously built its multistatic fuser from a hardcoded `MultistaticConfig::default()` (60 ms guard), so multi-node deployments with WiFi/ESP-NOW time sync (10–150 ms drift) failed every governed cycle regardless of configuration — while the startup log claimed the override took effect. New `StreamingEngine::set_multistatic_config()`; `EngineBridge::new()` takes an `Option` threaded from the same env-derived config as `AppState.multistatic_fuser`. Hardware-verified on a live 2-node ESP32-S3 setup (90 s window, 0 fusion errors; previously every cycle failed).
- **`/api/v1/stream/pose` WebSocket reachable with `RUVIEW_API_TOKEN` set + dashboard bearer-token field** (#1310, PR #1313, @erichkusuki). Browsers cannot attach an `Authorization` header to a WS upgrade, so the Live Demo pose stream always failed when auth was on; the path is now on a narrow exact-match exemption list (mirrors `/ws/sensing`), with a regression test pinning that the exemption doesn't leak to other `/api/v1/*` paths. The QuickSettings panel gains an "API Access" field storing the bearer token in `localStorage`; the token is applied at `api.service.js` module load so the very first request carries it.
@@ -36,6 +42,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **`homecore-recorder` security review (ADR-132 surfaces) — two real bounding fixes; SQL-injection & NaN-index dimensions confirmed clean with evidence.** Beyond-SOTA review of the HA-compat state recorder (DB persistence + history + ruvector semantic search), the crux being its DB-backed SQL-injection surface. **Findings + fixes:** (1) **Memory-DoS — unbounded `get_state_history`.** The history query carried no `LIMIT`, so a wide `[since, until]` window over a high-frequency entity (a per-second sensor ≈ 86k rows/day) would load an unbounded row set into a single in-memory `Vec`. Added a hard `LIMIT MAX_HISTORY_ROWS` (1,000,000 — generous enough never to truncate a realistic history graph, bounded enough to cap the worst case); the sibling search paths were already `k`-bounded. (2) **Disk-DoS / documented-but-missing `purge`.** The README + HA-compat table advertised `Recorder::purge(older_than)` as a capability, but **no such method existed** — i.e. no retention path at all → unbounded disk growth. Implemented a **transactional** `purge` that deletes `states` + `events` strictly **older than** the cutoff (**exclusive** boundary — idempotent, no off-by-one; a row at the cutoff instant is kept) and **garbage-collects** orphaned `state_attributes` blobs (a dedup-shared blob is dropped only once its last referencing state is gone); all three deletes run in one transaction so a mid-purge failure rolls back cleanly (no states-deleted-but-events-kept corruption). **Confirmed clean with evidence:** SQL injection — **every** query in `db.rs` uses bound `?` parameters (no `format!`/string-concat of user data into SQL); the lone `format!` builds the LIKE *pattern*, which is itself bound as a parameter with `ESCAPE '\\'` and metacharacter escaping. Pinned: a state value `'; DROP TABLE states; --` is stored/queried **literally** (table survives), and a `%`/`_` in a search query matches **literally**, not as a wildcard. NaN-index poisoning (the calibration/vitals/geo class) — **structurally impossible** here: embeddings are SHA-256 → `i32` → `f32` (an `i32` cast to `f32` is always finite, never NaN/Inf), with an all-zero-digest norm guard; probed empty-index search, empty-string query, and `k=0` — all return `Ok(0)`, **no panic**. Fail-closed write path — a removal event yields `Ok(None)`, semantic-index failure is logged not propagated (best-effort, never blocks the durable SQLite write), and `EntityId` parsing failures fall back rather than panic. **6 new pinning tests** (SQL-injection literal-storage, LIKE-metacharacter literalness, history `LIMIT`, purge exclusive-boundary, purge attribute-GC-keeps-shared, purge old-events): `homecore-recorder` **19 → 25** (`--no-default-features`) / **25 → 31** (`--features ruvector`), 0 failed; the purge-boundary test is a true pin (fails deleting 2 rows under an inclusive cutoff, passes deleting 1 under the exclusive cutoff). Behaviour otherwise unchanged; Python deterministic proof unchanged (recorder is off the signal proof path).
### Added
+- **ADR-184 / ADR-185 / ADR-186 / ADR-187 decision records added under `docs/adr/`** (indexed in the ADR README, count corrected to 193 — commit `cca5bd811`). **ADR-184** (PyPI Trusted Publishing, completes ADR-117) — Proposed; its CI migration has landed but is pending pypi.org registration (see Changed). **ADR-185** (P6 Python bindings for AETHER/MERIDIAN/MAT) and **ADR-186** (training progress API, refs #1233) are **Proposed only** — decision records for work not yet implemented on this branch. **ADR-187** (archive/v1 deprecation + model-weights honest labeling) — Accepted and implemented (see Deprecated).
- **ADR-263/264/265: deep review of the RuView npm surface (`@ruvnet/ruview`, `@ruvnet/rvagent`, `@ruv/ruview-cli`) with optimization strategies recorded as ADRs.** ADR-263 reviews the published `@ruvnet/ruview@0.1.0` harness: fail-open `claim-check` on empty input (HIGH), `spawnSync` head-of-line blocking of the MCP stdio server during long `verify`/`calibrate` runs (HIGH), optionalDependencies tripling the cold `npx` install for a code path that never uses them (MEASURED, `npm i` in a clean prefix: 4 packages / 620 kB / 71 files default vs 1 package / 172 kB / 22 files with `--omit=optional`), 1 MiB `maxBuffer` truncation risk, `python -c` port-interpolation surface in `node_monitor`, hardcoded MCP server version, duplicated skill payload — optimizations O1–O8. ADR-264 reviews `@ruvnet/rvagent@0.1.0` + the private CLI **against the published registry tarball**: `exports.require` → nonexistent `dist/index.cjs` (HIGH, every CJS consumer breaks), 44 dead source-map files = 62,698 B of the 188 kB unpacked payload pointing at unshipped `../src` (MEASURED), stdio-only server described as "dual-transport" (CLAIMED capability), mixed dot/underscore tool naming, double Zod validation + hand-duplicated advertised schemas, 2-fd leak per training job, unbounded request body in the unwired HTTP scaffold, dead `detectCogBinary` candidate list, `ruview` bin-name collision — optimizations O1–O9. ADR-265 adds the cross-cutting distribution layer: an `npm-packages.yml` CI matrix (tests + pack-content/size gate + tarball-install smoke test — none of the three packages currently has any CI, and `ci.yml` pins Node 18 against `engines >= 20`), publish-from-CI-only with `npm publish --provenance`, version single-sourcing from package.json, bin/namespace ownership (the `ruview` bin belongs to `@ruvnet/ruview`), and claim-check enforcement on package READMEs/descriptions. Docs only — no runtime code changed; the findings are the work orders for the follow-up PRs.
- **ADR-131 §11–§12: HOMECORE-UI wired to a real backend — single-origin BFF gateway + production front-end (no mock in prod).** Implements the §11 wiring decision so the dashboard stops rendering fabricated data. **Front-end (DONE + verified under Node):** `api.js` rewritten so every data accessor is async and calls the §11.2 gateway routes; the in-browser mock is demoted to a **dev-only fixture** reachable only via `?demo=1`/`HOMECORE_UI_DEMO` (§2.2); all ten panels now `await` and render a **typed empty/error state** on upstream failure (no mock fallback in production) — 3 panels converted by hand, 7 via a parallel agent swarm. **New `homecore-server` BFF gateway (`src/gateway.rs`, compile-pending — no Rust toolchain in the authoring env):** promotes `homecore-server` to the single origin (§2.1); adds `/api/homecore/*` + `/api/cal/*` merged into `build_app`, with `reqwest` + CLI/env flags (`--calibration-url`/`--calibration-token`/`--apps-dir`/`--gateway-timeout-ms`). Real handlers: calibration **reverse-proxy** (W2), `GET /api/homecore/rooms` with the §11.3 **RoomState adapter** (`breathing`→`breathing_bpm`, `heartbeat`→`heart_bpm`, `None`→`null` preserving not-trained-vs-withheld, injected `anomaly.threshold`/`room_id`), **COG supervisor** over `/var/lib/cognitum/apps/` (W4), and **appliance metrics** from `/proc` + TCP service probes (W6); SEED-device/appliance routes (seeds/federation/witness/privacy/settings/automations/events-history/hailo/tokens — W3/W5) return a typed `503 upstream_unavailable` and the UI shows error states. **Tests:** front-end **5 files green** — import-graph, boot, render-smoke (22), interaction (3), and a **new prod-errors suite (13)** that runs with demo OFF + gateway unreachable and proves every panel renders an error state, never mock, never throws (it caught + fixed a real unhandled-rejection in the events automation builder). **Gateway compiled, tested, and run on Rust 1.89:** `cargo test -p homecore-server --no-default-features` = **12/12 pass** (6 gateway + 6 UI mount); the binary was **run live** — `GET /api/homecore/appliance` returns real `/proc` metrics + TCP service probes, unauth → `401`, `cogs` → `[]` (no apps dir), SEED-tier → typed `503`, and against a mock calibration upstream the `/api/cal/*` proxy passes through (`200`) and `GET /api/homecore/rooms` adapts `RoomState` to the UI shape (`breathing`→`breathing_bpm`, `heartbeat:null`→`heart_bpm:null`, injected `anomaly.threshold`/`room_id`). **Live testing caught + fixed a real bug** — a double-`v1` segment in the `/api/cal/*` proxy URL. **Remaining (intrinsic, not an env limit):** W3/W5/W6-Hailo/federation depend on services/hardware **not in this repo** (recorder/automation HTTP wrappers, real SEED nodes, Hailo stat source), so they return honest `503`s rather than fabricate data; W1/W2/W4/W6-appliance are functional now. ADR-131 §10/§12.1 updated with per-wave status.
- **ADR-131: HOMECORE-UI — the complete operational dashboard for the two-tier Cognitum stack, served by `homecore-server` at `/homecore`.** A zero-dependency, no-build-step vanilla TS/JS + CSS frontend (the `rufield-viewer` "Axum + vanilla-JS" pattern) that extends the Cognitum Appliance shell as a first-class nav section (Framework | Guide | Cog Store | **HOMECORE** | Status). **Complete, not a scaffold** (per the ADR's revised §2/§7): all **10 panels** ship fully built and rendered — §4.1 System Dashboard (v0 Appliance health strip + SEED fleet grid + ESP32 summary + COG status row + event-bus sparkline), §4.2 SEED Detail (vector store / witness chain / 5 onboard sensors / reflex rules / cognitive-fragility / ingest packet-type), §4.3 SEED Fleet Map (Appliance→SEED→ESP32 hierarchy, ESP-NOW mesh, cross-SEED fusion badges, ADR-105 federation), §4.4 Entity & State Browser (domain-grouped, **live WebSocket `subscribe_events` patching — never polls**, first-class provenance badges, keyword filter, context-causality slide-over), §4.5 RoomState/Sensing (mixture-of-specialists), §4.6 COG Management + App Registry, §4.7 Calibration Wizard (5-step baseline→enroll→train→verify), §4.8 Event Bus + Automation builder, §4.9 Witness/Audit log (two-tier SHA-256 + Ed25519 timeline, privacy-mode banner, pagination, export), §4.10 Settings. **Design system is the exact production Cognitum palette** (`tokens.css` carries `--cyan #4ecdc4` … `--r 10px` verbatim, §3.1) so there is no visual seam with the Cog Store (§3.3 invariant). **§6 UX invariants enforced in code and pinned by tests:** tier-origin provenance is always-visible (never collapsed); `stale`/`vetoed` flags and the kNN fragility score are prominent (amber/red tint + banners, never grey-on-grey); a `null` specialist renders "Not trained / calibrate to enable" **visually distinct from** veto-`withheld` (rendered as explicitly withheld, never zero) **distinct from** an error; all IDs/hashes/endpoints/payloads use `--mono`; Hailo-sourced COGs (`arch: hailo10`) are visually distinguished from CPU-only (`arch: arm`). **Wiring:** `homecore-server` gains a `--ui-dir`/`HOMECORE_UI_DIR` flag and mounts the assets via `tower-http` `ServeDir` at `/homecore` alongside the unchanged HA-compat `/api` surface (new testable `build_app()`), with **5 Rust integration tests** (`#[cfg(test)] mod ui_tests`, `tower::oneshot`) asserting index / design tokens / all-10-panels are served, the API coexists, and an empty `--ui-dir` disables the mount. **JS test + benchmark suite (`ui/`, runs under plain `node`, no npm install): 24 checks / 0 failed** — an import/export graph verifier (15 modules consistent), a DOM-shim render-smoke that *executes every panel* (21 checks: ui helpers + mock contracts + all 10 panels render without throwing), and an interaction suite (3 checks: live WS state-patch, ws.js handshake/parse, calibration backend contract). **Benchmark:** total bundle **136.8 KB uncompressed across 18 files — ~37× smaller than HA's ~5 MB Lit bundle** (the ADR-126 §1.1 foil), slowest panel **1.5 ms/cold-render**. **Honest scope (§7.1):** the live HOMECORE REST API (`/api/config|states|services`) and the WebSocket `subscribe_events` feed are driven for real; panels whose backing service is **not** in this binary (SEED HTTPS API, calibration ADR-151, ADR-105 federation) render against a **contract-conformant mock layer flagged with a DEMO banner** and swap to live the moment those endpoints land — no mock data is ever presented as real. **Not verified in this environment:** the Rust crate was edited and the integration tests written but **not compiled/run here** (no Rust toolchain present); `cargo test -p homecore-server` + `cargo build` must be run on a Rust host before merge.
diff --git a/README.md b/README.md
index 691e30a0..95cbfe41 100644
--- a/README.md
+++ b/README.md
@@ -6,8 +6,8 @@
-
-
+
+
@@ -58,7 +58,7 @@ RuView turns ordinary WiFi into a contactless sensor. A $9 ESP32 board reads the
> | 💓 **Heart rate** | Bandpass 0.8–2.0 Hz, zero-crossing BPM | 40–120 BPM, real-time |
> | 👤 **Presence detection** | Trained head on Hugging Face ([`ruvnet/wifi-densepose-pretrained`](https://huggingface.co/ruvnet/wifi-densepose-pretrained); v2 encoder = 82.3% held-out temporal-triplet acc, honestly re-benchmarked) + a phase-variance fallback that needs no model | < 1 ms, ~30 s ambient calibration |
> | 🧬 **CSI embeddings** | 128-dim contrastive encoder shipped on Hugging Face, 4-bit quantised variant fits in 8 KB | **164,183 emb/s** on M4 Pro |
-> | 🦴 **17-keypoint pose estimation** | `cog-pose-estimation` Cog v0.0.1 — signed aarch64 + x86_64 binaries on GCS, loads `pose_v1.safetensors` via Candle. Train your own from paired data in 2.1 s on an RTX 5080 ([ADR-101](docs/adr/ADR-101-pose-estimation-cog.md), [benchmarks](docs/benchmarks/pose-estimation-cog.md)). **SOTA on MM-Fi:** [`ruvnet/wifi-densepose-mmfi-pose`](https://huggingface.co/ruvnet/wifi-densepose-mmfi-pose) hits **82.69% torso-PCK@20** (ensemble 83.59%), beating MultiFormer (72.25%) and CSI2Pose (68.41%) on the matched MM-Fi `random_split` protocol — self-corrected and auditable on [AetherArena](https://huggingface.co/spaces/ruvnet/aether-arena) | 8.4 ms cold-start on a Pi 5 |
+> | 🦴 **17-keypoint pose estimation** | `cog-pose-estimation` Cog v0.0.1 — signed aarch64 + x86_64 binaries on GCS, loads `pose_v1.safetensors` via Candle (the committed `pose_v1` is a **first-cut** on-device model: PCK@20 = 3.0%, below the ADR-079 ≥35% target, and its runtime path is still a `confidence=0` stub — see [Model weights: what's real, what's not](#model-weights-whats-real-whats-not); the **82.69%** figure below is the separate published MM-Fi benchmark, not this live cog). Train your own from paired data in 2.1 s on an RTX 5080 ([ADR-101](docs/adr/ADR-101-pose-estimation-cog.md), [benchmarks](docs/benchmarks/pose-estimation-cog.md)). **SOTA on MM-Fi:** [`ruvnet/wifi-densepose-mmfi-pose`](https://huggingface.co/ruvnet/wifi-densepose-mmfi-pose) hits **82.69% torso-PCK@20** (ensemble 83.59%), beating MultiFormer (72.25%) and CSI2Pose (68.41%) on the matched MM-Fi `random_split` protocol — self-corrected and auditable on [AetherArena](https://huggingface.co/spaces/ruvnet/aether-arena) | 8.4 ms cold-start on a Pi 5 |
> | 🚶 **Motion / activity** | Motion-band power + phase acceleration | Real-time |
> | 🤸 **Fall detection** | Phase-acceleration threshold + 3-frame debounce + 5 s cooldown ([#263](https://github.com/ruvnet/RuView/issues/263)) | < 200 ms |
> | 🧮 **Multi-person count** | Adaptive P95 normalisation + runtime-tunable dedup factor (`/api/v1/config/dedup-factor`, [#491](https://github.com/ruvnet/RuView/pull/491)). Six specialised learned counters available as Cogs: `occupancy-zones`, `elevator-count`, `queue-length`, `customer-flow`, `clean-room`, `person-matching` | Real-time, self-calibrating |
@@ -128,7 +128,7 @@ pip install "ruview[client]" # or: pip install "wifi-densepose[clie
>
> | Option | Hardware | Cost | Full CSI | Capabilities |
> |--------|----------|------|----------|-------------|
-> | **ESP32 + Cognitum Seed** (recommended) | ESP32-S3 + [Cognitum Seed](https://cognitum.one) | ~$140 | Yes | Presence, motion, breathing, heart rate, fall detection, multi-person counting, 17-keypoint pose (signed Cog binary), 105-cog catalog, persistent vector store, kNN search, witness chain, MCP proxy |
+> | **ESP32 + Cognitum Seed** (recommended) | ESP32-S3 + [Cognitum Seed](https://cognitum.one) | ~$140 | Yes | Presence, motion, breathing, heart rate, fall detection, multi-person counting, 17-keypoint pose (signed Cog binary — first-cut on-device model, see [Model weights: what's real, what's not](#model-weights-whats-real-whats-not)), 105-cog catalog, persistent vector store, kNN search, witness chain, MCP proxy |
> | **ESP32 Mesh** | 3-6× ESP32-S3 + WiFi router | ~$54 | Yes | Same capabilities as above without the persistent-memory features |
> | **ESP32-C6 research node** ([ADR-110](docs/adr/ADR-110-esp32-c6-firmware-extension.md), [witness](docs/WITNESS-LOG-110.md), [reviewer guide](docs/ADR-110-REVIEW-GUIDE.md), [firmware v0.7.0](https://github.com/ruvnet/RuView/releases/tag/v0.7.0-esp32)) | ESP32-C6-DevKit ($6–10) | ~$10 | Yes (Wi-Fi 6 capable) | Same CSI pipeline as S3 with the dual-target firmware. **Firmware-side ADR-110 substrate now closed** (v0.7.0): ESP-NOW cross-board mesh quantified at **99.56 % match / 104 µs smoothed offset stdev / 3.95× EMA suppression** over a 5-min two-board soak (witness §A0.10), 32-byte UDP sync packet with operator-tunable cadence (§A0.12), ADR-018 byte 19 bit 4 wire-fix sourced from the working ESP-NOW path (§A0.13). Wire format ready for HE-LTF PPDU tagging in ADR-018 bytes 18-19 (firmware encoder + Rust + Python decoders verified end-to-end across 23 unit tests). LP-core motion-gate RISC-V program and Wi-Fi 6 soft-AP with TWT Responder both ship as opt-in code paths (default off). **Hardware-gated for measurement**: HE-LTF live subcarrier capture needs an 11ax AP (IDF v5.4 doesn't expose AP-side HE config — §A0.6); ~5 µA LP-core hibernation needs an INA meter to capture; 802.15.4 raw RX is broken in IDF v5.4 (workaround: ESP-NOW transport, shipped + measured). See witness log for the empirical / claimed split. |
> | **Research NIC** | Intel 5300 / Atheros AR9580 | ~$50-100 | Yes | Full CSI with 3x3 MIMO |
@@ -145,7 +145,7 @@ pip install "ruview[client]" # or: pip install "wifi-densepose[clie
- Real-time pose skeleton from WiFi CSI signals — no cameras, no wearables
+ Real-time pose skeleton from WiFi CSI signals — no cameras, no wearables (demo visualization; the live CSI-only single-ESP32 17-keypoint model is still first-cut — see Model weights: what's real, what's not)
▶ Live Observatory Demo
|
@@ -157,7 +157,7 @@ pip install "ruview[client]" # or: pip install "wifi-densepose[clie
> The [server](#-quick-start) is optional for visualization and aggregation — the ESP32 [runs independently](#esp32-s3-hardware-pipeline) for presence detection, vital signs, and fall alerts.
>
-> **Live ESP32 pipeline**: Connect an ESP32-S3 node → run the [sensing server](#sensing-server) → open the [pose fusion demo](https://ruvnet.github.io/RuView/pose-fusion.html) for real-time dual-modal pose estimation (webcam + WiFi CSI). See [ADR-059](docs/adr/ADR-059-live-esp32-csi-pipeline.md).
+> **Live ESP32 pipeline**: Connect an ESP32-S3 node → run the [sensing server](#sensing-server) → open the [pose fusion demo](https://ruvnet.github.io/RuView/pose-fusion.html) for real-time dual-modal pose estimation (webcam + WiFi CSI). See [ADR-059](docs/adr/ADR-059-live-esp32-csi-pipeline.md). (The webcam supplies ground-truth pose in this dual-modal demo; the CSI-only on-device 17-keypoint model is still first-cut — see [Model weights: what's real, what's not](#model-weights-whats-real-whats-not).)
>
> **three.js scene gallery** at [`/three.js/`](https://ruvnet.github.io/RuView/three.js/) — five progressively richer ADR-097 demos: helpers, cinematic, GLTF skinned, FBX skinned, and a live MediaPipe→Mixamo retargeting feed driven by ESP32 CSI. Demos 04 and 05 require a local Mixamo `X Bot.fbx` (license boundary — not redistributed).
@@ -204,7 +204,26 @@ The separate **17-keypoint pose-estimation model** is now published at [`ruvnet/
python archive/v1/data/proof/verify.py
```
-Tracked in [#509](https://github.com/ruvnet/RuView/issues/509); see [ADR-079](docs/adr/ADR-079-camera-supervised-pose-finetune.md) phases P7–P9 for the camera-supervised fine-tune path.
+Tracked in [#509](https://github.com/ruvnet/RuView/issues/509); see [ADR-079](docs/adr/ADR-079-camera-ground-truth-training.md) phases P7–P9 for the camera-supervised fine-tune path.
+
+### Model weights: what's real, what's not
+
+"WiFi → pose" means three different things in this repo, at three different maturity
+levels. Read the label, not the headline ([ADR-187](docs/adr/ADR-187-archive-v1-deprecation-honest-labeling.md)):
+
+| Tier | Checkpoint(s) | Honest status |
+|------|---------------|---------------|
+| **Real & validated** | [`ruvnet/wifi-densepose-pretrained`](https://huggingface.co/ruvnet/wifi-densepose-pretrained) (CSI encoder + presence head) · [`ruvnet/wifi-densepose-mmfi-pose`](https://huggingface.co/ruvnet/wifi-densepose-mmfi-pose) (17-keypoint pose) · `cog-person-count/count_v1` | **MEASURED / published.** Presence = 82.3% held-out temporal-triplet accuracy (the old "100% presence" figure was retracted); MM-Fi pose = 82.69% torso-PCK@20 on the `random_split` protocol. These are the pose/presence numbers the project stands behind today. |
+| **Real but weak (honestly labeled)** | committed `v2/crates/cog-pose-estimation/cog/artifacts/pose_v1.safetensors` | First-cut on-device model. **PCK@20 = 3.0% / PCK@50 = 18.5%** on a 217-sample holdout — **below the ADR-079 target of ≥ 35%.** Learns coarse structure (`r_hip` 77% PCK@50); distal/face joints near-random. Its runtime path in `cog-pose-estimation/src/inference.rs` is still a centred-skeleton **stub returning `confidence=0`** — the weights are not yet wired in. Full disclosure in the [cog README](v2/crates/cog-pose-estimation/cog/README.md). |
+| **Architecture only, no weights** | `archive/v1` `DensePoseHead` | Random `kaiming_normal_` init, **no checkpoint of any kind** (zero `.pth`/`.onnx`/`.safetensors` files under `archive/v1/`). Deprecated and superseded — see [`archive/v1/DEPRECATED.md`](archive/v1/DEPRECATED.md). Do not expect real pose output from it. |
+
+**On the ESP32-SISO question ([#509](https://github.com/ruvnet/RuView/issues/509)):** a
+single-antenna, 56-subcarrier CSI stream at a 20-frame window does *not* carry the
+fine-grained spatial information the multi-antenna NIC research relies on — the cog
+measurements above show distal/face joints near-random. The shippable pose accuracy the
+project can stand behind today is the **MM-Fi benchmark number**, not a live single-ESP32
+number. The path to a first *reproducible* on-device baseline (PCK@20 ≥ 35%) is tracked in
+[ADR-079](docs/adr/ADR-079-camera-ground-truth-training.md) / [#645](https://github.com/ruvnet/RuView/issues/645) — do not advertise the live single-ESP32 17-keypoint feature without the "first-cut, below-target, runtime-stub" caveat until that baseline is measured.
## 🧩 Edge Module Catalog
diff --git a/archive/v1/DEPRECATED.md b/archive/v1/DEPRECATED.md
new file mode 100644
index 00000000..2bc8ed66
--- /dev/null
+++ b/archive/v1/DEPRECATED.md
@@ -0,0 +1,49 @@
+# ⚠️ DEPRECATED — `archive/v1` is unmaintained and superseded
+
+**Do not build new work on this tree.** `archive/v1` is the original pure-Python
+implementation of WiFi-DensePose. It is kept only as a research archive
+(per [ADR-117 §1.3](../../docs/adr/ADR-117-pip-wifi-densepose-modernization.md)) and
+as the host of one still-live deterministic proof (see "What still lives here" below).
+Everything else in this directory is frozen and receives no fixes, reviews, or support.
+
+Governed by [ADR-187](../../docs/adr/ADR-187-archive-v1-deprecation-honest-labeling.md).
+
+## The one honest fact that trips people up
+
+`archive/v1/src/models/densepose_head.py` defines a `DensePoseHead` neural-network
+architecture (segmentation + UV-regression heads). **It ships no trained weights.** Its
+`_initialize_weights()` uses `kaiming_normal_` **random initialization only** — there is
+no checkpoint-loading path in the class, and there are **zero** `.pth` / `.onnx` /
+`.safetensors` / `.pt` / `.ckpt` / `.bin` files anywhere under `archive/v1/`.
+
+So: the architecture is *defined*, but it is **architecture-only**. Running it produces
+random output, not real pose accuracy. This matches the technical review in
+[#509](https://github.com/ruvnet/RuView/issues/509) — for *this tree*, the "network
+defined, no pre-trained weights" observation is TRUE.
+
+Real, trained, benchmarked weights **do** exist — just not here. They live in the
+maintained `v2/` workspace and on Hugging Face (see next section).
+
+## Use the maintained path instead
+
+| You want… | Go here |
+|-----------|---------|
+| The maintained implementation | The **`v2/` Rust workspace** (repo root `../../v2/`) |
+| A pip install | `pip install ruview` **or** `pip install wifi-densepose` (2.x) — the compiled PyO3 wheel ([ADR-117](../../docs/adr/ADR-117-pip-wifi-densepose-modernization.md)). The `wifi-densepose` **1.x** line is tombstoned on PyPI: `1.99.0` raises an `ImportError` telling you to migrate. |
+| Real trained presence/encoder weights | [`ruvnet/wifi-densepose-pretrained`](https://huggingface.co/ruvnet/wifi-densepose-pretrained) — 82.3% held-out temporal-triplet accuracy |
+| A real 17-keypoint pose model | [`ruvnet/wifi-densepose-mmfi-pose`](https://huggingface.co/ruvnet/wifi-densepose-mmfi-pose) — 82.69% torso-PCK@20 on MM-Fi `random_split` |
+| The honest three-tier weights picture | The "Model weights: what's real, what's not" table in the root [`README.md`](../../README.md) and [`docs/user-guide.md`](../../docs/user-guide.md) |
+
+## What still lives here (intentionally)
+
+Only one thing under `archive/v1/` is still a live, cited signal: the deterministic
+reference-pipeline proof —
+
+```bash
+python archive/v1/data/proof/verify.py # must print VERDICT: PASS
+```
+
+This is the ADR-028 "Trust Kill Switch": it feeds a fixed reference signal through the
+signal-processing pipeline and checks the SHA-256 of the output against a published hash.
+It is a legitimate reproducibility witness and is **not** deprecated. Everything else in
+this tree is.
diff --git a/archive/v1/README.md b/archive/v1/README.md
index 15e7f685..a5898250 100644
--- a/archive/v1/README.md
+++ b/archive/v1/README.md
@@ -1,3 +1,19 @@
+> ## ⚠️ DEPRECATED — unmaintained and superseded
+>
+> This tree is the **original pure-Python implementation** and is kept only as a research
+> archive. It receives no fixes, reviews, or support. **Read [`DEPRECATED.md`](DEPRECATED.md) before using anything below.**
+>
+> - Its `DensePoseHead` is **architecture-only with random-initialized weights and ships no
+> trained checkpoint** — running it produces random output, not real pose accuracy.
+> - The maintained path is the **`v2/` Rust workspace** and the `wifi-densepose 2.x` / `ruview`
+> pip wheel ([ADR-117](../../docs/adr/ADR-117-pip-wifi-densepose-modernization.md)). The
+> `wifi-densepose` 1.x line is tombstoned on PyPI (1.99.0 raises `ImportError`).
+> - Real trained weights live elsewhere: [`ruvnet/wifi-densepose-pretrained`](https://huggingface.co/ruvnet/wifi-densepose-pretrained)
+> (presence, 82.3%) and [`ruvnet/wifi-densepose-mmfi-pose`](https://huggingface.co/ruvnet/wifi-densepose-mmfi-pose)
+> (17-keypoint pose, 82.69% torso-PCK@20).
+> - The only still-live artifact here is the deterministic proof `data/proof/verify.py`
+> (ADR-028), which stays. See [ADR-187](../../docs/adr/ADR-187-archive-v1-deprecation-honest-labeling.md).
+
# WiFi-DensePose v1 (Python Implementation)
This directory contains the original Python implementation of WiFi-DensePose.
diff --git a/assets/musica-promo.png b/assets/musica-promo.png
new file mode 100644
index 00000000..9d5ad983
Binary files /dev/null and b/assets/musica-promo.png differ
diff --git a/assets/musica.png b/assets/musica.png
new file mode 100644
index 00000000..08753dba
Binary files /dev/null and b/assets/musica.png differ
diff --git a/docs/adr/ADR-184-adr117-completion-pypi-trusted-publishing.md b/docs/adr/ADR-184-adr117-completion-pypi-trusted-publishing.md
new file mode 100644
index 00000000..a43aeab3
--- /dev/null
+++ b/docs/adr/ADR-184-adr117-completion-pypi-trusted-publishing.md
@@ -0,0 +1,551 @@
+# ADR-184: Complete ADR-117 via PyPI Trusted Publishing (OIDC) + real v2.0.0 / ruview publish
+
+| Field | Value |
+|-------|-------|
+| **Status** | Proposed |
+| **Date** | 2026-07-21 |
+| **Deciders** | ruv |
+| **Codename** | **PHOENIX-LANDING** — the PIP-PHOENIX wheel that never actually took off |
+| **Relates to** | [ADR-117](ADR-117-pip-wifi-densepose-modernization.md) (PIP-PHOENIX modernization — this ADR completes it), [ADR-028](ADR-028-esp32-capability-audit.md) (witness chain), [ADR-115](ADR-115-home-assistant-integration.md) (HA/Matter sibling), [ADR-168](ADR-168-benchmark-proof.md) (measured-not-claimed house style) |
+| **Tracking issue** | [#785](https://github.com/ruvnet/RuView/issues/785) (ADR-117, still OPEN) |
+
+---
+
+## 1. Context
+
+ADR-117 (PIP-PHOENIX) designed the v2.0.0 rewrite of the pip `wifi-densepose`
+package as a PyO3 + maturin compiled wheel over the Rust core, plus a `ruview`
+sibling package, replacing the 11.5-month-stale pure-Python `1.1.0` line. The
+code landed on `main` (the `python/` workspace: `Cargo.toml`, `src/bindings/*.rs`,
+the `wifi_densepose/` Python package, `tests/`, `bench/`). The tombstone shipped.
+**But the release itself is broken and the design doc's own P5 intent was never met.**
+
+This ADR is a **gap analysis and remediation plan**, not a new feature. Every fact
+below was verified against PyPI and GitHub Actions on 2026-07-21; none are projected.
+
+### 1.1 What is actually live on PyPI (measured)
+
+`pip index versions wifi-densepose` returns:
+
+```
+wifi-densepose (1.99.0)
+Available versions: 1.99.0, 1.2.0, 1.1.0, 1.0.0
+```
+
+- `1.99.0` — the tombstone wheel **is genuinely live**. `import wifi_densepose`
+ raises `ImportError` pointing users to 2.0+. This part of ADR-117 §7.2 shipped.
+- `2.0.0a1` — appears in PyPI's release history as a **pre-release** (hidden from
+ the default `pip index` view, surfaced with `--pre`). It is still an **alpha**.
+- `2.0.0` (stable) — **does not exist.** ADR-117's headline deliverable
+ (`pip install wifi-densepose==2.0.0`) is not installable.
+
+`pip index versions ruview` returns:
+
+```
+ERROR: No matching distribution found for ruview
+```
+
+The `ruview` sibling package **was never published.** Commit `b71d243b4`
+(*"feat(adr-117): publish wifi-densepose 2.0.0a1 + ruview 2.0.0a1 to PyPI"*) claims
+a publish that did not happen for that package — a real **claimed-vs-measured gap**
+of exactly the kind [ADR-168](ADR-168-benchmark-proof.md) and the project's
+"prove everything" posture exist to catch.
+
+### 1.2 Why the release pipeline was stuck (measured; interim-fixed — see §1.4)
+
+`gh run list --workflow pip-release` shows the last **4** runs all
+`conclusion=failure` (most recent `2026-05-24T16:34`). The full failure log for
+run `26366735779` (job *"Publish v1.99 tombstone"* → step *"Publish to PyPI"*)
+shows two things:
+
+1. The publish step uses `pypa/gh-action-pypi-publish` with a `password`
+ (API-token) input and fails:
+
+ ```
+ 403 Forbidden — Invalid or non-existent authentication information.
+ ```
+
+ i.e. the `PYPI_API_TOKEN` GitHub secret is stale / expired / revoked.
+
+2. The action's own log warns:
+
+ ```
+ Warning: the workflow was run with 'attestations: true' ... but an explicit
+ password was also set, disabling Trusted Publishing.
+ ```
+
+The workflow at `.github/workflows/pip-release.yml` wires `password:
+${{ secrets.PYPI_API_TOKEN }}` into **four** publish steps (lines 249, 258, 282,
+291) and declares only `permissions: contents: read` (line 49–50). So it is using a
+rotatable, leak-able, expire-able API token in exactly the place ADR-117 §5.4 / §5.5
+and the issue #785 P5 row explicitly called for **OIDC Trusted Publishing** ("cp310
+… abi3-py310, OIDC"; ADR-117 §5.5 line 547: *"PyPI publish via Trusted Publisher
+(OIDC, no API token in secrets)"*). **The implementation drifted from its own
+design doc.**
+
+### 1.3 Why the package is still alpha (measured)
+
+`python/pyproject.toml` pins `version = "2.0.0a1"` (line 13) and
+`Development Status :: 3 - Alpha` (line 26). Issue #785's closing criteria
+(§"Done") require `wifi-densepose==2.0.0` (**not** alpha) published, plus all 10
+acceptance criteria in §11. None of those can be true today given §1.1–§1.2.
+
+**Why this matters:** ADR-117 is the sole Python entry point for the whole RuView
+ecosystem (per its §2 "PyPI org presence check"). A stale token silently blocking
+every release means the entire "plug-and-play Python entry point for the pip +
+Jupyter customer base" thesis (issue #785 "Strategic alignment") is stalled behind a
+one-line credential problem — and a commit message claims otherwise.
+
+### 1.4 Interim fix applied (2026-07-21) — credential unblocked, migration still pending
+
+**As of 2026-07-21T22:57:29Z the stale-credential symptom is fixed at the credential
+layer.** The maintainer fetched a valid `PYPI_TOKEN` from GCP Secret Manager (project
+`cognitum-20260110`) and ran `gh secret set PYPI_API_TOKEN` to replace the
+revoked/expired value. Authentication was confirmed non-destructively via a
+`twine upload --skip-existing` re-upload of the existing `1.99.0` tombstone artifacts,
+which returned a benign 400/skip response (not the previous `403 Forbidden`) — proving
+the new token authenticates correctly.
+
+This means **token-based publishing works again today** — the `403` root cause
+described in §1.2 no longer reproduces. It does **not**, however, close this ADR:
+
+- A **manually-rotated token still expires, leaks, and can be revoked over time** — it
+ re-introduces exactly the silent-failure mode that blocked the last 4 runs. It is a
+ stopgap at the same layer as the §3.2 fallback, not the durable fix.
+- The OIDC **Trusted Publishing migration (§3, P1) remains the decision** — a
+ credential PyPI mints per-run with no secret to rotate is the only fix that removes
+ the recurring-expiry class of failure.
+- The other three gaps are **untouched** by this rotation: `wifi-densepose` is still
+ `2.0.0a1` (not stable `2.0.0`), and `ruview` is still unpublished.
+
+**Why/How to apply:** read §1.2's "root cause" as *diagnosed and temporarily
+mitigated*, not *still broken*. A reviewer re-running the §7.5 check today may now see
+a green token-based run — that is expected and does not satisfy this ADR, which is
+Accepted only when §6's criteria pass **and** the workflow no longer carries a static
+token (§7.4).
+
+---
+
+## 2. Current state — evidence
+
+| Artifact | Value | Source |
+|---|---|---|
+| Latest stable `wifi-densepose` on PyPI | **1.99.0** (tombstone) | `pip index versions wifi-densepose` |
+| `wifi-densepose==2.0.0` stable | **absent** | `pip index versions` (not listed) |
+| `wifi-densepose==2.0.0a1` pre-release | present (alpha) | PyPI release history (`--pre`) |
+| `ruview` on PyPI | **No matching distribution found** | `pip index versions ruview` |
+| `pip-release.yml` last 4 runs | all `failure` | `gh run list --workflow pip-release` |
+| Most recent failed run | `2026-05-24T16:34` | `gh run list` |
+| Failing step | Publish v1.99 tombstone → Publish to PyPI | run `26366735779` log |
+| Failure code | `403 Forbidden — Invalid or non-existent authentication information` | run `26366735779` log |
+| Root cause | `PYPI_API_TOKEN` stale/revoked; explicit password disables Trusted Publishing | run `26366735779` log warning |
+| `password:` uses in workflow | 4 (lines 249, 258, 282, 291) | `.github/workflows/pip-release.yml` |
+| Workflow permissions | `contents: read` only (no `id-token: write`) | `pip-release.yml:49–50` |
+| pyproject version | `2.0.0a1` | `python/pyproject.toml:13` |
+| pyproject dev status | `3 - Alpha` | `python/pyproject.toml:26` |
+| Issue #785 | **OPEN** | GitHub |
+
+**Why/How to apply:** treat this table as the falsifiable baseline. A reviewer who
+re-runs each `Source` command must reproduce each `Value`, or this ADR is wrong and
+should be revised before any remediation is attempted.
+
+---
+
+## 3. Decision
+
+Complete ADR-117 by closing four gaps, in order:
+
+1. **Migrate `pip-release.yml` to PyPI Trusted Publishing (OIDC)** — as the durable
+ end-state, drop all four `password: ${{ secrets.PYPI_API_TOKEN }}` inputs, grant
+ `id-token: write` to the publish jobs, and add `environment: pypi`. This removes
+ the rotatable/expire-able credential and realigns with ADR-117 §5.5's stated OIDC
+ intent. **This is gated behind sub-phase P1b** (§5): the switch is inert — and in
+ fact 403-breaking — until the manual pypi.org registration (§3.1) exists, so the
+ OIDC change must land *together* with that registration. Until then, token auth
+ (the freshly-rotated `PYPI_API_TOKEN`, §1.4) is the correct active path and is
+ what the `RuView#786-pypi-token-auth` fix-marker guard enforces. An OIDC migration
+ was attempted (`cc153e8b5`) and reverted (`82d5c7339`) for exactly this reason.
+
+2. **Promote `wifi-densepose` from `2.0.0a1` to stable `2.0.0`** in
+ `python/pyproject.toml` (version + `Development Status :: 5 - Production/Stable`)
+ and record the promotion in `CHANGELOG.md`.
+
+3. **Actually publish `ruview==2.0.0`** — the sibling package that commit
+ `b71d243b4` claimed but never shipped — and verify it with `pip index versions`.
+
+4. **Adopt issue #785 §11's 10 acceptance criteria verbatim as this ADR's own
+ acceptance criteria** (§6 below), and only flip ADR-117 → Accepted and close
+ #785 once every one passes against the real index — proven, not claimed.
+
+### 3.1 Mandatory human prerequisite (cannot be automated)
+
+**Trusted Publishing requires a one-time manual step on `pypi.org` that no CLI, API,
+or agent can perform** — PyPI restricts Trusted Publisher configuration to the
+project owner via the web UI for security reasons. Before P1's workflow change can
+succeed, a human with owner rights on both PyPI projects must:
+
+1. Log in to `pypi.org`.
+2. For **`wifi-densepose`**: Project → *Publishing* → *Add a new pending/trusted
+ publisher* → GitHub, with:
+ - Owner: `ruvnet`
+ - Repository: `RuView`
+ - Workflow filename: `pip-release.yml`
+ - Environment: `pypi`
+3. Repeat the identical step for the **`ruview`** project. Because `ruview` is not
+ yet on PyPI, register it as a **pending publisher** (PyPI supports configuring a
+ trusted publisher for a project name before its first release — the first OIDC
+ publish then creates the project).
+
+**Why/How to apply:** the workflow change in P1 is inert until this is done — the
+publish step will fail with a "no trusted publisher configured" error rather than a
+403. Land P1 and this manual step together; do not tag a release expecting OIDC to
+work until a human confirms both entries exist. Treat this section as a blocking
+checklist item on the release-day runbook, not a footnote.
+
+### 3.2 Fallback path (if the owner declines Trusted Publishing)
+
+If the maintainer prefers not to adopt OIDC yet, the code-side remediation is a
+**token regeneration**, not a redesign:
+
+- Generate a fresh PyPI API token (scoped to the `wifi-densepose` and `ruview`
+ projects) and store it in GCP Secret Manager (project `cognitum-20260110`, where
+ the project's tokens live), then `gh secret set PYPI_API_TOKEN` from it, following
+ the existing runbook referenced in the workflow header (`docs/integrations/pypi-release.md`).
+- Keep the current `password:`-based workflow unchanged.
+
+**Why/How to apply:** this path clears the 403 and unblocks releases immediately,
+but it re-introduces the exact failure mode this ADR is trying to eliminate — a
+credential that silently expires and blocks the whole Python entry point again. Use
+it only as a stopgap; the Trusted Publishing migration (P1) is the durable fix and
+should remain the default recommendation.
+
+---
+
+## 4. Detailed design — workflow migration
+
+The change to `.github/workflows/pip-release.yml` is small and surgical. It does
+**not** touch the build matrix (`build-wheels`, `build-sdist`, `build-tombstone`
+jobs are unchanged — the 403 is a publish-credential problem, not a build problem).
+
+### 4.1 Grant OIDC token permission on the publish jobs
+
+The `gh-action-pypi-publish` action mints its OIDC token from the job's
+`id-token: write` permission. The current top-level `permissions: contents: read`
+must be extended on the two publish jobs (`publish-v2`, `publish-tombstone`) — plus
+the future `publish-ruview` job:
+
+```yaml
+publish-v2:
+ name: Publish v2 wheels
+ needs: [build-wheels, build-sdist]
+ permissions:
+ id-token: write # ← added: mint the OIDC token for PyPI
+ contents: read
+ environment: pypi # ← added: binds to the PyPI trusted-publisher entry
+```
+
+### 4.2 Drop the `password:` inputs
+
+Every publish step loses its `password:` line. Trusted Publishing needs no secret —
+the action exchanges the job's OIDC token for a short-lived PyPI upload token
+automatically:
+
+```yaml
+# BEFORE (current — fails with 403 when the token is stale)
+- name: Publish to PyPI
+ uses: pypa/gh-action-pypi-publish@release/v1
+ with:
+ password: ${{ secrets.PYPI_API_TOKEN }} # ← remove
+ packages-dir: dist
+
+# AFTER (Trusted Publishing — no secret, activates once the pypi.org entry exists)
+- name: Publish to PyPI
+ uses: pypa/gh-action-pypi-publish@release/v1
+ with:
+ packages-dir: dist
+```
+
+The TestPyPI dry-run steps keep `repository-url: https://test.pypi.org/legacy/` and
+likewise drop `password:` — a matching trusted-publisher entry must be registered on
+`test.pypi.org` if the dry-run path is to be used (otherwise gate the dry-run behind
+the fallback token or remove it).
+
+**Why/How to apply:** the header comment block (lines 16–23) that documents the
+`PYPI_API_TOKEN` / GCP-Secret-Manager runbook must be rewritten to document the
+Trusted Publishing setup instead, so the next maintainer does not re-add a token
+"to fix" a future failure and silently re-disable OIDC.
+
+### 4.3 Add the `publish-ruview` job
+
+`ruview` is published by a new job mirroring `publish-v2` (same `id-token: write` +
+`environment: pypi`, no `password:`), gated on a `ruview`-scoped build. Because the
+package has never shipped, its first successful OIDC publish creates the PyPI
+project against the pending trusted-publisher entry from §3.1.
+
+---
+
+## 5. Phase ledger
+
+```
+P1 ──► P1b ──► P2 ──► P3 ──► P4
+token OIDC version real close
+unblock (gated) promote publish #785
+```
+
+### P1 — Credential unblock (token auth, active)
+
+- [x] Rotate `PYPI_API_TOKEN` to a validated token (§1.4, `gh secret set`, verified
+ `2026-07-21T22:57:29Z` via `twine upload --skip-existing`). Token-based publishing
+ works today.
+- [x] Keep `password: ${{ secrets.PYPI_API_TOKEN }}` as the active auth path,
+ satisfying the `RuView#786-pypi-token-auth` fix-marker guard.
+- [ ] Rewrite the `pip-release.yml` header comment block so the next maintainer
+ knows OIDC is the intended P1b end-state (not a token to keep re-rotating forever).
+
+> Note: an OIDC migration was attempted (`cc153e8b5`) and **reverted** (`82d5c7339`)
+> because it tripped the fix-marker guard before the pypi.org registration existed.
+> The OIDC work is therefore tracked as P1b below, not P1. See the Status note.
+
+**Status 2026-07-21 — DESIGNED then REVERTED (token auth is the ACTIVE path):**
+The OIDC migration was implemented (commit `cc153e8b5` — `id-token: write` +
+`environment: pypi` on both publish jobs, all four `PYPI_API_TOKEN` password
+inputs removed) but then **reverted** (commit `82d5c7339`) after it tripped the
+pre-existing `RuView#786-pypi-token-auth` fix-marker guard
+(`scripts/fix-markers.json`). That guard `require`s
+`password: ${{ secrets.PYPI_API_TOKEN }}` and `forbid`s `id-token: write`
+precisely because a half-activated OIDC path (id-token permission present, but no
+Trusted Publisher yet registered on pypi.org) leaves publishing **403-broken**
+rather than working — it correctly predicted this exact failure. The revert was
+verified locally against the real checker (`python scripts/check_fix_markers.py` →
+all 25 markers pass, exit 0) before pushing.
+
+**Active path today:** token-based auth via the freshly-rotated `PYPI_API_TOKEN`
+(§1.4). The current `pip-release.yml` (HEAD `82d5c7339`) carries
+`password: ${{ secrets.PYPI_API_TOKEN }}` at four publish steps plus a TODO
+comment marking the OIDC follow-up. The OIDC switch is therefore **not** done — it
+moves to sub-phase P1b below.
+
+**Why this revert was correct (measured, not claimed):** OIDC is the better
+long-term design and matches ADR-117's original §5.5 P5 intent — but implementing
+it *before* the manual pypi.org registration exists would have shipped a workflow
+that looks migrated yet 403s on the next real publish. The fix-marker caught a
+well-intentioned improvement that wasn't the honest, currently-working state, and
+it was reverted rather than overridden. That is the same "measured not claimed"
+discipline (per [ADR-168](ADR-168-benchmark-proof.md)) this entire ADR exists to
+enforce — applied here to our own change.
+
+### P1b — Switch to OIDC Trusted Publishing (gated follow-up)
+
+- [ ] **(human, manual, pypi.org — BLOCKING)** Complete the §3.1 Trusted Publisher
+ registration for BOTH `wifi-densepose` and `ruview` (owner=ruvnet, repo=RuView,
+ workflow=pip-release.yml, environment=pypi). P1b must not start until this exists.
+- [ ] Re-apply the `cc153e8b5` change (add `id-token: write` + `environment: pypi`,
+ drop the four `password:` inputs) as its own follow-up commit.
+- [ ] Update the `RuView#786-pypi-token-auth` fix-marker in `scripts/fix-markers.json`
+ in the *same* commit — invert it to `require: id-token: write` / `forbid:
+ password: ${{ secrets.PYPI_API_TOKEN }}` — so the guard tracks the new intended
+ state instead of blocking it (referencing the TODO comment now in pip-release.yml).
+- [ ] Confirm a green OIDC publish before removing the token, per §3.2's
+ keep-both-paths recommendation (OIDC first, token fallback until OIDC is proven).
+- [ ] No capability gap: publishing must keep working across the P1→P1b transition.
+
+### P2 — Version promotion + changelog
+
+- [ ] `python/pyproject.toml`: `version = "2.0.0"` (drop the `a1` suffix).
+- [ ] `python/pyproject.toml`: `Development Status :: 5 - Production/Stable`.
+- [ ] `CHANGELOG.md`: `[Unreleased]` entry — "wifi-densepose 2.0.0 promoted from
+ alpha; ruview 2.0.0 first stable publish; pip-release migrated to Trusted Publishing".
+- [ ] Confirm the `ruview` package's own version metadata is set to `2.0.0`.
+
+### P3 — Real publish + verification
+
+- [ ] Cut tag `v2.0.0-pip` (per the workflow's `v*-pip` trigger) → OIDC publish of
+ the `wifi-densepose` wheel matrix.
+- [ ] Publish `ruview==2.0.0` via the new `publish-ruview` job.
+- [ ] Run every command in §7 against the **real** PyPI index and capture output.
+- [ ] Generate + commit `expected_features_v2.sha256` (issue #785 §11 criterion 10),
+ resolving ADR-117 §11.3 / the workflow header's Q3 note.
+
+### P4 — Close issue #785
+
+- [ ] All 10 acceptance criteria (§6) pass against the real index.
+- [ ] Flip ADR-117 §Status → **Accepted**.
+- [ ] Flip this ADR (ADR-184) §Status → **Accepted**.
+- [ ] Close issue #785.
+
+**Why/How to apply:** the phases are strictly ordered — P3 cannot succeed until both
+P1 (working credential path) and the §3.1 human step are done, and P4 must not be
+marked complete on the strength of a commit message (the failure mode this ADR
+exists to correct). Nothing in this ledger is checked; this is a Proposed plan.
+
+---
+
+## 6. Acceptance criteria (verbatim from issue #785 §11)
+
+A reviewer must be able to:
+
+1. `pip install --pre wifi-densepose==2.0.0a1` from PyPI test index → wheel installs
+ without compile step on Linux/macOS/Windows
+2. `python -c "import wifi_densepose; print(wifi_densepose.__version__, wifi_densepose.__rust_version__)"`
+ → both versions print
+3. `python -c "from wifi_densepose import CsiFrame; ..."` → core type round-trips
+ through PyO3
+4. `python -c "from wifi_densepose import vitals; vitals.detect_hr(...)"` → 4-stage
+ pipeline runs on a sample CSI buffer
+5. `pip install wifi-densepose[client]; python -c "import wifi_densepose.client; ..."`
+ → WS client connects to a running sensing-server
+6. `pytest python/tests/` → ≥30 tests pass (smoke + binding round-trips)
+7. `maturin build --release --strip` → wheel under 5 MB per platform (ADR §5.4 budget)
+8. `wifi-densepose==1.99.0` is the latest 1.x; `import wifi_densepose` raises
+ `ImportError` with migration URL
+9. `wifi-densepose==1.0.0` is yanked from PyPI; `1.1.0` is un-yanked with deprecation
+ notice (90-day window)
+10. Witness `expected_features_v2.sha256` generated in CI, committed alongside the
+ existing `archive/v1/data/proof/`, re-verifiable from Python via
+ `wifi_densepose.verify_witness(...)`
+
+**Note (amendment to criterion 1):** issue #785 §11 was written when `2.0.0a1` was
+the target. This ADR promotes to stable `2.0.0`, so criterion 1 is read as
+`pip install wifi-densepose==2.0.0` (no `--pre`) against the production index. The
+`--pre`/`a1` wording is preserved verbatim above per the transcription requirement;
+the stable form is what P3/P4 must actually satisfy. This ADR additionally requires
+`ruview==2.0.0` to be installable (the sibling package from commit `b71d243b4`),
+which #785 §11 did not enumerate but the issue "Done" section implies.
+
+---
+
+## 7. How to verify (prove, don't claim)
+
+Exact commands a reviewer runs to prove — not assume — each gap is closed. Every one
+produces falsifiable output; capture it in the PR that flips ADR-117 to Accepted.
+
+### 7.1 Both packages live and stable
+
+```bash
+# wifi-densepose 2.0.0 (stable, NOT alpha) must appear
+pip index versions wifi-densepose
+# expect: "wifi-densepose (2.0.0)" and 2.0.0 in the available list
+
+# ruview 2.0.0 must now exist (currently: "No matching distribution found")
+pip index versions ruview
+# expect: "ruview (2.0.0)"
+```
+
+### 7.2 Clean-venv install + import (criteria 2–4)
+
+```bash
+python -m venv /tmp/verify-184 && . /tmp/verify-184/bin/activate
+pip install wifi-densepose==2.0.0 # stable, no --pre
+python -c "import wifi_densepose; print(wifi_densepose.__version__, wifi_densepose.__rust_version__)"
+python -c "from wifi_densepose import CsiFrame; print(CsiFrame([1.0]*56,[0.0]*56,56,0,100.0))"
+python -c "from wifi_densepose import vitals; print(hasattr(vitals,'detect_hr'))"
+pip install ruview==2.0.0
+python -c "import ruview; print(ruview.__version__)"
+```
+
+### 7.3 Tombstone still guards the 1.x line (criterion 8)
+
+```bash
+pip install wifi-densepose==1.99.0
+python -c "import wifi_densepose" 2>&1 | grep -q "github.com/ruvnet/RuView" \
+ && echo "PASS: tombstone raises with migration URL" \
+ || echo "FAIL"
+```
+
+### 7.4 Workflow auth state
+
+**Current state (P1, active today):** token auth is the working path and is what
+the `RuView#786-pypi-token-auth` fix-marker requires. The honest check today is
+that token auth is present and the fix-marker guard passes:
+
+```bash
+# token auth present (the ACTIVE, working path — expected PASS today)
+grep -q 'password: ${{ secrets.PYPI_API_TOKEN }}' .github/workflows/pip-release.yml \
+ && echo "PASS: token auth active" || echo "FAIL"
+
+# fix-marker regression guard must pass
+python scripts/check_fix_markers.py && echo "PASS: all markers pass"
+```
+
+**P1b end-state (after the manual pypi.org registration):** the checks below flip
+to PASS *only once P1b lands together with the fix-marker inversion* — they are
+**not** expected to pass today and their passing now would mean a half-migrated,
+403-prone workflow:
+
+```bash
+# after P1b: no static token should remain in the publish steps
+grep -nE 'password:|PYPI_API_TOKEN' .github/workflows/pip-release.yml \
+ && echo "not yet: token still present (expected during P1)" \
+ || echo "P1b done: no static token"
+
+# after P1b: id-token permission granted on publish jobs
+grep -q 'id-token: write' .github/workflows/pip-release.yml \
+ && echo "P1b done: OIDC permission present" \
+ || echo "not yet: OIDC not enabled (expected during P1)"
+```
+
+### 7.5 The release actually went green
+
+```bash
+gh run list --workflow pip-release --limit 1
+# expect: conclusion=success on the v2.0.0-pip tag run
+```
+
+**Why/How to apply:** §7.1 and §7.5 together are the minimal proof that the two
+headline gaps (no stable 2.0.0, no `ruview`, dead pipeline) are closed. If any
+command's actual output diverges from the `expect` line, the corresponding phase is
+not done — regardless of what any commit message or checkbox says.
+
+---
+
+## 8. Consequences
+
+### Positive
+
+- The Python entry point for the entire RuView ecosystem (issue #785 "Strategic
+ alignment") is unblocked with a credential that cannot silently expire.
+- The claimed-vs-measured gap in commit `b71d243b4` (`ruview` never published) is
+ closed with reproducible proof, upholding the project's "prove everything" posture.
+- Trusted Publishing removes a leak-able long-lived secret from CI entirely — the
+ security posture ADR-117 §5.5 originally specified.
+- ADR-117 / issue #785 can finally reach a defensible Accepted/closed state instead
+ of sitting open behind a one-line token failure.
+
+### Negative
+
+- The `pypi.org` trusted-publisher registration (§3.1) is a hard human dependency
+ with no automated fallback beyond re-introducing a token (§3.2). Release day is
+ blocked on a person, not a pipeline.
+- Promoting to stable `2.0.0` removes the alpha escape hatch — any binding bug now
+ ships under a stable version and needs a `2.0.1`, not a new `a`-tag.
+- `test.pypi.org` needs its own trusted-publisher entry if the dry-run path is kept,
+ adding a second manual registration.
+
+### Neutral
+
+- The build matrix (`build-wheels`, `build-sdist`, `build-tombstone`) is untouched;
+ the risk surface of this change is confined to the three publish jobs.
+- The witness-hash-v2 open question (ADR-117 §11.3, workflow header Q3) is pulled
+ into scope as criterion 10 but is orthogonal to the credential migration.
+
+---
+
+## 9. References
+
+- **ADR-117** — `docs/adr/ADR-117-pip-wifi-densepose-modernization.md` (the design
+ this ADR completes; §5.4/§5.5 OIDC intent, §7.2 tombstone, §11.3 witness hash)
+- **Issue #785** — https://github.com/ruvnet/RuView/issues/785 (tracking issue,
+ OPEN; §11 acceptance criteria transcribed in §6)
+- **Workflow** — `.github/workflows/pip-release.yml` (four `password:` inputs at
+ lines 249/258/282/291; `contents: read` only at 49–50)
+- **pyproject** — `python/pyproject.toml` (`version = "2.0.0a1"` line 13;
+ `3 - Alpha` line 26)
+- **Failed run** — GitHub Actions `pip-release` run `26366735779`, job "Publish
+ v1.99 tombstone" → step "Publish to PyPI" (403 + Trusted-Publishing-disabled warning)
+- **Commit `b71d243b4`** — *"feat(adr-117): publish wifi-densepose 2.0.0a1 + ruview
+ 2.0.0a1 to PyPI"* — the `ruview` publish it claims did not occur
+- **PyPI Trusted Publishing** — https://docs.pypi.org/trusted-publishers/ (web-UI-only
+ registration; pending-publisher support for not-yet-created projects)
+- **`pypa/gh-action-pypi-publish`** — https://github.com/pypa/gh-action-pypi-publish
+ (OIDC via `id-token: write`; `password:` disables Trusted Publishing)
+- **ADR-168** — `docs/adr/ADR-168-benchmark-proof.md` (measured-not-claimed house style)
diff --git a/docs/adr/ADR-185-python-p6-sota-bindings.md b/docs/adr/ADR-185-python-p6-sota-bindings.md
new file mode 100644
index 00000000..16be714e
--- /dev/null
+++ b/docs/adr/ADR-185-python-p6-sota-bindings.md
@@ -0,0 +1,687 @@
+# ADR-185: Python P6 SOTA bindings — AETHER, MERIDIAN, and MAT via PyO3 extras
+
+| Field | Value |
+|-------|-------|
+| **Status** | Proposed — **P1–P4 implemented & tested** (commits `d060998e3`, `189ac9dfb`, `1c9727f9c`, `0f405213d`) + **leaf-crate hoists done** (`a47bb71b2`/`7ed57f041`/`99fea9df9`); **not yet Accepted** (§6.6 CI gate PARTIAL, §6.7 accuracy bars OPEN — see §13) |
+| **Date** | 2026-07-21 (impl status recorded 2026-07-21) |
+| **Deciders** | ruv |
+| **Codename** | **PIP-TRINITY** — three SOTA subsystems join the `wifi_densepose` wheel |
+| **Relates to** | [ADR-117](ADR-117-pip-wifi-densepose-modernization.md) (PIP-PHOENIX — the PyO3 wheel this extends), [ADR-024](ADR-024-contrastive-csi-embedding-model.md) (AETHER contrastive embeddings), [ADR-027](ADR-027-cross-environment-domain-generalization.md) (MERIDIAN domain generalization), [ADR-152](ADR-152-wifi-pose-sota-2026.md) (WiFlow-STD ~96% PCK@20 SOTA bar) |
+| **Tracking issue** | TBD — file under RuView issue tracker |
+
+---
+
+## 1. Context
+
+### 1.1 Where ADR-117 stopped
+
+ADR-117 (PIP-PHOENIX) shipped the `wifi-densepose` v2.x PyPI wheel as a PyO3 +
+maturin compiled extension (`wifi_densepose._native`) with a pure-Python facade.
+The bound surface today (`python/src/bindings/*.rs`, `python/src/lib.rs`):
+
+| Bound today | Crate | Kind |
+|---|---|---|
+| `CsiFrame`, `Keypoint`, `KeypointType`, `BoundingBox`, `PersonPose`, `PoseEstimate` | `wifi-densepose-core` | P2 core types |
+| 4-stage vitals (`BreathingExtractor`, `HeartRateExtractor`, `VitalEstimate`, `VitalReading`, `VitalStatus`) | `wifi-densepose-vitals` | P3 DSP |
+| `BfldFrame`, `BfldReport`, `BfldKind` + `PrivacyClass` gate | `wifi-densepose-bfld` | P3.5 / ADR-118 |
+| `SensingClient` (WS), `RuViewMqttClient` (MQTT), HA helpers | pure-Python `wifi_densepose.client` | P4 `[client]` extra |
+
+ADR-117's own phase ledger (§6, "P6+ — Deferred") explicitly parked three
+higher-value subsystems as post-v2.0.0 work:
+
+> - [ ] `wifi-densepose-nn` bindings … · `wifi-densepose-ruvector` bindings …
+> - [ ] MQTT/Matter integration helpers …
+
+and ADR-117 §5.1 deferred `wifi-densepose-mat` (depends on nn) and the RuVector
+tier for wheel-size reasons. The three SOTA subsystems that a Python researcher
+most wants — re-identification embeddings, cross-environment transfer, and the
+disaster-triage tool — are precisely the ones still unreachable from
+`pip install wifi-densepose`.
+
+### 1.2 The three subsystems already exist and are tested in Rust
+
+None of this is new research. Each subsystem is a shipped, tested Rust module:
+
+| Subsystem | ADR | Rust location (verified HEAD) | Nature |
+|---|---|---|---|
+| **AETHER** — contrastive CSI embedding / re-identification | ADR-024 | `wifi-densepose-sensing-server/src/embedding.rs` (`EmbeddingExtractor`, `ProjectionHead`, `CsiAugmenter`, `AetherConfig`, `aether_loss`, `info_nce_loss`, `alignment_metric`, `uniformity_metric`) | Pure-sync DSP + linear algebra; 128-dim L2-normalized embeddings |
+| **MERIDIAN** — cross-environment domain generalization | ADR-027 | `wifi-densepose-train` (`domain::{DomainFactorizer, DomainClassifier, GradientReversalLayer, AdversarialSchedule}`, `geometry::{GeometryEncoder, FourierPositionalEncoding, FilmLayer, MeridianGeometryConfig}`, `rapid_adapt::{RapidAdaptation, AdaptationLoss}`, `virtual_aug::VirtualDomainAugmentor`, `eval::CrossDomainEvaluator`) + `wifi-densepose-signal::hardware_norm::{HardwareNormalizer, HardwareType, CanonicalCsiFrame}` | Inference/adaptation path is pure-Rust and **un-gated**; only `model`/`trainer`/`losses` need `tch-backend` (libtorch) |
+| **MAT** — Mass Casualty Assessment Tool | (root CLAUDE.md crate table) | `wifi-densepose-mat` (`DisasterResponse`, `DisasterConfig`, `DetectionPipeline`, `EnsembleClassifier`, `TriageCalculator`, `TriageStatus`, `Survivor`, `VitalSignsReading`) | Cargo-feature-gated (`mat`); sync ingest (`push_csi_data`) + async scan loop (`start_scanning`, tokio) |
+
+### 1.3 Why now, and why gated extras
+
+Two forces make P6 timely: (a) the v2.0.0 wheel is stable and its abi3-py310
+build matrix is proven, so adding modules is incremental; (b) integrators reading
+the ADR-115/ADR-117 notes are asking for Python access to re-identification and
+cross-room transfer specifically.
+
+But pulling all three into the **default** wheel would break ADR-117 §5.4's
+**≤ 5 MB per-platform wheel budget** and its "no heavy system deps" invariant:
+
+- MAT is already cargo-`mat`-gated upstream *because* it drags in the ML/detection
+ stack; the default wheel must not carry it.
+- MERIDIAN's training path (`model`/`trainer`/`losses`) is `tch-backend`-gated and
+ would pull libtorch (30 MB+), the exact wheel-size risk ADR-117 §5.1 flagged.
+
+So P6 mirrors the existing `[client]` extra pattern (ADR-117 §5.6): each subsystem
+becomes an **optional pip extra**, and the compiled surface is **feature-gated in
+`wifi-densepose-py`'s `Cargo.toml`** so the default wheel stays lean.
+
+### 1.4 What this ADR is *not*
+
+- Not a port of the Rust subsystems to Python — the Rust workspace stays
+ authoritative and unmodified, exactly as ADR-117 §1.3 established.
+- Not the `wifi-densepose-nn` / libtorch binding (still deferred; MERIDIAN binds
+ only the un-gated inference/adaptation path, not `tch-backend` training).
+- Not a change to the default wheel's contents, size budget, or abi3 base.
+
+---
+
+## 2. Gap analysis
+
+| Capability | Rust crate(s) | pip v2.x status | Gap severity |
+|---|---|---|---|
+| Extract a 128-dim re-ID embedding from a CSI window | `sensing-server::embedding` (AETHER) | Not present | **High** |
+| Compare two CSI observations by learned similarity (same room? same person?) | AETHER `EmbeddingExtractor` + cosine | Not present | **High** |
+| Hardware-invariant CSI normalization (ESP32 / Intel 5300 / Atheros → canonical 56) | `signal::hardware_norm` (MERIDIAN) | Not present | **High** |
+| Geometry-conditioned zero-shot deployment (AP positions → FiLM) | `train::geometry` (MERIDIAN) | Not present | **Medium** |
+| 10-second unlabeled few-shot room adaptation | `train::rapid_adapt` (MERIDIAN) | Not present | **Medium** |
+| Cross-domain evaluation protocol (in/cross/few-shot MPJPE) | `train::eval` (MERIDIAN) | Not present | **Medium** |
+| Disaster-survivor detection + START triage from CSI | `wifi-densepose-mat` | Not present | **Medium** (specialist audience) |
+
+---
+
+## 3. Decision
+
+Adopt **three new optional pip extras**, each binding one SOTA subsystem into the
+existing `wifi_densepose` wheel as a dedicated Python submodule, gated behind a
+matching Cargo feature so the default wheel is unchanged:
+
+```
+pip install wifi-densepose # unchanged: core + vitals + bfld (≤5 MB)
+pip install wifi-densepose[aether] # + wifi_densepose.aether
+pip install wifi-densepose[meridian] # + wifi_densepose.meridian
+pip install wifi-densepose[mat] # + wifi_densepose.mat (mirrors upstream `mat` cargo feature)
+pip install wifi-densepose[sota] # convenience: aether + meridian + mat
+```
+
+This path is called **PIP-TRINITY**. It reuses ADR-117's established idiom
+end-to-end: `#[pyclass]` newtype wrappers holding an `inner` Rust value, `#[new]`
+constructors, `#[getter]` accessors, `__repr__`, a per-module `register(m)` fn,
+and — critically — **GIL release via `py.allow_threads(|| …)` on every
+compute-heavy call**, exactly as `bindings/vitals.rs:229` and `:293` already do.
+
+### 3.1 Feature gating in `wifi-densepose-py`
+
+New Cargo features and optional path-deps in `python/Cargo.toml`; each binding
+module is `#[cfg(feature = "…")]`-compiled and conditionally `register()`ed in
+`src/lib.rs`, so a default build links none of the three:
+
+```toml
+[features]
+default = []
+aether = ["dep:wifi-densepose-sensing-server"]
+meridian = ["dep:wifi-densepose-train", "dep:wifi-densepose-signal"]
+mat = ["dep:wifi-densepose-mat"] # upstream `mat` feature flows through
+sota = ["aether", "meridian", "mat"]
+
+[dependencies]
+wifi-densepose-sensing-server = { version = "0.3.0", path = "../v2/crates/wifi-densepose-sensing-server", optional = true, default-features = false }
+wifi-densepose-train = { version = "0.3.0", path = "../v2/crates/wifi-densepose-train", optional = true, default-features = false } # NO tch-backend
+wifi-densepose-signal = { version = "0.3.0", path = "../v2/crates/wifi-densepose-signal", optional = true }
+wifi-densepose-mat = { version = "0.3.0", path = "../v2/crates/wifi-densepose-mat", optional = true, default-features = false }
+```
+
+`[project.optional-dependencies]` in `pyproject.toml` gains `aether`, `meridian`,
+`mat`, and `sota` keys mirroring the existing `client`/`dev` extras. Because each
+extra changes the compiled surface, extras map to **cibuildwheel feature-flag
+builds**, not pure-Python markers — the publish workflow (ADR-117 §5.4) gains a
+build axis for the `[sota]` wheel variant.
+
+### 3.2 Binding surface — AETHER (`wifi_densepose.aether`)
+
+Backing crate: `wifi-densepose-sensing-server::embedding` (ADR-024 §2.6). The
+crate is Axum/tokio-based, so we depend on it `default-features = false` and bind
+**only the sync `embedding` types** — never the server/runtime. If the embedding
+module cannot be reached without a tokio dependency (Open Question §11.1), the
+fallback is to hoist `embedding.rs` into a leaf crate; that is a Rust-side
+refactor, not a Python API change.
+
+| Python symbol | Wraps | Signature (Python) |
+|---|---|---|
+| `AetherConfig` | `AetherConfig` | `AetherConfig(d_model=64, d_proj=128, temperature=0.07, vicreg_alpha=1.0, vicreg_beta=25.0, vicreg_gamma=1.0)` — frozen, `__repr__` |
+| `CsiAugmenter` | `CsiAugmenter` | `CsiAugmenter(seed)`; `.augment(window: list[list[float]]) -> list[list[float]]` |
+| `EmbeddingExtractor` | `EmbeddingExtractor` | `.embed(csi_features: list[list[float]]) -> list[float]` (128-dim, L2-normed); `.forward_dual(...) -> tuple[PoseEstimate, list[float]]` |
+| `aether_loss(...)` | `aether_loss` | returns `AetherLossComponents(total, info_nce, variance, covariance)` — frozen dataclass-like |
+| `cosine_similarity(a, b)` | thin helper | `float`; convenience for re-ID scoring (not a re-impl — calls the same dot product) |
+| `alignment_metric`, `uniformity_metric` | same | `float` |
+
+GIL strategy: `embed`, `forward_dual`, `augment`, and `aether_loss` wrap their
+Rust call in `py.allow_threads(|| …)` — these are pure-sync matrix ops that touch
+no Python objects, matching the vitals precedent. A single-frame `embed()` is
+sub-millisecond (ADR-024 §2.8 target <1 ms FP32), but batch/augment calls exceed
+the 0.5 ms GIL-release threshold ADR-117 §P3 set.
+
+`.pyi` stubs: add `wifi_densepose/aether.pyi` declaring the five classes/functions
+with precise numeric types; extend the top-level `wifi_densepose/__init__.pyi`
+with a `TYPE_CHECKING`-guarded re-export so `mypy --strict` sees them only when
+the extra is installed.
+
+### 3.3 Binding surface — MERIDIAN (`wifi_densepose.meridian`)
+
+Backing crates: `wifi-densepose-train` (inference/adaptation path, **no
+`tch-backend`**) + `wifi-densepose-signal::hardware_norm`. The `model`/`trainer`/
+`losses` modules are libtorch-gated and are **out of scope** — Python gets the
+domain-generalization *inference and calibration* surface, not the training loop.
+
+| Python symbol | Wraps | Signature (Python) |
+|---|---|---|
+| `HardwareType` | `HardwareType` | `#[pyclass(eq, eq_int, hash, frozen)]` enum: `Esp32S3 / Intel5300 / Atheros / Generic`; `HardwareType.detect(subcarrier_count) -> HardwareType` |
+| `HardwareNormalizer` | `HardwareNormalizer` | `.normalize(frame: CsiFrame, hw: HardwareType) -> CanonicalCsiFrame` |
+| `CanonicalCsiFrame` | `CanonicalCsiFrame` | frozen; `.amplitudes`, `.phases`, `.hardware_type` getters |
+| `GeometryEncoder` | `GeometryEncoder` | `GeometryEncoder(MeridianGeometryConfig)`; `.encode(ap_positions: list[tuple[float,float,float]]) -> list[float]` (64-dim, permutation-invariant) |
+| `MeridianGeometryConfig` | `MeridianGeometryConfig` | frozen config |
+| `RapidAdaptation` | `RapidAdaptation` | `.calibrate(csi_windows: list[list[list[float]]]) -> AdaptationResult` (10-sec unlabeled few-shot) |
+| `AdaptationResult` | `AdaptationResult` | frozen result: `.frames_used`, `.converged`, `.loss` |
+| `CrossDomainEvaluator` | `CrossDomainEvaluator` | `.evaluate(...) -> dict[str, float]` (in/cross/few-shot MPJPE, domain-gap ratio) |
+
+GIL strategy: `normalize`, `encode`, `calibrate`, and `evaluate` are wrapped in
+`py.allow_threads`. `normalize` targets <50 µs/frame (ADR-027 §4.1) and `encode`
+<100 µs (§4.3), but `calibrate` runs contrastive test-time training over 200
+frames and is the primary GIL-release beneficiary.
+
+`.pyi` stubs: `wifi_densepose/meridian.pyi`. `DomainFactorizer` /
+`GradientReversalLayer` / `VirtualDomainAugmentor` are **training-time only** and
+are *not* bound in P6 (they need the tch training loop) — Open Question §11.2
+records this boundary.
+
+### 3.4 Binding surface — MAT (`wifi_densepose.mat`)
+
+Backing crate: `wifi-densepose-mat`, bound behind the `[mat]` extra so the
+disaster/ML stack never enters the default wheel — mirroring the upstream `mat`
+cargo feature exactly. `DisasterResponse::start_scanning` is async (tokio); rather
+than bind an event loop, P6 binds the **sync ingest + query surface** and a
+single-shot `scan_once()` helper (a sync wrapper over one `scan_cycle`, added
+Rust-side if needed — see §11.3).
+
+| Python symbol | Wraps | Signature (Python) |
+|---|---|---|
+| `DisasterType` | `DisasterType` | `#[pyclass(eq, eq_int, hash, frozen)]` enum: `Earthquake / BuildingCollapse / Avalanche / Flood / Mine / Unknown` |
+| `TriageStatus` | `TriageStatus` | frozen enum (START protocol classes) |
+| `DisasterConfig` | `DisasterConfig` | builder-style kwargs: `DisasterConfig(disaster_type, sensitivity=0.8, confidence_threshold=0.5, max_depth=5.0)` |
+| `DisasterResponse` | `DisasterResponse` | `.push_csi_data(amplitudes, phases)`; `.scan_once()`; `.survivors() -> list[Survivor]`; `.survivors_by_triage(status) -> list[Survivor]` |
+| `Survivor` | `Survivor` | frozen: `.id`, `.triage_status`, `.location`, `.vital_signs` getters |
+| `VitalSignsReading` | `VitalSignsReading` | frozen: breathing / heartbeat / movement fields |
+
+GIL strategy: `push_csi_data` and `scan_once` wrap the detection-pipeline call in
+`py.allow_threads` — the ensemble classifier + localization are the compute-heavy
+part and touch no Python state.
+
+`.pyi` stubs: `wifi_densepose/mat.pyi`.
+
+---
+
+## 4. Benchmarking & the measured-vs-claimed parity requirement
+
+A binding that "runs without crashing" is worthless if it silently regresses
+accuracy versus the native Rust call. The point of P6 is to prove the Python
+surface reproduces the Rust subsystem **bit-for-bit**, then to hold each binding
+to the *same* published SOTA bar its ADR already claims.
+
+### 4.1 Parity harness (bit-for-bit, mandatory)
+
+Each subsystem ships a golden-vector parity test. A committed input fixture is
+run through **both** a tiny native-Rust reference binary (in
+`v2/crates/wifi-densepose-py/tests/golden/`) and the Python binding; the two
+outputs must hash-match under SHA-256 (the ADR-028 / ADR-117 §5.7 witness scheme):
+
+- `aether`: identical 128-dim embedding bytes for a fixed CSI window + fixed seed.
+- `meridian`: identical `CanonicalCsiFrame` bytes for a fixed ESP32 (64-sub) and
+ Intel-5300 (30-sub) frame; identical 64-dim geometry vector for fixed AP set.
+- `mat`: identical triage classification + survivor count for a fixed CSI stream.
+
+A mismatch is a **release blocker**, not a warning. This is the "MEASURED, not
+CLAIMED" gate the project holds itself to.
+
+**Scope, stated honestly:** parity proves the **strongest claim available today** —
+the Python binding is bit-identical to native Rust for the bound surface. It is
+**not** accuracy validation. The bound AETHER surface moreover ships *untrained*
+(random-init weights; a `load_weights` API exists since `65da488ad` but no trained
+checkpoint exists to load — §6.7.2, §13.c.a), so byte-equality here says nothing
+about the SOTA accuracy bars in §4.3; those remain OPEN (§6.7, §13.c).
+
+### 4.2 pytest-benchmark micro-benchmarks
+
+Following the existing `python/bench/test_bench_vitals.py` pattern (skipped by
+default via `addopts`; run with `pytest python/bench/ --benchmark-only`):
+
+- `python/bench/test_bench_aether.py` — steady-state `embed()` per-window cost;
+ assert < 2 ms (ADR-024 §2.8 FP32 target < 1 ms with headroom) and that batched
+ `embed()` scales linearly (no accidental O(n²)).
+- `python/bench/test_bench_meridian.py` — `normalize()` < 200 µs/frame,
+ `encode()` < 200 µs (ADR-027 §4.1/§4.3 targets ×2 headroom).
+- `python/bench/test_bench_mat.py` — `scan_once()` per-cycle cost bounded by the
+ configured scan interval.
+
+### 4.3 SOTA accuracy bar the binding must reproduce (not merely run)
+
+The parity harness (§4.1) guarantees the Python path is byte-identical to Rust, so
+these published numbers are the bar the *binding output* is validated against on a
+committed labeled fixture — a regression in any is a binding bug:
+
+| Metric | Bar | Source |
+|---|---|---|
+| WiFlow-STD pose accuracy | **~96% PCK@20** (MEASURED-EQUIVALENT) | ADR-152 §2.2 |
+| Room identification (k-NN on `env_fingerprint`) | **> 95%** | ADR-024 §2.8 |
+| Person re-ID mAP | **> 80%** (WhoFi bar 95.5% on NTU-Fi) | ADR-024 §2.8, §1.5 |
+| Anomaly detection F1 | **> 0.90** | ADR-024 §2.8 |
+| INT8 rank correlation vs FP32 (Spearman) | **> 0.95** | ADR-024 §2.8 |
+| Cross-domain MPJPE improvement | **> 20%** vs non-adversarial | ADR-027 §4.2 |
+| Domain-gap ratio (cross/in-domain) | **< 1.5** | ADR-027 §4.6 |
+| Few-shot MPJPE after 10-sec calibration | within **15%** of in-domain | ADR-027 §4.5 |
+
+---
+
+## 5. Phase ledger
+
+```
+P1 ──► P2 ──► P3 ──► P4
+aether meridian mat docs +
+bindings bindings behind examples
+ extra
+```
+
+> **Implementation note (2026-07-21):** P1–P4 were built against the **real Rust
+> code at HEAD**, not this ADR's proposed surface. Where §3's proposed API named
+> functions/fields that do not exist in the crates (e.g. `aether_loss`/VICReg
+> components/`alignment_metric`/`forward_dual`, `RapidAdaptation.calibrate`,
+> `AdaptationResult.converged`), the coder **did not fabricate them** — the real
+> API was bound and the deviation documented in each module header and commit body.
+> Treat §3 as the original proposal and the commit messages as the authoritative
+> record of what shipped.
+
+### P1 — AETHER bindings (`[aether]` extra) — **DONE** (`d060998e3`; leaf-crate hoist `a47bb71b2`)
+
+- [x] `aether` Cargo feature + gated optional `wifi-densepose-sensing-server` dep;
+ default build links **0** sensing-server refs (base wheel stays lean).
+- [x] `python/src/bindings/aether.rs` — `AetherConfig` (→ real `EmbeddingConfig`),
+ `CsiAugmenter.augment_pair`, `EmbeddingExtractor.embed` (128-dim L2-normed,
+ GIL-released), `info_nce_loss`, `cosine_similarity`. **Not bound** (absent in
+ `embedding.rs` at HEAD, a Rust-side gap, not fabricated): `aether_loss`/VICReg
+ components, `alignment_metric`, `uniformity_metric`, `forward_dual`, `vicreg_*`.
+- [x] `#[cfg(feature = "aether")]` gate + facade + `aether.pyi` + `[aether]` extra.
+- [x] `python/tests/golden/aether_embedding.sha256` parity fixture:
+ `tests/aether_parity.rs` locks the native reference; `tests/test_aether.py`
+ asserts identical SHA-256 of the LE-f32 bytes.
+- [x] **Verified:** `cargo test --features aether --test aether_parity` → 2/2;
+ `pytest tests/test_aether.py` → 9/9.
+- [x] **Leaf-crate hoist (`a47bb71b2`):** `embedding.rs` moved into a new
+ `wifi-densepose-aether` crate. Measured stripped wheel **~361 KB → ~312 KB** (was
+ already ~14× under the 5 MB budget — see §13.a; the hoist's value is build-time
+ 71 s → 12 s + dep-graph hygiene, not size). No regression: `aether_parity` 2/2,
+ `pytest` 9/9, sensing-server 217+388 tests 0 failed, new `wifi-densepose-aether`
+ crate 96 passed.
+
+### P2 — MERIDIAN bindings (`[meridian]` extra) — **DONE** (`189ac9dfb`)
+
+- [x] `meridian` feature + gated optional `wifi-densepose-train` (**no `tch-backend`
+ — libtorch avoided, confirmed**) + `wifi-densepose-signal` deps.
+- [x] `python/src/bindings/meridian.rs` — `HardwareType`/`HardwareNormalizer`/
+ `CanonicalCsiFrame` (real API: `normalize(amplitude, phase, hw)` over f64 →
+ `Result`; singular `amplitude`/`phase` fields), `MeridianGeometryConfig`/
+ `GeometryEncoder` (64-dim, permutation-invariant), `RapidAdaptation`
+ (**real API: `push_frame` + `adapt()`**, not the ADR's `calibrate`) →
+ `AdaptationResult` (`lora_weights`/`final_loss`/`frames_used`/
+ `adaptation_epochs`; **no `converged`**), `CrossDomainEvaluator` + `mpjpe`. All
+ compute paths GIL-released. Training-time types (`DomainFactorizer`, GRL,
+ `VirtualDomainAugmentor`) correctly left out of P6 scope.
+- [x] Gate + facade + `meridian.pyi` + `[meridian]` extra; default dep graph has 0
+ train/signal/sensing-server refs.
+- [x] `tests/golden/meridian_output.sha256` parity fixture (esp32 + intel canonical
+ frames + 64-dim geometry vector + rapid-adapt LoRA weights).
+- [x] **Verified:** `cargo test --features meridian --test meridian_parity` → 2/2;
+ `pytest tests/test_meridian.py` → 13/13.
+
+### P3 — MAT bindings behind `[mat]` extra — **DONE** (`1c9727f9c`)
+
+- [x] `mat` feature + gated optional `wifi-densepose-mat` dep. **§11.3 resolved: no
+ Rust change needed** — the public async `start_scanning()` already runs exactly
+ one `scan_cycle` when `continuous_monitoring == false`; the binding forces that
+ flag off and drives one cycle on a private current-thread tokio runtime.
+- [x] `python/src/bindings/mat.rs` — `DisasterType` (**9 variants at HEAD**, not the
+ 6 the ADR listed), `TriageStatus` (5, START), `DisasterConfig`,
+ `DisasterResponse` (`initialize_event`/`add_zone`/`push_csi_data`/`scan_once`/
+ `survivors`/`survivors_by_triage` — `initialize_event`+`add_zone` are **required
+ additions** the ADR surface omitted), `Survivor` (`latest_vitals`, since real
+ `vital_signs` is a history), `VitalSignsReading`, `ScanZone.rectangle`/`.circle`.
+ `push_csi_data`+`scan_once` GIL-released.
+- [x] Gate + facade + `mat.pyi` + `[mat]` **and** `[sota]` (superset) extras.
+- [x] `tests/golden/mat_result.sha256` parity fixture over a canonical
+ `count=;triage_priorities=` string (UUIDs/timestamps excluded as
+ non-deterministic). **Honest scope: proves binding==native path, NOT live
+ detection accuracy** — the synthetic stream yields 1 survivor, triage Delayed.
+- [x] **Verified:** `cargo test --features mat --test mat_parity` → 2/2;
+ `pytest tests/test_mat.py` → 7/7.
+
+### P4 — Docs, examples, and benchmark suite — **DONE** (`0f405213d`)
+
+- [x] `python/bench/test_bench_{aether,meridian,mat}.py` (pytest-benchmark, §4.2).
+ Measured on a `--release --features sota` wheel: AETHER `embed()` ~150 µs
+ (target <2 ms), batch 1/8/64 = 140/1091/8509 µs (linear); MERIDIAN `normalize()`
+ ~2.2 µs (target <200 µs), `encode()` ~6.9 µs; MAT ingest+`scan_once()` ~40 ms /
+ 256-frame (< 500 ms). All pass.
+- [x] `python/examples/{reid_from_csi,cross_room_calibrate,mat_triage}.py` — typed,
+ runnable, `mypy --strict` clean; README SOTA extras table.
+- [~] Parity harness wiring into CI as a **release-blocking gate** — golden gates
+ are green locally (`cargo test --features sota` → 6/6; 3/3 SHA gates), but the CI
+ **wiring** is not done (§6.6 PARTIAL — see §13.b).
+- [ ] Update ADR-117 §6 "P6+ Deferred" to point at this ADR — still open.
+
+### P5 — New required follow-ups (blocking Accepted)
+
+See §13. In short: (a) three leaf-crate hoists — **DONE** (`a47bb71b2`/`7ed57f041`/
+`99fea9df9`; only MAT was a real budget fix, AETHER was a false alarm), (b) wire the
+parity harness into CI as an actual release gate — **still open**, (c) source/generate
+labeled fixtures to validate the SOTA accuracy bars (§4.3) for real — **still open**.
+
+### P6+ — Deferred (unchanged from ADR-117)
+
+- [ ] `wifi-densepose-nn` / libtorch bindings (MERIDIAN training loop,
+ `DomainFactorizer`, GRL) — still blocked on the libtorch wheel-size question.
+- [ ] `wifi-densepose-ruvector` RuVector attention bindings.
+- [ ] Matter integration helpers.
+
+---
+
+## 6. Acceptance criteria
+
+Status recorded from the P4 self-verification run (`0f405213d`), reference machine
+per ADR-117 §10. **7 of 9 met; 2 remain** — the ADR is therefore **not** Accepted.
+
+- [x] **§6.1** `pip install wifi-densepose` (no extras) → default wheel **279 KB**
+ (≤ 5 MB); `build_features()` carries no `p6-*` feature — base wheel byte-for-byte
+ unaffected by P6. **PASS**
+- [x] **§6.2** `pytest python/tests/test_aether.py -q` — **9/9**, incl. a real
+ 128-dim `embed()` round-trip asserting L2-norm ≈ 1.0 and byte-identity to the
+ golden Rust reference. **PASS**
+- [x] **§6.3** `pytest python/tests/test_meridian.py -q` — **13/13**, incl.
+ ESP32 (64-sub) **and** Intel-5300 (30-sub) canonicalization hash-matching native
+ Rust. **PASS**
+- [x] **§6.4** `pytest python/tests/test_mat.py -q` — **7/7**, incl. a fixed CSI
+ stream whose triage classification matches native `DisasterResponse` exactly.
+ **PASS**
+- [x] **§6.5** `pytest python/bench/ --benchmark-only` — all targets met (AETHER
+ `embed()` ~150 µs < 2 ms; MERIDIAN `normalize()` ~2.2 µs, `encode()` ~6.9 µs
+ < 200 µs; MAT `scan_once()` ~40 ms < 500 ms). **PASS**
+- [~] **§6.6** Parity harness (§4.1): all three golden-vector SHA-256 gates green
+ (`cargo test --features sota` → 6/6). **But CI wiring** as a release-blocking
+ gate is **not done** (out of `python/` scope). **PARTIAL — see §13.b.**
+- [ ] **§6.7** SOTA-bar reproduction (§4.3): **definitively OPEN** — cannot be
+ closed transitively via the parity harness. Investigated; three concrete reasons:
+ 1. **The native SOTA numbers aren't reproduced by any committed, runnable-today
+ test.** ADR-152 ~96% PCK@20 is a frozen result in
+ `benchmarks/wiflow-std/results/eval_retrained.json` that points at an **external
+ checkpoint** (`/home/ruvultra/wiflow-std-bench/upstream/test/best_pose_model.pth`,
+ not in the repo); the only relevant test `test_wiflow_std_parity.rs` is
+ `#![cfg(feature = "tch-backend")]` **and** `#[ignore]`d (needs gitignored
+ fixtures + LibTorch). ADR-027's `eval.rs::CrossDomainEvaluator` tests are pure
+ unit-math on hand-coded 2–3-element vectors, not dataset accuracy. ADR-024's
+ only accuracy-ish test asserts Spearman > 0.90 on **synthetic random**
+ embeddings (not real CSI, not the published > 0.95 bar); no room-ID / mAP /
+ anomaly-F1 test exists at all.
+ 2. **The bound AETHER surface ships untrained.** `EmbeddingExtractor`/
+ `ProjectionHead` default to random Xavier init (`Linear::with_seed(…,
+ 2024/2025)`, `embedding.rs:97–98`). A weight-loading API now **does** exist
+ (`load_weights`/`save_weights`, `65da488ad` — see §13.c.a), so the earlier
+ "no loading path" blocker is removed; but **no trained checkpoint exists** to
+ load, so the binding still produces untrained embeddings and cannot validate
+ mAP > 80% or any trained-model bar today.
+ 3. **No committed labeled CSI input/pose-pair data exists** to reuse (MM-Fi/NTU-Fi
+ appear only as config-default subcarrier counts / external paths;
+ `benchmarks/wiflow-std/results/*.npy` are corruption masks + result summaries,
+ not labeled fixtures).
+ The §4.1 parity harness proves the **strongest claim available today** — the
+ Python binding is bit-identical to native Rust for the bound (untrained) surface.
+ That is **not** accuracy validation. **See §13.c.**
+- [x] **§6.8** `.pyi` stubs present for all three modules; `mypy --strict` passes on
+ the three examples. **PASS**
+- [x] **§6.9** `python -c "import wifi_densepose.aether"` (etc.) on the base wheel
+ raises a clear `ImportError` naming the missing extra. **PASS**
+
+No regression: 76 pre-existing tests pass on the default wheel. The two unmet
+criteria (§6.6 CI wiring, §6.7 accuracy) plus the wheel-size hoists (§13.a) are the
+gate to Accepted.
+
+---
+
+## 7. Consequences
+
+### 7.1 Positive
+
+- **Closes the ADR-117 P6 gap**: the three most-requested SOTA subsystems become
+ scriptable from Python without touching the Rust workspace.
+- **Default wheel stays lean**: feature-gated extras preserve ADR-117 §5.4's ≤ 5 MB
+ budget and "no heavy system deps" invariant; MAT's ML stack and MERIDIAN's
+ libtorch path never enter the base wheel.
+- **Reuses the proven idiom**: no new binding machinery — same `#[pyclass]` +
+ `py.allow_threads` + `register()` pattern already shipping in `bindings/vitals.rs`.
+- **Prove-everything alignment**: the parity harness makes "the Python binding
+ equals the Rust core" a *measured, hash-verified* claim, not an assertion —
+ matching the project's MEASURED-vs-CLAIMED discipline.
+- **Upstream consistency**: `[mat]` pip extra mirrors the `mat` cargo feature, so
+ the Python packaging story matches the Rust one exactly.
+
+### 7.2 Negative
+
+- **cibuildwheel matrix grows**: `[sota]` is a distinct compiled variant, adding a
+ build axis (and CI time) beyond ADR-117's 5-wheel abi3 matrix.
+- **AETHER's backing crate is server-shaped**: depending on
+ `wifi-densepose-sensing-server` (Axum/tokio) risks pulling a runtime into an
+ extension module; may force a Rust-side refactor to hoist `embedding.rs` into a
+ leaf crate (§11.1).
+- **MERIDIAN surface is partial**: training-time types (`DomainFactorizer`, GRL,
+ `VirtualDomainAugmentor`) stay unbound until the deferred libtorch tier, so the
+ Python API is inference/adaptation-only — potential user confusion (mitigated by
+ docs + `.pyi` omissions).
+- **Golden fixtures are maintenance surface**: any intentional numeric change in a
+ Rust subsystem requires regenerating and re-witnessing its golden vector.
+
+### 7.3 Neutral
+
+- The `[sota]` convenience extra is purely additive; users who want one subsystem
+ install one extra.
+- No change to the v2.0.0 semver line; extras ship additively as v2.x.y.
+
+---
+
+## 8. Alternatives considered
+
+### Alt-A: Fold all three into the default wheel
+
+Rejected — breaks ADR-117 §5.4's ≤ 5 MB budget, drags MAT's ML stack and (via
+MERIDIAN training) libtorch into every install, and contradicts the upstream
+`mat` cargo-feature gating.
+
+### Alt-B: Separate PyPI packages (`wifi-densepose-aether`, etc.)
+
+Rejected for the SOTA trio — three packages fragment the import namespace and
+duplicate the abi3/cibuildwheel setup. (This remains the right call for the
+libtorch `nn` tier per ADR-117 Open Q §11.2, which is genuinely heavy.) Extras of
+one wheel keep `wifi_densepose.*` coherent.
+
+### Alt-C: Pure-Python reimplementation of the three subsystems
+
+Rejected explicitly — this is the exact drift ADR-117 §8 Alt-C was created to
+exit. A Python reimplementation would immediately begin diverging from the Rust
+SOTA and could not pass the §4.1 bit-for-bit parity gate.
+
+### Alt-D: REST/WS client to a running sensing-server for AETHER
+
+Rejected as the primary path — provides zero offline embedding utility and cannot
+host the parity harness over local Rust code (same reasoning as ADR-117 §8 Alt-B).
+The pure-Python client layer (`[client]`) remains available for streaming.
+
+---
+
+## 9. Risks
+
+| Risk | Likelihood | Severity | Mitigation |
+|---|---|---|---|
+| `wifi-densepose-sensing-server` pulls tokio into the extension module | ~~High~~ **Not realized** | ~~High~~ **Low** | **Measured, not realized:** the stripped `[aether]` wheel was **~361 KB** (14× under budget) even before the hoist — linker DCE (`--gc-sections`) strips the server's unreached Axum/tokio/worldgraph code because the binding reaches only pure-compute symbols. Hoist (`a47bb71b2`) still done for build-time / dep-graph hygiene, not budget. See §11.1, §13.a |
+| MERIDIAN accidentally links `tch-backend` (libtorch) via a default feature | Medium | High | Explicit `default-features = false` on `wifi-densepose-train`; CI `auditwheel`/`ldd` check that no libtorch symbol is present in the `[meridian]` wheel |
+| `[sota]` build axis blows up cibuildwheel time | Medium | Medium | Build `[sota]` variant only on tagged releases, not every PR |
+| Golden vectors drift when a Rust subsystem changes intentionally | Medium | Low | Documented regeneration step + ADR-028 witness re-sign; parity mismatch is a loud release blocker, never silent |
+| MAT async-only surface has no clean sync entry point | Medium | Medium | Add sync `scan_once()` wrapper Rust-side (§11.3) before binding |
+| Users install base wheel and expect `wifi_densepose.aether` | Low | Low | Clear `ImportError` naming the missing extra (acceptance criterion §6) |
+
+---
+
+## 10. Compatibility
+
+- No change to the default wheel, its abi3-py310 base, or its size budget.
+- Extras ship additively on the existing v2.x line; no semver break.
+- `[mat]` pip extra ↔ `mat` cargo feature parity is preserved by construction.
+- `.pyi` stubs are gated so `mypy --strict` only sees a subsystem when its extra
+ is installed.
+
+---
+
+## 11. Open questions
+
+1. **AETHER crate shape** — **RESOLVED (`a47bb71b2`).** The original worry that
+ linking `wifi-densepose-sensing-server` would bloat the wheel was **never
+ measured** — it reasoned from the dependency tree (server has non-optional
+ tokio/Axum ⇒ wheel must be huge). The stripped-release measurement disproves it:
+ `[aether]` was **369,782 B (~361 KB)** *before* the hoist — already ~14× under
+ the 5 MB budget — and **319,719 B (~312 KB)** after. Linker dead-code elimination
+ (`--gc-sections` on the pyo3 cdylib) already strips the server's unreached
+ Axum/tokio/worldgraph/ruvector paths because the binding reaches only
+ pure-compute symbols. The hoist into `wifi-densepose-aether` was still done — its
+ real payoff is **build-time** (`[aether]` alone 71 s → 12 s), **dep-graph
+ hygiene** (`python/Cargo.lock` −1238 lines), and **removing latent risk** (a
+ future change that makes server code reachable would then genuinely bloat the
+ wheel). **Convention note:** measure the stripped release wheel size before
+ assuming a dependency-tree risk requires a hoist — linker DCE handles pure-Rust
+ unreached code, but native/FFI-bundled deps (e.g. `ort`/ONNX Runtime, see §13.a
+ MAT) are *not* stripped and are the real size-risk category.
+
+2. **MERIDIAN training-time types**: `DomainFactorizer`, `GradientReversalLayer`,
+ and `VirtualDomainAugmentor` are meaningful only with the tch training loop.
+ Confirm they stay unbound in P6 and move with the deferred libtorch tier.
+ *Tentative: yes — P6 is inference/adaptation only.*
+
+3. **MAT sync entry point**: `DisasterResponse::start_scanning` is an async tokio
+ loop. Does a sync single-cycle `scan_once()` already exist, or must it be added
+ Rust-side? *Tentative: add a thin sync `scan_once()` wrapping one `scan_cycle`;
+ do not bind an event loop into the extension.*
+
+4. **`[sota]` wheel vs per-extra wheels**: cibuildwheel builds one binary per
+ feature-set. Do we publish one `[sota]` wheel and let pip select, or per-extra
+ wheels? This affects the number of build variants. *Tentative: single `[sota]`
+ superset wheel on tagged releases; base wheel stays feature-free.*
+
+5. **INT8 embedding path in Python**: ADR-024 §2.8 sets an INT8 rank-correlation
+ bar. Do we expose the INT8 quantized `embed()` in P6, or FP32 only first?
+ *Tentative: FP32 in P6; INT8 follows once the Rust quantized path is stable.*
+
+---
+
+## 12. References
+
+### Internal ADRs
+- **ADR-117**: pip modernization via PyO3 + maturin — the wheel this ADR extends;
+ §5.1/§5.4/§5.6 (extras + wheel budget), §6 "P6+ Deferred".
+- **ADR-024**: Project AETHER — contrastive CSI embedding; §2.6 module surface,
+ §2.8 performance/accuracy targets.
+- **ADR-027**: Project MERIDIAN — cross-environment domain generalization; §4
+ phase acceptance criteria, §4.6 evaluation protocol.
+- **ADR-152**: WiFi-Pose SOTA 2026 — WiFlow-STD ~96% PCK@20 MEASURED-EQUIVALENT bar.
+- **ADR-028**: ESP32 capability audit / witness scheme — the SHA-256 parity gate
+ the §4.1 golden harness reuses.
+
+### Rust source (verified HEAD)
+- `v2/crates/wifi-densepose-sensing-server/src/embedding.rs` — AETHER.
+- `v2/crates/wifi-densepose-train/src/{domain,geometry,rapid_adapt,virtual_aug,eval}.rs` — MERIDIAN.
+- `v2/crates/wifi-densepose-signal/src/hardware_norm.rs` — MERIDIAN HardwareNormalizer.
+- `v2/crates/wifi-densepose-mat/src/lib.rs` — MAT.
+- `python/src/bindings/vitals.rs` — the `py.allow_threads` GIL-release precedent.
+- `python/bench/test_bench_vitals.py` — the pytest-benchmark pattern P4 follows.
+
+---
+
+## 13. Open follow-ups (blocking Accepted)
+
+P1–P4 are real, well-tested progress: **32/32 binding tests** (aether 9, meridian
+13, mat 7, + 3 smoke) and **6/6 native parity tests** all pass, verified on the
+reference machine. The three leaf-crate hoists (§13.a) are now **done**. Two items
+still gate Accepted: **§13.b** (wire the parity harness into CI as a release gate)
+and **§13.c** (the SOTA accuracy gap — bindings are structurally *untrained*, and no
+eval harness or labeled data exists yet; genuine long-term work, not a quick fix).
+
+### 13.a — Leaf-crate hoists (all three DONE) — one real fix, one minor, one false alarm
+
+All three extras' backing crates carry heavy declared deps, so the hoist was applied
+to each. But **measuring the stripped release wheel** (not reasoning from the
+dependency tree) showed the wheel-size story differs sharply per extra. Linker
+dead-code elimination (`--gc-sections` on the pyo3 cdylib) strips **pure-Rust
+unreached** code, so a heavy declared dep tree does **not** imply a big wheel;
+**native/FFI-bundled** deps (`ort`/ONNX Runtime's native library) are the exception
+— DCE cannot strip them, and those are the real size risk.
+
+| Extra | Commit | Wheel size (stripped) | Verdict |
+|---|---|---|---|
+| `[aether]` | `a47bb71b2` | **~361 KB → ~312 KB** | **False alarm.** Never breached the 5 MB budget — DCE already stripped the sensing-server's unreached Axum/tokio/worldgraph/ruvector code. Hoist justified by build-time (71 s → 12 s), dep-graph hygiene (`Cargo.lock` −1238 lines), and latent-risk removal — **not** budget. |
+| `[mat]` | `7ed57f041` | **8.4 MB → 2.0 MB** | **Real, measured regression.** `wifi-densepose-nn` bundles `ort`/ONNX Runtime, a **native** library DCE does **not** strip → genuine breach. Fix necessary and correctly characterized. |
+| `[meridian]` | `99fea9df9` | **1.8 MB → 1.7 MB** | **Real but minor.** Measured from the start; a dead dep removed. Already under budget; small win. `libtorch` correctly avoided throughout (`tch` optional, off). |
+
+These were changes **inside** the upstream `v2/` crates (owned by other agents this
+session); the default wheel was unaffected throughout because every extra is
+feature-gated off. All three hoists are now landed — the remaining Accepted blockers
+are §13.b (CI gate) and §13.c (accuracy fixtures), **not** wheel size.
+
+### 13.b — Wire the parity harness into CI as a real release gate (§6.6)
+
+The three golden-vector SHA-256 gates pass locally (`cargo test --features sota` →
+6/6) but are not yet wired into a CI workflow that **blocks release** on mismatch.
+Add a job to the ADR-117 §5.4 publish pipeline that runs the native `*_parity.rs`
+references + the `pytest` binding checks and fails the release on any divergence.
+
+### 13.c — Close the SOTA accuracy gap (§4.3, §6.7) — genuine long-term work
+
+This is the most important honesty gap and it is **more fundamental than missing
+labeled data** (see §6.7 for the three findings). The parity harness proves the
+Python binding is **byte-identical to the native Rust path** for the bound, **but
+untrained**, surface — it does **not** prove the cited SOTA numbers (ADR-152
+~96% PCK@20; ADR-024 room-ID > 95% / re-ID mAP > 80% / anomaly F1 > 0.90; ADR-027
+cross-domain MPJPE + 20% / domain-gap < 1.5). Those bars remain **CLAIMED, not
+MEASURED** by this work.
+
+Closing it requires three steps, in dependency order:
+
+- **(a) Add trained-weight loading to the AETHER/pose bindings — DONE (`65da488ad`).**
+ `EmbeddingExtractor` gained `save_weights(path)` / `load_weights(path)` /
+ `param_count` on both the native crate and the Python binding (GIL-released,
+ `ValueError`/never-panics on bad input), removing the "structurally untrained, no
+ loading path" blocker: a real checkpoint can now be loaded whenever one exists.
+ Default construction is unchanged (still random `with_seed` init, clearly labeled
+ untrained) — purely additive. **Format tradeoff:** rather than pull in
+ `safetensors`/`serde`/`bincode`, the on-disk format is raw little-endian `f32`
+ with a 12-byte header (8-byte magic `AETHERW1` + `u32` param count), reusing the
+ pre-existing `flatten_weights`/`unflatten_weights` — this deliberately preserves
+ `wifi-densepose-aether`'s zero-dependency std-only leaf-crate property from the
+ §13.a hoist. **Verified:** `cargo test -p wifi-densepose-aether` 98/98; parity 3/3
+ incl. the new cross-language golden `aether_weights_parity.rs` (native Rust and the
+ Python binding load the same weight file and produce a byte-identical embedding
+ SHA-256, and the loaded weights demonstrably move the output off the random-init
+ baseline — not a silent no-op); `pytest test_aether.py` 13/13 (up from 9).
+ **This does NOT close §6.7** — it is the *capability* to load weights, not trained
+ weights; (b) and (c) below remain, and no SOTA number is validated yet.
+- **(b) Commit or source a small labeled CSI fixture** (input CSI + ground-truth
+ pose/identity/room labels) — **still OPEN.** Genuine **data-acquisition scope**.
+- **(c) Build a real eval harness** computing PCK / mAP / room-ID / anomaly-F1 /
+ Spearman on (a)+(b) and asserting the published bars — **still OPEN.**
+
+With (a) landed, the remaining work is (b) and (c): genuine research /
+data-acquisition scope beyond one session. This is now purely a data-availability +
+missing-eval-infra problem, **not** a binding defect. Status stays **Proposed**
+until (b)–(c) land and §4.3 is run for real.
diff --git a/docs/adr/ADR-186-training-progress-api.md b/docs/adr/ADR-186-training-progress-api.md
new file mode 100644
index 00000000..6ca7c194
--- /dev/null
+++ b/docs/adr/ADR-186-training-progress-api.md
@@ -0,0 +1,486 @@
+# ADR-186: Training progress API — wire the orphaned in-server trainer to `/ws/train/progress`
+
+| Field | Value |
+|-------|-------|
+| **Status** | Accepted |
+| **Date** | 2026-07-21 |
+| **Deciders** | ruv |
+| **Codename** | **TRAIN-RECONNECT** — connecting a trainer that was written, committed, and then never plugged in |
+| **Relates to** | [ADR-051](ADR-051-sensing-server-decomposition.md) (main.rs decomposition into ~14 modules), [ADR-151](ADR-151-per-room-calibration.md) (`train-room` specialist bank), [ADR-152](ADR-152-wifi-pose-sota-2026.md) (MAE recipe / geometry conditioning), [ADR-166](ADR-166-quality-engineering-security-hardening.md) (WS auth + god-object decomposition) |
+| **Tracking issue** | [#1233](https://github.com/ruvnet/wifi-densepose/issues/1233) — "Training does not start – /ws/train/progress returns 404 and no model is generated" (open) |
+
+---
+
+## 1. Context
+
+### 1.1 The reported gap
+
+A user starting training from the web dashboard hits
+`ws://localhost:3000/ws/train/progress`, which **404s**, and the backend never
+produces a trained `.rvf` model or any further log output beyond a single
+"Training started" line. Issue #1233 is open, and the repo owner's own comment on
+it states:
+
+> The `/ws/train/progress` WebSocket endpoint is not yet exposed in the stable
+> server — the training pipeline (room-calibration specialists, MAE pretraining)
+> runs via the CLI (`wifi-densepose train-room`) rather than through the
+> HTTP/WebSocket API, which is why the Docker image returns 404 for that path.
+
+So the dashboard has a **"Start Training" button that silently no-ops**: it POSTs a
+config, receives a `success: true` response, and then nothing happens — no error is
+surfaced, no model is produced, no progress stream exists. A button that appears to
+work but does nothing is the definition of slop, and this ADR exists to close that
+gap honestly.
+
+### 1.2 What the live server actually does today (evidence)
+
+The stable server mounts **stub** training handlers. The POST handler flips a string
+flag, logs one line, and returns success — it starts no job:
+
+```rust
+// v2/crates/wifi-densepose-sensing-server/src/main.rs:4986–5006
+async fn train_start(
+ State(state): State,
+ Json(body): Json,
+) -> Json {
+ let mut s = state.write().await;
+ if s.training_status == "running" { /* ... */ }
+ s.training_status = "running".to_string();
+ s.training_config = Some(body.clone());
+ info!("Training started with config: {}", body); // ← the one log line the issue reports
+ Json(serde_json::json!({
+ "success": true,
+ "status": "running",
+ "message": "Training pipeline started. Use GET /api/v1/train/status to monitor.",
+ }))
+}
+```
+
+These three stubs — and **nothing else training-related** — are wired into the live
+router:
+
+```rust
+// v2/crates/wifi-densepose-sensing-server/src/main.rs:8068–8071
+// Training endpoints
+.route("/api/v1/train/status", get(train_status))
+.route("/api/v1/train/start", post(train_start))
+.route("/api/v1/train/stop", post(train_stop))
+```
+
+There is **no `/ws/train/progress` route in the live app** — hence the 404 that
+issue #1233 reports. The stub state fields backing them are just:
+
+```rust
+// v2/crates/wifi-densepose-sensing-server/src/main.rs:1125–1127
+training_status: String, // "idle" | "running" | ...
+training_config: Option,
+```
+
+### 1.3 The surprising finding: a real trainer already exists, orphaned
+
+The gap is **not** that training was never built for the server. A complete
+in-server training pipeline **already exists in the tree** at
+`v2/crates/wifi-densepose-sensing-server/src/training_api.rs` (1,860 lines). Its own
+module doc describes what it does (`training_api.rs:1–25`):
+
+- Loads recorded CSI from `.csi.jsonl` files, extracts signal features (subcarrier
+ variance, temporal gradients, Goertzel frequency-domain power).
+- Trains a regularised linear model via batch gradient descent.
+- Exports a calibrated `.rvf` model container via `RvfBuilder` on completion.
+- **"No PyTorch / `tch` dependency is required. All linear algebra is implemented
+ inline using standard Rust math."** (`training_api.rs:11–13`)
+
+It runs training on a **background tokio task** and streams progress over a
+`tokio::sync::broadcast` channel to a real WebSocket handler:
+
+- `start_training` spawns the job: `tokio::spawn(async move { ... })`
+ (`training_api.rs:1564`, spawn at `:1610`).
+- `ws_train_progress_handler` subscribes to `training_progress_tx` and forwards
+ `{"type":"progress", "data": …}` frames (`training_api.rs:1778–1836`).
+- A `routes()` factory wires the whole surface, **including the missing route**:
+
+```rust
+// v2/crates/wifi-densepose-sensing-server/src/training_api.rs:1841–1849
+pub fn routes() -> Router {
+ Router::new()
+ .route("/api/v1/train/start", post(start_training))
+ .route("/api/v1/train/stop", post(stop_training))
+ .route("/api/v1/train/status", get(training_status))
+ .route("/api/v1/train/pretrain", post(start_pretrain))
+ .route("/api/v1/train/lora", post(start_lora_training))
+ .route("/ws/train/progress", get(ws_train_progress_handler))
+}
+```
+
+**This module is dead code.** There is no `mod training_api;` declaration anywhere
+in the crate — a repo-wide search for `training_api` returns only a doc-comment
+mention in `path_safety.rs:9`. Because Rust never sees the file without a `mod`
+declaration, `training_api.rs` is **not compiled into the binary at all**, and
+`training_api::routes()` is never merged into the app. It was written, committed
+(last touched by commit `9b07dff29`), and then orphaned.
+
+### 1.4 Why it would not even compile if naively wired in
+
+The orphan was written against a **different state shape than the one that shipped**.
+`training_api.rs` expects its parent to expose an `AppStateInner` carrying a training
+sub-state and a broadcast sender:
+
+```rust
+// v2/crates/wifi-densepose-sensing-server/src/training_api.rs:249
+pub type AppState = Arc>;
+// handlers read s.training_state.status, s.training_state.task_handle,
+// s.training_progress_tx (e.g. training_api.rs:1588, :1610, :1788)
+```
+
+But the **real** `AppStateInner` (`main.rs:1024`, aliased `SharedState` at
+`main.rs:1249`) has none of those fields — only the `training_status: String` /
+`training_config` stubs from §1.2. `training_state: TrainingState` is defined
+locally in `training_api.rs:232`, and `training_progress_tx` exists nowhere on the
+live state. So adding `mod training_api;` today produces a compile error: the module
+references `AppStateInner` fields that do not exist. Wiring it in requires
+**reconciling the state struct first**, not merely uncommenting a route.
+
+### 1.5 The working path today
+
+The path that actually trains a model is the CLI, exactly as the maintainer's
+comment says:
+
+- `wifi-densepose train-room` → `room.rs:241` `train_room(...)`, the ADR-151
+ Stage-2–5 per-room specialist-bank trainer (`enroll → train-room → room-watch`).
+- The heavier `wifi-densepose-train` crate exposes epoch-level metrics
+ (`trainer.rs:43` `pub epoch: usize`, `trainer.rs:64` `best_epoch`) that a progress
+ stream could surface directly — the data a WebSocket needs already exists in the
+ training loop.
+
+### 1.6 What this ADR is *not*
+
+- Not a rewrite of the trainer. The pipeline in `training_api.rs` already exists;
+ this ADR reconnects and hardens it.
+- Not a move of GPU/`tch`-backed training into the Axum server. The in-server
+ trainer is deliberately `tch`-free (§1.3). Heavy MAE/LoRA training stays in the
+ CLI / `wifi-densepose-train` crate; the server streams progress for the light,
+ pure-Rust specialist trainer and (optionally) proxies status for CLI-launched runs.
+- Not a change to the `train-room` CLI contract (ADR-151). The CLI remains the
+ authoritative path for offline / batch training.
+
+---
+
+## 2. Current state — evidence
+
+| Artifact | Value | Source |
+|---|---|---|
+| Live POST handler | `train_start` — flips a flag, logs, returns `success:true`, starts no job | `main.rs:4986–5006` |
+| The "Training started" log line from the issue | `info!("Training started with config: {}", body)` | `main.rs:5000` |
+| Live training routes | `train/status`, `train/start`, `train/stop` (stubs only) | `main.rs:8068–8071` |
+| `/ws/train/progress` in live app | **Absent** → 404 | (no route in `main.rs` router) |
+| Live training state fields | `training_status: String`, `training_config: Option` | `main.rs:1125–1127` |
+| Real in-server trainer | 1,860-line implemented pipeline, `tch`-free, exports `.rvf` | `training_api.rs:1–25` |
+| Real WS progress handler | subscribes to broadcast, streams `progress` frames | `training_api.rs:1778–1836` |
+| Real route factory (has the missing route) | `routes()` incl. `/ws/train/progress` | `training_api.rs:1841–1849` |
+| Background job spawn | `tokio::spawn` of the training task | `training_api.rs:1564`, spawn `:1610` |
+| `mod training_api;` declaration | **None in the crate** (only a doc mention) | `path_safety.rs:9` |
+| State-shape mismatch | expects `super::AppStateInner.{training_state, training_progress_tx}` | `training_api.rs:249`, `:232` |
+| Real `AppStateInner` / `SharedState` | has neither field | `main.rs:1024`, `:1249` |
+| Working training path | CLI `train-room` (ADR-151 specialist bank) | `room.rs:241` |
+| Epoch metrics available to stream | `TrainMetrics.epoch`, `best_epoch` | `train/src/trainer.rs:43`, `:64` |
+
+---
+
+## 3. Gap analysis
+
+| Capability | Desired | Today | Gap severity |
+|---|---|---|---|
+| `/ws/train/progress` resolves | 101 Switching Protocols, streams epoch/loss/eta | 404 (route absent) | **Critical** — the reported bug |
+| "Start Training" produces a model | background job trains and writes `.rvf` | flag flip + one log line, no job, no model | **Critical** |
+| Error surfaced to the user | button reflects real state / disabled with reason | silent no-op, `success:true` | **Critical** (slop) |
+| In-server trainer compiled | part of the crate, unit-tested | orphaned; not compiled (no `mod`) | **High** |
+| State supports progress streaming | `training_state` + `training_progress_tx` on `AppStateInner` | absent — orphan won't compile as-is | **High** |
+| WS auth on the training surface | `/ws/train/progress` under bearer gate (ADR-166 §Sprint-1) | n/a (route absent) | **High** |
+| `dataset_ids` path safety | validated before file open | `path_safety.rs` exists but unreached by live routes | **Medium** |
+| Server ↔ CLI parity | shared/consistent training semantics | two divergent trainers (stub vs CLI vs orphan) | **Medium** |
+
+---
+
+## 4. Decision
+
+**Chosen path: wire the existing in-server trainer into the live server** — reconcile
+the state struct, declare the module, merge `training_api::routes()`, delete the
+stub handlers, and expose a real `/ws/train/progress` that streams epoch/loss/eta
+events from the already-implemented background job.
+
+This is called **TRAIN-RECONNECT**.
+
+### 4.1 Why this path, and not "make the button honestly say CLI-only"
+
+The task framing offered two honest options. Investigation decided it:
+
+| Consideration | Evidence | Implication |
+|---|---|---|
+| Is server-side training genuinely GPU/`tch`-bound (→ keep CLI-only)? | The in-server trainer is explicitly **`tch`-free**, pure Rust, exports `.rvf` (`training_api.rs:11–13`) | The "too heavy for Axum" argument is contradicted by the code |
+| Does a real streaming implementation already exist? | Full pipeline + broadcast + WS handler + `routes()` present (`training_api.rs:1564,1778,1841`) | The impressive-sounding option is also the *least* new code — it already exists |
+| Why does it 404 then? | No `mod training_api;`; state-shape mismatch (`:249` vs `main.rs:1024`) | The fix is reconnection + reconciliation, not new invention |
+
+Because the honest, code-supported reality is "a working trainer was written and left
+unplugged," the right decision is to plug it in — this is not choosing the flashier
+option over the code; it *is* what the code says.
+
+**However**, path B is retained as a **mandatory fallback guarantee** (Phase P5): if,
+for a given build/deployment, server-side training is disabled (e.g. behind a
+feature flag, or on the lightweight appliance image where recordings aren't
+available), the dashboard button MUST be disabled with a tooltip pointing at
+`wifi-densepose train-room` — never a silent `success:true` no-op again. The slop is
+eliminated in both the enabled and disabled configurations.
+
+### 4.2 Scope boundary — light trainer streams, heavy trainer proxies
+
+- The **pure-Rust specialist trainer** (`training_api.rs`, ADR-151 flavour) runs
+ in-process and streams live epoch/loss/eta over `/ws/train/progress`.
+- **Heavy MAE/LoRA training** (`wifi-densepose-train`, `tch`/GPU) stays CLI-launched.
+ The server does not host it; at most `/api/v1/train/status` reports on a
+ CLI-launched run if one registers itself. Streaming heavy training is out of scope
+ for this ADR (noted as an open question, §8).
+
+---
+
+## 5. Detailed design
+
+### 5.1 Reconcile `AppStateInner`
+
+Replace the two stub fields (`main.rs:1125–1127`) with the sub-state the trainer
+expects, so `training_api.rs` compiles against `super::AppStateInner`:
+
+```rust
+// main.rs — inside AppStateInner (replacing training_status / training_config)
+training_state: training_api::TrainingState, // status, epoch, best_pck, task_handle
+training_progress_tx: tokio::sync::broadcast::Sender, // progress fan-out
+```
+
+`train_status` consumers that read `s.training_status` / `s.training_config` are
+updated to read `s.training_state.status`. The broadcast sender is created at state
+init (`main.rs:7826` region, where the stubs are seeded today).
+
+### 5.2 Declare and merge the module
+
+- Add `mod training_api;` to `main.rs` (or `pub mod` in `lib.rs` if the router is
+ assembled there).
+- Delete the stub handlers `train_start` / `train_stop` / `train_status`
+ (`main.rs:4977–5023`) and their three route mounts (`main.rs:8069–8071`).
+- Merge the real router **after** `.with_state(state.clone())`, the same pattern the
+ RuField surface already uses (`main.rs:8104–8111`):
+
+```rust
+// main.rs router assembly
+.merge(training_api::routes())
+```
+
+so that `/api/v1/train/*` and `/ws/train/progress` resolve against the shared state.
+
+### 5.3 Auth and safety (ADR-166 alignment)
+
+- `/api/v1/train/*` sits under the existing opt-in bearer gate (`main.rs:8095–8102`,
+ `RUVIEW_API_TOKEN`). `/ws/train/progress` follows the same policy decision made for
+ `/ws/sensing` — document explicitly whether the training WS is gated (recommended:
+ gated when a token is set, since training reads/writes recordings and models).
+- `dataset_ids` from `StartTrainingRequest` (`training_api.rs:126–130`) are resolved
+ through `path_safety` before any file open — `path_safety.rs:9` already anticipates
+ `{dataset_id}.csi.jsonl` under `RECORDINGS_DIR`; wire it in the load path.
+- Single-job concurrency guard: `start_training` already rejects a second run while
+ `training_state.status.active` (`training_api.rs:1571`) — keep it.
+
+### 5.4 Progress event schema (already emitted)
+
+The WS handler already frames messages as `{"type":"status"|"progress", "data": …}`
+(`training_api.rs:1796–1815`). Confirm the `data` payload carries at minimum
+`epoch`, `total_epochs`, `loss`, `best_pck`, and an `eta_seconds`; these map onto the
+`TrainMetrics`/`TrainingStatus` fields already populated by the loop
+(`training_api.rs:1251`, `train/src/trainer.rs:43,64`).
+
+### 5.5 Dashboard honesty (both configurations)
+
+- **Enabled build:** button POSTs `/api/v1/train/start`, then opens
+ `/ws/train/progress`; the UI renders live epoch/loss/eta and a terminal
+ success/failure with the output `.rvf` path.
+- **Disabled build:** `/api/v1/train/start` returns a structured
+ `{"enabled": false, "reason": "...", "cli": "wifi-densepose train-room"}` and the
+ button renders disabled with a tooltip — no silent `success:true`.
+
+---
+
+## 6. Phase ledger
+
+```
+P0 ──► P1 ──► P2 ──► P3 ──► P4 ──► P5 ──► P6
+repro state wire stream auth+ dash tests+
++audit recon router job safety honesty witness
+```
+
+### P0 — Reproduce & audit (evidence lock)
+- [x] Confirmed the orphan: `grep -rn "mod training_api"` returned **nothing**; the only
+ hit was a doc mention in `path_safety.rs`. `training_api.rs` was uncompiled.
+- [x] Confirmed the stub no-op (`train_start` at `main.rs:4986` flipped a string + logged
+ one line, no job, no `.rvf`) and the missing `/ws/train/progress` route.
+
+### P1 — Reconcile `AppStateInner`
+- [x] Replaced `training_status`/`training_config` with `training_state:
+ training_api::TrainingState` + `training_progress_tx: broadcast::Sender`.
+- [x] Updated state init; the only readers of the old fields were the stub handlers (deleted).
+- [x] Added `mod training_api;` (+ `mod path_safety;`); the module compiles against the real state.
+
+### P2 — Wire the router, delete the stubs
+- [x] Removed `train_start`/`train_stop`/`train_status` and their 3 route mounts.
+- [x] `.merge(training_api::routes())` — merged **before** `.with_state(...)` (not after).
+ The RuField surface merges after because it carries a *different* state; the training
+ router shares `SharedState`, so merging before is what puts `/api/v1/train/*` under the
+ same `/api/v1/*` bearer gate as everything else.
+- [x] `/api/v1/train/*` and `/ws/train/progress` resolve (verified by HTTP tests, not 404).
+
+### P3 — Confirm the real job streams and produces a model
+- [x] The spawned job loads `.csi.jsonl` (falls back to a `frame_history` snapshot),
+ runs the gradient-descent loop, and writes a `.rvf` under `data/models`.
+- [x] Progress frames carry `epoch`, `total_epochs`, `train_loss`, `val_pck`, `eta_secs`.
+- [x] Server-vs-CLI semantics documented as **intentionally divergent** (§4.2, §9.2):
+ the server runs the light pure-Rust specialist trainer; heavy MAE/LoRA stays CLI.
+
+### P4 — Auth & path safety
+- [x] `/api/v1/train/*` sits under the existing `RUVIEW_API_TOKEN` bearer gate (merged
+ before `.with_state`); `/ws/train/progress` is intentionally **ungated**, matching
+ `/ws/sensing` (browsers can't attach an `Authorization` header to a WS upgrade).
+- [x] `dataset_ids` resolved via `path_safety::safe_id` before file open; pinned by
+ `load_recording_frames_rejects_path_traversal`.
+- [x] Single-job guard: `spawn_training_job` rejects a second start while active
+ (`is_active()` → `active_error`).
+
+### P5 — Dashboard honesty (fallback guarantee)
+- [x] Enabled build: `TrainingPanel` opens `/ws/train/progress` before the POST and renders
+ live epoch/loss/PCK/ETA + a terminal Complete state (already wired; verified).
+- [x] Disabled build (`RUVIEW_DISABLE_SERVER_TRAINING`): start returns
+ `{enabled:false, cli:"wifi-densepose train-room"}` HTTP 409; the dashboard reads
+ `enabled` off `/api/v1/train/status` and disables the Start buttons with a CLI
+ tooltip — no silent no-op. Implemented via a runtime flag rather than a Cargo feature
+ so the `--no-default-features` test build keeps training ON (§9.4 resolved this way).
+
+### P6 — Tests & witness
+- [x] Live-socket test `ws_train_progress_live_101_and_frame`: genuine 101 handshake + a real
+ progress frame after POST start. Plus `ws_train_progress_route_is_wired_not_404`.
+- [x] `http_train_start_produces_model_and_streams`: POST start → poll status → `.rvf` exists.
+- [x] CHANGELOG updated. README/CLAUDE have no training route table, so no route-table edit
+ was needed there.
+
+*(All phases complete. Acceptance criteria verified below — this ADR is Accepted.)*
+
+---
+
+## 7. Acceptance criteria (concrete verification)
+
+All must pass before ADR-186 is Accepted:
+
+- [x] **Orphan is reconnected:**
+ `grep -rn "mod training_api" v2/crates/wifi-densepose-sensing-server/src/`
+ returns a hit (`main.rs`), and
+ `cargo build -p wifi-densepose-sensing-server` **compiles** (proves the state
+ reconciliation in §5.1 is correct — the module cannot compile against the
+ current `AppStateInner`). **VERIFIED.**
+- [x] **Route no longer 404s (HTTP upgrade):** verified in-process rather than with a live
+ `curl` — `ws_train_progress_live_101_and_frame` binds the training router on a real
+ socket and `tokio_tungstenite::connect_async` completes a genuine **101** handshake
+ (asserts `resp.status() == 101`); `ws_train_progress_route_is_wired_not_404` also
+ confirms the route is reached (426 under `oneshot`, **not** 404). **VERIFIED.**
+- [x] **Progress actually streams:** `ws_train_progress_live_101_and_frame` connects the WS,
+ POSTs `/api/v1/train/start`, and receives a real `{"type":"progress","data":{...}}`
+ frame within the 10 s ceiling. **VERIFIED.**
+- [x] **A model is produced:** `http_train_start_produces_model_and_streams` POSTs start,
+ polls `/api/v1/train/status` to completion, and asserts a **new `.rvf`** appeared under
+ `data/models/` (snapshot diff). Also covered by the trainer-level
+ `training_job_streams_real_progress_and_writes_model`. **VERIFIED.**
+- [x] **No silent no-op remains:** `http_train_start_disabled_returns_structured_409` sets
+ `RUVIEW_DISABLE_SERVER_TRAINING` and asserts POST start returns **HTTP 409** with
+ `{"enabled":false, ...,"cli":"wifi-densepose train-room"}` and never `success:true`.
+ **VERIFIED.**
+- [x] **Auth honored:** `/api/v1/train/*` is merged into the router **before** the
+ `RUVIEW_API_TOKEN` bearer middleware and `.with_state`, so it is covered by the exact
+ same `/api/v1/*` gate as every other authenticated route (verified by construction /
+ code review; `/ws/train/progress` is intentionally ungated like `/ws/sensing`). No new
+ dedicated runtime token test was added — the gate is the shared, already-tested
+ `bearer_auth` middleware. **VERIFIED (by construction).**
+- [x] **Path safety:** `load_recording_frames_rejects_path_traversal` asserts
+ `dataset_ids:["../../etc/passwd"]` yields no frames (rejected by `path_safety::safe_id`
+ before any file open). **VERIFIED.**
+- [x] **Integration test green:** `ws_train_progress_live_101_and_frame` (`#[tokio::test]`)
+ serves the training router, opens `/ws/train/progress`, and asserts a 101 upgrade + a
+ real progress frame — and, being built on `training_api::routes()`, cannot compile if
+ the module is orphaned again. **VERIFIED.**
+- [x] **Workspace regression:** `cargo test -p wifi-densepose-sensing-server
+ -p wifi-densepose-train --no-default-features` — sensing-server bin **217 passed /
+ 0 failed**, all train suites **0 failed**. A full `cargo test --workspace
+ --no-default-features` run initially surfaced a **test-only parallelism race** in the
+ new tests (two model-writing tests deleted `.rvf`s by directory-diff, occasionally
+ removing a file a third test asserted existed) — fixed by removing the cross-test
+ deletions (each test cleans only its own artifact; `data/models` is gitignored).
+ Re-verified post-fix: `cargo test --workspace --no-default-features` — **0 failed**
+ (exit 0). **VERIFIED.**
+
+---
+
+## 8. Consequences
+
+### Positive
+- Closes issue #1233: the dashboard button either trains-and-streams or honestly says
+ "use the CLI" — the silent no-op is gone in every configuration.
+- Reclaims 1,860 lines of already-written, already-committed trainer that were dead
+ (uncompiled) code, and adds a test that keeps them wired.
+- `/ws/train/progress` gives the UI real epoch/loss/eta, matching the maintainer's
+ stated intent.
+- Forces the state-shape reconciliation that the orphan implied but never landed,
+ removing a latent "two competing training designs" trap in `AppStateInner`.
+
+### Negative
+- Editing `AppStateInner` (`main.rs:1024`) and the router (`main.rs:8068`) touches the
+ large `main.rs`; merge-conflict risk with concurrent work on the same file (the
+ ADR-166 decomposition is relevant here).
+- Adds a live training code path to the server's attack surface — mitigated by the
+ bearer gate and `path_safety`, but it must be reviewed (network/hardware boundary,
+ per the pre-merge security checklist).
+- Server and CLI now have two trainers that must be kept semantically consistent, or
+ their divergence explicitly documented.
+
+### Neutral
+- Heavy MAE/LoRA/`tch` training remains CLI-only; the server streams only the
+ light pure-Rust specialist trainer. Streaming heavy runs is deferred.
+- The progress event schema (`epoch/loss/best_pck/eta`) is already emitted by the
+ orphan; no new schema is invented, only confirmed and documented.
+
+---
+
+## 9. Open questions
+
+1. **WS auth policy for `/ws/train/progress`:** gate it whenever `RUVIEW_API_TOKEN`
+ is set (like `/api/v1/*`), or leave it open like `/ws/sensing`? *Tentative: gate
+ it — training reads recordings and writes models.*
+2. **Server ↔ CLI trainer parity:** should the in-server trainer and
+ `wifi-densepose train-room` (ADR-151) share one code path, or remain deliberately
+ separate (server = quick UI-driven specialist fit; CLI = full bank + geometry
+ conditioning)? *Tentative: keep separate, document the split, share feature
+ extraction where cheap.*
+3. **Heavy-training progress:** can a CLI-launched `wifi-densepose-train` (`tch`)
+ run register itself so `/api/v1/train/status` and the WS can report on it without
+ hosting it in-process? *Tentative: out of scope here; a follow-on ADR.*
+4. **Feature-flagging server training:** should in-server training be behind a Cargo
+ feature (off on the lightweight appliance image), making the P5 disabled-button
+ path the default there? *Tentative: yes — flag it; default the UI to the honest
+ disabled state on images without recordings.*
+
+---
+
+## 10. References
+
+- **Issue #1233**: https://github.com/ruvnet/wifi-densepose/issues/1233 — the reported bug.
+- **Live stubs**: `v2/crates/wifi-densepose-sensing-server/src/main.rs:4977–5023` (handlers),
+ `:8068–8071` (routes), `:1125–1127` (state fields), `:1024`/`:1249` (`AppStateInner`/`SharedState`).
+- **Orphaned trainer**: `v2/crates/wifi-densepose-sensing-server/src/training_api.rs` —
+ module doc `:1–25`, `TrainingState` `:232`, `AppState` alias `:249`, `start_training` `:1564`
+ (spawn `:1610`), WS handler `:1778–1836`, `routes()` `:1841–1849`.
+- **Not-a-module proof**: repo-wide `training_api` only in `path_safety.rs:9` (doc comment).
+- **CLI working path**: `v2/crates/wifi-densepose-cli/src/room.rs:241` `train_room` (ADR-151).
+- **Epoch metrics**: `v2/crates/wifi-densepose-train/src/trainer.rs:43`, `:64`.
+- **ADR-166**: WebSocket authentication + `main.rs` decomposition (security context for this change).
+- **ADR-151**: per-room calibration / `train-room` specialist bank.
diff --git a/docs/adr/ADR-187-archive-v1-deprecation-honest-labeling.md b/docs/adr/ADR-187-archive-v1-deprecation-honest-labeling.md
new file mode 100644
index 00000000..5adce978
--- /dev/null
+++ b/docs/adr/ADR-187-archive-v1-deprecation-honest-labeling.md
@@ -0,0 +1,198 @@
+# ADR-187: `archive/v1` Deprecation & Model-Weights Honest Labeling
+
+- **Status**: Accepted
+- **Date**: 2026-07-21
+- **Deciders**: ruv
+- **Tags**: archive-v1, deprecation, densepose-head, model-weights, honest-labeling, prove-everything, credibility, pip-tombstone
+- **Refs**: [#509](https://github.com/ruvnet/RuView/issues/509) (missing model weights / reproducibility), [#1125](https://github.com/ruvnet/RuView/issues/1125) ("has anyone got this to work?")
+- **Relates to**: [ADR-117](ADR-117-pip-wifi-densepose-modernization.md) (pip modernization + 1.99.0 tombstone), [ADR-160](ADR-160-edge-skill-library-honest-labeling.md) (honest-labeling precedent), [ADR-079](ADR-079-camera-ground-truth-training.md) (camera-supervised pose target), [ADR-152](ADR-152-wifi-pose-sota-2026-intake.md) (WiFlow-STD PCK@20 measurement), [ADR-175](ADR-175-int8-quantization-half-pose-model-measured.md) (int8 pose trade-off), [ADR-101](ADR-101-pose-estimation-cog.md) (pose cog)
+
+---
+
+## Context
+
+Two open GitHub issues are, at root, the same complaint: the project's public surface
+lets a reader believe a WiFi→17-keypoint pose model exists and produces real accuracy,
+when the specific code they land on cannot back that claim.
+
+- **#509** — a detailed technical review states: *"While the network architecture for
+ DensePoseHead is defined in the code, there are no pre-trained weights (.pth or .onnx
+ files) available in the repository,"* and questions whether ESP32 1×1 SISO antennas
+ can match the multi-antenna NIC research this project is inspired by.
+- **#1125** — a user asks for anyone to testify the project actually runs and returns
+ real data. A pure credibility complaint.
+
+This ADR follows the **prove-everything / anti-"AI-slop"** directive and the
+**honest-labeling** precedent set by ADR-160: the fix is to make the labels TRUE, not
+to fabricate a capability. Grading vocabulary (from ADR-152 / ADR-160):
+
+- **MEASURED** — reproduced in this worktree; the file/absence was directly inspected.
+- **DATA-GATED** — a real code path exists; honestly flagged where the accuracy is not validated.
+- **NO-ACTION (already-honest)** — audited, found correct, cited as a positive.
+
+### What the investigation actually found (MEASURED in this worktree)
+
+The situation is **more nuanced than either issue implies** — worse in one place, and
+distinctly *better* in others. Forcing a uniformly negative narrative would itself be
+dishonest. The findings:
+
+**1. `archive/v1` — the issue reporter is correct here.**
+- `archive/v1/src/models/densepose_head.py` defines `DensePoseHead` (segmentation +
+ UV-regression heads). Its `_initialize_weights()` uses **`kaiming_normal_` random
+ initialization only** — there is no checkpoint-loading path in the class.
+- `Glob archive/v1/**/*.{pth,onnx,safetensors,pt,ckpt,bin}` → **zero files**. There are
+ **no trained weights anywhere under `archive/v1/`.** The "architecture defined, no
+ weights" claim is TRUE for this tree.
+- `archive/v1/README.md` calls the tree "the legacy Python implementation" in a single
+ closing note but does **not** loudly warn users off it, and there is **no
+ `archive/v1/DEPRECATED.md`.** This is the dead-but-present code that shows up in greps
+ and search and reads as if it were the live implementation.
+- Per ADR-117, this exact tree is the source of the tombstoned pip package
+ `wifi-densepose 1.x` (1.99.0 raises an `ImportError` telling users to migrate). The
+ code is already tombstoned *on PyPI* but not *in the repo*.
+
+**2. `v2` (the current, maintained system) — real weights DO exist; the "no weights
+anywhere" reading is FALSE at the project level.** Git-tracked, committed checkpoints:
+- `v2/crates/cog-pose-estimation/cog/artifacts/pose_v1.safetensors` (507 KB) +
+ `pose_v1.onnx` (12 KB) + `train_results.json` — a **real committed 17-keypoint
+ model**, trained with Candle on an RTX 5080.
+- `v2/crates/cog-person-count/cog/artifacts/count_v1.{safetensors,onnx}` — a committed
+ person-count model.
+- Externally published on Hugging Face (not committed, but real and released):
+ `ruvnet/wifi-densepose-pretrained` (CSI encoder + presence head, honestly re-labeled
+ at **82.3% held-out temporal-triplet accuracy** — the older "100% presence" figure was
+ already retracted, an existing honest-labeling win) and `ruvnet/wifi-densepose-mmfi-pose`
+ (a pose model reporting **82.69% torso-PCK@20** on the MM-Fi `random_split` protocol).
+- ADR-152 measurement (a): the *external* WiFlow-STD (DY2434) model was reproduced at
+ **96.09% PCK@20** on an RTX 5080 (graded MEASURED-EQUIVALENT). That is an external
+ baseline, not RuView's own weights.
+
+**3. The honest gap is narrow and specific — the live, on-device ESP32 17-keypoint
+pose path.** Per `v2/crates/cog-pose-estimation/cog/README.md` (already an exemplary
+"Honest reading" section):
+- The committed `pose_v1` scores **PCK@20 = 3.0% / PCK@50 = 18.5%** on a 217-sample
+ holdout — **below the ADR-079 target of PCK@20 ≥ 35%.** It learns coarse structure
+ (`r_hip` 77% PCK@50) but distal/face joints are near-random. `encoder_init` was
+ `random`; it was trained on a single 30-min seated-at-desk recording (1,077 samples,
+ avg confidence 0.44).
+- The cog's **runtime inference path is still a centred-skeleton stub returning
+ `confidence=0`** — the `pose_v1.safetensors` weights are not yet wired into
+ `src/inference.rs`.
+- ADR-079 records the proxy-supervised baseline at **PCK@20 = 2.5%**, and ADR-152
+ **retracted** the internal camera-supervised 92.9% PCK@20 figure (it was a
+ constant-output model scored under an absolute threshold on near-static frames; a mean
+ predictor scores 100% under the same broken protocol).
+
+### The real problem to fix
+
+Not "the project has no weights" (false) and not "there is a validated pretrained
+DensePoseHead" (false for the live ESP32 path). The real problem is a **labeling and
+navigation gap**:
+1. `archive/v1`'s random-init `DensePoseHead` is indistinguishable, to a grepping
+ reader, from the live implementation, and carries no deprecation notice.
+2. Nowhere is the split stated plainly: *which* checkpoints are real and validated
+ (presence 82.3%, MM-Fi pose 82.69% torso-PCK@20), *which* are real-but-weak and
+ honestly labeled (`pose_v1` 3% PCK@20, runtime stubbed), and *which* are
+ architecture-only with no weights at all (`archive/v1` `DensePoseHead`).
+
+## Decision
+
+Two coordinated honest-labeling actions. Neither invents a capability; both make the
+public surface match what the code and checkpoints actually deliver.
+
+### (a) Formally deprecate `archive/v1` in the repo — MEASURED gap, proposed fix
+
+- **Add `archive/v1/DEPRECATED.md`** — a loud tombstone stating that `archive/v1` is the
+ original pure-Python implementation, is **unmaintained and superseded**, that its
+ `DensePoseHead` is **architecture-only with random-initialized weights and ships no
+ trained checkpoint**, and that the maintained path is the `v2/` Rust workspace + the
+ `wifi-densepose 2.x` / `ruview` pip wheel (ADR-117). Mirror the disclaimer tone of
+ ADR-160's `//!` headers and the pip 1.99.0 tombstone text.
+- **Prepend a loud notice to `archive/v1/README.md`** (the file exists) — a `> ⚠️
+ DEPRECATED` block at the very top pointing to `DEPRECATED.md`, `v2/`, and the pip
+ wheel, before any of the existing "how to install v1" content.
+- **Rule:** no doc outside `archive/v1/` may reference `archive/v1` code (other than the
+ ADR-028 deterministic proof at `archive/v1/data/proof/verify.py`, which is a
+ legitimately live signal-pipeline witness and stays) as if it were current. The two
+ README references verified (`README.md` lines 139/198/204; `docs/user-guide.md`
+ proof/swift-compile lines) are all proof/utility invocations, not implementation
+ claims — they are acceptable and out of scope.
+
+### (b) Model-weights honest labeling — state the three tiers explicitly
+
+Add a **"Model weights: what's real, what's not"** subsection to `README.md` and
+`docs/user-guide.md` that names the three tiers verified above, so no reader can infer
+"a pretrained 17-keypoint DensePoseHead produces real pose accuracy on my ESP32":
+
+| Tier | Checkpoint(s) | Honest status |
+|------|---------------|---------------|
+| **Real & validated** | `ruvnet/wifi-densepose-pretrained` (encoder + presence, 82.3% held-out temporal-triplet); `ruvnet/wifi-densepose-mmfi-pose` (82.69% torso-PCK@20, MM-Fi `random_split`); `count_v1` | MEASURED / published; keep current honest labels |
+| **Real but weak (honestly labeled)** | committed `pose_v1.safetensors` in `cog-pose-estimation` | **PCK@20 = 3.0%**, below the ADR-079 ≥35% target; runtime path is a `confidence=0` stub until weights are wired into `src/inference.rs`. Already disclosed in the cog README; surface the same caveat wherever the live ESP32 pose feature is advertised |
+| **Architecture only, no weights** | `archive/v1` `DensePoseHead` | random-init, no checkpoint; deprecated per (a) |
+
+- The existing MM-Fi/presence honest labels (retraction of "100% presence", the cog
+ "Honest reading") are **NO-ACTION positives** — cite them, do not weaken them.
+- The live ESP32 17-keypoint claim stays **DATA-GATED**: the path to a first
+ *reproducible* on-device baseline is ADR-079 (multi-session, full-body-framed,
+ camera-supervised, ≥30K paired samples at conf ≥0.7, target PCK@20 ≥35%), tracked in
+ [#645]. Do not advertise the live ESP32 pose feature without the "first-cut / below
+ target / runtime stub" caveat until that baseline is MEASURED.
+- Directly answer #509's ESP32-SISO question in the docs, honestly: single-antenna 56-
+ subcarrier CSI at a 20-frame window does **not** carry the fine-grained spatial
+ information the multi-antenna NIC research relies on (the cog README already shows
+ distal/face joints near-random) — the shippable pose accuracy the project *can* stand
+ behind today is the **MM-Fi benchmark** number, not a live single-ESP32 number.
+
+## Phase ledger
+
+| Phase | Action | State |
+|-------|--------|-------|
+| **P0** | This ADR (investigation + decision) | **DONE** (this file) |
+| **P1** | Add `archive/v1/DEPRECATED.md` + loud notice atop `archive/v1/README.md` | **DONE** (1fb5397dd) |
+| **P2** | Add "Model weights: what's real, what's not" tier table to `README.md` + `docs/user-guide.md`; add the caveat wherever the live ESP32 17-keypoint feature is advertised | **DONE** (1fb5397dd; follow-up caveated the hardware table, hero caption, and live-pipeline note) |
+| **P3** | Answer #509's SISO/no-weights question and #1125's "does it run" in `docs/user-guide.md` (point to the reproducible proofs: MM-Fi arena, `archive/v1/data/proof/verify.py`, cog `train_results.json`) | **DONE** (1fb5397dd) |
+| **P4** | Close the DATA-GATED live-pose gap via ADR-079 first reproducible on-device baseline (PCK@20 ≥35%) + wire `pose_v1.safetensors` into `cog-pose-estimation/src/inference.rs` | ACCEPTED-FUTURE ([#645]) |
+
+## Acceptance criteria
+
+- [x] `archive/v1/DEPRECATED.md` exists and names `v2/` + the pip wheel as the maintained path.
+- [x] `archive/v1/README.md` opens with a `> ⚠️ DEPRECATED` block before any install instructions.
+- [x] `README.md` and `docs/user-guide.md` no longer let a reader infer that `archive/v1`
+ or an untrained/random-init `DensePoseHead` produces real pose accuracy without the
+ caveats added here.
+- [x] The live ESP32 17-keypoint pose feature is nowhere advertised without its
+ "first-cut, PCK@20 = 3.0%, below ADR-079 target, runtime stub" caveat.
+- [x] The three real/published checkpoints (presence 82.3%, MM-Fi pose 82.69% torso-PCK@20,
+ `count_v1`) keep their existing honest labels — nothing is weakened or overclaimed.
+- [x] No claim is added that is not MEASURED or explicitly DATA-GATED.
+
+## Consequences
+
+### Positive
+- A grepping reader can no longer mistake `archive/v1`'s random-init `DensePoseHead` for
+ the live system; the dead code is loudly tombstoned in the repo, matching its PyPI 1.99.0 tombstone.
+- #509 and #1125 get an honest, verifiable answer: real trained weights *do* exist
+ (presence + MM-Fi pose are published and benchmarked), the *specific* file the reporter
+ found is architecture-only, and the live ESP32 pose path is honestly weak-and-in-progress.
+- Reinforces the ADR-160 honest-labeling discipline: the project's credibility comes from
+ precise labels, not from a suppressed or inflated narrative.
+
+### Negative
+- The docs must openly state that the live single-ESP32 17-keypoint pose is not yet at a
+ citable accuracy — a short-term "looks less finished" cost, paid for by not overclaiming.
+- Two more files to keep in sync (`DEPRECATED.md`, the tier table) as the checkpoints evolve.
+
+### Neutral
+- No code or model behavior changes; `archive/v1` stays in the tree as a research archive
+ (ADR-117 §1.3) and its ADR-028 proof witness is untouched.
+- Purely documentation/labeling; no crate, wheel, or firmware rebuild required.
+
+## References
+
+- `archive/v1/src/models/densepose_head.py` — `DensePoseHead`, random `_initialize_weights()`, no checkpoint load.
+- `archive/v1/README.md` — legacy note; no loud deprecation (target of P1).
+- `v2/crates/cog-pose-estimation/cog/README.md` — the "Honest reading" precedent (PCK@20 = 3.0%, runtime stub).
+- `v2/crates/cog-pose-estimation/cog/artifacts/{pose_v1.safetensors,pose_v1.onnx,train_results.json}` — committed first-cut pose model.
+- `v2/crates/cog-person-count/cog/artifacts/count_v1.{safetensors,onnx}` — committed count model.
+- `ruvnet/wifi-densepose-pretrained`, `ruvnet/wifi-densepose-mmfi-pose` — published, benchmarked checkpoints.
+- ADR-079 §Target (PCK@20 ≥35%), ADR-152 measurement (a) (96.09% PCK@20 external; internal 92.9% retracted), ADR-160 (honest-labeling method), ADR-117 (pip 1.99.0 tombstone).
diff --git a/docs/adr/README.md b/docs/adr/README.md
index 7c9e510e..d43a4d70 100644
--- a/docs/adr/README.md
+++ b/docs/adr/README.md
@@ -2,10 +2,14 @@
Latest proposed decisions:
+- [ADR-187: archive/v1 deprecation + model-weights honest labeling](ADR-187-archive-v1-deprecation-honest-labeling.md) (refs #509, #1125)
+- [ADR-186: Training progress API — wire the orphaned in-server trainer to /ws/train/progress](ADR-186-training-progress-api.md) (refs #1233)
+- [ADR-185: Python P6 SOTA bindings — AETHER, MERIDIAN, MAT](ADR-185-python-p6-sota-bindings.md)
+- [ADR-184: ADR-117 completion via PyPI Trusted Publishing](ADR-184-adr117-completion-pypi-trusted-publishing.md) (refs #785)
- [ADR-264: Versioned wire protocol for RTL8720F CFR and Range-FFT reports](ADR-264-rtl8720f-radar-wire-protocol.md)
- [ADR-263: Adopt RTL8720F 2.4 GHz FMCW radar as an optional RuView sensing platform](ADR-263-rtl8720f-2-4ghz-fmcw-radar-platform.md)
-This folder contains 182 Architecture Decision Records (ADRs) that document every significant technical choice in the RuView / WiFi-DensePose project. (The index tables below list a curated subset per domain; see the directory listing for the full set.)
+This folder contains 193 Architecture Decision Records (ADRs) that document every significant technical choice in the RuView / WiFi-DensePose project. (The index tables below list a curated subset per domain; see the directory listing for the full set.)
## Why ADRs?
diff --git a/docs/user-guide.md b/docs/user-guide.md
index d9542a6e..c8ca06ab 100644
--- a/docs/user-guide.md
+++ b/docs/user-guide.md
@@ -1141,7 +1141,20 @@ What it ships (and what it does not):
| Presence detection (occupied / empty) | ✅ Trained head — v2 encoder reports 82.3% held-out temporal-triplet acc (v1's "100% on validation" was a single-class recording — retracted, [#882](https://github.com/ruvnet/RuView/issues/882)) |
| 128-dim CSI embeddings (re-ID, similarity, downstream training) | ✅ Trained encoder |
| Single-person breathing / heart-rate | ⚠️ Server still uses heuristic DSP — model does not replace this yet |
-| 17-keypoint full-body pose | 🔬 No keypoint weights shipped yet — pose pipeline runs but without a learned head |
+| 17-keypoint full-body pose | 🔬 This HF bundle ships no keypoint head — but real pose weights exist elsewhere; see the tier table below |
+
+### Model weights: what's real, what's not
+
+"WiFi → pose" means three different things in this repo, at three different maturity
+levels. Read the label, not the headline ([ADR-187](adr/ADR-187-archive-v1-deprecation-honest-labeling.md)):
+
+| Tier | Checkpoint(s) | Honest status |
+|------|---------------|---------------|
+| **Real & validated** | [`ruvnet/wifi-densepose-pretrained`](https://huggingface.co/ruvnet/wifi-densepose-pretrained) (encoder + presence head) · [`ruvnet/wifi-densepose-mmfi-pose`](https://huggingface.co/ruvnet/wifi-densepose-mmfi-pose) (17-keypoint pose) · `cog-person-count/count_v1` | **MEASURED / published.** Presence = 82.3% held-out temporal-triplet accuracy (the old "100% presence" figure was retracted); MM-Fi pose = 82.69% torso-PCK@20 on the `random_split` protocol. |
+| **Real but weak (honestly labeled)** | committed `v2/crates/cog-pose-estimation/cog/artifacts/pose_v1.safetensors` | First-cut on-device model. **PCK@20 = 3.0% / PCK@50 = 18.5%** on a 217-sample holdout — **below the ADR-079 target of ≥ 35%.** Learns coarse structure (`r_hip` 77% PCK@50); distal/face joints near-random. Its runtime path in `cog-pose-estimation/src/inference.rs` is still a centred-skeleton **stub returning `confidence=0`**. Full disclosure in the [cog README](../v2/crates/cog-pose-estimation/cog/README.md). Do not advertise the live single-ESP32 17-keypoint feature without this caveat. |
+| **Architecture only, no weights** | `archive/v1` `DensePoseHead` | Random `kaiming_normal_` init, **no checkpoint of any kind** (zero `.pth`/`.onnx`/`.safetensors` files under `archive/v1/`). Deprecated and superseded — see [`archive/v1/DEPRECATED.md`](../archive/v1/DEPRECATED.md). Do not expect real pose output from it. |
+
+**Does it actually run, and can a single ESP32 do pose? ([#509](https://github.com/ruvnet/RuView/issues/509), [#1125](https://github.com/ruvnet/RuView/issues/1125))** Yes, it runs, and the results are reproducible: the deterministic signal-pipeline proof (`python archive/v1/data/proof/verify.py`, must print `VERDICT: PASS`), the committed pose training dump (`v2/crates/cog-pose-estimation/cog/artifacts/train_results.json`), and the auditable MM-Fi arena all back specific numbers. But a single-antenna, 56-subcarrier CSI stream at a 20-frame window does *not* carry the fine-grained spatial information the multi-antenna NIC research relies on — so the shippable pose accuracy the project stands behind today is the **MM-Fi benchmark number**, not a live single-ESP32 number. The path to a first reproducible on-device baseline (PCK@20 ≥ 35%) is tracked in [ADR-079](adr/ADR-079-camera-ground-truth-training.md) / [#645](https://github.com/ruvnet/RuView/issues/645).
### Download
diff --git a/python/Cargo.lock b/python/Cargo.lock
index 8d06cfcb..3d2f275d 100644
--- a/python/Cargo.lock
+++ b/python/Cargo.lock
@@ -2,6 +2,27 @@
# It is not intended for manual editing.
version = 4
+[[package]]
+name = "adler2"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
+
[[package]]
name = "android_system_properties"
version = "0.1.5"
@@ -11,12 +32,97 @@ dependencies = [
"libc",
]
+[[package]]
+name = "anndists"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a8396b473aa0bceed68fb32462505387ea39fa47c7029417e0a49f10592b036"
+dependencies = [
+ "anyhow",
+ "cfg-if",
+ "cpu-time",
+ "env_logger",
+ "lazy_static",
+ "log",
+ "num-traits",
+ "num_cpus",
+ "rayon",
+]
+
+[[package]]
+name = "anstream"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is_terminal_polyfill",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
+
+[[package]]
+name = "anstyle-parse"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
+dependencies = [
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
+dependencies = [
+ "anstyle",
+ "once_cell_polyfill",
+ "windows-sys 0.61.2",
+]
+
[[package]]
name = "anyhow"
version = "1.0.102"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "arbitrary"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
+dependencies = [
+ "derive_arbitrary",
+]
+
[[package]]
name = "arrayref"
version = "0.3.9"
@@ -29,12 +135,79 @@ version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
+[[package]]
+name = "async-trait"
+version = "0.1.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.2",
+]
+
+[[package]]
+name = "atomic-polyfill"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4"
+dependencies = [
+ "critical-section",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
[[package]]
name = "autocfg"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
+[[package]]
+name = "base64"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bincode"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740"
+dependencies = [
+ "bincode_derive",
+ "serde",
+ "unty",
+]
+
+[[package]]
+name = "bincode_derive"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09"
+dependencies = [
+ "virtue",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
[[package]]
name = "bitflags"
version = "2.11.1"
@@ -52,7 +225,16 @@ dependencies = [
"cc",
"cfg-if",
"constant_time_eq",
- "cpufeatures",
+ "cpufeatures 0.3.0",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
]
[[package]]
@@ -61,6 +243,47 @@ version = "3.20.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
+[[package]]
+name = "bytecheck"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0caa33a2c0edca0419d15ac723dff03f1956f7978329b1e3b5fdaaaed9d3ca8b"
+dependencies = [
+ "bytecheck_derive",
+ "ptr_meta",
+ "rancor",
+ "simdutf8",
+]
+
+[[package]]
+name = "bytecheck_derive"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "bytemuck"
+version = "1.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
+
[[package]]
name = "cc"
version = "1.2.62"
@@ -77,6 +300,23 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+[[package]]
+name = "cfg_aliases"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527"
+
+[[package]]
+name = "chacha20"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
+dependencies = [
+ "cfg-if",
+ "cpufeatures 0.3.0",
+ "rand_core 0.10.1",
+]
+
[[package]]
name = "chrono"
version = "0.4.44"
@@ -91,6 +331,75 @@ dependencies = [
"windows-link",
]
+[[package]]
+name = "clap"
+version = "4.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 3.0.2",
+]
+
+[[package]]
+name = "clap_lex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
+
+[[package]]
+name = "combine"
+version = "4.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "console"
+version = "0.15.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
+dependencies = [
+ "encode_unicode",
+ "libc",
+ "once_cell",
+ "unicode-width",
+ "windows-sys 0.59.0",
+]
+
[[package]]
name = "constant_time_eq"
version = "0.4.2"
@@ -103,6 +412,25 @@ version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+[[package]]
+name = "cpu-time"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9e393a7668fe1fad3075085b86c781883000b4ede868f43627b34a87c8b7ded"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "cpufeatures"
version = "0.3.0"
@@ -127,30 +455,335 @@ version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853"
+[[package]]
+name = "crc32fast"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "critical-section"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
+
+[[package]]
+name = "crossbeam"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "803d13fb3b09d88be9f4dbc29062c66b19bf7170867ceb746d2a8689bf6c7a26"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "csv"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938"
+dependencies = [
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde_core",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "dashmap"
+version = "6.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+ "hashbrown 0.14.5",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "defmt"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1"
+dependencies = [
+ "bitflags 1.3.2",
+ "defmt-macros",
+]
+
+[[package]]
+name = "defmt-macros"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8"
+dependencies = [
+ "defmt-parser",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "defmt-parser"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e"
+dependencies = [
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "derive_arbitrary"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "earcutr"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79127ed59a85d7687c409e9978547cffb7dc79675355ed22da6b66fd5f6ead01"
+dependencies = [
+ "itertools",
+ "num-traits",
+]
+
+[[package]]
+name = "either"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"
+
+[[package]]
+name = "encode_unicode"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
+
+[[package]]
+name = "enum-as-inner"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "env_filter"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900d271a03799a1ee8d1ca9b19893b48ca674a9284fefcfb85f05e74ed314217"
+dependencies = [
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.11.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de671bd27a75a797dc9ae289ba1e77276e75e2026408aab65185384e2d5cd3f6"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "env_filter",
+ "jiff",
+ "log",
+]
+
[[package]]
name = "equivalent"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+[[package]]
+name = "errno"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
+dependencies = [
+ "libc",
+ "windows-sys 0.61.2",
+]
+
[[package]]
name = "find-msvc-tools"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
+dependencies = [
+ "miniz_oxide",
+ "zlib-rs",
+]
+
+[[package]]
+name = "float_next_after"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8"
+
[[package]]
name = "foldhash"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+[[package]]
+name = "foldhash"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
[[package]]
name = "futures-core"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+[[package]]
+name = "futures-io"
+version = "0.3.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307"
+
[[package]]
name = "futures-task"
version = "0.3.32"
@@ -164,11 +797,87 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
dependencies = [
"futures-core",
+ "futures-io",
+ "futures-sink",
"futures-task",
+ "memchr",
"pin-project-lite",
"slab",
]
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "geo"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4841b40fdbccd4b7042bd6195e4de91da54af34c50632e371bcbfcdfb558b873"
+dependencies = [
+ "earcutr",
+ "float_next_after",
+ "geo-types",
+ "geographiclib-rs",
+ "log",
+ "num-traits",
+ "robust",
+ "rstar",
+ "spade",
+]
+
+[[package]]
+name = "geo-types"
+version = "0.7.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94776032c45f950d30a13af6113c2ad5625316c9abfbccee4dd5a6695f8fe0f5"
+dependencies = [
+ "approx",
+ "num-traits",
+ "rstar",
+ "serde",
+]
+
+[[package]]
+name = "geographiclib-rs"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5a7f08910fd98737a6eda7568e7c5e645093e073328eeef49758cfe8b0489c7"
+dependencies = [
+ "libm",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi 5.3.0",
+ "wasip2",
+]
+
[[package]]
name = "getrandom"
version = "0.4.2"
@@ -176,19 +885,50 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
dependencies = [
"cfg-if",
+ "js-sys",
"libc",
- "r-efi",
+ "r-efi 6.0.0",
+ "rand_core 0.10.1",
"wasip2",
"wasip3",
+ "wasm-bindgen",
]
+[[package]]
+name = "hash32"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+
[[package]]
name = "hashbrown"
version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
- "foldhash",
+ "allocator-api2",
+ "equivalent",
+ "foldhash 0.1.5",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
+dependencies = [
+ "allocator-api2",
+ "equivalent",
+ "foldhash 0.2.0",
]
[[package]]
@@ -197,12 +937,154 @@ version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
+[[package]]
+name = "heapless"
+version = "0.7.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f"
+dependencies = [
+ "atomic-polyfill",
+ "hash32",
+ "rustc_version",
+ "spin",
+ "stable_deref_trait",
+]
+
[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+[[package]]
+name = "hermit-abi"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
+
+[[package]]
+name = "hnsw_rs"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a5258f079b97bf2e8311ff9579e903c899dcbac0d9a138d62e9a066778bd07"
+dependencies = [
+ "anndists",
+ "anyhow",
+ "bincode 1.3.3",
+ "cfg-if",
+ "cpu-time",
+ "env_logger",
+ "hashbrown 0.15.5",
+ "indexmap",
+ "lazy_static",
+ "log",
+ "mmap-rs",
+ "num-traits",
+ "num_cpus",
+ "parking_lot",
+ "rand 0.9.5",
+ "rayon",
+ "serde",
+]
+
+[[package]]
+name = "http"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425"
+dependencies = [
+ "bytes",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c"
+dependencies = [
+ "bytes",
+ "http",
+]
+
+[[package]]
+name = "http-body-util"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "http",
+ "http-body",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
+
+[[package]]
+name = "hyper"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72"
+dependencies = [
+ "atomic-waker",
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "http",
+ "http-body",
+ "httparse",
+ "itoa",
+ "pin-project-lite",
+ "smallvec",
+ "tokio",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.27.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f"
+dependencies = [
+ "http",
+ "hyper",
+ "hyper-util",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+ "tower-service",
+ "webpki-roots",
+]
+
+[[package]]
+name = "hyper-util"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
+dependencies = [
+ "base64",
+ "bytes",
+ "futures-channel",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "ipnet",
+ "libc",
+ "percent-encoding",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+]
+
[[package]]
name = "iana-time-zone"
version = "0.1.65"
@@ -227,12 +1109,115 @@ dependencies = [
"cc",
]
+[[package]]
+name = "icu_collections"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c"
+dependencies = [
+ "displaydoc",
+ "potential_utf",
+ "utf8_iter",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locale_core"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29"
+dependencies = [
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4"
+dependencies = [
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "smallvec",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38"
+
+[[package]]
+name = "icu_properties"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de"
+dependencies = [
+ "icu_collections",
+ "icu_locale_core",
+ "icu_properties_data",
+ "icu_provider",
+ "zerotrie",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14"
+
+[[package]]
+name = "icu_provider"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421"
+dependencies = [
+ "displaydoc",
+ "icu_locale_core",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerotrie",
+ "zerovec",
+]
+
[[package]]
name = "id-arena"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
+[[package]]
+name = "idna"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
+dependencies = [
+ "idna_adapter",
+ "smallvec",
+ "utf8_iter",
+]
+
+[[package]]
+name = "idna_adapter"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"
+dependencies = [
+ "icu_normalizer",
+ "icu_properties",
+]
+
[[package]]
name = "indexmap"
version = "2.14.0"
@@ -245,6 +1230,19 @@ dependencies = [
"serde_core",
]
+[[package]]
+name = "indicatif"
+version = "0.17.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235"
+dependencies = [
+ "console",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-width",
+ "web-time",
+]
+
[[package]]
name = "indoc"
version = "2.0.7"
@@ -254,12 +1252,69 @@ dependencies = [
"rustversion",
]
+[[package]]
+name = "ipnet"
+version = "2.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
+
+[[package]]
+name = "is_terminal_polyfill"
+version = "1.70.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
[[package]]
name = "itoa"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
+[[package]]
+name = "jiff"
+version = "0.2.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e184d09547b80eb7e20d141ba2fb1fbac843ca53f4cf1b31210adc4c1adc6e16"
+dependencies = [
+ "defmt",
+ "jiff-core",
+ "jiff-static",
+ "log",
+ "portable-atomic",
+ "portable-atomic-util",
+ "serde_core",
+]
+
+[[package]]
+name = "jiff-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09"
+dependencies = [
+ "defmt",
+]
+
+[[package]]
+name = "jiff-static"
+version = "0.2.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "323da076b7a6faf914dc677cb05a4b907742ff7375c8322c9e7f5061e5e0e9de"
+dependencies = [
+ "jiff-core",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
[[package]]
name = "js-sys"
version = "0.3.99"
@@ -272,6 +1327,12 @@ dependencies = [
"wasm-bindgen",
]
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
[[package]]
name = "leb128fmt"
version = "0.1.0"
@@ -284,12 +1345,66 @@ version = "0.2.186"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
+[[package]]
+name = "libm"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
+
+[[package]]
+name = "litemap"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
+
+[[package]]
+name = "lock_api"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
+dependencies = [
+ "scopeguard",
+]
+
[[package]]
name = "log"
version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+[[package]]
+name = "lru"
+version = "0.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
+dependencies = [
+ "hashbrown 0.15.5",
+]
+
+[[package]]
+name = "lru-slab"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
+
+[[package]]
+name = "mach2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "matchers"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
+dependencies = [
+ "regex-automata",
+]
+
[[package]]
name = "matrixmultiply"
version = "0.3.10"
@@ -306,6 +1421,15 @@ version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+[[package]]
+name = "memmap2"
+version = "0.9.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "memoffset"
version = "0.9.1"
@@ -315,6 +1439,129 @@ dependencies = [
"autocfg",
]
+[[package]]
+name = "midstreamer-attractor"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebe548a4e74b80ecb8dd058e352a91fed9e5685c49c5d3fa5062520c660c6c9"
+dependencies = [
+ "midstreamer-temporal-compare",
+ "nalgebra",
+ "ndarray 0.16.1",
+ "serde",
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "midstreamer-temporal-compare"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b87063b1eb79672a76f88377799152d8e149328e9a19455345851a264bdced20"
+dependencies = [
+ "dashmap",
+ "lru",
+ "serde",
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
+dependencies = [
+ "adler2",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "mmap-rs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ecce9d566cb9234ae3db9e249c8b55665feaaf32b0859ff1e27e310d2beb3d8"
+dependencies = [
+ "bitflags 2.11.1",
+ "combine",
+ "libc",
+ "mach2",
+ "nix",
+ "sysctl",
+ "thiserror 2.0.18",
+ "widestring",
+ "windows",
+]
+
+[[package]]
+name = "munge"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c"
+dependencies = [
+ "munge_macro",
+]
+
+[[package]]
+name = "munge_macro"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "nalgebra"
+version = "0.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d43ddcacf343185dfd6de2ee786d9e8b1c2301622afab66b6c73baf9882abfd"
+dependencies = [
+ "approx",
+ "matrixmultiply",
+ "nalgebra-macros",
+ "num-complex",
+ "num-rational",
+ "num-traits",
+ "simba",
+ "typenum",
+]
+
+[[package]]
+name = "nalgebra-macros"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "ndarray"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32"
+dependencies = [
+ "matrixmultiply",
+ "num-complex",
+ "num-integer",
+ "num-traits",
+ "rawpointer",
+]
+
[[package]]
name = "ndarray"
version = "0.16.1"
@@ -328,6 +1575,7 @@ dependencies = [
"portable-atomic",
"portable-atomic-util",
"rawpointer",
+ "serde",
]
[[package]]
@@ -346,6 +1594,51 @@ dependencies = [
"serde",
]
+[[package]]
+name = "ndarray-npy"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58e8a348bca0075000d999d750420d74434fd0d3e0993b456554f885e7657a11"
+dependencies = [
+ "byteorder",
+ "ndarray 0.17.2",
+ "num-complex",
+ "num-traits",
+ "py_literal",
+ "zip",
+]
+
+[[package]]
+name = "nix"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
+dependencies = [
+ "bitflags 2.11.1",
+ "cfg-if",
+ "cfg_aliases",
+ "libc",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.50.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
+dependencies = [
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367"
+dependencies = [
+ "num-integer",
+ "num-traits",
+]
+
[[package]]
name = "num-complex"
version = "0.4.6"
@@ -364,6 +1657,17 @@ dependencies = [
"num-traits",
]
+[[package]]
+name = "num-rational"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
[[package]]
name = "num-traits"
version = "0.2.19"
@@ -371,8 +1675,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
+ "libm",
]
+[[package]]
+name = "num_cpus"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
[[package]]
name = "numpy"
version = "0.22.1"
@@ -385,7 +1706,7 @@ dependencies = [
"num-integer",
"num-traits",
"pyo3",
- "rustc-hash",
+ "rustc-hash 1.1.0",
]
[[package]]
@@ -394,6 +1715,108 @@ version = "1.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+[[package]]
+name = "once_cell_polyfill"
+version = "1.70.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
+
+[[package]]
+name = "ordered-float"
+version = "4.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-link",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
+
+[[package]]
+name = "pest"
+version = "2.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47627dd7305c6a2d6c8c6bcd24c5a4c17dbbf425f4f9c5313e724b38fc9782e9"
+dependencies = [
+ "memchr",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b4254325ecad416ab689e27ba51da03ba01a9632bc6e108f5fe7c3c4ad29d58"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c4c0e91ead7a8f7acecbca6f003fc2e8282b1dbe2dd9c9d2f16aba42995e0a7"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9744bc48116fee06334924bb5f2bad41eed5e89bd26e29b0b799f9a3f82c210"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
[[package]]
name = "pin-project-lite"
version = "0.2.17"
@@ -415,6 +1838,24 @@ dependencies = [
"portable-atomic",
]
+[[package]]
+name = "potential_utf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"
+dependencies = [
+ "zerovec",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy",
+]
+
[[package]]
name = "prettyplease"
version = "0.2.37"
@@ -422,7 +1863,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
dependencies = [
"proc-macro2",
- "syn",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "primal-check"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc0d895b311e3af9902528fbb8f928688abbd95872819320517cc24ca6b2bd08"
+dependencies = [
+ "num-integer",
]
[[package]]
@@ -434,6 +1884,39 @@ dependencies = [
"unicode-ident",
]
+[[package]]
+name = "ptr_meta"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79"
+dependencies = [
+ "ptr_meta_derive",
+]
+
+[[package]]
+name = "ptr_meta_derive"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "py_literal"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "102df7a3d46db9d3891f178dcc826dc270a6746277a9ae6436f8d29fd490a8e1"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-traits",
+ "pest",
+ "pest_derive",
+]
+
[[package]]
name = "pyo3"
version = "0.22.6"
@@ -481,7 +1964,7 @@ dependencies = [
"proc-macro2",
"pyo3-macros-backend",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -494,7 +1977,63 @@ dependencies = [
"proc-macro2",
"pyo3-build-config",
"quote",
- "syn",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "quinn"
+version = "0.11.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8"
+dependencies = [
+ "bytes",
+ "cfg_aliases",
+ "pin-project-lite",
+ "quinn-proto",
+ "quinn-udp",
+ "rustc-hash 2.1.3",
+ "rustls",
+ "socket2",
+ "thiserror 2.0.18",
+ "tokio",
+ "tracing",
+ "web-time",
+]
+
+[[package]]
+name = "quinn-proto"
+version = "0.11.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560"
+dependencies = [
+ "bytes",
+ "getrandom 0.4.2",
+ "lru-slab",
+ "rand 0.10.2",
+ "rand_pcg",
+ "ring",
+ "rustc-hash 2.1.3",
+ "rustls",
+ "rustls-pki-types",
+ "slab",
+ "thiserror 2.0.18",
+ "tinyvec",
+ "tracing",
+ "web-time",
+]
+
+[[package]]
+name = "quinn-udp"
+version = "0.5.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694"
+dependencies = [
+ "cfg_aliases",
+ "libc",
+ "once_cell",
+ "socket2",
+ "tracing",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -506,30 +2045,517 @@ dependencies = [
"proc-macro2",
]
+[[package]]
+name = "r-efi"
+version = "5.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
+
[[package]]
name = "r-efi"
version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
+[[package]]
+name = "rancor"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daff8b7b3ccf5f7ba270b3e7a0a4d4c701c5797e38dec27c7e2c3dbb830fed1c"
+dependencies = [
+ "ptr_meta",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41"
+dependencies = [
+ "rand_chacha 0.9.0",
+ "rand_core 0.9.5",
+]
+
+[[package]]
+name = "rand"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80"
+dependencies = [
+ "chacha20",
+ "getrandom 0.4.2",
+ "rand_core 0.10.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.9.5",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.17",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
+dependencies = [
+ "getrandom 0.3.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
+
+[[package]]
+name = "rand_distr"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
+dependencies = [
+ "num-traits",
+ "rand 0.8.7",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a"
+dependencies = [
+ "rand_core 0.10.1",
+]
+
[[package]]
name = "rawpointer"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
+[[package]]
+name = "rayon"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "redb"
+version = "2.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eca1e9d98d5a7e9002d0013e18d5a9b000aee942eb134883a82f06ebffb6c01"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
+dependencies = [
+ "bitflags 2.11.1",
+]
+
+[[package]]
+name = "regex"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
+
+[[package]]
+name = "rend"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "663ba70707f96e871406fe10d68128412e619b06d1d47cb91c3a4c6501176240"
+dependencies = [
+ "bytecheck",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.12.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
+dependencies = [
+ "base64",
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-rustls",
+ "hyper-util",
+ "js-sys",
+ "log",
+ "percent-encoding",
+ "pin-project-lite",
+ "quinn",
+ "rustls",
+ "rustls-pki-types",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "sync_wrapper",
+ "tokio",
+ "tokio-rustls",
+ "tower",
+ "tower-http",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "getrandom 0.2.17",
+ "libc",
+ "untrusted",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rkyv"
+version = "0.8.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "815cc8a37159a463064825246cadb07961e25cd9885908606f6d08a98d8f8874"
+dependencies = [
+ "bytecheck",
+ "bytes",
+ "hashbrown 0.17.1",
+ "indexmap",
+ "munge",
+ "ptr_meta",
+ "rancor",
+ "rend",
+ "rkyv_derive",
+ "tinyvec",
+ "uuid",
+]
+
+[[package]]
+name = "rkyv_derive"
+version = "0.8.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0ed1a78a1b19d184b0daa629dd9a024573173ec7d485b287cb369fb3607cc1c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "roaring"
+version = "0.10.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e8d2cfa184d94d0726d650a9f4a1be7f9b76ac9fdb954219878dc00c1c1e7b"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+]
+
+[[package]]
+name = "robust"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e27ee8bb91ca0adcf0ecb116293afa12d393f9c2b9b9cd54d33e8078fe19839"
+
+[[package]]
+name = "rstar"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73111312eb7a2287d229f06c00ff35b51ddee180f017ab6dec1f69d62ac098d6"
+dependencies = [
+ "heapless",
+ "num-traits",
+ "smallvec",
+]
+
[[package]]
name = "rustc-hash"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+[[package]]
+name = "rustc-hash"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustfft"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21db5f9893e91f41798c88680037dba611ca6674703c1a18601b01a72c8adb89"
+dependencies = [
+ "num-complex",
+ "num-integer",
+ "num-traits",
+ "primal-check",
+ "strength_reduce",
+ "transpose",
+]
+
+[[package]]
+name = "rustls"
+version = "0.23.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138"
+dependencies = [
+ "once_cell",
+ "ring",
+ "rustls-pki-types",
+ "rustls-webpki",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "rustls-pki-types"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046"
+dependencies = [
+ "web-time",
+ "zeroize",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.103.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
+dependencies = [
+ "ring",
+ "rustls-pki-types",
+ "untrusted",
+]
+
[[package]]
name = "rustversion"
version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
+[[package]]
+name = "ruvector-attention"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d852b3085e7b24b76a4410671a0b4fcf215d065afccde18d503ce1d37c1cf0ed"
+dependencies = [
+ "rand 0.8.7",
+ "rayon",
+ "serde",
+ "thiserror 1.0.69",
+]
+
+[[package]]
+name = "ruvector-attn-mincut"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8ec5e03cc7a435945c81f1b151a2bc5f64f2206bf50150cab0f89981ce8c94"
+dependencies = [
+ "serde",
+ "serde_json",
+ "sha2",
+]
+
+[[package]]
+name = "ruvector-core"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecaff2299e821f1f9aacd85f6fd16a16de6e7245b67843415d4f49f2f5f70084"
+dependencies = [
+ "anyhow",
+ "bincode 2.0.1",
+ "chrono",
+ "crossbeam",
+ "dashmap",
+ "hnsw_rs",
+ "memmap2",
+ "ndarray 0.16.1",
+ "once_cell",
+ "parking_lot",
+ "rand 0.8.7",
+ "rand_distr",
+ "rayon",
+ "redb",
+ "reqwest",
+ "rkyv",
+ "serde",
+ "serde_json",
+ "simsimd",
+ "thiserror 2.0.18",
+ "tracing",
+ "uuid",
+]
+
+[[package]]
+name = "ruvector-mincut"
+version = "2.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d60947433f740d0f589a2911d7b72a02e07a916e7257e478b14386f0ff068fb7"
+dependencies = [
+ "anyhow",
+ "crossbeam",
+ "dashmap",
+ "ordered-float",
+ "parking_lot",
+ "petgraph",
+ "rand 0.8.7",
+ "rayon",
+ "roaring",
+ "ruvector-core",
+ "serde",
+ "serde_json",
+ "thiserror 2.0.18",
+ "tracing",
+]
+
+[[package]]
+name = "ruvector-solver"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f420f7edd61093f2be31523b493c1e74dc432cae9466c82e7d343c5480de793"
+dependencies = [
+ "dashmap",
+ "getrandom 0.2.17",
+ "parking_lot",
+ "rand 0.8.7",
+ "serde",
+ "thiserror 2.0.18",
+ "tracing",
+]
+
+[[package]]
+name = "ruvector-temporal-tensor"
+version = "2.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "753a07254fa68db183949ec6c7575d890da4d42404afabc11d610a720fcf570c"
+
+[[package]]
+name = "ryu"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
+
+[[package]]
+name = "safe_arch"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
[[package]]
name = "semver"
version = "1.0.28"
@@ -563,7 +2589,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -579,24 +2605,170 @@ dependencies = [
"zmij",
]
+[[package]]
+name = "serde_spanned"
+version = "0.6.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
+dependencies = [
+ "cfg-if",
+ "cpufeatures 0.2.17",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
[[package]]
name = "shlex"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
+dependencies = [
+ "errno",
+ "libc",
+]
+
+[[package]]
+name = "simba"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c99284beb21666094ba2b75bbceda012e610f5479dfcc2d6e2426f53197ffd95"
+dependencies = [
+ "approx",
+ "num-complex",
+ "num-traits",
+ "paste",
+ "wide",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea"
+
+[[package]]
+name = "simdutf8"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e"
+
+[[package]]
+name = "simsimd"
+version = "5.9.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9638f2829f4887c62a01958903b58fa1b740a64d5dc2bbc4a75a33827ee1bd53"
+dependencies = [
+ "cc",
+]
+
[[package]]
name = "slab"
version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+[[package]]
+name = "smallvec"
+version = "1.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
+
+[[package]]
+name = "socket2"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4"
+dependencies = [
+ "libc",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "spade"
+version = "2.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9699399fd9349b00b184f5635b074f9ec93afffef30c853f8c875b32c0f8c7fa"
+dependencies = [
+ "hashbrown 0.16.1",
+ "num-traits",
+ "robust",
+ "smallvec",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
+
[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+[[package]]
+name = "strength_reduce"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82"
+
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+[[package]]
+name = "subtle"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+
[[package]]
name = "syn"
version = "2.0.117"
@@ -608,19 +2780,84 @@ dependencies = [
"unicode-ident",
]
+[[package]]
+name = "syn"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a207d6d6a2b7fc470b80443726053f18a2481b7e1eee970597051596567987a3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "sysctl"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01198a2debb237c62b6826ec7081082d951f46dbb64b0e8c7649a452230d1dfc"
+dependencies = [
+ "bitflags 2.11.1",
+ "byteorder",
+ "enum-as-inner",
+ "libc",
+ "thiserror 1.0.69",
+ "walkdir",
+]
+
[[package]]
name = "target-lexicon"
version = "0.12.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
+[[package]]
+name = "thiserror"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+dependencies = [
+ "thiserror-impl 1.0.69",
+]
+
[[package]]
name = "thiserror"
version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
dependencies = [
- "thiserror-impl",
+ "thiserror-impl 2.0.18",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
]
[[package]]
@@ -631,9 +2868,167 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
+[[package]]
+name = "thread_local"
+version = "1.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"
+dependencies = [
+ "displaydoc",
+ "zerovec",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed"
+dependencies = [
+ "bytes",
+ "libc",
+ "mio",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.22.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_write",
+ "winnow",
+]
+
+[[package]]
+name = "toml_write"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
+
+[[package]]
+name = "tower"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project-lite",
+ "sync_wrapper",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840"
+dependencies = [
+ "bitflags 2.11.1",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "pin-project-lite",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "url",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
+[[package]]
+name = "tower-service"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+
[[package]]
name = "tracing"
version = "0.1.44"
@@ -653,7 +3048,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -663,14 +3058,91 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
dependencies = [
"once_cell",
+ "valuable",
]
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-serde"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1"
+dependencies = [
+ "serde",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex-automata",
+ "serde",
+ "serde_json",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-serde",
+]
+
+[[package]]
+name = "transpose"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad61aed86bc3faea4300c7aee358b4c6d0c8d6ccc36524c96e4c92ccf26e77e"
+dependencies = [
+ "num-integer",
+ "strength_reduce",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+[[package]]
+name = "typenum"
+version = "1.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
+
[[package]]
name = "unicode-ident"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+[[package]]
+name = "unicode-width"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
+
[[package]]
name = "unicode-xid"
version = "0.2.6"
@@ -683,18 +3155,97 @@ version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "unty"
+version = "0.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae"
+
+[[package]]
+name = "url"
+version = "2.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf8_iter"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
+
[[package]]
name = "uuid"
version = "1.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76"
dependencies = [
- "getrandom",
+ "getrandom 0.4.2",
"js-sys",
"serde_core",
"wasm-bindgen",
]
+[[package]]
+name = "valuable"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "virtue"
+version = "0.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1"
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.1+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
+
[[package]]
name = "wasip2"
version = "1.0.3+wasi-0.2.9"
@@ -726,6 +3277,16 @@ dependencies = [
"wasm-bindgen-shared",
]
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.122"
@@ -745,7 +3306,7 @@ dependencies = [
"bumpalo",
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
"wasm-bindgen-shared",
]
@@ -786,55 +3347,244 @@ version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
dependencies = [
- "bitflags",
+ "bitflags 2.11.1",
"hashbrown 0.15.5",
"indexmap",
"semver",
]
[[package]]
-name = "wifi-densepose-bfld"
+name = "web-sys"
+version = "0.3.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "web-time"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a"
+dependencies = [
+ "rustls-pki-types",
+]
+
+[[package]]
+name = "wide"
+version = "0.7.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03"
+dependencies = [
+ "bytemuck",
+ "safe_arch",
+]
+
+[[package]]
+name = "widestring"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
+
+[[package]]
+name = "wifi-densepose-aether"
version = "0.3.0"
+
+[[package]]
+name = "wifi-densepose-bfld"
+version = "0.3.1"
dependencies = [
"blake3",
"crc",
"serde",
"serde_json",
"static_assertions",
- "thiserror",
+ "thiserror 2.0.18",
]
[[package]]
name = "wifi-densepose-core"
-version = "0.3.0"
+version = "0.3.1"
dependencies = [
+ "blake3",
"chrono",
"ndarray 0.17.2",
"num-complex",
"num-traits",
- "thiserror",
+ "thiserror 2.0.18",
"uuid",
]
+[[package]]
+name = "wifi-densepose-mat"
+version = "0.3.1"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "chrono",
+ "geo",
+ "ndarray 0.15.6",
+ "num-complex",
+ "parking_lot",
+ "rustfft",
+ "serde_json",
+ "thiserror 2.0.18",
+ "tokio",
+ "tracing",
+ "uuid",
+ "wifi-densepose-core",
+ "wifi-densepose-signal",
+]
+
[[package]]
name = "wifi-densepose-py"
version = "2.0.0-alpha.1"
dependencies = [
+ "geo",
"numpy",
"pyo3",
+ "serde_json",
+ "sha2",
+ "tokio",
+ "wifi-densepose-aether",
"wifi-densepose-bfld",
"wifi-densepose-core",
+ "wifi-densepose-mat",
+ "wifi-densepose-signal",
+ "wifi-densepose-train",
"wifi-densepose-vitals",
]
+[[package]]
+name = "wifi-densepose-ruvector"
+version = "0.3.2"
+dependencies = [
+ "ruvector-attention",
+ "ruvector-attn-mincut",
+ "ruvector-core",
+ "ruvector-mincut",
+ "ruvector-solver",
+ "ruvector-temporal-tensor",
+ "sha2",
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "wifi-densepose-signal"
+version = "0.3.5"
+dependencies = [
+ "chrono",
+ "midstreamer-attractor",
+ "midstreamer-temporal-compare",
+ "ndarray 0.17.2",
+ "num-complex",
+ "num-traits",
+ "rustfft",
+ "ruvector-attention",
+ "ruvector-attn-mincut",
+ "ruvector-mincut",
+ "ruvector-solver",
+ "serde",
+ "serde_json",
+ "sha2",
+ "thiserror 2.0.18",
+ "uuid",
+ "wifi-densepose-core",
+ "wifi-densepose-ruvector",
+]
+
+[[package]]
+name = "wifi-densepose-train"
+version = "0.3.2"
+dependencies = [
+ "anyhow",
+ "chrono",
+ "clap",
+ "csv",
+ "indicatif",
+ "memmap2",
+ "ndarray 0.17.2",
+ "ndarray-npy",
+ "num-complex",
+ "num-traits",
+ "petgraph",
+ "ruvector-attention",
+ "ruvector-attn-mincut",
+ "ruvector-mincut",
+ "ruvector-solver",
+ "ruvector-temporal-tensor",
+ "serde",
+ "serde_json",
+ "sha2",
+ "thiserror 2.0.18",
+ "tokio",
+ "toml",
+ "tracing",
+ "tracing-subscriber",
+ "walkdir",
+ "wifi-densepose-signal",
+]
+
[[package]]
name = "wifi-densepose-vitals"
-version = "0.3.0"
+version = "0.3.1"
dependencies = [
"serde",
"tracing",
]
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
+dependencies = [
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
[[package]]
name = "windows-core"
version = "0.62.2"
@@ -856,7 +3606,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -867,7 +3617,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -894,6 +3644,163 @@ dependencies = [
"windows-link",
]
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.61.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.6",
+ "windows_aarch64_msvc 0.52.6",
+ "windows_i686_gnu 0.52.6",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc 0.52.6",
+ "windows_x86_64_gnu 0.52.6",
+ "windows_x86_64_gnullvm 0.52.6",
+ "windows_x86_64_msvc 0.52.6",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "winnow"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
+dependencies = [
+ "memchr",
+]
+
[[package]]
name = "wit-bindgen"
version = "0.51.0"
@@ -930,7 +3837,7 @@ dependencies = [
"heck",
"indexmap",
"prettyplease",
- "syn",
+ "syn 2.0.117",
"wasm-metadata",
"wit-bindgen-core",
"wit-component",
@@ -946,7 +3853,7 @@ dependencies = [
"prettyplease",
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
"wit-bindgen-core",
"wit-bindgen-rust",
]
@@ -958,7 +3865,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
dependencies = [
"anyhow",
- "bitflags",
+ "bitflags 2.11.1",
"indexmap",
"log",
"serde",
@@ -988,8 +3895,149 @@ dependencies = [
"wasmparser",
]
+[[package]]
+name = "writeable"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
+
+[[package]]
+name = "yoke"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5"
+dependencies = [
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "synstructure",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "synstructure",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e"
+
+[[package]]
+name = "zerotrie"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf"
+dependencies = [
+ "displaydoc",
+ "yoke",
+ "zerofrom",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.11.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
+dependencies = [
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "zip"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b"
+dependencies = [
+ "arbitrary",
+ "crc32fast",
+ "flate2",
+ "indexmap",
+ "memchr",
+ "zopfli",
+]
+
+[[package]]
+name = "zlib-rs"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b142a20ec14a91d5bc708c1dc21b080c550113d8aa77afa29635673a65dd02c5"
+
[[package]]
name = "zmij"
version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
+
+[[package]]
+name = "zopfli"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249"
+dependencies = [
+ "bumpalo",
+ "crc32fast",
+ "log",
+ "simd-adler32",
+]
diff --git a/python/Cargo.toml b/python/Cargo.toml
index c781ac53..ea2523f8 100644
--- a/python/Cargo.toml
+++ b/python/Cargo.toml
@@ -23,6 +23,27 @@ name = "wifi_densepose_native"
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
+# ADR-185 §3.1 — optional pip extras map to Cargo features so the
+# default wheel links none of the SOTA subsystems. P1 wires `aether`.
+[features]
+default = []
+# ADR-185 P1 — AETHER contrastive CSI embeddings. Binds the std-only
+# `wifi-densepose-aether` leaf crate (the pure-compute stack hoisted out of
+# `wifi-densepose-sensing-server` per §13), so this extra links no server tree.
+aether = ["dep:wifi-densepose-aether"]
+# ADR-185 P2 — MERIDIAN domain generalization. Binds the tch-free
+# inference/adaptation path only (see the wheel-size note on the deps
+# below). `wifi-densepose-train` is depended on WITHOUT `tch-backend`,
+# so no libtorch is linked.
+meridian = ["dep:wifi-densepose-train", "dep:wifi-densepose-signal"]
+# ADR-185 P3 — MAT disaster-survivor detection. Mirrors the upstream
+# disaster/ML gating: bound only under this extra so the default wheel
+# never carries the detection stack. `tokio`/`geo` are pulled to drive a
+# single-shot scan (see the wheel-size note on the deps below).
+mat = ["dep:wifi-densepose-mat", "dep:tokio", "dep:geo"]
+# ADR-185 §3 — convenience superset: all three SOTA subsystems.
+sota = ["aether", "meridian", "mat"]
+
[dependencies]
# PyO3 with abi3-py310 — one compiled binary covers Python 3.10, 3.11,
# 3.12, 3.13, and any future 3.x that keeps the stable ABI (ADR-117 §5.4).
@@ -50,6 +71,52 @@ wifi-densepose-bfld = { version = "0.3.0", path = "../v2/crates/wifi-densepose-b
# the future P3 CsiFrame numpy round-trip.
numpy = "0.22"
+# ADR-185 P1 — AETHER backing crate (contrastive `embedding` +
+# `graph_transformer`/`sona`/`sparse_inference`, ADR-024). Optional +
+# gated behind the `aether` feature.
+#
+# WHEEL-SIZE FIX LANDED (ADR-185 §13): this is now the std-only
+# `wifi-densepose-aether` leaf crate — zero external deps, no tokio/axum/
+# worldgraph/ruvector — hoisted out of `wifi-densepose-sensing-server`
+# (which re-exports it, so the server is unchanged). The `[aether]` wheel
+# therefore links only pure compute and stays within the ADR-117 §5.4
+# ≤5 MB budget.
+wifi-densepose-aether = { version = "0.3.0", path = "../v2/crates/wifi-densepose-aether", optional = true }
+
+# ADR-185 P2 — MERIDIAN backing crates (optional, `meridian`-gated).
+#
+# HONEST WHEEL-SIZE NOTE (ADR-185 §9 / §1.2): unlike AETHER, the libtorch
+# risk is AVOIDED here — `wifi-densepose-train`'s `tch` dep is properly
+# optional (feature `tch-backend`, OFF by default), so no libtorch links.
+# BUT `wifi-densepose-train` still carries NON-optional deps: `tokio` (rt
+# subset), the five `ruvector-*` crates, `wifi-densepose-nn`, petgraph,
+# memmap2, indicatif, ndarray-npy, csv, toml, clap. So a `[meridian]`
+# wheel is heavier than the ≤5 MB ADR-117 §5.4 budget (though far lighter
+# than AETHER's axum/tokio server tree). The clean fix is the same
+# leaf-crate hoist: move the pure inference modules (geometry,
+# rapid_adapt, eval, hardware_norm) into a tch/tokio-free leaf crate.
+# `wifi-densepose-signal` is depended on `default-features = false` to
+# drop the optional ndarray-linalg/BLAS chain (Windows-friendly).
+wifi-densepose-train = { version = "0.3.0", path = "../v2/crates/wifi-densepose-train", optional = true, default-features = false }
+wifi-densepose-signal = { version = "0.3.0", path = "../v2/crates/wifi-densepose-signal", optional = true, default-features = false }
+
+# ADR-185 P3 — MAT backing crate + the tokio/geo needed to drive one scan.
+#
+# HONEST WHEEL-SIZE NOTE (ADR-185 §9 / §1.3): `default-features = false`
+# drops MAT's `api` (axum) and `ruvector` features from the wheel, but MAT
+# still carries NON-optional `tokio` (rt/sync/time), `wifi-densepose-nn`
+# (which pulls `ort` / ONNX Runtime + reqwest/hyper), `rustfft`, `geo`,
+# and `ndarray`. So a `[mat]` wheel exceeds the ADR-117 §5.4 ≤5 MB budget
+# — same leaf-crate-hoist story as AETHER/MERIDIAN, gated the same way so
+# the DEFAULT wheel is untouched. `tokio` (rt+time) and `geo` are depended
+# on directly (version-matched to MAT) to build the single-shot scan
+# runtime and construct the event `geo::Point` in the binding.
+wifi-densepose-mat = { version = "0.3.0", path = "../v2/crates/wifi-densepose-mat", optional = true, default-features = false, features = ["std"] }
+tokio = { version = "1.35", features = ["rt", "time"], optional = true }
+geo = { version = "0.27", optional = true }
+
[dev-dependencies]
-# Doc-test infrastructure for the Python-facing examples in the bound
-# Rust functions. Lands properly in P2 once #[pyfunction]s exist to test.
+# ADR-185 §4.1 parity harness — SHA-256 the native-Rust reference
+# embedding and read the committed golden fixture.
+sha2 = "0.10"
+serde_json = "1"
diff --git a/python/README.md b/python/README.md
index 4d085cb2..675dee3f 100644
--- a/python/README.md
+++ b/python/README.md
@@ -43,6 +43,29 @@ pip install "wifi-densepose[client]" # + WebSocket/MQTT clients
Wheels are published for Linux (x86_64, aarch64), macOS (x86_64, arm64), and
Windows (amd64).
+### SOTA extras (ADR-185)
+
+Three optional subsystems bind the Rust SOTA modules as compiled-feature
+wheels. Each raises a clear `ImportError` if you import it without the extra:
+
+| Extra | Module | What it adds |
+|-------|--------|--------------|
+| `[aether]` | `wifi_densepose.aether` | Contrastive CSI embeddings / re-identification (ADR-024) — `EmbeddingExtractor`, `cosine_similarity`, `info_nce_loss` |
+| `[meridian]` | `wifi_densepose.meridian` | Cross-environment domain generalization (ADR-027) — `HardwareNormalizer`, `GeometryEncoder`, `RapidAdaptation`, `CrossDomainEvaluator` |
+| `[mat]` | `wifi_densepose.mat` | Mass-Casualty Assessment disaster-survivor detection + START triage — `DisasterResponse`, `Survivor`, `TriageStatus` |
+| `[sota]` | all three | Convenience superset |
+
+```bash
+pip install "wifi-densepose[aether]" # re-identification embeddings
+pip install "wifi-densepose[meridian]" # cross-room calibration
+pip install "wifi-densepose[mat]" # disaster triage
+pip install "wifi-densepose[sota]" # all three
+```
+
+Runnable examples: [`examples/reid_from_csi.py`](examples/reid_from_csi.py),
+[`examples/cross_room_calibrate.py`](examples/cross_room_calibrate.py),
+[`examples/mat_triage.py`](examples/mat_triage.py).
+
## Usage
### Extract breathing rate from a CSI stream
diff --git a/python/bench/test_bench_aether.py b/python/bench/test_bench_aether.py
new file mode 100644
index 00000000..fb6d2775
--- /dev/null
+++ b/python/bench/test_bench_aether.py
@@ -0,0 +1,44 @@
+"""ADR-185 §4.2 — AETHER embed() micro-benchmarks.
+
+Target (release build, ADR-024 §2.8 FP32 <1 ms with headroom): steady-state
+`embed()` < 2 ms/window, and batched `embed()` scales roughly linearly (no
+accidental O(n²)).
+
+Run with:
+ pytest python/bench/test_bench_aether.py --benchmark-only
+
+Skipped by default (they live in `bench/`, outside `testpaths`). Timing
+targets are validated on a RELEASE wheel (`maturin develop --release
+--features sota`); a debug wheel will be several× slower.
+"""
+
+from __future__ import annotations
+
+import math
+
+import pytest
+
+from wifi_densepose import aether
+
+
+def _window(frames: int = 8, subc: int = 56) -> list[list[float]]:
+ return [[math.sin(0.1 * t + 0.03 * k) for k in range(subc)] for t in range(frames)]
+
+
+def _extractor() -> aether.EmbeddingExtractor:
+ return aether.EmbeddingExtractor(n_subcarriers=56, config=aether.AetherConfig())
+
+
+def test_embed_per_window(benchmark) -> None:
+ ext = _extractor()
+ window = _window()
+ out = benchmark(lambda: ext.embed(window))
+ assert len(out) == 128
+
+
+@pytest.mark.parametrize("batch", [1, 8, 64])
+def test_embed_batch_scaling(benchmark, batch: int) -> None:
+ ext = _extractor()
+ windows = [_window() for _ in range(batch)]
+ out = benchmark(lambda: [ext.embed(w) for w in windows])
+ assert len(out) == batch
diff --git a/python/bench/test_bench_mat.py b/python/bench/test_bench_mat.py
new file mode 100644
index 00000000..2420660b
--- /dev/null
+++ b/python/bench/test_bench_mat.py
@@ -0,0 +1,44 @@
+"""ADR-185 §4.2 — MAT scan micro-benchmark.
+
+Measures the cost of one full ingest + `scan_once()` cycle over the
+committed 256-frame CSI stream. The per-cycle cost should stay comfortably
+below the configured scan interval (default 500 ms) so the binding is not
+the bottleneck.
+
+Run with:
+ pytest python/bench/test_bench_mat.py --benchmark-only
+
+Validated on a RELEASE wheel; a debug wheel will be several× slower.
+"""
+
+from __future__ import annotations
+
+import json
+from pathlib import Path
+
+from wifi_densepose import mat
+
+_FIXTURE = Path(__file__).resolve().parents[1] / "tests" / "golden" / "mat_input.json"
+
+
+def _stream() -> list[dict]:
+ return json.loads(_FIXTURE.read_text())["stream"]
+
+
+def test_scan_cycle_cost(benchmark) -> None:
+ stream = _stream()
+
+ def _run() -> int:
+ cfg = mat.DisasterConfig(
+ mat.DisasterType.Earthquake, sensitivity=0.9, confidence_threshold=0.1
+ )
+ resp = mat.DisasterResponse(cfg)
+ resp.initialize_event(0.0, 0.0, "bench")
+ resp.add_zone(mat.ScanZone.rectangle("Zone A", 0.0, 0.0, 50.0, 30.0))
+ for frame in stream:
+ resp.push_csi_data(frame["amplitude"], frame["phase"])
+ resp.scan_once()
+ return len(resp.survivors())
+
+ survivors = benchmark(_run)
+ assert survivors == 1
diff --git a/python/bench/test_bench_meridian.py b/python/bench/test_bench_meridian.py
new file mode 100644
index 00000000..d9492bbb
--- /dev/null
+++ b/python/bench/test_bench_meridian.py
@@ -0,0 +1,29 @@
+"""ADR-185 §4.2 — MERIDIAN micro-benchmarks.
+
+Targets (release build, ADR-027 §4.1/§4.3 ×2 headroom): `normalize()`
+< 200 µs/frame, `encode()` < 200 µs.
+
+Run with:
+ pytest python/bench/test_bench_meridian.py --benchmark-only
+
+Validated on a RELEASE wheel; a debug wheel will be several× slower.
+"""
+
+from __future__ import annotations
+
+from wifi_densepose import meridian as mer
+
+
+def test_normalize_per_frame(benchmark) -> None:
+ norm = mer.HardwareNormalizer()
+ amp = [10.0 + 0.05 * k for k in range(64)]
+ phase = [0.01 * k for k in range(64)]
+ out = benchmark(lambda: norm.normalize(amp, phase, mer.HardwareType.Esp32S3))
+ assert len(out.amplitude) == 56
+
+
+def test_geometry_encode(benchmark) -> None:
+ enc = mer.GeometryEncoder(mer.MeridianGeometryConfig())
+ aps = [[0.0, 0.0, 2.5], [5.0, 0.0, 2.5], [0.0, 4.0, 2.5]]
+ out = benchmark(lambda: enc.encode(aps))
+ assert len(out) == 64
diff --git a/python/examples/cross_room_calibrate.py b/python/examples/cross_room_calibrate.py
new file mode 100644
index 00000000..0f07d77d
--- /dev/null
+++ b/python/examples/cross_room_calibrate.py
@@ -0,0 +1,45 @@
+"""MERIDIAN cross-room calibration (ADR-185 P2, `[meridian]` extra).
+
+Hardware-invariant CSI normalization, AP-geometry encoding, and few-shot
+rapid adaptation — the tch-free domain-generalization path.
+
+ pip install wifi-densepose[meridian]
+ python examples/cross_room_calibrate.py
+"""
+
+from __future__ import annotations
+
+import math
+
+from wifi_densepose.meridian import (
+ GeometryEncoder,
+ HardwareNormalizer,
+ HardwareType,
+ MeridianGeometryConfig,
+ RapidAdaptation,
+)
+
+
+def main() -> None:
+ # 1. Normalize a 64-subcarrier ESP32 frame to the canonical 56-tone grid.
+ norm = HardwareNormalizer()
+ amp = [10.0 + 0.05 * k for k in range(64)]
+ phase = [0.01 * k for k in range(64)]
+ frame = norm.normalize(amp, phase, HardwareType.detect(64))
+ print(f"canonical subcarriers: {len(frame.amplitude)} (hw={frame.hardware_type})")
+
+ # 2. Encode AP positions into a permutation-invariant geometry embedding.
+ enc = GeometryEncoder(MeridianGeometryConfig())
+ geometry = enc.encode([[0.0, 0.0, 2.5], [5.0, 0.0, 2.5], [0.0, 4.0, 2.5]])
+ print(f"geometry embedding dim: {len(geometry)}")
+
+ # 3. Few-shot rapid adaptation over a handful of unlabeled frames.
+ ra = RapidAdaptation(min_calibration_frames=10, lora_rank=4)
+ for i in range(12):
+ ra.push_frame([math.sin(0.1 * i + 0.05 * d) for d in range(16)])
+ result = ra.adapt()
+ print(f"adapted over {result.frames_used} frames, final_loss={result.final_loss:.4f}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/python/examples/mat_triage.py b/python/examples/mat_triage.py
new file mode 100644
index 00000000..5dade08c
--- /dev/null
+++ b/python/examples/mat_triage.py
@@ -0,0 +1,49 @@
+"""MAT disaster-survivor triage from CSI (ADR-185 P3, `[mat]` extra).
+
+Ingest a CSI stream, run one detection cycle, and list detected survivors
+by START triage class.
+
+ pip install wifi-densepose[mat]
+ python examples/mat_triage.py
+
+Note: the stream here is synthetic (breathing-modulated) — it demonstrates
+the API and pipeline, not validated detection accuracy on real rubble.
+"""
+
+from __future__ import annotations
+
+import math
+from collections.abc import Iterator
+
+from wifi_densepose.mat import DisasterConfig, DisasterResponse, DisasterType, ScanZone
+
+
+def breathing_stream(
+ frames: int = 256, subc: int = 56, fs: float = 20.0
+) -> Iterator[tuple[list[float], list[float]]]:
+ for t in range(frames):
+ tt = t / fs
+ breath = 2.0 * math.sin(2 * math.pi * 0.3 * tt)
+ amp = [10.0 + 0.05 * k + breath for k in range(subc)]
+ phase = [0.01 * k + 0.1 * math.sin(2 * math.pi * 0.3 * tt) for k in range(subc)]
+ yield amp, phase
+
+
+def main() -> None:
+ cfg = DisasterConfig(DisasterType.Earthquake, sensitivity=0.9, confidence_threshold=0.1)
+ resp = DisasterResponse(cfg)
+ resp.initialize_event(0.0, 0.0, "Collapsed Building A")
+ resp.add_zone(ScanZone.rectangle("North Wing", 0.0, 0.0, 50.0, 30.0))
+
+ for amp, phase in breathing_stream():
+ resp.push_csi_data(amp, phase)
+ resp.scan_once()
+
+ survivors = resp.survivors()
+ print(f"detected {len(survivors)} survivor(s)")
+ for s in survivors:
+ print(f" {s.id[:8]} triage={s.triage_status} confidence={s.confidence:.3f}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/python/examples/reid_from_csi.py b/python/examples/reid_from_csi.py
new file mode 100644
index 00000000..6c31ad96
--- /dev/null
+++ b/python/examples/reid_from_csi.py
@@ -0,0 +1,39 @@
+"""AETHER re-identification from CSI (ADR-185 P1, `[aether]` extra).
+
+Compute 128-dim contrastive embeddings for CSI windows and score them by
+cosine similarity — the primitive behind room fingerprinting and person
+re-identification.
+
+ pip install wifi-densepose[aether]
+ python examples/reid_from_csi.py
+"""
+
+from __future__ import annotations
+
+import math
+
+from wifi_densepose.aether import AetherConfig, EmbeddingExtractor, cosine_similarity
+
+
+def make_window(phase_shift: float, frames: int = 8, subc: int = 56) -> list[list[float]]:
+ """A synthetic CSI window; `phase_shift` stands in for a different scene."""
+ return [
+ [math.sin(0.1 * t + 0.03 * k + phase_shift) for k in range(subc)]
+ for t in range(frames)
+ ]
+
+
+def main() -> None:
+ ext = EmbeddingExtractor(n_subcarriers=56, config=AetherConfig())
+
+ same_a = ext.embed(make_window(0.0))
+ same_b = ext.embed(make_window(0.0)) # same scene
+ other = ext.embed(make_window(1.5)) # different scene
+
+ print(f"embedding dim: {len(same_a)}")
+ print(f"same-scene similarity: {cosine_similarity(same_a, same_b):.4f}")
+ print(f"cross-scene similarity: {cosine_similarity(same_a, other):.4f}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/python/pyproject.toml b/python/pyproject.toml
index 92089b58..f7f9a832 100644
--- a/python/pyproject.toml
+++ b/python/pyproject.toml
@@ -10,7 +10,7 @@ build-backend = "maturin"
[project]
name = "wifi-densepose"
-version = "2.0.0a1"
+version = "2.0.0"
description = "WiFi-based human pose estimation, vital sign extraction, and ambient intelligence from Channel State Information (CSI). PyO3 bindings for the Rust core."
readme = "README.md"
requires-python = ">=3.10"
@@ -23,7 +23,7 @@ keywords = [
"biometric", "ambient-intelligence", "home-assistant", "matter",
]
classifiers = [
- "Development Status :: 3 - Alpha",
+ "Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: MIT License",
@@ -48,6 +48,20 @@ client = [
"websockets>=12.0",
"paho-mqtt>=2.1",
]
+# ADR-185 P1 — AETHER contrastive embeddings. Unlike `client`, this
+# extra carries no pure-Python deps: it is a marker for a *compiled*
+# feature build (`maturin ... --features aether` / a cibuildwheel
+# feature axis, ADR-185 §3.1). Installing the base wheel and importing
+# `wifi_densepose.aether` raises a clear ImportError naming this extra.
+aether = []
+# ADR-185 P2 — MERIDIAN domain generalization. Same compiled-feature
+# marker pattern as `aether` (built via `maturin ... --features meridian`).
+meridian = []
+# ADR-185 P3 — MAT disaster-survivor detection. Same compiled-feature
+# marker (built via `maturin ... --features mat`).
+mat = []
+# ADR-185 §3 convenience — all three SOTA subsystems at once.
+sota = []
# Developer dependencies for running the test suite + lint.
dev = [
"pytest>=8.0",
diff --git a/python/ruview-meta/pyproject.toml b/python/ruview-meta/pyproject.toml
index 401805c2..9b971e3c 100644
--- a/python/ruview-meta/pyproject.toml
+++ b/python/ruview-meta/pyproject.toml
@@ -16,7 +16,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "ruview"
-version = "2.0.0a1"
+version = "2.0.0"
description = "RuView — ambient intelligence from WiFi CSI. Meta-package; installs `wifi-densepose` and re-exports it under the `ruview` namespace. See https://github.com/ruvnet/RuView."
readme = "README.md"
requires-python = ">=3.10"
@@ -28,7 +28,7 @@ keywords = [
"ruview",
]
classifiers = [
- "Development Status :: 3 - Alpha",
+ "Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: MIT License",
@@ -43,13 +43,13 @@ classifiers = [
"Typing :: Typed",
]
dependencies = [
- # Pin to the matching v2 release so an alpha-pin `pip install ruview`
- # always gets a compatible wifi-densepose.
- "wifi-densepose==2.0.0a1",
+ # Pin to the matching v2 release so `pip install ruview` always gets a
+ # compatible wifi-densepose.
+ "wifi-densepose==2.0.0",
]
[project.optional-dependencies]
-client = ["wifi-densepose[client]==2.0.0a1"]
+client = ["wifi-densepose[client]==2.0.0"]
[project.urls]
Homepage = "https://github.com/ruvnet/RuView"
diff --git a/python/src/bindings/aether.rs b/python/src/bindings/aether.rs
new file mode 100644
index 00000000..149951c9
--- /dev/null
+++ b/python/src/bindings/aether.rs
@@ -0,0 +1,317 @@
+//! ADR-185 P1 — PyO3 bindings for AETHER contrastive CSI embeddings.
+//!
+//! Surfaces the **pure-sync** contrastive-embedding compute from
+//! `wifi-densepose-aether::embedding` (ADR-024; the std-only leaf hoisted per
+//! ADR-185 §13) into `wifi_densepose.aether`:
+//!
+//! - `AetherConfig` — wraps `EmbeddingConfig` (d_model / d_proj /
+//! temperature / normalize)
+//! - `CsiAugmenter` — SimCLR-style augmentation pair generator
+//! - `EmbeddingExtractor`— backbone + projection → 128-dim L2-normed embedding
+//! - `info_nce_loss` — NT-Xent contrastive loss (module function)
+//! - `cosine_similarity` — re-ID similarity helper (module function)
+//!
+//! ## Honest scope vs ADR-185 §3.2
+//!
+//! ADR-185 §3.2 names an aspirational surface (`aether_loss` returning
+//! VICReg components, `alignment_metric`, `uniformity_metric`,
+//! `forward_dual`, an `AetherConfig` with `vicreg_*` fields). Those do
+//! **not** exist in the backing crate at HEAD — `embedding.rs` exposes
+//! `EmbeddingConfig { d_model, d_proj, temperature, normalize }`,
+//! `info_nce_loss` (plain `f32`), `CsiAugmenter::augment_pair`, and
+//! `EmbeddingExtractor::extract`. This binding surfaces **what actually
+//! exists** rather than fabricating the ADR's wished-for API. The
+//! VICReg loss / metric surface is a Rust-side gap, not a binding gap.
+//!
+//! ## GIL release strategy (per ADR-117 §7, matching bindings/vitals.rs)
+//!
+//! `extract`, `augment_pair`, and `info_nce_loss` are pure-sync matrix
+//! ops touching no Python objects, so they run inside
+//! `py.allow_threads(|| ...)`.
+
+use pyo3::exceptions::PyValueError;
+use pyo3::prelude::*;
+
+use wifi_densepose_aether::embedding::{
+ info_nce_loss as rust_info_nce_loss, CsiAugmenter, EmbeddingConfig, EmbeddingExtractor,
+};
+use wifi_densepose_aether::graph_transformer::TransformerConfig;
+
+/// Upper bound on model/CSI dimensions accepted from Python. The transformer
+/// allocates weight matrices quadratic in these, so this caps a single
+/// construction well under a gigabyte and turns an accidental or malicious
+/// `d_model=100_000` into a `ValueError` instead of an allocation that aborts
+/// the interpreter. Generous relative to real configs (defaults 64/128); raise
+/// deliberately if a workload genuinely needs larger.
+const MAX_DIM: usize = 4096;
+/// Upper bound on GNN layer count — a sanity cap, not a modelling limit.
+const MAX_LAYERS: usize = 64;
+
+// ─── AetherConfig ────────────────────────────────────────────────────
+
+/// Configuration for the contrastive embedding model.
+///
+/// Python:
+/// ```python
+/// from wifi_densepose.aether import AetherConfig
+/// cfg = AetherConfig(d_model=64, d_proj=128, temperature=0.07, normalize=True)
+/// ```
+#[pyclass(frozen, name = "AetherConfig")]
+#[derive(Clone)]
+pub struct PyAetherConfig {
+ inner: EmbeddingConfig,
+}
+
+#[pymethods]
+impl PyAetherConfig {
+ #[new]
+ #[pyo3(signature = (d_model=64, d_proj=128, temperature=0.07, normalize=true))]
+ fn new(d_model: usize, d_proj: usize, temperature: f32, normalize: bool) -> PyResult {
+ // Validate at the boundary and raise ValueError. The native constructor
+ // allocates weight matrices quadratic in these dims and (elsewhere)
+ // divides by them, so zero or absurd values would otherwise reach Rust
+ // as a panic (surfacing to Python as an opaque PanicException) or a
+ // multi-gigabyte allocation that aborts the interpreter.
+ if d_model == 0 || d_proj == 0 {
+ return Err(PyValueError::new_err(
+ "d_model and d_proj must be positive",
+ ));
+ }
+ if d_model > MAX_DIM || d_proj > MAX_DIM {
+ return Err(PyValueError::new_err(format!(
+ "d_model ({d_model}) and d_proj ({d_proj}) must be <= {MAX_DIM}"
+ )));
+ }
+ Ok(Self {
+ inner: EmbeddingConfig {
+ d_model,
+ d_proj,
+ temperature,
+ normalize,
+ },
+ })
+ }
+
+ #[getter]
+ fn d_model(&self) -> usize {
+ self.inner.d_model
+ }
+
+ #[getter]
+ fn d_proj(&self) -> usize {
+ self.inner.d_proj
+ }
+
+ #[getter]
+ fn temperature(&self) -> f32 {
+ self.inner.temperature
+ }
+
+ #[getter]
+ fn normalize(&self) -> bool {
+ self.inner.normalize
+ }
+
+ fn __repr__(&self) -> String {
+ format!(
+ "AetherConfig(d_model={}, d_proj={}, temperature={}, normalize={})",
+ self.inner.d_model, self.inner.d_proj, self.inner.temperature, self.inner.normalize,
+ )
+ }
+}
+
+// ─── CsiAugmenter ────────────────────────────────────────────────────
+
+/// SimCLR-style CSI augmentation. `augment_pair` returns two distinct
+/// augmented views of the same CSI window for contrastive pretraining.
+///
+/// Python:
+/// ```python
+/// from wifi_densepose.aether import CsiAugmenter
+/// aug = CsiAugmenter()
+/// view_a, view_b = aug.augment_pair(window, seed=42)
+/// ```
+#[pyclass(name = "CsiAugmenter")]
+pub struct PyCsiAugmenter {
+ inner: CsiAugmenter,
+}
+
+#[pymethods]
+impl PyCsiAugmenter {
+ #[new]
+ fn new() -> Self {
+ Self {
+ inner: CsiAugmenter::new(),
+ }
+ }
+
+ /// Produce two augmented views `(view_a, view_b)` of `window`
+ /// (frames × subcarriers) using the deterministic `seed`. GIL is
+ /// released during augmentation.
+ fn augment_pair(
+ &self,
+ py: Python<'_>,
+ window: Vec>,
+ seed: u64,
+ ) -> (Vec>, Vec>) {
+ py.allow_threads(|| self.inner.augment_pair(&window, seed))
+ }
+
+ fn __repr__(&self) -> String {
+ "CsiAugmenter(SimCLR-style CSI augmentation)".to_string()
+ }
+}
+
+// ─── EmbeddingExtractor ──────────────────────────────────────────────
+
+/// Full AETHER embedding extractor: CSI→pose transformer backbone +
+/// projection head → a `d_proj`-dim (default 128) L2-normalized
+/// embedding. Weights are deterministically seeded, so `embed` is a
+/// pure function of its input for a fixed config.
+///
+/// Python:
+/// ```python
+/// from wifi_densepose.aether import AetherConfig, EmbeddingExtractor
+/// ext = EmbeddingExtractor(n_subcarriers=56, config=AetherConfig())
+/// emb = ext.embed(window) # list[float], len == config.d_proj
+/// ```
+#[pyclass(name = "EmbeddingExtractor")]
+pub struct PyEmbeddingExtractor {
+ inner: EmbeddingExtractor,
+ embedding_dim: usize,
+}
+
+#[pymethods]
+impl PyEmbeddingExtractor {
+ /// Construct an extractor. The transformer backbone is sized from
+ /// `n_subcarriers` and `config.d_model`; `config.d_proj` sets the
+ /// embedding dimension.
+ #[new]
+ #[pyo3(signature = (n_subcarriers, config, n_keypoints=17, n_heads=4, n_gnn_layers=2))]
+ fn new(
+ n_subcarriers: usize,
+ config: PyAetherConfig,
+ n_keypoints: usize,
+ n_heads: usize,
+ n_gnn_layers: usize,
+ ) -> PyResult {
+ let e_config = config.inner.clone();
+ // n_heads == 0 reaches `d_model % n_heads` in the transformer and panics
+ // (divide-by-zero); a non-divisor trips the native `assert!`. Both would
+ // surface to Python as a PanicException. Reject cleanly instead.
+ if n_heads == 0 {
+ return Err(PyValueError::new_err("n_heads must be positive"));
+ }
+ if e_config.d_model % n_heads != 0 {
+ return Err(PyValueError::new_err(format!(
+ "d_model ({}) must be divisible by n_heads ({n_heads})",
+ e_config.d_model
+ )));
+ }
+ if n_subcarriers == 0 || n_keypoints == 0 {
+ return Err(PyValueError::new_err(
+ "n_subcarriers and n_keypoints must be positive",
+ ));
+ }
+ if n_subcarriers > MAX_DIM || n_keypoints > MAX_DIM || n_gnn_layers > MAX_LAYERS {
+ return Err(PyValueError::new_err(format!(
+ "n_subcarriers/n_keypoints must be <= {MAX_DIM} and n_gnn_layers <= {MAX_LAYERS}"
+ )));
+ }
+ let t_config = TransformerConfig {
+ n_subcarriers,
+ n_keypoints,
+ d_model: e_config.d_model,
+ n_heads,
+ n_gnn_layers,
+ };
+ let embedding_dim = e_config.d_proj;
+ Ok(Self {
+ inner: EmbeddingExtractor::new(t_config, e_config),
+ embedding_dim,
+ })
+ }
+
+ /// Extract an embedding from a CSI window (frames × subcarriers).
+ /// Returns a `d_proj`-length vector (L2-normed when the config's
+ /// `normalize` is set). GIL released during the forward pass.
+ fn embed(&mut self, py: Python<'_>, csi_features: Vec>) -> Vec {
+ py.allow_threads(|| self.inner.extract(&csi_features))
+ }
+
+ #[getter]
+ fn embedding_dim(&self) -> usize {
+ self.embedding_dim
+ }
+
+ /// Total trainable parameter count (transformer + projection). Equals the
+ /// number of `f32`s in a weight file for this architecture.
+ #[getter]
+ fn param_count(&self) -> usize {
+ self.inner.param_count()
+ }
+
+ /// Load weights from `path` (a file written by `save_weights` or the Rust
+ /// `EmbeddingExtractor::save_weights`), replacing the current weights.
+ ///
+ /// By default an `EmbeddingExtractor` uses deterministic **random** init
+ /// (untrained); this is the additive path to load real weights once a
+ /// trained checkpoint exists (ADR-185 §13.a). Raises `ValueError` on a
+ /// missing/corrupt file or a param-count mismatch with this architecture.
+ /// GIL released during file I/O + deserialization.
+ fn load_weights(&mut self, py: Python<'_>, path: String) -> PyResult<()> {
+ py.allow_threads(|| self.inner.load_weights(&path))
+ .map_err(PyValueError::new_err)
+ }
+
+ /// Serialize the current weights to `path` (magic `AETHERW1` + `u32` count
+ /// + little-endian `f32` payload). GIL released.
+ fn save_weights(&self, py: Python<'_>, path: String) -> PyResult<()> {
+ py.allow_threads(|| self.inner.save_weights(&path))
+ .map_err(|e| PyValueError::new_err(e.to_string()))
+ }
+
+ fn __repr__(&self) -> String {
+ format!("EmbeddingExtractor(embedding_dim={})", self.embedding_dim)
+ }
+}
+
+// ─── Module functions ────────────────────────────────────────────────
+
+/// InfoNCE (NT-Xent) contrastive loss between two batches of embeddings.
+/// Delegates to the identical Rust implementation. GIL released.
+#[pyfunction]
+#[pyo3(signature = (embeddings_a, embeddings_b, temperature=0.07))]
+fn info_nce_loss(
+ py: Python<'_>,
+ embeddings_a: Vec>,
+ embeddings_b: Vec>,
+ temperature: f32,
+) -> f32 {
+ py.allow_threads(|| rust_info_nce_loss(&embeddings_a, &embeddings_b, temperature))
+}
+
+/// Cosine similarity between two embeddings — the re-ID scoring
+/// primitive. Byte-identical to the private `cosine_similarity` in the
+/// backing crate (same dot-product / norm formula, `f32`).
+#[pyfunction]
+fn cosine_similarity(a: Vec, b: Vec) -> f32 {
+ let n = a.len().min(b.len());
+ let dot: f32 = (0..n).map(|i| a[i] * b[i]).sum();
+ let na = (0..n).map(|i| a[i] * a[i]).sum::().sqrt();
+ let nb = (0..n).map(|i| b[i] * b[i]).sum::().sqrt();
+ if na > 1e-10 && nb > 1e-10 {
+ dot / (na * nb)
+ } else {
+ 0.0
+ }
+}
+
+pub fn register(m: &Bound<'_, PyModule>) -> PyResult<()> {
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_function(wrap_pyfunction!(info_nce_loss, m)?)?;
+ m.add_function(wrap_pyfunction!(cosine_similarity, m)?)?;
+ Ok(())
+}
diff --git a/python/src/bindings/mat.rs b/python/src/bindings/mat.rs
new file mode 100644
index 00000000..ae6d77d8
--- /dev/null
+++ b/python/src/bindings/mat.rs
@@ -0,0 +1,433 @@
+//! ADR-185 P3 — PyO3 bindings for MAT (Mass Casualty Assessment Tool, ADR-024
+//! crate table): WiFi-based disaster-survivor detection + START triage.
+//!
+//! Bound behind the `[mat]` extra so the disaster/ML stack never enters the
+//! default wheel.
+//!
+//! ## Honest scope vs ADR-185 §3.4
+//!
+//! - **`scan_once()`** — ADR-185 §3.4/§11.3 proposed adding a sync
+//! `scan_once()` wrapper Rust-side. That turned out to be unnecessary: the
+//! public async `DisasterResponse::start_scanning()` runs **exactly one**
+//! `scan_cycle` and returns when `continuous_monitoring == false`. So this
+//! binding forces `continuous_monitoring = false` and drives one scan on a
+//! private current-thread tokio runtime — no change to `wifi-densepose-mat`.
+//! - **event + zone are required** — `scan_cycle` errors without an active
+//! event and an Active zone. ADR-185 §3.4's surface omitted this; the real
+//! pipeline needs `initialize_event(...)` + `add_zone(...)` first, so both
+//! are bound (documented additions, not fabrications).
+//! - **`Survivor.vital_signs`** — the ADR implies a single `VitalSignsReading`;
+//! the real accessor returns a *history*. Bound here as
+//! `Survivor.latest_vitals -> Optional[VitalSignsReading]`.
+//! - **`DisasterType`** has 9 variants at HEAD (adds Landslide, MineCollapse,
+//! Industrial, TunnelCollapse) vs the ADR's shorter list; all are bound.
+//!
+//! ## GIL release
+//!
+//! `push_csi_data` and `scan_once` release the GIL (`py.allow_threads`) — the
+//! detection pipeline + ensemble classifier are the compute-heavy part and
+//! touch no Python state.
+
+use pyo3::exceptions::PyValueError;
+use pyo3::prelude::*;
+
+use wifi_densepose_mat::{
+ DisasterConfig, DisasterResponse, DisasterType, ScanZone, Survivor, TriageStatus,
+ VitalSignsReading, ZoneBounds,
+};
+
+// ─── DisasterType ────────────────────────────────────────────────────
+
+/// Type of disaster event (shapes the debris/attenuation model).
+#[pyclass(eq, eq_int, frozen, hash, name = "DisasterType")]
+#[derive(Clone, Copy, PartialEq, Eq, Hash)]
+pub enum PyDisasterType {
+ BuildingCollapse = 0,
+ Earthquake = 1,
+ Landslide = 2,
+ Avalanche = 3,
+ Flood = 4,
+ MineCollapse = 5,
+ Industrial = 6,
+ TunnelCollapse = 7,
+ Unknown = 8,
+}
+
+impl PyDisasterType {
+ fn as_rust(self) -> DisasterType {
+ match self {
+ Self::BuildingCollapse => DisasterType::BuildingCollapse,
+ Self::Earthquake => DisasterType::Earthquake,
+ Self::Landslide => DisasterType::Landslide,
+ Self::Avalanche => DisasterType::Avalanche,
+ Self::Flood => DisasterType::Flood,
+ Self::MineCollapse => DisasterType::MineCollapse,
+ Self::Industrial => DisasterType::Industrial,
+ Self::TunnelCollapse => DisasterType::TunnelCollapse,
+ Self::Unknown => DisasterType::Unknown,
+ }
+ }
+}
+
+#[pymethods]
+impl PyDisasterType {
+ fn __repr__(&self) -> String {
+ format!("DisasterType.{:?}", self.as_rust())
+ }
+}
+
+// ─── TriageStatus ────────────────────────────────────────────────────
+
+/// START-protocol triage class.
+#[pyclass(eq, eq_int, frozen, hash, name = "TriageStatus")]
+#[derive(Clone, Copy, PartialEq, Eq, Hash)]
+pub enum PyTriageStatus {
+ Immediate = 0,
+ Delayed = 1,
+ Minor = 2,
+ Deceased = 3,
+ Unknown = 4,
+}
+
+impl PyTriageStatus {
+ fn as_rust(self) -> TriageStatus {
+ match self {
+ Self::Immediate => TriageStatus::Immediate,
+ Self::Delayed => TriageStatus::Delayed,
+ Self::Minor => TriageStatus::Minor,
+ Self::Deceased => TriageStatus::Deceased,
+ Self::Unknown => TriageStatus::Unknown,
+ }
+ }
+ fn from_rust(s: &TriageStatus) -> Self {
+ match s {
+ TriageStatus::Immediate => Self::Immediate,
+ TriageStatus::Delayed => Self::Delayed,
+ TriageStatus::Minor => Self::Minor,
+ TriageStatus::Deceased => Self::Deceased,
+ TriageStatus::Unknown => Self::Unknown,
+ }
+ }
+}
+
+#[pymethods]
+impl PyTriageStatus {
+ /// START priority (1 = highest / Immediate ... 5 = Unknown).
+ #[getter]
+ fn priority(&self) -> u8 {
+ self.as_rust().priority()
+ }
+ fn __repr__(&self) -> String {
+ format!("TriageStatus.{:?}", self.as_rust())
+ }
+}
+
+// ─── VitalSignsReading ───────────────────────────────────────────────
+
+/// A single vital-signs reading (optional breathing/heartbeat + movement).
+#[pyclass(frozen, name = "VitalSignsReading")]
+pub struct PyVitalSignsReading {
+ breathing_rate_bpm: Option,
+ heartbeat_rate_bpm: Option,
+ movement_intensity: f32,
+ confidence: f64,
+}
+
+impl PyVitalSignsReading {
+ fn from_rust(r: &VitalSignsReading) -> Self {
+ Self {
+ breathing_rate_bpm: r.breathing.as_ref().map(|b| b.rate_bpm),
+ heartbeat_rate_bpm: r.heartbeat.as_ref().map(|h| h.rate_bpm),
+ movement_intensity: r.movement.intensity,
+ confidence: r.confidence.value(),
+ }
+ }
+}
+
+#[pymethods]
+impl PyVitalSignsReading {
+ #[getter]
+ fn breathing_rate_bpm(&self) -> Option {
+ self.breathing_rate_bpm
+ }
+ #[getter]
+ fn heartbeat_rate_bpm(&self) -> Option {
+ self.heartbeat_rate_bpm
+ }
+ #[getter]
+ fn movement_intensity(&self) -> f32 {
+ self.movement_intensity
+ }
+ #[getter]
+ fn confidence(&self) -> f64 {
+ self.confidence
+ }
+ fn __repr__(&self) -> String {
+ format!(
+ "VitalSignsReading(breathing={:?}, heartbeat={:?}, movement={:.3}, confidence={:.3})",
+ self.breathing_rate_bpm, self.heartbeat_rate_bpm, self.movement_intensity, self.confidence,
+ )
+ }
+}
+
+// ─── Survivor ────────────────────────────────────────────────────────
+
+/// A detected survivor: id, triage class, confidence, optional 3-D location,
+/// and the latest vital-signs reading.
+#[pyclass(frozen, name = "Survivor")]
+pub struct PySurvivor {
+ id: String,
+ triage_status: PyTriageStatus,
+ confidence: f64,
+ location: Option<(f64, f64, f64)>,
+ latest_vitals: Option>,
+}
+
+impl PySurvivor {
+ fn from_rust(py: Python<'_>, s: &Survivor) -> PyResult {
+ let latest_vitals = match s.vital_signs().latest() {
+ Some(r) => Some(Py::new(py, PyVitalSignsReading::from_rust(r))?),
+ None => None,
+ };
+ Ok(Self {
+ id: s.id().as_uuid().to_string(),
+ triage_status: PyTriageStatus::from_rust(s.triage_status()),
+ confidence: s.confidence(),
+ location: s.location().map(|c| (c.x, c.y, c.z)),
+ latest_vitals,
+ })
+ }
+}
+
+#[pymethods]
+impl PySurvivor {
+ #[getter]
+ fn id(&self) -> &str {
+ &self.id
+ }
+ #[getter]
+ fn triage_status(&self) -> PyTriageStatus {
+ self.triage_status
+ }
+ #[getter]
+ fn confidence(&self) -> f64 {
+ self.confidence
+ }
+ #[getter]
+ fn location(&self) -> Option<(f64, f64, f64)> {
+ self.location
+ }
+ #[getter]
+ fn latest_vitals(&self, py: Python<'_>) -> Option> {
+ self.latest_vitals.as_ref().map(|v| v.clone_ref(py))
+ }
+ fn __repr__(&self) -> String {
+ format!(
+ "Survivor(id={}, triage={:?}, confidence={:.3})",
+ &self.id[..8.min(self.id.len())],
+ self.triage_status.as_rust(),
+ self.confidence,
+ )
+ }
+}
+
+// ─── DisasterConfig ──────────────────────────────────────────────────
+
+/// Configuration for the disaster-response pipeline.
+///
+/// Note: the Python binding always runs **single-shot** scans (`scan_once`),
+/// so `continuous_monitoring` is forced off internally.
+#[pyclass(frozen, name = "DisasterConfig")]
+#[derive(Clone)]
+pub struct PyDisasterConfig {
+ inner: DisasterConfig,
+}
+
+#[pymethods]
+impl PyDisasterConfig {
+ #[new]
+ #[pyo3(signature = (
+ disaster_type,
+ sensitivity=0.8,
+ confidence_threshold=0.5,
+ max_depth=5.0,
+ scan_interval_ms=500
+ ))]
+ fn new(
+ disaster_type: PyDisasterType,
+ sensitivity: f64,
+ confidence_threshold: f64,
+ max_depth: f64,
+ scan_interval_ms: u64,
+ ) -> Self {
+ let inner = DisasterConfig::builder()
+ .disaster_type(disaster_type.as_rust())
+ .sensitivity(sensitivity)
+ .confidence_threshold(confidence_threshold)
+ .max_depth(max_depth)
+ .scan_interval_ms(scan_interval_ms)
+ .continuous_monitoring(false)
+ .build();
+ Self { inner }
+ }
+
+ #[getter]
+ fn sensitivity(&self) -> f64 {
+ self.inner.sensitivity
+ }
+ #[getter]
+ fn confidence_threshold(&self) -> f64 {
+ self.inner.confidence_threshold
+ }
+ #[getter]
+ fn max_depth(&self) -> f64 {
+ self.inner.max_depth
+ }
+
+ fn __repr__(&self) -> String {
+ format!(
+ "DisasterConfig(disaster_type={:?}, sensitivity={}, confidence_threshold={}, max_depth={})",
+ self.inner.disaster_type,
+ self.inner.sensitivity,
+ self.inner.confidence_threshold,
+ self.inner.max_depth,
+ )
+ }
+}
+
+// ─── ScanZone ────────────────────────────────────────────────────────
+
+/// A rectangular or circular scan zone (new zones start Active).
+#[pyclass(name = "ScanZone")]
+#[derive(Clone)]
+pub struct PyScanZone {
+ inner: ScanZone,
+}
+
+#[pymethods]
+impl PyScanZone {
+ /// Rectangular zone with corner bounds (metres).
+ #[staticmethod]
+ fn rectangle(name: &str, min_x: f64, min_y: f64, max_x: f64, max_y: f64) -> Self {
+ Self {
+ inner: ScanZone::new(name, ZoneBounds::rectangle(min_x, min_y, max_x, max_y)),
+ }
+ }
+
+ /// Circular zone centred at `(center_x, center_y)` with `radius` (metres).
+ #[staticmethod]
+ fn circle(name: &str, center_x: f64, center_y: f64, radius: f64) -> Self {
+ Self {
+ inner: ScanZone::new(name, ZoneBounds::circle(center_x, center_y, radius)),
+ }
+ }
+
+ #[getter]
+ fn name(&self) -> &str {
+ self.inner.name()
+ }
+
+ fn __repr__(&self) -> String {
+ format!("ScanZone(name={:?})", self.inner.name())
+ }
+}
+
+// ─── DisasterResponse ────────────────────────────────────────────────
+
+/// Main disaster-response coordinator: ingest CSI, run one scan cycle, query
+/// detected survivors by START triage.
+#[pyclass(name = "DisasterResponse")]
+pub struct PyDisasterResponse {
+ inner: DisasterResponse,
+ rt: tokio::runtime::Runtime,
+}
+
+#[pymethods]
+impl PyDisasterResponse {
+ #[new]
+ fn new(config: PyDisasterConfig) -> PyResult {
+ let rt = tokio::runtime::Builder::new_current_thread()
+ .enable_time()
+ .build()
+ .map_err(|e| PyValueError::new_err(format!("failed to build tokio runtime: {e}")))?;
+ Ok(Self {
+ inner: DisasterResponse::new(config.inner),
+ rt,
+ })
+ }
+
+ /// Initialize the active disaster event at map coordinate `(x, y)`.
+ /// Required before `add_zone`/`scan_once`.
+ fn initialize_event(&mut self, x: f64, y: f64, description: &str) -> PyResult<()> {
+ self.inner
+ .initialize_event(geo::Point::new(x, y), description)
+ .map(|_| ())
+ .map_err(|e| PyValueError::new_err(e.to_string()))
+ }
+
+ /// Add an (Active) scan zone to the current event. Raises if no event.
+ fn add_zone(&mut self, zone: PyScanZone) -> PyResult<()> {
+ self.inner
+ .add_zone(zone.inner)
+ .map_err(|e| PyValueError::new_err(e.to_string()))
+ }
+
+ /// Push a raw CSI frame (equal-length `amplitudes`/`phases`) into the
+ /// detection pipeline. Raises on empty/mismatched input. GIL released.
+ fn push_csi_data(
+ &self,
+ py: Python<'_>,
+ amplitudes: Vec,
+ phases: Vec,
+ ) -> PyResult<()> {
+ py.allow_threads(|| self.inner.push_csi_data(&litudes, &phases))
+ .map_err(|e| PyValueError::new_err(e.to_string()))
+ }
+
+ /// Run exactly one scan cycle over the buffered CSI (detection → ensemble
+ /// → localization → triage). Requires an initialized event with an Active
+ /// zone. GIL released during the scan.
+ fn scan_once(&mut self, py: Python<'_>) -> PyResult<()> {
+ let rt = &self.rt;
+ let inner = &mut self.inner;
+ py.allow_threads(|| rt.block_on(inner.start_scanning()))
+ .map_err(|e| PyValueError::new_err(e.to_string()))
+ }
+
+ /// All detected survivors.
+ fn survivors(&self, py: Python<'_>) -> PyResult> {
+ self.inner
+ .survivors()
+ .into_iter()
+ .map(|s| PySurvivor::from_rust(py, s))
+ .collect()
+ }
+
+ /// Survivors filtered by START triage class.
+ fn survivors_by_triage(
+ &self,
+ py: Python<'_>,
+ status: PyTriageStatus,
+ ) -> PyResult> {
+ self.inner
+ .survivors_by_triage(status.as_rust())
+ .into_iter()
+ .map(|s| PySurvivor::from_rust(py, s))
+ .collect()
+ }
+
+ fn __repr__(&self) -> String {
+ "DisasterResponse()".to_string()
+ }
+}
+
+pub fn register(m: &Bound<'_, PyModule>) -> PyResult<()> {
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ Ok(())
+}
diff --git a/python/src/bindings/meridian.rs b/python/src/bindings/meridian.rs
new file mode 100644
index 00000000..b2a5d093
--- /dev/null
+++ b/python/src/bindings/meridian.rs
@@ -0,0 +1,492 @@
+//! ADR-185 P2 — PyO3 bindings for MERIDIAN cross-environment domain
+//! generalization (ADR-027).
+//!
+//! Surfaces the **pure-sync, tch-free** inference/adaptation path into
+//! `wifi_densepose.meridian`:
+//!
+//! - `HardwareType` / `HardwareNormalizer` / `CanonicalCsiFrame`
+//! (from `wifi-densepose-signal::hardware_norm`)
+//! - `MeridianGeometryConfig` / `GeometryEncoder`
+//! - `RapidAdaptation` / `AdaptationResult`
+//! - `CrossDomainEvaluator` + `mpjpe`
+//! (from `wifi-densepose-train`, NO `tch-backend`)
+//!
+//! ## Honest scope vs ADR-185 §3.3
+//!
+//! ADR-185 §3.3 names a surface that partly diverges from the code at HEAD;
+//! this binding tracks the **real** API and documents each deviation:
+//!
+//! - `HardwareType.detect(subcarrier_count)` — the real detector is the
+//! static `HardwareNormalizer::detect_hardware`; exposed here as a
+//! `HardwareType.detect` staticmethod delegating to it (no reimpl).
+//! - `HardwareNormalizer.normalize(frame: CsiFrame, hw)` — the real method
+//! takes raw `(amplitude, phase)` f64 vectors and returns a `Result`, so
+//! it is bound as `normalize(amplitude, phase, hw)` (raises on error).
+//! - `CanonicalCsiFrame.amplitudes/.phases` — the real fields are singular
+//! `amplitude`/`phase`; bound under their real names.
+//! - `RapidAdaptation.calibrate(csi_windows) -> AdaptationResult` with a
+//! `converged` field — **does not exist**. The real engine is
+//! `push_frame` + `adapt()`, and `AdaptationResult` carries
+//! `{lora_weights, final_loss, frames_used, adaptation_epochs}` (no
+//! `converged`). Bound as-is; the `calibrate`/`converged` surface is a
+//! Rust-side gap, not fabricated here.
+//!
+//! Training-time types (`DomainFactorizer`, `GradientReversalLayer`,
+//! `VirtualDomainAugmentor`) are out of P6 scope (ADR-185 §3.3 / Open Q
+//! §11.2) — inference/adaptation only.
+//!
+//! ## GIL release (per ADR-117 §7, matching bindings/vitals.rs)
+//!
+//! `normalize`, `encode`, `adapt`, and `evaluate` are pure-sync numeric
+//! ops touching no Python objects, so they run inside `py.allow_threads`.
+
+use std::collections::HashMap;
+
+use pyo3::exceptions::PyValueError;
+use pyo3::prelude::*;
+
+use wifi_densepose_signal::hardware_norm::{
+ CanonicalCsiFrame, HardwareNormalizer, HardwareType,
+};
+use wifi_densepose_train::eval::{mpjpe as rust_mpjpe, CrossDomainEvaluator};
+use wifi_densepose_train::geometry::{GeometryEncoder, MeridianGeometryConfig};
+use wifi_densepose_train::rapid_adapt::{AdaptationLoss, AdaptationResult, RapidAdaptation};
+
+// ─── HardwareType ────────────────────────────────────────────────────
+
+/// WiFi chipset family, keyed by subcarrier count.
+#[pyclass(eq, eq_int, frozen, hash, name = "HardwareType")]
+#[derive(Clone, Copy, PartialEq, Eq, Hash)]
+pub enum PyHardwareType {
+ Esp32S3 = 0,
+ Intel5300 = 1,
+ Atheros = 2,
+ Generic = 3,
+}
+
+impl PyHardwareType {
+ fn as_rust(self) -> HardwareType {
+ match self {
+ Self::Esp32S3 => HardwareType::Esp32S3,
+ Self::Intel5300 => HardwareType::Intel5300,
+ Self::Atheros => HardwareType::Atheros,
+ Self::Generic => HardwareType::Generic,
+ }
+ }
+ fn from_rust(hw: HardwareType) -> Self {
+ match hw {
+ HardwareType::Esp32S3 => Self::Esp32S3,
+ HardwareType::Intel5300 => Self::Intel5300,
+ HardwareType::Atheros => Self::Atheros,
+ HardwareType::Generic => Self::Generic,
+ }
+ }
+}
+
+#[pymethods]
+impl PyHardwareType {
+ /// Detect hardware from subcarrier count (64→Esp32S3, 30→Intel5300,
+ /// 56→Atheros, else Generic). Delegates to the real
+ /// `HardwareNormalizer::detect_hardware`.
+ #[staticmethod]
+ fn detect(subcarrier_count: usize) -> Self {
+ Self::from_rust(HardwareNormalizer::detect_hardware(subcarrier_count))
+ }
+
+ #[getter]
+ fn subcarrier_count(&self) -> usize {
+ self.as_rust().subcarrier_count()
+ }
+
+ #[getter]
+ fn mimo_streams(&self) -> usize {
+ self.as_rust().mimo_streams()
+ }
+
+ fn __repr__(&self) -> String {
+ format!("HardwareType.{:?}", self.as_rust())
+ }
+}
+
+// ─── CanonicalCsiFrame ───────────────────────────────────────────────
+
+/// A CSI frame canonicalized to the normalizer's subcarrier grid
+/// (default 56): z-scored amplitude + sanitized (unwrapped, detrended)
+/// phase.
+#[pyclass(frozen, name = "CanonicalCsiFrame")]
+pub struct PyCanonicalCsiFrame {
+ inner: CanonicalCsiFrame,
+}
+
+#[pymethods]
+impl PyCanonicalCsiFrame {
+ #[getter]
+ fn amplitude(&self) -> Vec {
+ self.inner.amplitude.clone()
+ }
+
+ #[getter]
+ fn phase(&self) -> Vec {
+ self.inner.phase.clone()
+ }
+
+ #[getter]
+ fn hardware_type(&self) -> PyHardwareType {
+ PyHardwareType::from_rust(self.inner.hardware_type)
+ }
+
+ fn __repr__(&self) -> String {
+ format!(
+ "CanonicalCsiFrame(subcarriers={}, hardware_type={:?})",
+ self.inner.amplitude.len(),
+ self.inner.hardware_type,
+ )
+ }
+}
+
+// ─── HardwareNormalizer ──────────────────────────────────────────────
+
+/// Normalizes CSI frames from heterogeneous chipsets into a canonical
+/// representation (cubic resample → z-score amplitude → sanitize phase).
+#[pyclass(name = "HardwareNormalizer")]
+pub struct PyHardwareNormalizer {
+ inner: HardwareNormalizer,
+}
+
+#[pymethods]
+impl PyHardwareNormalizer {
+ /// Create a normalizer. `canonical_subcarriers` defaults to 56.
+ #[new]
+ #[pyo3(signature = (canonical_subcarriers=56))]
+ fn new(canonical_subcarriers: usize) -> PyResult {
+ HardwareNormalizer::with_canonical_subcarriers(canonical_subcarriers)
+ .map(|inner| Self { inner })
+ .map_err(|e| PyValueError::new_err(e.to_string()))
+ }
+
+ /// Detect hardware from subcarrier count (static).
+ #[staticmethod]
+ fn detect_hardware(subcarrier_count: usize) -> PyHardwareType {
+ PyHardwareType::from_rust(HardwareNormalizer::detect_hardware(subcarrier_count))
+ }
+
+ #[getter]
+ fn canonical_subcarriers(&self) -> usize {
+ self.inner.canonical_subcarriers()
+ }
+
+ /// Normalize a raw CSI frame given per-subcarrier `amplitude` and
+ /// `phase` (equal length) and its `hardware` type. Raises
+ /// `ValueError` on empty/mismatched input. GIL released.
+ fn normalize(
+ &self,
+ py: Python<'_>,
+ amplitude: Vec,
+ phase: Vec,
+ hardware: PyHardwareType,
+ ) -> PyResult {
+ let hw = hardware.as_rust();
+ py.allow_threads(|| self.inner.normalize(&litude, &phase, hw))
+ .map(|inner| PyCanonicalCsiFrame { inner })
+ .map_err(|e| PyValueError::new_err(e.to_string()))
+ }
+
+ fn __repr__(&self) -> String {
+ format!(
+ "HardwareNormalizer(canonical_subcarriers={})",
+ self.inner.canonical_subcarriers()
+ )
+ }
+}
+
+// ─── MeridianGeometryConfig ──────────────────────────────────────────
+
+/// Config for the geometry encoder (Fourier bands + DeepSets output dim).
+#[pyclass(frozen, name = "MeridianGeometryConfig")]
+#[derive(Clone)]
+pub struct PyMeridianGeometryConfig {
+ inner: MeridianGeometryConfig,
+}
+
+#[pymethods]
+impl PyMeridianGeometryConfig {
+ #[new]
+ #[pyo3(signature = (n_frequencies=10, scale=1.0, geometry_dim=64, seed=42))]
+ fn new(n_frequencies: usize, scale: f32, geometry_dim: usize, seed: u64) -> Self {
+ Self {
+ inner: MeridianGeometryConfig {
+ n_frequencies,
+ scale,
+ geometry_dim,
+ seed,
+ },
+ }
+ }
+
+ #[getter]
+ fn n_frequencies(&self) -> usize {
+ self.inner.n_frequencies
+ }
+ #[getter]
+ fn scale(&self) -> f32 {
+ self.inner.scale
+ }
+ #[getter]
+ fn geometry_dim(&self) -> usize {
+ self.inner.geometry_dim
+ }
+ #[getter]
+ fn seed(&self) -> u64 {
+ self.inner.seed
+ }
+
+ fn __repr__(&self) -> String {
+ format!(
+ "MeridianGeometryConfig(n_frequencies={}, scale={}, geometry_dim={}, seed={})",
+ self.inner.n_frequencies, self.inner.scale, self.inner.geometry_dim, self.inner.seed,
+ )
+ }
+}
+
+// ─── GeometryEncoder ─────────────────────────────────────────────────
+
+/// Permutation-invariant encoder: variable-count AP positions `[x,y,z]`
+/// → a fixed `geometry_dim` (default 64) vector.
+#[pyclass(name = "GeometryEncoder")]
+pub struct PyGeometryEncoder {
+ inner: GeometryEncoder,
+ geometry_dim: usize,
+}
+
+#[pymethods]
+impl PyGeometryEncoder {
+ #[new]
+ #[pyo3(signature = (config=None))]
+ fn new(config: Option) -> Self {
+ let cfg = config.map(|c| c.inner).unwrap_or_default();
+ let geometry_dim = cfg.geometry_dim;
+ Self {
+ inner: GeometryEncoder::new(&cfg),
+ geometry_dim,
+ }
+ }
+
+ /// Encode AP positions (a non-empty list of `[x, y, z]`) into a
+ /// `geometry_dim`-length vector. Raises `ValueError` if the list is
+ /// empty or any position is not exactly 3 coordinates. GIL released.
+ fn encode(&self, py: Python<'_>, ap_positions: Vec>) -> PyResult> {
+ if ap_positions.is_empty() {
+ return Err(PyValueError::new_err(
+ "ap_positions must contain at least one [x, y, z] position",
+ ));
+ }
+ let mut coords: Vec<[f32; 3]> = Vec::with_capacity(ap_positions.len());
+ for (i, p) in ap_positions.iter().enumerate() {
+ if p.len() != 3 {
+ return Err(PyValueError::new_err(format!(
+ "ap_positions[{i}] must have exactly 3 coordinates, got {}",
+ p.len()
+ )));
+ }
+ coords.push([p[0], p[1], p[2]]);
+ }
+ Ok(py.allow_threads(|| self.inner.encode(&coords)))
+ }
+
+ #[getter]
+ fn geometry_dim(&self) -> usize {
+ self.geometry_dim
+ }
+
+ fn __repr__(&self) -> String {
+ format!("GeometryEncoder(geometry_dim={})", self.geometry_dim)
+ }
+}
+
+// ─── RapidAdaptation / AdaptationResult ──────────────────────────────
+
+/// Result of `RapidAdaptation.adapt()`.
+#[pyclass(frozen, name = "AdaptationResult")]
+pub struct PyAdaptationResult {
+ inner: AdaptationResult,
+}
+
+#[pymethods]
+impl PyAdaptationResult {
+ #[getter]
+ fn lora_weights(&self) -> Vec {
+ self.inner.lora_weights.clone()
+ }
+ #[getter]
+ fn final_loss(&self) -> f32 {
+ self.inner.final_loss
+ }
+ #[getter]
+ fn frames_used(&self) -> usize {
+ self.inner.frames_used
+ }
+ #[getter]
+ fn adaptation_epochs(&self) -> usize {
+ self.inner.adaptation_epochs
+ }
+
+ fn __repr__(&self) -> String {
+ format!(
+ "AdaptationResult(final_loss={:.6}, frames_used={}, adaptation_epochs={})",
+ self.inner.final_loss, self.inner.frames_used, self.inner.adaptation_epochs,
+ )
+ }
+}
+
+/// Few-shot test-time adaptation: accumulate unlabeled CSI frames, then
+/// `adapt()` to produce LoRA weight deltas that minimize a self-supervised
+/// proxy loss.
+///
+/// Scope caveat (from the Rust module, kept honest): this minimizes a
+/// self-supervised proxy over a tiny LoRA bottleneck; it is NOT wired to
+/// the pose model and there is no measured end-to-end PCK gain from this
+/// path — do not cite a PCK improvement from `adapt()`.
+#[pyclass(name = "RapidAdaptation")]
+pub struct PyRapidAdaptation {
+ inner: RapidAdaptation,
+}
+
+#[pymethods]
+impl PyRapidAdaptation {
+ /// Build an adaptation engine. `loss_kind` is one of
+ /// `"contrastive"`, `"entropy"`, `"combined"` (default). `lambda_ent`
+ /// is used only by `"combined"`.
+ #[new]
+ #[pyo3(signature = (
+ min_calibration_frames,
+ lora_rank,
+ loss_kind="combined",
+ epochs=5,
+ lr=0.001,
+ lambda_ent=0.5
+ ))]
+ fn new(
+ min_calibration_frames: usize,
+ lora_rank: usize,
+ loss_kind: &str,
+ epochs: usize,
+ lr: f32,
+ lambda_ent: f32,
+ ) -> PyResult {
+ let loss = match loss_kind {
+ "contrastive" => AdaptationLoss::ContrastiveTTT { epochs, lr },
+ "entropy" => AdaptationLoss::EntropyMin { epochs, lr },
+ "combined" => AdaptationLoss::Combined {
+ epochs,
+ lr,
+ lambda_ent,
+ },
+ other => {
+ return Err(PyValueError::new_err(format!(
+ "unknown loss_kind '{other}'; expected 'contrastive', 'entropy', or 'combined'"
+ )))
+ }
+ };
+ Ok(Self {
+ inner: RapidAdaptation::new(min_calibration_frames, lora_rank, loss),
+ })
+ }
+
+ /// Push a single unlabeled CSI frame into the calibration buffer.
+ fn push_frame(&mut self, frame: Vec) {
+ self.inner.push_frame(&frame);
+ }
+
+ /// True once at least `min_calibration_frames` have been buffered.
+ fn is_ready(&self) -> bool {
+ self.inner.is_ready()
+ }
+
+ #[getter]
+ fn buffer_len(&self) -> usize {
+ self.inner.buffer_len()
+ }
+
+ /// Run test-time adaptation over the buffered frames. Raises
+ /// `ValueError` if the buffer is empty or `lora_rank == 0`. GIL
+ /// released during the finite-difference optimization.
+ fn adapt(&self, py: Python<'_>) -> PyResult {
+ py.allow_threads(|| self.inner.adapt())
+ .map(|inner| PyAdaptationResult { inner })
+ .map_err(|e| PyValueError::new_err(e.to_string()))
+ }
+
+ fn __repr__(&self) -> String {
+ format!("RapidAdaptation(buffered={})", self.inner.buffer_len())
+ }
+}
+
+// ─── CrossDomainEvaluator ────────────────────────────────────────────
+
+/// Cross-domain pose-accuracy evaluator (MPJPE + domain-gap ratio).
+#[pyclass(name = "CrossDomainEvaluator")]
+pub struct PyCrossDomainEvaluator {
+ inner: CrossDomainEvaluator,
+}
+
+#[pymethods]
+impl PyCrossDomainEvaluator {
+ /// Create an evaluator for `n_joints` (e.g. 17 for COCO).
+ #[new]
+ fn new(n_joints: usize) -> Self {
+ Self {
+ inner: CrossDomainEvaluator::new(n_joints),
+ }
+ }
+
+ /// Evaluate `predictions` (a list of `(pred, gt)` flat `n_joints*3`
+ /// vectors) grouped by `domain_labels` (0 = in-domain). Returns a
+ /// dict of the six cross-domain metrics. Raises `ValueError` on a
+ /// length mismatch. GIL released.
+ fn evaluate(
+ &self,
+ py: Python<'_>,
+ predictions: Vec<(Vec, Vec)>,
+ domain_labels: Vec,
+ ) -> PyResult> {
+ if predictions.len() != domain_labels.len() {
+ return Err(PyValueError::new_err(format!(
+ "predictions ({}) and domain_labels ({}) must have equal length",
+ predictions.len(),
+ domain_labels.len()
+ )));
+ }
+ let m = py.allow_threads(|| self.inner.evaluate(&predictions, &domain_labels));
+ let mut out = HashMap::with_capacity(6);
+ out.insert("in_domain_mpjpe".to_string(), m.in_domain_mpjpe);
+ out.insert("cross_domain_mpjpe".to_string(), m.cross_domain_mpjpe);
+ out.insert("few_shot_mpjpe".to_string(), m.few_shot_mpjpe);
+ out.insert("cross_hardware_mpjpe".to_string(), m.cross_hardware_mpjpe);
+ out.insert("domain_gap_ratio".to_string(), m.domain_gap_ratio);
+ out.insert("adaptation_speedup".to_string(), m.adaptation_speedup);
+ Ok(out)
+ }
+
+ fn __repr__(&self) -> String {
+ "CrossDomainEvaluator()".to_string()
+ }
+}
+
+/// Mean Per Joint Position Error between flat `[n_joints*3]` pose vectors.
+#[pyfunction]
+fn mpjpe(pred: Vec, gt: Vec, n_joints: usize) -> f32 {
+ rust_mpjpe(&pred, >, n_joints)
+}
+
+pub fn register(m: &Bound<'_, PyModule>) -> PyResult<()> {
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_class::()?;
+ m.add_function(wrap_pyfunction!(mpjpe, m)?)?;
+ Ok(())
+}
diff --git a/python/src/lib.rs b/python/src/lib.rs
index b30faf75..8428c4be 100644
--- a/python/src/lib.rs
+++ b/python/src/lib.rs
@@ -17,7 +17,13 @@
use pyo3::prelude::*;
mod bindings {
+ #[cfg(feature = "aether")]
+ pub mod aether;
pub mod bfld;
+ #[cfg(feature = "mat")]
+ pub mod mat;
+ #[cfg(feature = "meridian")]
+ pub mod meridian;
pub mod keypoint;
pub mod pose;
pub mod privacy_gate;
@@ -43,6 +49,12 @@ fn build_features() -> Vec<&'static str> {
feats.push("p2-pose-bindings"); // BoundingBox + PersonPose + PoseEstimate
feats.push("p3-vitals-bindings"); // BreathingExtractor + HeartRateExtractor + VitalEstimate
feats.push("p3.5-bfld-bindings"); // BfldFrame + BfldReport + BfldKind (stub Rust)
+ #[cfg(feature = "aether")]
+ feats.push("p6-aether-bindings"); // ADR-185 P1 — AETHER contrastive embeddings
+ #[cfg(feature = "meridian")]
+ feats.push("p6-meridian-bindings"); // ADR-185 P2 — MERIDIAN domain generalization
+ #[cfg(feature = "mat")]
+ feats.push("p6-mat-bindings"); // ADR-185 P3 — MAT disaster survivor detection
feats
}
@@ -85,5 +97,23 @@ fn wifi_densepose_native(m: &Bound<'_, PyModule>) -> PyResult<()> {
// the published `wifi-densepose-bfld 0.3.0` crate, not the Python port).
// Closes ADR-125 §2.1.d at the binding boundary.
bindings::privacy_gate::register(m)?;
+
+ // ADR-185 P1 — AETHER contrastive CSI embedding bindings, compiled
+ // and registered only under the `aether` feature so the default
+ // wheel links none of the sensing-server dependency tree.
+ #[cfg(feature = "aether")]
+ bindings::aether::register(m)?;
+
+ // ADR-185 P2 — MERIDIAN cross-environment domain-generalization
+ // bindings (hardware normalization, geometry encoding, rapid
+ // adaptation, cross-domain eval). Gated behind `meridian`; tch-free.
+ #[cfg(feature = "meridian")]
+ bindings::meridian::register(m)?;
+
+ // ADR-185 P3 — MAT disaster-survivor detection + START triage. Gated
+ // behind `mat`, mirroring the upstream disaster/ML stack gating.
+ #[cfg(feature = "mat")]
+ bindings::mat::register(m)?;
+
Ok(())
}
diff --git a/python/tests/aether_parity.rs b/python/tests/aether_parity.rs
new file mode 100644
index 00000000..75c78246
--- /dev/null
+++ b/python/tests/aether_parity.rs
@@ -0,0 +1,111 @@
+//! ADR-185 §4.1 — AETHER parity: native-Rust reference half.
+//!
+//! Produces the golden 128-dim embedding by calling the canonical
+//! `wifi-densepose-aether::embedding` code DIRECTLY (no PyO3), for the
+//! committed `tests/golden/aether_input.json` fixture, and compares it to the
+//! committed golden VECTOR `tests/golden/aether_embedding.json` within a
+//! numerical tolerance.
+//!
+//! Why a vector + tolerance and not a SHA-256 of the f32 bytes: the embedding
+//! is pure f32 and uses transcendental ops (ln/sqrt/cos), which are not
+//! bit-reproducible across CPU architectures or libm implementations. A byte
+//! hash only ever matched the one arch that generated it and failed on every
+//! other wheel this project builds (aarch64, macOS-arm). The pytest half
+//! (`tests/test_aether.py`) compares the Python binding to the SAME golden
+//! within the same tolerance — native≈golden and binding≈golden together prove
+//! binding≈native, portably.
+//!
+//! Regeneration (only when the Rust subsystem intentionally changes): delete
+//! `tests/golden/aether_embedding.json` and re-run `cargo test --features aether`.
+#![cfg(feature = "aether")]
+
+use std::fs;
+use std::path::PathBuf;
+
+use wifi_densepose_aether::embedding::{EmbeddingConfig, EmbeddingExtractor};
+use wifi_densepose_aether::graph_transformer::TransformerConfig;
+
+/// Cross-architecture f32 parity tolerance; see the module docs and the
+/// matching `PARITY_ATOL`/`PARITY_RTOL` in `tests/test_aether.py`.
+const PARITY_ATOL: f32 = 1e-4;
+const PARITY_RTOL: f32 = 1e-4;
+
+/// Assert `embedding` matches the committed golden vector `` within
+/// tolerance, or (if the golden is absent) write it and fail asking for a re-run.
+fn assert_matches_golden_vector(embedding: &[f32], name: &str) {
+ let path = golden_dir().join(name);
+ match fs::read_to_string(&path) {
+ Ok(raw) => {
+ let golden: Vec = serde_json::from_str(&raw)
+ .expect("parse golden vector json");
+ assert_eq!(embedding.len(), golden.len(), "{name}: length mismatch");
+ for (i, (&got, &want)) in embedding.iter().zip(&golden).enumerate() {
+ let tol = PARITY_ATOL + PARITY_RTOL * want.abs();
+ assert!(
+ (got - want).abs() <= tol,
+ "{name}: element {i} diverged beyond tolerance \
+ (got {got}, golden {want}, |Δ|={}) — a real regression, \
+ not cross-arch f32 drift",
+ (got - want).abs()
+ );
+ }
+ }
+ Err(_) => {
+ let json = serde_json::to_string(&embedding).expect("serialize golden");
+ fs::write(&path, &json).expect("write golden vector");
+ panic!("no committed golden {name}; wrote it. Re-run to verify parity.");
+ }
+ }
+}
+
+fn golden_dir() -> PathBuf {
+ PathBuf::from(env!("CARGO_MANIFEST_DIR"))
+ .join("tests")
+ .join("golden")
+}
+
+fn load_input() -> Vec> {
+ let raw = fs::read_to_string(golden_dir().join("aether_input.json"))
+ .expect("read aether_input.json fixture");
+ let rows: Vec> = serde_json::from_str(&raw).expect("parse aether_input.json");
+ rows.into_iter()
+ .map(|row| row.into_iter().map(|x| x as f32).collect())
+ .collect()
+}
+
+/// Build the extractor identically to the Python binding's default
+/// construction: `AetherConfig()` + `EmbeddingExtractor(n_subcarriers=56, cfg)`.
+fn embed_native(input: &[Vec]) -> Vec {
+ let e_config = EmbeddingConfig {
+ d_model: 64,
+ d_proj: 128,
+ temperature: 0.07,
+ normalize: true,
+ };
+ let t_config = TransformerConfig {
+ n_subcarriers: 56,
+ n_keypoints: 17,
+ d_model: 64,
+ n_heads: 4,
+ n_gnn_layers: 2,
+ };
+ let mut ext = EmbeddingExtractor::new(t_config, e_config);
+ ext.extract(input)
+}
+
+#[test]
+fn native_embedding_is_128_dim_unit_norm() {
+ let emb = embed_native(&load_input());
+ assert_eq!(emb.len(), 128, "AETHER embedding must be 128-dim");
+ let norm: f32 = emb.iter().map(|x| x * x).sum::().sqrt();
+ assert!(
+ (norm - 1.0).abs() < 1e-4,
+ "embedding must be L2-normalized, got norm={norm}"
+ );
+}
+
+#[test]
+fn native_embedding_matches_committed_golden() {
+ let emb = embed_native(&load_input());
+ assert_matches_golden_vector(&emb, "aether_embedding.json");
+}
diff --git a/python/tests/aether_weights_parity.rs b/python/tests/aether_weights_parity.rs
new file mode 100644
index 00000000..ef456742
--- /dev/null
+++ b/python/tests/aether_weights_parity.rs
@@ -0,0 +1,137 @@
+//! ADR-185 §13.a — weight-loading parity: native-Rust reference half.
+//!
+//! Proves the AETHER `load_weights` path produces a deterministic, non-random
+//! embedding, and compares it to the committed golden VECTOR
+//! `tests/golden/aether_loaded_embedding.json` within tolerance. The pytest
+//! half (`tests/test_aether.py`) writes a byte-identical weight file (same
+//! formula + format) through the binding's `load_weights` and compares to the
+//! SAME golden within the same tolerance — native≈golden and binding≈golden
+//! prove the binding's weight-loading matches native, portably across arch.
+//! (See `aether_parity.rs` for why this is a tolerance compare, not a hash.)
+//!
+//! Weight formula (shared with the pytest half): `w[i] = k/65536 - 0.5` where
+//! `k = (i*1103515245 + 12345) mod 65536`. `k/65536` is a multiple of 2⁻¹⁶,
+//! exactly representable in both f32 and f64, so both languages produce
+//! byte-identical weights.
+//!
+//! File format: 8-byte magic `AETHERW1`, `u32` little-endian param count, then
+//! that many little-endian `f32`.
+//!
+//! Regenerate (only on an intentional change): delete the .json golden and
+//! re-run `cargo test --features aether --test aether_weights_parity`.
+#![cfg(feature = "aether")]
+
+use std::fs;
+use std::path::PathBuf;
+
+use wifi_densepose_aether::embedding::{EmbeddingConfig, EmbeddingExtractor};
+use wifi_densepose_aether::graph_transformer::TransformerConfig;
+
+fn golden_dir() -> PathBuf {
+ PathBuf::from(env!("CARGO_MANIFEST_DIR"))
+ .join("tests")
+ .join("golden")
+}
+
+fn load_input() -> Vec> {
+ let raw = fs::read_to_string(golden_dir().join("aether_input.json"))
+ .expect("read aether_input.json fixture");
+ let rows: Vec> = serde_json::from_str(&raw).expect("parse aether_input.json");
+ rows.into_iter()
+ .map(|row| row.into_iter().map(|x| x as f32).collect())
+ .collect()
+}
+
+/// Same default construction as `aether_parity.rs` / the Python binding default.
+fn new_extractor() -> EmbeddingExtractor {
+ let e_config = EmbeddingConfig {
+ d_model: 64,
+ d_proj: 128,
+ temperature: 0.07,
+ normalize: true,
+ };
+ let t_config = TransformerConfig {
+ n_subcarriers: 56,
+ n_keypoints: 17,
+ d_model: 64,
+ n_heads: 4,
+ n_gnn_layers: 2,
+ };
+ EmbeddingExtractor::new(t_config, e_config)
+}
+
+fn formula_weights(n: usize) -> Vec {
+ (0..n)
+ .map(|i| {
+ let k = (i as u32).wrapping_mul(1_103_515_245).wrapping_add(12_345) % 65_536;
+ k as f32 / 65_536.0 - 0.5
+ })
+ .collect()
+}
+
+fn write_weight_file(path: &PathBuf, weights: &[f32]) {
+ let mut buf = Vec::with_capacity(12 + weights.len() * 4);
+ buf.extend_from_slice(b"AETHERW1");
+ buf.extend_from_slice(&(weights.len() as u32).to_le_bytes());
+ for v in weights {
+ buf.extend_from_slice(&v.to_le_bytes());
+ }
+ fs::write(path, buf).unwrap();
+}
+
+/// Cross-architecture f32 parity tolerance; see `aether_parity.rs` and the
+/// matching constants in `tests/test_aether.py` for why this is a tolerance
+/// compare and not a byte hash.
+const PARITY_ATOL: f32 = 1e-4;
+const PARITY_RTOL: f32 = 1e-4;
+
+fn assert_matches_golden_vector(embedding: &[f32], name: &str) {
+ let path = golden_dir().join(name);
+ match fs::read_to_string(&path) {
+ Ok(raw) => {
+ let golden: Vec = serde_json::from_str(&raw).expect("parse golden vector json");
+ assert_eq!(embedding.len(), golden.len(), "{name}: length mismatch");
+ for (i, (&got, &want)) in embedding.iter().zip(&golden).enumerate() {
+ let tol = PARITY_ATOL + PARITY_RTOL * want.abs();
+ assert!(
+ (got - want).abs() <= tol,
+ "{name}: element {i} diverged beyond tolerance \
+ (got {got}, golden {want}, |Δ|={}) — real regression, not arch drift",
+ (got - want).abs()
+ );
+ }
+ }
+ Err(_) => {
+ let json = serde_json::to_string(&embedding).expect("serialize golden");
+ fs::write(&path, &json).expect("write golden vector");
+ panic!("no committed golden {name}; wrote it. Re-run to verify parity.");
+ }
+ }
+}
+
+#[test]
+fn native_loaded_embedding_matches_committed_golden() {
+ let input = load_input();
+
+ let mut ext = new_extractor();
+ let baseline = ext.extract(&input); // random Xavier init
+
+ let weights = formula_weights(ext.param_count());
+ let path = std::env::temp_dir().join(format!(
+ "aether_weights_parity_{}.bin",
+ std::process::id()
+ ));
+ write_weight_file(&path, &weights);
+ ext.load_weights(&path).expect("load_weights");
+ fs::remove_file(&path).ok();
+
+ let loaded = ext.extract(&input);
+ // Loaded weights must actually take effect.
+ assert!(
+ baseline.iter().zip(&loaded).any(|(a, b)| (a - b).abs() > 1e-6),
+ "load_weights had no effect vs the random-init baseline"
+ );
+ assert_eq!(loaded.len(), 128);
+
+ assert_matches_golden_vector(&loaded, "aether_loaded_embedding.json");
+}
diff --git a/python/tests/golden/aether_embedding.json b/python/tests/golden/aether_embedding.json
new file mode 100644
index 00000000..e8262e0d
--- /dev/null
+++ b/python/tests/golden/aether_embedding.json
@@ -0,0 +1 @@
+[-0.09882868826389313, 0.08015579730272293, 0.019888414070010185, -0.003239249112084508, -0.07265102863311768, -0.08036628365516663, -0.10324385017156601, -0.21274414658546448, 0.1503465175628662, -0.005489329807460308, 0.10834519565105438, 0.05838076397776604, -0.05911992862820625, 0.13135841488838196, -0.006811900530010462, -0.13742603361606598, -0.015311408787965775, -0.21133442223072052, 0.05134191736578941, -0.027355113998055458, -0.044147003442049026, -0.006108833476901054, -0.033326443284749985, 0.15741342306137085, 0.029073286801576614, 0.0375739224255085, 0.023920813575387, 0.07043211907148361, -0.009550352580845356, 0.028179991990327835, 0.05900105461478233, 0.056598298251628876, -0.0047074914909899235, 0.05960564315319061, 0.049969129264354706, 0.017297586426138878, -0.10153798758983612, -0.002574362326413393, 0.06392877548933029, 0.14119082689285278, -0.04484020546078682, -0.038461778312921524, -0.06095990538597107, -0.04703143611550331, 0.07692500203847885, -0.10256559401750565, -0.07250502705574036, 0.12476003915071487, -0.08511383831501007, -0.006181457545608282, 0.09957090020179749, 0.10756388306617737, -0.08597669750452042, -0.09914427250623703, -0.01648416928946972, -0.25724929571151733, -0.024403633549809456, 0.05453304573893547, -0.03141803294420242, -0.07852566242218018, 0.020048094913363457, -0.06215068697929382, 0.11997628211975098, 0.0977955237030983, -0.0652041882276535, -0.007863834500312805, -0.059089504182338715, 0.12663882970809937, 0.16099494695663452, -0.046197254210710526, 0.04186059534549713, -0.07077737897634506, -0.28093546628952026, 0.017284320667386055, 0.1626843810081482, 0.006352100986987352, -0.07779540121555328, -0.004958702251315117, 0.04892482981085777, 0.013853654265403748, 0.08351490646600723, 0.06772761791944504, -0.028758108615875244, 0.04778963327407837, -0.1131502315402031, 0.005114563275128603, -0.012307023629546165, 0.03301718831062317, 0.09168995916843414, -0.04085332900285721, 0.04984535649418831, -0.05280173197388649, -0.01752082072198391, 0.04126245900988579, -0.09206362813711166, 0.08685162663459778, 0.03651193156838417, -0.144779771566391, -0.03290265053510666, 0.15378770232200623, -0.08842422068119049, 0.12492084503173828, 0.04907738417387009, -0.03483045473694801, -0.09838201850652695, 0.04590783640742302, -0.01383654773235321, 0.03766492009162903, -0.03254647180438042, 0.12435581535100937, 0.06573979556560516, 0.055382076650857925, -0.19347889721393585, 0.0018683894304558635, 0.11095203459262848, 0.04290277138352394, -0.07855042070150375, 0.03853689134120941, -0.06062287464737892, 0.004584986716508865, -0.1223185583949089, 0.0031570768915116787, -0.10847429186105728, 0.0023399614728987217, -0.054206088185310364, -0.1367102563381195, -0.14624592661857605, 0.16953621804714203]
\ No newline at end of file
diff --git a/python/tests/golden/aether_input.json b/python/tests/golden/aether_input.json
new file mode 100644
index 00000000..80bdbc63
--- /dev/null
+++ b/python/tests/golden/aether_input.json
@@ -0,0 +1 @@
+[[0.0, 0.00390625, 0.0078125, 0.01171875, 0.015625, 0.01953125, 0.0234375, 0.02734375, 0.03125, 0.03515625, 0.0390625, 0.04296875, 0.046875, 0.05078125, 0.0546875, 0.05859375, 0.0625, 0.06640625, 0.0703125, 0.07421875, 0.078125, 0.08203125, 0.0859375, 0.08984375, 0.09375, 0.09765625, 0.1015625, 0.10546875, 0.109375, 0.11328125, 0.1171875, 0.12109375, 0.125, 0.12890625, 0.1328125, 0.13671875, 0.140625, 0.14453125, 0.1484375, 0.15234375, 0.15625, 0.16015625, 0.1640625, 0.16796875, 0.171875, 0.17578125, 0.1796875, 0.18359375, 0.1875, 0.19140625, 0.1953125, 0.19921875, 0.203125, 0.20703125, 0.2109375, 0.21484375], [0.21875, 0.22265625, 0.2265625, 0.23046875, 0.234375, 0.23828125, 0.2421875, 0.24609375, 0.25, 0.25390625, 0.2578125, 0.26171875, 0.265625, 0.26953125, 0.2734375, 0.27734375, 0.28125, 0.28515625, 0.2890625, 0.29296875, 0.296875, 0.30078125, 0.3046875, 0.30859375, 0.3125, 0.31640625, 0.3203125, 0.32421875, 0.328125, 0.33203125, 0.3359375, 0.33984375, 0.34375, 0.34765625, 0.3515625, 0.35546875, 0.359375, 0.36328125, 0.3671875, 0.37109375, 0.375, 0.37890625, 0.3828125, 0.38671875, 0.390625, 0.39453125, 0.3984375, 0.40234375, 0.40625, 0.41015625, 0.4140625, 0.41796875, 0.421875, 0.42578125, 0.4296875, 0.43359375], [0.4375, 0.44140625, 0.4453125, 0.44921875, 0.453125, 0.45703125, 0.4609375, 0.46484375, 0.46875, 0.47265625, 0.4765625, 0.48046875, 0.484375, 0.48828125, 0.4921875, 0.49609375, 0.5, 0.50390625, 0.5078125, 0.51171875, 0.515625, 0.51953125, 0.5234375, 0.52734375, 0.53125, 0.53515625, 0.5390625, 0.54296875, 0.546875, 0.55078125, 0.5546875, 0.55859375, 0.5625, 0.56640625, 0.5703125, 0.57421875, 0.578125, 0.58203125, 0.5859375, 0.58984375, 0.59375, 0.59765625, 0.6015625, 0.60546875, 0.609375, 0.61328125, 0.6171875, 0.62109375, 0.625, 0.62890625, 0.6328125, 0.63671875, 0.640625, 0.64453125, 0.6484375, 0.65234375], [0.65625, 0.66015625, 0.6640625, 0.66796875, 0.671875, 0.67578125, 0.6796875, 0.68359375, 0.6875, 0.69140625, 0.6953125, 0.69921875, 0.703125, 0.70703125, 0.7109375, 0.71484375, 0.71875, 0.72265625, 0.7265625, 0.73046875, 0.734375, 0.73828125, 0.7421875, 0.74609375, 0.75, 0.75390625, 0.7578125, 0.76171875, 0.765625, 0.76953125, 0.7734375, 0.77734375, 0.78125, 0.78515625, 0.7890625, 0.79296875, 0.796875, 0.80078125, 0.8046875, 0.80859375, 0.8125, 0.81640625, 0.8203125, 0.82421875, 0.828125, 0.83203125, 0.8359375, 0.83984375, 0.84375, 0.84765625, 0.8515625, 0.85546875, 0.859375, 0.86328125, 0.8671875, 0.87109375], [0.875, 0.87890625, 0.8828125, 0.88671875, 0.890625, 0.89453125, 0.8984375, 0.90234375, 0.90625, 0.91015625, 0.9140625, 0.91796875, 0.921875, 0.92578125, 0.9296875, 0.93359375, 0.9375, 0.94140625, 0.9453125, 0.94921875, 0.953125, 0.95703125, 0.9609375, 0.96484375, 0.96875, 0.97265625, 0.9765625, 0.98046875, 0.984375, 0.98828125, 0.9921875, 0.99609375, 0.0, 0.00390625, 0.0078125, 0.01171875, 0.015625, 0.01953125, 0.0234375, 0.02734375, 0.03125, 0.03515625, 0.0390625, 0.04296875, 0.046875, 0.05078125, 0.0546875, 0.05859375, 0.0625, 0.06640625, 0.0703125, 0.07421875, 0.078125, 0.08203125, 0.0859375, 0.08984375], [0.09375, 0.09765625, 0.1015625, 0.10546875, 0.109375, 0.11328125, 0.1171875, 0.12109375, 0.125, 0.12890625, 0.1328125, 0.13671875, 0.140625, 0.14453125, 0.1484375, 0.15234375, 0.15625, 0.16015625, 0.1640625, 0.16796875, 0.171875, 0.17578125, 0.1796875, 0.18359375, 0.1875, 0.19140625, 0.1953125, 0.19921875, 0.203125, 0.20703125, 0.2109375, 0.21484375, 0.21875, 0.22265625, 0.2265625, 0.23046875, 0.234375, 0.23828125, 0.2421875, 0.24609375, 0.25, 0.25390625, 0.2578125, 0.26171875, 0.265625, 0.26953125, 0.2734375, 0.27734375, 0.28125, 0.28515625, 0.2890625, 0.29296875, 0.296875, 0.30078125, 0.3046875, 0.30859375], [0.3125, 0.31640625, 0.3203125, 0.32421875, 0.328125, 0.33203125, 0.3359375, 0.33984375, 0.34375, 0.34765625, 0.3515625, 0.35546875, 0.359375, 0.36328125, 0.3671875, 0.37109375, 0.375, 0.37890625, 0.3828125, 0.38671875, 0.390625, 0.39453125, 0.3984375, 0.40234375, 0.40625, 0.41015625, 0.4140625, 0.41796875, 0.421875, 0.42578125, 0.4296875, 0.43359375, 0.4375, 0.44140625, 0.4453125, 0.44921875, 0.453125, 0.45703125, 0.4609375, 0.46484375, 0.46875, 0.47265625, 0.4765625, 0.48046875, 0.484375, 0.48828125, 0.4921875, 0.49609375, 0.5, 0.50390625, 0.5078125, 0.51171875, 0.515625, 0.51953125, 0.5234375, 0.52734375], [0.53125, 0.53515625, 0.5390625, 0.54296875, 0.546875, 0.55078125, 0.5546875, 0.55859375, 0.5625, 0.56640625, 0.5703125, 0.57421875, 0.578125, 0.58203125, 0.5859375, 0.58984375, 0.59375, 0.59765625, 0.6015625, 0.60546875, 0.609375, 0.61328125, 0.6171875, 0.62109375, 0.625, 0.62890625, 0.6328125, 0.63671875, 0.640625, 0.64453125, 0.6484375, 0.65234375, 0.65625, 0.66015625, 0.6640625, 0.66796875, 0.671875, 0.67578125, 0.6796875, 0.68359375, 0.6875, 0.69140625, 0.6953125, 0.69921875, 0.703125, 0.70703125, 0.7109375, 0.71484375, 0.71875, 0.72265625, 0.7265625, 0.73046875, 0.734375, 0.73828125, 0.7421875, 0.74609375]]
\ No newline at end of file
diff --git a/python/tests/golden/aether_loaded_embedding.json b/python/tests/golden/aether_loaded_embedding.json
new file mode 100644
index 00000000..f7838e6c
--- /dev/null
+++ b/python/tests/golden/aether_loaded_embedding.json
@@ -0,0 +1 @@
+[0.10761479288339615, 0.05284854769706726, -0.22418244183063507, -0.015137949027121067, -0.03409634903073311, 0.17326673865318298, 0.11726372689008713, -0.07647006958723068, 0.034259773790836334, -0.11302468180656433, 0.05575002729892731, -0.000968325708527118, 0.12398994714021683, 0.010035112500190735, -0.024740785360336304, 0.03396096080541611, -0.13298068940639496, -0.026409678161144257, -0.00981970690190792, 0.1098528727889061, -0.015091875568032265, -0.06820717453956604, -0.08815668523311615, -0.13947811722755432, 0.12845416367053986, 0.007558434270322323, 0.09278517216444016, 0.023929834365844727, -0.15709640085697174, 0.20790696144104004, -0.0814460963010788, 0.035465411841869354, 0.0621788427233696, -0.022502727806568146, 0.1301409900188446, -0.09830718487501144, -0.04854566603899002, -0.060892220586538315, -0.0039014117792248726, 0.08287017792463303, 0.0968087762594223, -0.05596396327018738, -0.18289180099964142, 0.07555137574672699, -0.0711054727435112, 0.017438538372516632, -0.07017677277326584, 0.08828858286142349, 0.09126422554254532, -0.18576686084270477, -0.08681167662143707, 0.006826931145042181, 0.13380175828933716, 0.15818704664707184, -0.03554683178663254, -0.02037874236702919, -0.0721014142036438, 0.09667330235242844, 0.03744731843471527, -0.019951190799474716, 0.05095838010311127, 0.0136749017983675, -0.04109140485525131, -0.09205742925405502, -0.06173047423362732, 0.028595957905054092, 0.07932677119970322, 0.025831375271081924, -0.029791485518217087, -0.047233421355485916, -0.0985548198223114, 0.056721169501543045, 0.04597408324480057, 0.05116378515958786, 0.06485309451818466, -0.11868073791265488, 0.1164744570851326, -0.040522847324609756, -0.12034964561462402, 0.10310209542512894, 0.01842050999403, 0.16855661571025848, -0.05738396197557449, -0.17958901822566986, -0.022476589307188988, 0.03451419249176979, 0.034107644110918045, 0.13773204386234283, -0.07001013308763504, -0.14196854829788208, 0.11647462099790573, -0.03268979489803314, 0.058361802250146866, -0.029253516346216202, 0.1251915991306305, 0.13218750059604645, -0.14484354853630066, -0.1424856185913086, 0.045242637395858765, 0.039408858865499496, 0.199110209941864, 0.0028688418678939342, -0.14990390837192535, -0.031178129836916924, -0.000643149483948946, 0.0783705934882164, 0.02097206376492977, -0.058810342103242874, 0.05459814518690109, -0.00016812187095638365, -0.1195453405380249, -0.06815463304519653, 0.03833199664950371, 0.12025003135204315, 0.06424705684185028, 0.011131756007671356, -0.006310137454420328, -0.06013919785618782, 0.061071064323186874, 0.018219128251075745, 0.08957944065332413, -0.04298160970211029, -0.07775749266147614, -0.01905573531985283, -0.002107167150825262, -0.0794263556599617, -0.005148472264409065, 0.05683618783950806]
\ No newline at end of file
diff --git a/python/tests/golden/mat_input.json b/python/tests/golden/mat_input.json
new file mode 100644
index 00000000..79d3f65c
--- /dev/null
+++ b/python/tests/golden/mat_input.json
@@ -0,0 +1 @@
+{"stream": [{"amplitude": [10.0, 10.05, 10.1, 10.15, 10.2, 10.25, 10.3, 10.35, 10.4, 10.45, 10.5, 10.55, 10.6, 10.65, 10.7, 10.75, 10.8, 10.85, 10.9, 10.95, 11.0, 11.05, 11.1, 11.15, 11.2, 11.25, 11.3, 11.35, 11.4, 11.45, 11.5, 11.55, 11.6, 11.65, 11.7, 11.75, 11.8, 11.85, 11.9, 11.95, 12.0, 12.05, 12.1, 12.15, 12.2, 12.25, 12.3, 12.35, 12.4, 12.45, 12.5, 12.55, 12.6, 12.65, 12.7, 12.75], "phase": [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3, 0.31, 0.32, 0.33, 0.34, 0.35000000000000003, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41000000000000003, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47000000000000003, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55]}, {"amplitude": [10.298653992442432, 10.348653992442433, 10.398653992442432, 10.448653992442432, 10.498653992442431, 10.548653992442432, 10.598653992442433, 10.648653992442432, 10.698653992442432, 10.748653992442431, 10.798653992442432, 10.848653992442433, 10.898653992442432, 10.948653992442432, 10.998653992442431, 11.048653992442432, 11.098653992442433, 11.148653992442432, 11.198653992442432, 11.248653992442431, 11.298653992442432, 11.348653992442433, 11.398653992442432, 11.448653992442432, 11.498653992442431, 11.548653992442432, 11.598653992442433, 11.648653992442432, 11.698653992442432, 11.748653992442431, 11.798653992442432, 11.848653992442433, 11.898653992442432, 11.948653992442432, 11.998653992442431, 12.048653992442432, 12.098653992442433, 12.148653992442432, 12.198653992442432, 12.248653992442431, 12.298653992442432, 12.348653992442433, 12.398653992442432, 12.448653992442432, 12.498653992442431, 12.548653992442432, 12.598653992442433, 12.648653992442432, 12.698653992442432, 12.748653992442431, 12.798653992442432, 12.848653992442433, 12.898653992442432, 12.948653992442432, 12.998653992442431, 13.048653992442432], "phase": [0.009410831331851433, 0.01941083133185143, 0.029410831331851434, 0.03941083133185143, 0.04941083133185144, 0.05941083133185143, 0.06941083133185143, 0.07941083133185144, 0.08941083133185143, 0.09941083133185143, 0.10941083133185144, 0.11941083133185143, 0.12941083133185144, 0.13941083133185145, 0.14941083133185146, 0.15941083133185144, 0.16941083133185145, 0.17941083133185146, 0.18941083133185144, 0.19941083133185145, 0.20941083133185145, 0.21941083133185144, 0.22941083133185144, 0.23941083133185145, 0.24941083133185143, 0.25941083133185144, 0.26941083133185145, 0.27941083133185146, 0.28941083133185147, 0.2994108313318514, 0.30941083133185143, 0.31941083133185144, 0.32941083133185145, 0.33941083133185146, 0.34941083133185147, 0.3594108313318515, 0.36941083133185143, 0.37941083133185144, 0.38941083133185145, 0.39941083133185146, 0.40941083133185147, 0.4194108313318515, 0.42941083133185143, 0.43941083133185144, 0.44941083133185145, 0.45941083133185145, 0.46941083133185146, 0.4794108313318515, 0.4894108313318514, 0.49941083133185143, 0.5094108313318514, 0.5194108313318514, 0.5294108313318514, 0.5394108313318514, 0.5494108313318514, 0.5594108313318514]}, {"amplitude": [10.580126760950057, 10.630126760950057, 10.680126760950056, 10.730126760950057, 10.780126760950056, 10.830126760950057, 10.880126760950057, 10.930126760950056, 10.980126760950057, 11.030126760950056, 11.080126760950057, 11.130126760950057, 11.180126760950056, 11.230126760950057, 11.280126760950056, 11.330126760950057, 11.380126760950057, 11.430126760950056, 11.480126760950057, 11.530126760950056, 11.580126760950057, 11.630126760950057, 11.680126760950056, 11.730126760950057, 11.780126760950056, 11.830126760950057, 11.880126760950057, 11.930126760950056, 11.980126760950057, 12.030126760950056, 12.080126760950057, 12.130126760950057, 12.180126760950056, 12.230126760950057, 12.280126760950056, 12.330126760950057, 12.380126760950057, 12.430126760950056, 12.480126760950057, 12.530126760950056, 12.580126760950057, 12.630126760950057, 12.680126760950056, 12.730126760950057, 12.780126760950056, 12.830126760950057, 12.880126760950057, 12.930126760950056, 12.980126760950057, 13.030126760950056, 13.080126760950057, 13.130126760950057, 13.180126760950056, 13.230126760950057, 13.280126760950056, 13.330126760950057], "phase": [0.018738131458572463, 0.028738131458572465, 0.03873813145857247, 0.04873813145857246, 0.058738131458572464, 0.06873813145857247, 0.07873813145857246, 0.08873813145857247, 0.09873813145857246, 0.10873813145857246, 0.11873813145857247, 0.12873813145857246, 0.13873813145857244, 0.14873813145857245, 0.15873813145857246, 0.16873813145857247, 0.17873813145857248, 0.1887381314585725, 0.19873813145857244, 0.20873813145857245, 0.21873813145857246, 0.22873813145857247, 0.23873813145857248, 0.2487381314585725, 0.25873813145857244, 0.26873813145857245, 0.27873813145857246, 0.28873813145857247, 0.2987381314585725, 0.30873813145857243, 0.31873813145857244, 0.32873813145857245, 0.33873813145857246, 0.34873813145857246, 0.3587381314585725, 0.3687381314585725, 0.37873813145857244, 0.38873813145857244, 0.39873813145857245, 0.40873813145857246, 0.41873813145857247, 0.4287381314585725, 0.43873813145857243, 0.44873813145857244, 0.45873813145857245, 0.46873813145857246, 0.47873813145857247, 0.4887381314585725, 0.49873813145857243, 0.5087381314585725, 0.5187381314585725, 0.5287381314585725, 0.5387381314585725, 0.5487381314585725, 0.5587381314585725, 0.5687381314585725]}, {"amplitude": [10.829430327818265, 10.879430327818266, 10.929430327818265, 10.979430327818266, 11.029430327818265, 11.079430327818265, 11.129430327818266, 11.179430327818265, 11.229430327818266, 11.279430327818265, 11.329430327818265, 11.379430327818266, 11.429430327818265, 11.479430327818266, 11.529430327818265, 11.579430327818265, 11.629430327818266, 11.679430327818265, 11.729430327818266, 11.779430327818265, 11.829430327818265, 11.879430327818266, 11.929430327818265, 11.979430327818266, 12.029430327818265, 12.079430327818265, 12.129430327818266, 12.179430327818265, 12.229430327818266, 12.279430327818265, 12.329430327818265, 12.379430327818266, 12.429430327818265, 12.479430327818266, 12.529430327818265, 12.579430327818265, 12.629430327818266, 12.679430327818265, 12.729430327818266, 12.779430327818265, 12.829430327818265, 12.879430327818266, 12.929430327818265, 12.979430327818266, 13.029430327818265, 13.079430327818265, 13.129430327818266, 13.179430327818265, 13.229430327818266, 13.279430327818265, 13.329430327818265, 13.379430327818266, 13.429430327818265, 13.479430327818266, 13.529430327818265, 13.579430327818265], "phase": [0.02789911060392293, 0.03789911060392293, 0.047899110603922934, 0.05789911060392293, 0.06789911060392292, 0.07789911060392293, 0.08789911060392293, 0.09789911060392294, 0.10789911060392293, 0.11789911060392293, 0.12789911060392295, 0.13789911060392293, 0.1478991106039229, 0.15789911060392292, 0.16789911060392293, 0.17789911060392294, 0.18789911060392295, 0.19789911060392296, 0.2078991106039229, 0.21789911060392292, 0.22789911060392293, 0.23789911060392294, 0.24789911060392295, 0.25789911060392295, 0.2678991106039229, 0.2778991106039229, 0.2878991106039229, 0.29789911060392293, 0.30789911060392294, 0.3178991106039229, 0.3278991106039229, 0.3378991106039229, 0.3478991106039229, 0.35789911060392293, 0.36789911060392294, 0.37789911060392295, 0.3878991106039229, 0.3978991106039229, 0.4078991106039229, 0.41789911060392293, 0.42789911060392294, 0.43789911060392295, 0.4478991106039229, 0.4578991106039229, 0.4678991106039229, 0.4778991106039229, 0.48789911060392294, 0.49789911060392295, 0.5078991106039229, 0.5178991106039229, 0.5278991106039229, 0.5378991106039229, 0.5478991106039229, 0.5578991106039229, 0.567899110603923, 0.577899110603923]}, {"amplitude": [11.035657123897838, 11.085657123897839, 11.135657123897838, 11.185657123897839, 11.235657123897838, 11.285657123897838, 11.335657123897839, 11.385657123897838, 11.435657123897839, 11.485657123897838, 11.535657123897838, 11.585657123897839, 11.635657123897838, 11.685657123897839, 11.735657123897838, 11.785657123897838, 11.835657123897839, 11.885657123897838, 11.935657123897839, 11.985657123897838, 12.035657123897838, 12.085657123897839, 12.135657123897838, 12.185657123897839, 12.235657123897838, 12.285657123897838, 12.335657123897839, 12.385657123897838, 12.435657123897839, 12.485657123897838, 12.535657123897838, 12.585657123897839, 12.635657123897838, 12.685657123897839, 12.735657123897838, 12.785657123897838, 12.835657123897839, 12.885657123897838, 12.935657123897839, 12.985657123897838, 13.035657123897838, 13.085657123897839, 13.135657123897838, 13.185657123897839, 13.235657123897838, 13.285657123897838, 13.335657123897839, 13.385657123897838, 13.435657123897839, 13.485657123897838, 13.535657123897838, 13.585657123897839, 13.635657123897838, 13.685657123897839, 13.735657123897838, 13.785657123897838], "phase": [0.0368124552684678, 0.0468124552684678, 0.0568124552684678, 0.0668124552684678, 0.0768124552684678, 0.0868124552684678, 0.0968124552684678, 0.1068124552684678, 0.1168124552684678, 0.1268124552684678, 0.1368124552684678, 0.1468124552684678, 0.1568124552684678, 0.1668124552684678, 0.1768124552684678, 0.1868124552684678, 0.1968124552684678, 0.2068124552684678, 0.2168124552684678, 0.2268124552684678, 0.2368124552684678, 0.2468124552684678, 0.2568124552684678, 0.2668124552684678, 0.27681245526846776, 0.28681245526846777, 0.2968124552684678, 0.3068124552684678, 0.3168124552684678, 0.3268124552684678, 0.3368124552684678, 0.3468124552684678, 0.35681245526846783, 0.36681245526846784, 0.37681245526846785, 0.38681245526846786, 0.39681245526846776, 0.40681245526846777, 0.4168124552684678, 0.4268124552684678, 0.4368124552684678, 0.4468124552684678, 0.4568124552684678, 0.4668124552684678, 0.4768124552684678, 0.48681245526846784, 0.49681245526846785, 0.5068124552684679, 0.5168124552684678, 0.5268124552684678, 0.5368124552684678, 0.5468124552684678, 0.5568124552684678, 0.5668124552684678, 0.5768124552684678, 0.5868124552684678]}, {"amplitude": [11.19329795436764, 11.243297954367641, 11.29329795436764, 11.34329795436764, 11.39329795436764, 11.44329795436764, 11.493297954367641, 11.54329795436764, 11.59329795436764, 11.64329795436764, 11.69329795436764, 11.743297954367641, 11.79329795436764, 11.84329795436764, 11.89329795436764, 11.94329795436764, 11.993297954367641, 12.04329795436764, 12.09329795436764, 12.14329795436764, 12.19329795436764, 12.243297954367641, 12.29329795436764, 12.34329795436764, 12.39329795436764, 12.44329795436764, 12.493297954367641, 12.54329795436764, 12.59329795436764, 12.64329795436764, 12.69329795436764, 12.743297954367641, 12.79329795436764, 12.84329795436764, 12.89329795436764, 12.94329795436764, 12.993297954367641, 13.04329795436764, 13.09329795436764, 13.14329795436764, 13.19329795436764, 13.243297954367641, 13.29329795436764, 13.34329795436764, 13.39329795436764, 13.44329795436764, 13.493297954367641, 13.54329795436764, 13.59329795436764, 13.64329795436764, 13.69329795436764, 13.743297954367641, 13.79329795436764, 13.84329795436764, 13.89329795436764, 13.94329795436764], "phase": [0.04539904997395468, 0.05539904997395468, 0.06539904997395468, 0.07539904997395468, 0.08539904997395467, 0.09539904997395468, 0.10539904997395468, 0.11539904997395468, 0.12539904997395468, 0.1353990499739547, 0.1453990499739547, 0.15539904997395468, 0.16539904997395466, 0.17539904997395467, 0.18539904997395468, 0.19539904997395469, 0.2053990499739547, 0.2153990499739547, 0.22539904997395466, 0.23539904997395467, 0.24539904997395467, 0.2553990499739547, 0.2653990499739547, 0.2753990499739547, 0.28539904997395465, 0.29539904997395466, 0.3053990499739547, 0.3153990499739547, 0.3253990499739547, 0.33539904997395464, 0.34539904997395465, 0.35539904997395466, 0.36539904997395467, 0.3753990499739547, 0.3853990499739547, 0.3953990499739547, 0.40539904997395465, 0.41539904997395466, 0.42539904997395467, 0.4353990499739547, 0.4453990499739547, 0.4553990499739547, 0.46539904997395465, 0.47539904997395466, 0.48539904997395467, 0.4953990499739547, 0.5053990499739547, 0.5153990499739547, 0.5253990499739547, 0.5353990499739547, 0.5453990499739547, 0.5553990499739547, 0.5653990499739547, 0.5753990499739547, 0.5853990499739548, 0.5953990499739548]}, {"amplitude": [11.30280756279073, 11.35280756279073, 11.402807562790729, 11.45280756279073, 11.502807562790728, 11.55280756279073, 11.60280756279073, 11.652807562790729, 11.70280756279073, 11.752807562790728, 11.80280756279073, 11.85280756279073, 11.902807562790729, 11.95280756279073, 12.002807562790728, 12.05280756279073, 12.10280756279073, 12.152807562790729, 12.20280756279073, 12.252807562790728, 12.30280756279073, 12.35280756279073, 12.402807562790729, 12.45280756279073, 12.502807562790728, 12.55280756279073, 12.60280756279073, 12.652807562790729, 12.70280756279073, 12.752807562790728, 12.80280756279073, 12.85280756279073, 12.902807562790729, 12.95280756279073, 13.002807562790728, 13.05280756279073, 13.10280756279073, 13.152807562790729, 13.20280756279073, 13.252807562790728, 13.30280756279073, 13.35280756279073, 13.402807562790729, 13.45280756279073, 13.502807562790728, 13.55280756279073, 13.60280756279073, 13.652807562790729, 13.70280756279073, 13.752807562790728, 13.80280756279073, 13.85280756279073, 13.902807562790729, 13.95280756279073, 14.002807562790728, 14.05280756279073], "phase": [0.05358267949789967, 0.06358267949789967, 0.07358267949789966, 0.08358267949789966, 0.09358267949789967, 0.10358267949789968, 0.11358267949789966, 0.12358267949789967, 0.13358267949789968, 0.14358267949789966, 0.15358267949789967, 0.16358267949789967, 0.17358267949789966, 0.18358267949789966, 0.19358267949789967, 0.20358267949789965, 0.21358267949789966, 0.22358267949789967, 0.23358267949789965, 0.24358267949789966, 0.2535826794978997, 0.26358267949789965, 0.27358267949789966, 0.28358267949789967, 0.2935826794978997, 0.3035826794978997, 0.3135826794978997, 0.3235826794978997, 0.3335826794978997, 0.34358267949789967, 0.3535826794978997, 0.3635826794978997, 0.3735826794978997, 0.3835826794978997, 0.3935826794978997, 0.4035826794978997, 0.4135826794978997, 0.4235826794978997, 0.4335826794978997, 0.4435826794978997, 0.4535826794978997, 0.4635826794978997, 0.4735826794978997, 0.4835826794978997, 0.4935826794978997, 0.5035826794978997, 0.5135826794978997, 0.5235826794978997, 0.5335826794978996, 0.5435826794978996, 0.5535826794978996, 0.5635826794978996, 0.5735826794978997, 0.5835826794978997, 0.5935826794978997, 0.6035826794978997]}, {"amplitude": [11.370340209536467, 11.420340209536468, 11.470340209536467, 11.520340209536467, 11.570340209536466, 11.620340209536467, 11.670340209536468, 11.720340209536467, 11.770340209536467, 11.820340209536466, 11.870340209536467, 11.920340209536468, 11.970340209536467, 12.020340209536467, 12.070340209536466, 12.120340209536467, 12.170340209536468, 12.220340209536467, 12.270340209536467, 12.320340209536466, 12.370340209536467, 12.420340209536468, 12.470340209536467, 12.520340209536467, 12.570340209536466, 12.620340209536467, 12.670340209536468, 12.720340209536467, 12.770340209536467, 12.820340209536466, 12.870340209536467, 12.920340209536468, 12.970340209536467, 13.020340209536467, 13.070340209536466, 13.120340209536467, 13.170340209536468, 13.220340209536467, 13.270340209536467, 13.320340209536466, 13.370340209536467, 13.420340209536468, 13.470340209536467, 13.520340209536467, 13.570340209536466, 13.620340209536467, 13.670340209536468, 13.720340209536467, 13.770340209536467, 13.820340209536466, 13.870340209536467, 13.920340209536468, 13.970340209536467, 14.020340209536467, 14.070340209536466, 14.120340209536467], "phase": [0.06129070536529764, 0.07129070536529764, 0.08129070536529764, 0.09129070536529764, 0.10129070536529763, 0.11129070536529764, 0.12129070536529764, 0.13129070536529763, 0.14129070536529764, 0.15129070536529765, 0.16129070536529766, 0.17129070536529764, 0.18129070536529762, 0.19129070536529763, 0.20129070536529764, 0.21129070536529765, 0.22129070536529766, 0.23129070536529767, 0.24129070536529762, 0.25129070536529763, 0.26129070536529764, 0.27129070536529765, 0.28129070536529766, 0.29129070536529766, 0.3012907053652976, 0.3112907053652976, 0.32129070536529764, 0.33129070536529764, 0.34129070536529765, 0.3512907053652976, 0.3612907053652976, 0.3712907053652976, 0.38129070536529763, 0.39129070536529764, 0.40129070536529765, 0.41129070536529766, 0.4212907053652976, 0.4312907053652976, 0.44129070536529763, 0.45129070536529764, 0.46129070536529765, 0.47129070536529766, 0.4812907053652976, 0.4912907053652976, 0.5012907053652976, 0.5112907053652976, 0.5212907053652976, 0.5312907053652977, 0.5412907053652977, 0.5512907053652977, 0.5612907053652977, 0.5712907053652977, 0.5812907053652977, 0.5912907053652977, 0.6012907053652977, 0.6112907053652977]}, {"amplitude": [11.406694181926667, 11.456694181926668, 11.506694181926669, 11.55669418192667, 11.606694181926667, 11.656694181926667, 11.706694181926668, 11.756694181926669, 11.80669418192667, 11.856694181926667, 11.906694181926667, 11.956694181926668, 12.006694181926669, 12.05669418192667, 12.106694181926667, 12.156694181926667, 12.206694181926668, 12.256694181926669, 12.30669418192667, 12.356694181926667, 12.406694181926667, 12.456694181926668, 12.506694181926669, 12.55669418192667, 12.606694181926667, 12.656694181926667, 12.706694181926668, 12.756694181926669, 12.80669418192667, 12.856694181926667, 12.906694181926667, 12.956694181926668, 13.006694181926669, 13.05669418192667, 13.106694181926667, 13.156694181926667, 13.206694181926668, 13.256694181926669, 13.30669418192667, 13.356694181926667, 13.406694181926667, 13.456694181926668, 13.506694181926669, 13.55669418192667, 13.606694181926667, 13.656694181926667, 13.706694181926668, 13.756694181926669, 13.80669418192667, 13.856694181926667, 13.906694181926667, 13.956694181926668, 14.006694181926669, 14.05669418192667, 14.106694181926667, 14.156694181926667], "phase": [0.06845471059286888, 0.07845471059286888, 0.08845471059286888, 0.09845471059286888, 0.10845471059286887, 0.11845471059286888, 0.1284547105928689, 0.1384547105928689, 0.14845471059286888, 0.15845471059286886, 0.16845471059286887, 0.17845471059286888, 0.1884547105928689, 0.1984547105928689, 0.2084547105928689, 0.21845471059286886, 0.22845471059286887, 0.23845471059286888, 0.2484547105928689, 0.2584547105928689, 0.2684547105928689, 0.27845471059286886, 0.28845471059286887, 0.2984547105928689, 0.3084547105928689, 0.3184547105928689, 0.3284547105928689, 0.3384547105928689, 0.3484547105928689, 0.3584547105928689, 0.3684547105928689, 0.3784547105928689, 0.3884547105928689, 0.3984547105928689, 0.4084547105928689, 0.41845471059286893, 0.4284547105928689, 0.4384547105928689, 0.4484547105928689, 0.4584547105928689, 0.4684547105928689, 0.4784547105928689, 0.4884547105928689, 0.4984547105928689, 0.5084547105928688, 0.5184547105928689, 0.5284547105928689, 0.5384547105928689, 0.5484547105928689, 0.5584547105928689, 0.5684547105928689, 0.5784547105928689, 0.5884547105928689, 0.5984547105928689, 0.6084547105928689, 0.6184547105928689]}, {"amplitude": [11.425615173111462, 11.475615173111462, 11.525615173111461, 11.575615173111462, 11.625615173111461, 11.675615173111462, 11.725615173111462, 11.775615173111461, 11.825615173111462, 11.875615173111461, 11.925615173111462, 11.975615173111462, 12.025615173111461, 12.075615173111462, 12.125615173111461, 12.175615173111462, 12.225615173111462, 12.275615173111461, 12.325615173111462, 12.375615173111461, 12.425615173111462, 12.475615173111462, 12.525615173111461, 12.575615173111462, 12.625615173111461, 12.675615173111462, 12.725615173111462, 12.775615173111461, 12.825615173111462, 12.875615173111461, 12.925615173111462, 12.975615173111462, 13.025615173111461, 13.075615173111462, 13.125615173111461, 13.175615173111462, 13.225615173111462, 13.275615173111461, 13.325615173111462, 13.375615173111461, 13.425615173111462, 13.475615173111462, 13.525615173111461, 13.575615173111462, 13.625615173111461, 13.675615173111462, 13.725615173111462, 13.775615173111461, 13.825615173111462, 13.875615173111461, 13.925615173111462, 13.975615173111462, 14.025615173111461, 14.075615173111462, 14.125615173111461, 14.175615173111462], "phase": [0.07501110696304596, 0.08501110696304595, 0.09501110696304596, 0.10501110696304596, 0.11501110696304595, 0.12501110696304596, 0.13501110696304597, 0.14501110696304598, 0.15501110696304596, 0.16501110696304594, 0.17501110696304595, 0.18501110696304596, 0.19501110696304597, 0.20501110696304597, 0.21501110696304598, 0.22501110696304594, 0.23501110696304595, 0.24501110696304595, 0.25501110696304596, 0.265011106963046, 0.275011106963046, 0.28501110696304593, 0.29501110696304594, 0.30501110696304595, 0.31501110696304596, 0.32501110696304597, 0.335011106963046, 0.345011106963046, 0.355011106963046, 0.36501110696304595, 0.37501110696304596, 0.38501110696304597, 0.395011106963046, 0.405011106963046, 0.415011106963046, 0.425011106963046, 0.43501110696304596, 0.44501110696304597, 0.455011106963046, 0.465011106963046, 0.475011106963046, 0.485011106963046, 0.49501110696304595, 0.505011106963046, 0.515011106963046, 0.525011106963046, 0.535011106963046, 0.545011106963046, 0.5550111069630459, 0.5650111069630459, 0.5750111069630459, 0.5850111069630459, 0.5950111069630459, 0.6050111069630459, 0.615011106963046, 0.625011106963046]}, {"amplitude": [11.441698413062152, 11.491698413062153, 11.541698413062152, 11.591698413062153, 11.641698413062151, 11.691698413062152, 11.741698413062153, 11.791698413062152, 11.841698413062153, 11.891698413062151, 11.941698413062152, 11.991698413062153, 12.041698413062152, 12.091698413062153, 12.141698413062151, 12.191698413062152, 12.241698413062153, 12.291698413062152, 12.341698413062153, 12.391698413062151, 12.441698413062152, 12.491698413062153, 12.541698413062152, 12.591698413062153, 12.641698413062151, 12.691698413062152, 12.741698413062153, 12.791698413062152, 12.841698413062153, 12.891698413062151, 12.941698413062152, 12.991698413062153, 13.041698413062152, 13.091698413062153, 13.141698413062151, 13.191698413062152, 13.241698413062153, 13.291698413062152, 13.341698413062153, 13.391698413062151, 13.441698413062152, 13.491698413062153, 13.541698413062152, 13.591698413062153, 13.641698413062151, 13.691698413062152, 13.741698413062153, 13.791698413062152, 13.841698413062153, 13.891698413062151, 13.941698413062152, 13.991698413062153, 14.041698413062152, 14.091698413062153, 14.141698413062151, 14.191698413062152], "phase": [0.08090169943749476, 0.09090169943749475, 0.10090169943749476, 0.11090169943749476, 0.12090169943749476, 0.13090169943749475, 0.14090169943749475, 0.15090169943749476, 0.16090169943749477, 0.17090169943749475, 0.18090169943749476, 0.19090169943749474, 0.20090169943749475, 0.21090169943749476, 0.22090169943749477, 0.23090169943749475, 0.24090169943749476, 0.25090169943749474, 0.26090169943749475, 0.27090169943749476, 0.28090169943749477, 0.2909016994374948, 0.3009016994374948, 0.3109016994374948, 0.32090169943749475, 0.33090169943749476, 0.34090169943749477, 0.3509016994374948, 0.3609016994374948, 0.37090169943749474, 0.38090169943749475, 0.39090169943749475, 0.40090169943749476, 0.41090169943749477, 0.4209016994374948, 0.4309016994374948, 0.44090169943749474, 0.45090169943749475, 0.46090169943749476, 0.47090169943749477, 0.4809016994374948, 0.4909016994374948, 0.5009016994374947, 0.5109016994374947, 0.5209016994374948, 0.5309016994374948, 0.5409016994374948, 0.5509016994374948, 0.5609016994374947, 0.5709016994374947, 0.5809016994374947, 0.5909016994374947, 0.6009016994374947, 0.6109016994374947, 0.6209016994374947, 0.6309016994374947]}, {"amplitude": [11.468185676357283, 11.518185676357284, 11.568185676357281, 11.618185676357282, 11.668185676357282, 11.718185676357283, 11.768185676357284, 11.818185676357281, 11.868185676357282, 11.918185676357282, 11.968185676357283, 12.018185676357284, 12.068185676357281, 12.118185676357282, 12.168185676357282, 12.218185676357283, 12.268185676357284, 12.318185676357281, 12.368185676357282, 12.418185676357282, 12.468185676357283, 12.518185676357284, 12.568185676357281, 12.618185676357282, 12.668185676357282, 12.718185676357283, 12.768185676357284, 12.818185676357281, 12.868185676357282, 12.918185676357282, 12.968185676357283, 13.018185676357284, 13.068185676357281, 13.118185676357282, 13.168185676357282, 13.218185676357283, 13.268185676357284, 13.318185676357281, 13.368185676357282, 13.418185676357282, 13.468185676357283, 13.518185676357284, 13.568185676357281, 13.618185676357282, 13.668185676357282, 13.718185676357283, 13.768185676357284, 13.818185676357281, 13.868185676357282, 13.918185676357282, 13.968185676357283, 14.018185676357284, 14.068185676357281, 14.118185676357282, 14.168185676357282, 14.218185676357283], "phase": [0.08607420270039437, 0.09607420270039436, 0.10607420270039437, 0.11607420270039437, 0.12607420270039438, 0.1360742027003944, 0.14607420270039437, 0.15607420270039438, 0.16607420270039436, 0.17607420270039437, 0.18607420270039438, 0.19607420270039438, 0.20607420270039437, 0.21607420270039437, 0.22607420270039438, 0.23607420270039436, 0.24607420270039437, 0.2560742027003944, 0.2660742027003944, 0.2760742027003944, 0.2860742027003944, 0.29607420270039436, 0.30607420270039437, 0.3160742027003944, 0.32607420270039433, 0.33607420270039434, 0.34607420270039435, 0.35607420270039436, 0.36607420270039437, 0.3760742027003944, 0.3860742027003944, 0.3960742027003944, 0.4060742027003944, 0.4160742027003944, 0.4260742027003944, 0.43607420270039443, 0.44607420270039433, 0.45607420270039434, 0.46607420270039435, 0.47607420270039436, 0.48607420270039436, 0.4960742027003944, 0.5060742027003944, 0.5160742027003944, 0.5260742027003944, 0.5360742027003944, 0.5460742027003944, 0.5560742027003944, 0.5660742027003943, 0.5760742027003943, 0.5860742027003943, 0.5960742027003944, 0.6060742027003944, 0.6160742027003944, 0.6260742027003944, 0.6360742027003944]}, {"amplitude": [11.514967929713434, 11.564967929713434, 11.614967929713432, 11.664967929713432, 11.714967929713433, 11.764967929713434, 11.814967929713434, 11.864967929713432, 11.914967929713432, 11.964967929713433, 12.014967929713434, 12.064967929713434, 12.114967929713432, 12.164967929713432, 12.214967929713433, 12.264967929713434, 12.314967929713434, 12.364967929713432, 12.414967929713432, 12.464967929713433, 12.514967929713434, 12.564967929713434, 12.614967929713432, 12.664967929713432, 12.714967929713433, 12.764967929713434, 12.814967929713434, 12.864967929713432, 12.914967929713432, 12.964967929713433, 13.014967929713434, 13.064967929713434, 13.114967929713432, 13.164967929713432, 13.214967929713433, 13.264967929713434, 13.314967929713434, 13.364967929713432, 13.414967929713432, 13.464967929713433, 13.514967929713434, 13.564967929713434, 13.614967929713432, 13.664967929713432, 13.714967929713433, 13.764967929713434, 13.814967929713434, 13.864967929713432, 13.914967929713432, 13.964967929713433, 14.014967929713434, 14.064967929713434, 14.114967929713432, 14.164967929713432, 14.214967929713433, 14.264967929713434], "phase": [0.09048270524660196, 0.10048270524660195, 0.11048270524660196, 0.12048270524660196, 0.13048270524660197, 0.14048270524660195, 0.15048270524660196, 0.16048270524660196, 0.17048270524660197, 0.18048270524660195, 0.19048270524660196, 0.20048270524660194, 0.21048270524660195, 0.22048270524660196, 0.23048270524660197, 0.24048270524660195, 0.250482705246602, 0.260482705246602, 0.27048270524660195, 0.28048270524660196, 0.29048270524660197, 0.3004827052466019, 0.31048270524660193, 0.32048270524660194, 0.33048270524660195, 0.34048270524660196, 0.35048270524660197, 0.360482705246602, 0.370482705246602, 0.38048270524660194, 0.39048270524660195, 0.40048270524660196, 0.41048270524660196, 0.420482705246602, 0.430482705246602, 0.440482705246602, 0.45048270524660194, 0.46048270524660195, 0.47048270524660196, 0.48048270524660197, 0.490482705246602, 0.500482705246602, 0.5104827052466019, 0.5204827052466019, 0.5304827052466019, 0.5404827052466019, 0.5504827052466019, 0.5604827052466019, 0.5704827052466019, 0.580482705246602, 0.590482705246602, 0.600482705246602, 0.610482705246602, 0.620482705246602, 0.630482705246602, 0.640482705246602]}, {"amplitude": [11.587075362689845, 11.637075362689846, 11.687075362689844, 11.737075362689845, 11.787075362689844, 11.837075362689845, 11.887075362689846, 11.937075362689844, 11.987075362689845, 12.037075362689844, 12.087075362689845, 12.137075362689846, 12.187075362689844, 12.237075362689845, 12.287075362689844, 12.337075362689845, 12.387075362689846, 12.437075362689844, 12.487075362689845, 12.537075362689844, 12.587075362689845, 12.637075362689846, 12.687075362689844, 12.737075362689845, 12.787075362689844, 12.837075362689845, 12.887075362689846, 12.937075362689844, 12.987075362689845, 13.037075362689844, 13.087075362689845, 13.137075362689846, 13.187075362689844, 13.237075362689845, 13.287075362689844, 13.337075362689845, 13.387075362689846, 13.437075362689844, 13.487075362689845, 13.537075362689844, 13.587075362689845, 13.637075362689846, 13.687075362689844, 13.737075362689845, 13.787075362689844, 13.837075362689845, 13.887075362689846, 13.937075362689844, 13.987075362689845, 14.037075362689844, 14.087075362689845, 14.137075362689846, 14.187075362689844, 14.237075362689845, 14.287075362689844, 14.337075362689845], "phase": [0.09408807689542255, 0.10408807689542254, 0.11408807689542255, 0.12408807689542255, 0.13408807689542254, 0.14408807689542255, 0.15408807689542253, 0.16408807689542254, 0.17408807689542255, 0.18408807689542256, 0.19408807689542257, 0.20408807689542255, 0.21408807689542253, 0.22408807689542254, 0.23408807689542255, 0.24408807689542256, 0.25408807689542257, 0.2640880768954226, 0.2740880768954225, 0.28408807689542254, 0.29408807689542255, 0.30408807689542255, 0.31408807689542256, 0.32408807689542257, 0.3340880768954225, 0.34408807689542253, 0.35408807689542254, 0.36408807689542255, 0.37408807689542256, 0.3840880768954225, 0.3940880768954225, 0.40408807689542253, 0.41408807689542254, 0.42408807689542255, 0.43408807689542256, 0.44408807689542257, 0.4540880768954225, 0.46408807689542253, 0.47408807689542254, 0.48408807689542255, 0.49408807689542256, 0.5040880768954226, 0.5140880768954226, 0.5240880768954226, 0.5340880768954226, 0.5440880768954226, 0.5540880768954226, 0.5640880768954226, 0.5740880768954225, 0.5840880768954225, 0.5940880768954225, 0.6040880768954225, 0.6140880768954226, 0.6240880768954226, 0.6340880768954226, 0.6440880768954226]}, {"amplitude": [11.683867944606657, 11.733867944606658, 11.783867944606657, 11.833867944606657, 11.883867944606656, 11.933867944606657, 11.983867944606658, 12.033867944606657, 12.083867944606657, 12.133867944606656, 12.183867944606657, 12.233867944606658, 12.283867944606657, 12.333867944606657, 12.383867944606656, 12.433867944606657, 12.483867944606658, 12.533867944606657, 12.583867944606657, 12.633867944606656, 12.683867944606657, 12.733867944606658, 12.783867944606657, 12.833867944606657, 12.883867944606656, 12.933867944606657, 12.983867944606658, 13.033867944606657, 13.083867944606657, 13.133867944606656, 13.183867944606657, 13.233867944606658, 13.283867944606657, 13.333867944606657, 13.383867944606656, 13.433867944606657, 13.483867944606658, 13.533867944606657, 13.583867944606657, 13.633867944606656, 13.683867944606657, 13.733867944606658, 13.783867944606657, 13.833867944606657, 13.883867944606656, 13.933867944606657, 13.983867944606658, 14.033867944606657, 14.083867944606657, 14.133867944606656, 14.183867944606657, 14.233867944606658, 14.283867944606657, 14.333867944606657, 14.383867944606656, 14.433867944606657], "phase": [0.09685831611286311, 0.1068583161128631, 0.11685831611286311, 0.1268583161128631, 0.13685831611286312, 0.1468583161128631, 0.1568583161128631, 0.16685831611286311, 0.17685831611286312, 0.1868583161128631, 0.1968583161128631, 0.2068583161128631, 0.2168583161128631, 0.2268583161128631, 0.23685831611286312, 0.2468583161128631, 0.25685831611286314, 0.26685831611286315, 0.2768583161128631, 0.2868583161128631, 0.2968583161128631, 0.30685831611286307, 0.3168583161128631, 0.3268583161128631, 0.3368583161128631, 0.3468583161128631, 0.3568583161128631, 0.3668583161128631, 0.37685831611286313, 0.3868583161128631, 0.3968583161128631, 0.4068583161128631, 0.4168583161128631, 0.4268583161128631, 0.43685831611286313, 0.44685831611286314, 0.4568583161128631, 0.4668583161128631, 0.4768583161128631, 0.4868583161128631, 0.49685831611286313, 0.5068583161128631, 0.516858316112863, 0.526858316112863, 0.536858316112863, 0.5468583161128631, 0.5568583161128631, 0.5668583161128631, 0.5768583161128631, 0.5868583161128631, 0.5968583161128631, 0.6068583161128631, 0.6168583161128631, 0.6268583161128631, 0.6368583161128631, 0.6468583161128632]}, {"amplitude": [11.799041105502534, 11.849041105502534, 11.899041105502532, 11.949041105502532, 11.999041105502533, 12.049041105502534, 12.099041105502534, 12.149041105502532, 12.199041105502532, 12.249041105502533, 12.299041105502534, 12.349041105502534, 12.399041105502532, 12.449041105502532, 12.499041105502533, 12.549041105502534, 12.599041105502534, 12.649041105502532, 12.699041105502532, 12.749041105502533, 12.799041105502534, 12.849041105502534, 12.899041105502532, 12.949041105502532, 12.999041105502533, 13.049041105502534, 13.099041105502534, 13.149041105502532, 13.199041105502532, 13.249041105502533, 13.299041105502534, 13.349041105502534, 13.399041105502532, 13.449041105502532, 13.499041105502533, 13.549041105502534, 13.599041105502534, 13.649041105502532, 13.699041105502532, 13.749041105502533, 13.799041105502534, 13.849041105502534, 13.899041105502532, 13.949041105502532, 13.999041105502533, 14.049041105502534, 14.099041105502534, 14.149041105502532, 14.199041105502532, 14.249041105502533, 14.299041105502534, 14.349041105502534, 14.399041105502532, 14.449041105502532, 14.499041105502533, 14.549041105502534], "phase": [0.09876883405951378, 0.10876883405951378, 0.11876883405951379, 0.12876883405951378, 0.1387688340595138, 0.1487688340595138, 0.15876883405951378, 0.1687688340595138, 0.17876883405951377, 0.18876883405951378, 0.1987688340595138, 0.2087688340595138, 0.21876883405951378, 0.2287688340595138, 0.2387688340595138, 0.24876883405951378, 0.2587688340595138, 0.2687688340595138, 0.2787688340595138, 0.2887688340595138, 0.2987688340595138, 0.3087688340595138, 0.3187688340595138, 0.3287688340595138, 0.33876883405951375, 0.34876883405951375, 0.35876883405951376, 0.3687688340595138, 0.3787688340595138, 0.3887688340595138, 0.3987688340595138, 0.4087688340595138, 0.4187688340595138, 0.4287688340595138, 0.43876883405951383, 0.44876883405951384, 0.45876883405951374, 0.46876883405951375, 0.47876883405951376, 0.48876883405951377, 0.4987688340595138, 0.5087688340595138, 0.5187688340595138, 0.5287688340595138, 0.5387688340595138, 0.5487688340595138, 0.5587688340595138, 0.5687688340595138, 0.5787688340595137, 0.5887688340595137, 0.5987688340595138, 0.6087688340595138, 0.6187688340595138, 0.6287688340595138, 0.6387688340595138, 0.6487688340595138]}, {"amplitude": [11.921446490707087, 11.971446490707088, 12.021446490707087, 12.071446490707087, 12.121446490707086, 12.171446490707087, 12.221446490707088, 12.271446490707087, 12.321446490707087, 12.371446490707086, 12.421446490707087, 12.471446490707088, 12.521446490707087, 12.571446490707087, 12.621446490707086, 12.671446490707087, 12.721446490707088, 12.771446490707087, 12.821446490707087, 12.871446490707086, 12.921446490707087, 12.971446490707088, 13.021446490707087, 13.071446490707087, 13.121446490707086, 13.171446490707087, 13.221446490707088, 13.271446490707087, 13.321446490707087, 13.371446490707086, 13.421446490707087, 13.471446490707088, 13.521446490707087, 13.571446490707087, 13.621446490707086, 13.671446490707087, 13.721446490707088, 13.771446490707087, 13.821446490707087, 13.871446490707086, 13.921446490707087, 13.971446490707088, 14.021446490707087, 14.071446490707087, 14.121446490707086, 14.171446490707087, 14.221446490707088, 14.271446490707087, 14.321446490707087, 14.371446490707086, 14.421446490707087, 14.471446490707088, 14.521446490707087, 14.571446490707087, 14.621446490707086, 14.671446490707087], "phase": [0.09980267284282716, 0.10980267284282716, 0.11980267284282717, 0.12980267284282715, 0.13980267284282716, 0.14980267284282717, 0.15980267284282718, 0.16980267284282718, 0.17980267284282717, 0.18980267284282715, 0.19980267284282716, 0.20980267284282716, 0.21980267284282717, 0.22980267284282718, 0.2398026728428272, 0.24980267284282714, 0.25980267284282715, 0.26980267284282716, 0.27980267284282717, 0.2898026728428272, 0.2998026728428272, 0.30980267284282714, 0.31980267284282715, 0.32980267284282716, 0.33980267284282717, 0.3498026728428272, 0.3598026728428272, 0.3698026728428272, 0.3798026728428272, 0.38980267284282716, 0.39980267284282717, 0.4098026728428272, 0.4198026728428272, 0.4298026728428272, 0.4398026728428272, 0.4498026728428272, 0.45980267284282716, 0.4698026728428272, 0.4798026728428272, 0.4898026728428272, 0.4998026728428272, 0.5098026728428272, 0.5198026728428271, 0.5298026728428271, 0.5398026728428271, 0.5498026728428271, 0.5598026728428271, 0.5698026728428272, 0.5798026728428272, 0.5898026728428272, 0.5998026728428272, 0.6098026728428272, 0.6198026728428272, 0.6298026728428272, 0.6398026728428272, 0.6498026728428272]}, {"amplitude": [12.036613090800754, 12.086613090800755, 12.136613090800754, 12.186613090800755, 12.236613090800754, 12.286613090800754, 12.336613090800755, 12.386613090800754, 12.436613090800755, 12.486613090800754, 12.536613090800754, 12.586613090800755, 12.636613090800754, 12.686613090800755, 12.736613090800754, 12.786613090800754, 12.836613090800755, 12.886613090800754, 12.936613090800755, 12.986613090800754, 13.036613090800754, 13.086613090800755, 13.136613090800754, 13.186613090800755, 13.236613090800754, 13.286613090800754, 13.336613090800755, 13.386613090800754, 13.436613090800755, 13.486613090800754, 13.536613090800754, 13.586613090800755, 13.636613090800754, 13.686613090800755, 13.736613090800754, 13.786613090800754, 13.836613090800755, 13.886613090800754, 13.936613090800755, 13.986613090800754, 14.036613090800754, 14.086613090800755, 14.136613090800754, 14.186613090800755, 14.236613090800754, 14.286613090800754, 14.336613090800755, 14.386613090800754, 14.436613090800755, 14.486613090800754, 14.536613090800754, 14.586613090800755, 14.636613090800754, 14.686613090800755, 14.736613090800754, 14.786613090800754], "phase": [0.09995065603657316, 0.10995065603657316, 0.11995065603657316, 0.12995065603657316, 0.13995065603657317, 0.14995065603657315, 0.15995065603657316, 0.16995065603657317, 0.17995065603657318, 0.18995065603657316, 0.19995065603657317, 0.20995065603657315, 0.21995065603657316, 0.22995065603657316, 0.23995065603657317, 0.24995065603657315, 0.2599506560365732, 0.2699506560365732, 0.27995065603657315, 0.28995065603657316, 0.29995065603657317, 0.3099506560365731, 0.31995065603657313, 0.32995065603657314, 0.33995065603657315, 0.34995065603657316, 0.35995065603657317, 0.3699506560365732, 0.3799506560365732, 0.38995065603657314, 0.39995065603657315, 0.40995065603657316, 0.41995065603657317, 0.4299506560365732, 0.4399506560365732, 0.4499506560365732, 0.45995065603657315, 0.46995065603657316, 0.47995065603657316, 0.4899506560365732, 0.4999506560365732, 0.5099506560365732, 0.5199506560365732, 0.5299506560365732, 0.5399506560365732, 0.5499506560365732, 0.5599506560365732, 0.5699506560365732, 0.5799506560365731, 0.5899506560365732, 0.5999506560365732, 0.6099506560365732, 0.6199506560365732, 0.6299506560365732, 0.6399506560365732, 0.6499506560365732]}, {"amplitude": [12.12875550485947, 12.17875550485947, 12.22875550485947, 12.27875550485947, 12.328755504859469, 12.37875550485947, 12.42875550485947, 12.47875550485947, 12.52875550485947, 12.578755504859469, 12.62875550485947, 12.67875550485947, 12.72875550485947, 12.77875550485947, 12.828755504859469, 12.87875550485947, 12.92875550485947, 12.97875550485947, 13.02875550485947, 13.078755504859469, 13.12875550485947, 13.17875550485947, 13.22875550485947, 13.27875550485947, 13.328755504859469, 13.37875550485947, 13.42875550485947, 13.47875550485947, 13.52875550485947, 13.578755504859469, 13.62875550485947, 13.67875550485947, 13.72875550485947, 13.77875550485947, 13.828755504859469, 13.87875550485947, 13.92875550485947, 13.97875550485947, 14.02875550485947, 14.078755504859469, 14.12875550485947, 14.17875550485947, 14.22875550485947, 14.27875550485947, 14.328755504859469, 14.37875550485947, 14.42875550485947, 14.47875550485947, 14.52875550485947, 14.578755504859469, 14.62875550485947, 14.67875550485947, 14.72875550485947, 14.77875550485947, 14.828755504859469, 14.87875550485947], "phase": [0.0992114701314478, 0.10921147013144779, 0.1192114701314478, 0.1292114701314478, 0.1392114701314478, 0.1492114701314478, 0.1592114701314478, 0.1692114701314478, 0.17921147013144778, 0.1892114701314478, 0.1992114701314478, 0.2092114701314478, 0.2192114701314478, 0.2292114701314478, 0.2392114701314478, 0.2492114701314478, 0.2592114701314478, 0.2692114701314478, 0.27921147013144776, 0.28921147013144777, 0.2992114701314478, 0.3092114701314478, 0.3192114701314478, 0.3292114701314478, 0.3392114701314478, 0.3492114701314478, 0.35921147013144783, 0.36921147013144784, 0.37921147013144785, 0.38921147013144775, 0.39921147013144775, 0.40921147013144776, 0.41921147013144777, 0.4292114701314478, 0.4392114701314478, 0.4492114701314478, 0.4592114701314478, 0.4692114701314478, 0.4792114701314478, 0.48921147013144783, 0.49921147013144784, 0.5092114701314479, 0.5192114701314477, 0.5292114701314478, 0.5392114701314478, 0.5492114701314478, 0.5592114701314478, 0.5692114701314478, 0.5792114701314478, 0.5892114701314478, 0.5992114701314478, 0.6092114701314478, 0.6192114701314478, 0.6292114701314478, 0.6392114701314479, 0.6492114701314479]}, {"amplitude": [12.182987496710231, 12.232987496710232, 12.28298749671023, 12.332987496710231, 12.38298749671023, 12.432987496710231, 12.482987496710232, 12.53298749671023, 12.582987496710231, 12.63298749671023, 12.682987496710231, 12.732987496710232, 12.78298749671023, 12.832987496710231, 12.88298749671023, 12.932987496710231, 12.982987496710232, 13.03298749671023, 13.082987496710231, 13.13298749671023, 13.182987496710231, 13.232987496710232, 13.28298749671023, 13.332987496710231, 13.38298749671023, 13.432987496710231, 13.482987496710232, 13.53298749671023, 13.582987496710231, 13.63298749671023, 13.682987496710231, 13.732987496710232, 13.78298749671023, 13.832987496710231, 13.88298749671023, 13.932987496710231, 13.982987496710232, 14.03298749671023, 14.082987496710231, 14.13298749671023, 14.182987496710231, 14.232987496710232, 14.28298749671023, 14.332987496710231, 14.38298749671023, 14.432987496710231, 14.482987496710232, 14.53298749671023, 14.582987496710231, 14.63298749671023, 14.682987496710231, 14.732987496710232, 14.78298749671023, 14.832987496710231, 14.88298749671023, 14.932987496710231], "phase": [0.09759167619387475, 0.10759167619387475, 0.11759167619387476, 0.12759167619387474, 0.13759167619387475, 0.14759167619387475, 0.15759167619387476, 0.16759167619387477, 0.17759167619387475, 0.18759167619387473, 0.19759167619387474, 0.20759167619387475, 0.21759167619387476, 0.22759167619387477, 0.23759167619387478, 0.24759167619387473, 0.25759167619387474, 0.26759167619387475, 0.27759167619387476, 0.28759167619387477, 0.2975916761938748, 0.30759167619387473, 0.31759167619387474, 0.32759167619387475, 0.33759167619387476, 0.34759167619387477, 0.3575916761938748, 0.3675916761938748, 0.3775916761938748, 0.38759167619387475, 0.39759167619387475, 0.40759167619387476, 0.4175916761938748, 0.4275916761938748, 0.4375916761938748, 0.4475916761938748, 0.45759167619387475, 0.46759167619387476, 0.47759167619387477, 0.4875916761938748, 0.4975916761938748, 0.5075916761938748, 0.5175916761938747, 0.5275916761938747, 0.5375916761938747, 0.5475916761938747, 0.5575916761938747, 0.5675916761938747, 0.5775916761938747, 0.5875916761938748, 0.5975916761938748, 0.6075916761938748, 0.6175916761938748, 0.6275916761938748, 0.6375916761938748, 0.6475916761938748]}, {"amplitude": [12.187429987478854, 12.237429987478855, 12.287429987478854, 12.337429987478854, 12.387429987478853, 12.437429987478854, 12.487429987478855, 12.537429987478854, 12.587429987478854, 12.637429987478853, 12.687429987478854, 12.737429987478855, 12.787429987478854, 12.837429987478854, 12.887429987478853, 12.937429987478854, 12.987429987478855, 13.037429987478854, 13.087429987478854, 13.137429987478853, 13.187429987478854, 13.237429987478855, 13.287429987478854, 13.337429987478854, 13.387429987478853, 13.437429987478854, 13.487429987478855, 13.537429987478854, 13.587429987478854, 13.637429987478853, 13.687429987478854, 13.737429987478855, 13.787429987478854, 13.837429987478854, 13.887429987478853, 13.937429987478854, 13.987429987478855, 14.037429987478854, 14.087429987478854, 14.137429987478853, 14.187429987478854, 14.237429987478855, 14.287429987478854, 14.337429987478854, 14.387429987478853, 14.437429987478854, 14.487429987478855, 14.537429987478854, 14.587429987478854, 14.637429987478853, 14.687429987478854, 14.737429987478855, 14.787429987478854, 14.837429987478854, 14.887429987478853, 14.937429987478854], "phase": [0.09510565162951537, 0.10510565162951536, 0.11510565162951537, 0.12510565162951537, 0.13510565162951538, 0.1451056516295154, 0.15510565162951537, 0.16510565162951538, 0.17510565162951536, 0.18510565162951537, 0.19510565162951538, 0.20510565162951538, 0.21510565162951537, 0.22510565162951537, 0.23510565162951538, 0.24510565162951536, 0.2551056516295154, 0.2651056516295154, 0.2751056516295154, 0.2851056516295154, 0.2951056516295154, 0.30510565162951536, 0.31510565162951537, 0.3251056516295154, 0.33510565162951533, 0.34510565162951534, 0.35510565162951535, 0.36510565162951536, 0.37510565162951537, 0.3851056516295154, 0.3951056516295154, 0.4051056516295154, 0.4151056516295154, 0.4251056516295154, 0.4351056516295154, 0.44510565162951543, 0.45510565162951533, 0.46510565162951534, 0.47510565162951535, 0.48510565162951536, 0.49510565162951536, 0.5051056516295154, 0.5151056516295154, 0.5251056516295154, 0.5351056516295154, 0.5451056516295154, 0.5551056516295154, 0.5651056516295154, 0.5751056516295153, 0.5851056516295153, 0.5951056516295153, 0.6051056516295154, 0.6151056516295154, 0.6251056516295154, 0.6351056516295154, 0.6451056516295154]}, {"amplitude": [12.134917269896444, 12.184917269896445, 12.234917269896444, 12.284917269896445, 12.334917269896444, 12.384917269896444, 12.434917269896445, 12.484917269896444, 12.534917269896445, 12.584917269896444, 12.634917269896444, 12.684917269896445, 12.734917269896444, 12.784917269896445, 12.834917269896444, 12.884917269896444, 12.934917269896445, 12.984917269896444, 13.034917269896445, 13.084917269896444, 13.134917269896444, 13.184917269896445, 13.234917269896444, 13.284917269896445, 13.334917269896444, 13.384917269896444, 13.434917269896445, 13.484917269896444, 13.534917269896445, 13.584917269896444, 13.634917269896444, 13.684917269896445, 13.734917269896444, 13.784917269896445, 13.834917269896444, 13.884917269896444, 13.934917269896445, 13.984917269896444, 14.034917269896445, 14.084917269896444, 14.134917269896444, 14.184917269896445, 14.234917269896444, 14.284917269896445, 14.334917269896444, 14.384917269896444, 14.434917269896445, 14.484917269896444, 14.534917269896445, 14.584917269896444, 14.634917269896444, 14.684917269896445, 14.734917269896444, 14.784917269896445, 14.834917269896444, 14.884917269896444], "phase": [0.09177546256839812, 0.10177546256839812, 0.11177546256839813, 0.12177546256839812, 0.13177546256839812, 0.14177546256839813, 0.15177546256839813, 0.16177546256839814, 0.17177546256839812, 0.1817754625683981, 0.19177546256839811, 0.20177546256839812, 0.21177546256839813, 0.22177546256839814, 0.23177546256839815, 0.2417754625683981, 0.2517754625683981, 0.2617754625683981, 0.27177546256839813, 0.28177546256839814, 0.29177546256839815, 0.3017754625683981, 0.3117754625683981, 0.3217754625683981, 0.3317754625683981, 0.34177546256839814, 0.35177546256839815, 0.36177546256839815, 0.37177546256839816, 0.3817754625683981, 0.3917754625683981, 0.40177546256839813, 0.41177546256839814, 0.42177546256839815, 0.43177546256839816, 0.44177546256839817, 0.4517754625683981, 0.46177546256839813, 0.47177546256839814, 0.48177546256839815, 0.49177546256839816, 0.5017754625683981, 0.5117754625683981, 0.5217754625683981, 0.5317754625683981, 0.5417754625683981, 0.5517754625683982, 0.5617754625683982, 0.5717754625683981, 0.5817754625683981, 0.5917754625683981, 0.6017754625683981, 0.6117754625683981, 0.6217754625683981, 0.6317754625683981, 0.6417754625683981]}, {"amplitude": [12.024061475827533, 12.074061475827534, 12.124061475827533, 12.174061475827534, 12.224061475827533, 12.274061475827533, 12.324061475827534, 12.374061475827533, 12.424061475827534, 12.474061475827533, 12.524061475827533, 12.574061475827534, 12.624061475827533, 12.674061475827534, 12.724061475827533, 12.774061475827533, 12.824061475827534, 12.874061475827533, 12.924061475827534, 12.974061475827533, 13.024061475827533, 13.074061475827534, 13.124061475827533, 13.174061475827534, 13.224061475827533, 13.274061475827533, 13.324061475827534, 13.374061475827533, 13.424061475827534, 13.474061475827533, 13.524061475827533, 13.574061475827534, 13.624061475827533, 13.674061475827534, 13.724061475827533, 13.774061475827533, 13.824061475827534, 13.874061475827533, 13.924061475827534, 13.974061475827533, 14.024061475827533, 14.074061475827534, 14.124061475827533, 14.174061475827534, 14.224061475827533, 14.274061475827533, 14.324061475827534, 14.374061475827533, 14.424061475827534, 14.474061475827533, 14.524061475827533, 14.574061475827534, 14.624061475827533, 14.674061475827534, 14.724061475827533, 14.774061475827533], "phase": [0.08763066800438635, 0.09763066800438634, 0.10763066800438635, 0.11763066800438635, 0.12763066800438636, 0.13763066800438634, 0.14763066800438635, 0.15763066800438635, 0.16763066800438636, 0.17763066800438634, 0.18763066800438635, 0.19763066800438633, 0.20763066800438634, 0.21763066800438635, 0.22763066800438636, 0.23763066800438634, 0.24763066800438635, 0.2576306680043864, 0.26763066800438634, 0.27763066800438635, 0.28763066800438636, 0.2976306680043863, 0.3076306680043863, 0.31763066800438633, 0.32763066800438634, 0.33763066800438635, 0.34763066800438636, 0.35763066800438637, 0.3676306680043864, 0.3776306680043863, 0.38763066800438634, 0.39763066800438635, 0.40763066800438635, 0.41763066800438636, 0.42763066800438637, 0.4376306680043864, 0.44763066800438633, 0.45763066800438634, 0.46763066800438635, 0.47763066800438636, 0.48763066800438637, 0.4976306680043864, 0.5076306680043863, 0.5176306680043863, 0.5276306680043863, 0.5376306680043863, 0.5476306680043863, 0.5576306680043863, 0.5676306680043863, 0.5776306680043863, 0.5876306680043863, 0.5976306680043864, 0.6076306680043864, 0.6176306680043864, 0.6276306680043864, 0.6376306680043864]}, {"amplitude": [11.85952528032773, 11.909525280327731, 11.95952528032773, 12.00952528032773, 12.05952528032773, 12.10952528032773, 12.159525280327731, 12.20952528032773, 12.25952528032773, 12.30952528032773, 12.35952528032773, 12.409525280327731, 12.45952528032773, 12.50952528032773, 12.55952528032773, 12.60952528032773, 12.659525280327731, 12.70952528032773, 12.75952528032773, 12.80952528032773, 12.85952528032773, 12.909525280327731, 12.95952528032773, 13.00952528032773, 13.05952528032773, 13.10952528032773, 13.159525280327731, 13.20952528032773, 13.25952528032773, 13.30952528032773, 13.35952528032773, 13.409525280327731, 13.45952528032773, 13.50952528032773, 13.55952528032773, 13.60952528032773, 13.659525280327731, 13.70952528032773, 13.75952528032773, 13.80952528032773, 13.85952528032773, 13.909525280327731, 13.95952528032773, 14.00952528032773, 14.05952528032773, 14.10952528032773, 14.159525280327731, 14.20952528032773, 14.25952528032773, 14.30952528032773, 14.35952528032773, 14.409525280327731, 14.45952528032773, 14.50952528032773, 14.55952528032773, 14.60952528032773], "phase": [0.08270805742745621, 0.0927080574274562, 0.10270805742745621, 0.11270805742745621, 0.12270805742745622, 0.13270805742745623, 0.1427080574274562, 0.15270805742745622, 0.1627080574274562, 0.1727080574274562, 0.18270805742745622, 0.19270805742745623, 0.2027080574274562, 0.21270805742745622, 0.22270805742745622, 0.2327080574274562, 0.24270805742745621, 0.2527080574274562, 0.2627080574274562, 0.2727080574274562, 0.2827080574274562, 0.2927080574274562, 0.3027080574274562, 0.3127080574274562, 0.32270805742745623, 0.33270805742745624, 0.34270805742745625, 0.35270805742745626, 0.36270805742745627, 0.37270805742745616, 0.38270805742745617, 0.3927080574274562, 0.4027080574274562, 0.4127080574274562, 0.4227080574274562, 0.4327080574274562, 0.4427080574274562, 0.45270805742745623, 0.46270805742745624, 0.47270805742745625, 0.48270805742745626, 0.49270805742745627, 0.5027080574274562, 0.5127080574274562, 0.5227080574274562, 0.5327080574274562, 0.5427080574274562, 0.5527080574274562, 0.5627080574274562, 0.5727080574274562, 0.5827080574274562, 0.5927080574274562, 0.6027080574274563, 0.6127080574274563, 0.6227080574274563, 0.6327080574274563]}, {"amplitude": [11.651463851356981, 11.701463851356982, 11.75146385135698, 11.801463851356981, 11.85146385135698, 11.901463851356981, 11.951463851356982, 12.00146385135698, 12.051463851356981, 12.10146385135698, 12.151463851356981, 12.201463851356982, 12.25146385135698, 12.301463851356981, 12.35146385135698, 12.401463851356981, 12.451463851356982, 12.50146385135698, 12.551463851356981, 12.60146385135698, 12.651463851356981, 12.701463851356982, 12.75146385135698, 12.801463851356981, 12.85146385135698, 12.901463851356981, 12.951463851356982, 13.00146385135698, 13.051463851356981, 13.10146385135698, 13.151463851356981, 13.201463851356982, 13.25146385135698, 13.301463851356981, 13.35146385135698, 13.401463851356981, 13.451463851356982, 13.50146385135698, 13.551463851356981, 13.60146385135698, 13.651463851356981, 13.701463851356982, 13.75146385135698, 13.801463851356981, 13.85146385135698, 13.901463851356981, 13.951463851356982, 14.00146385135698, 14.051463851356981, 14.10146385135698, 14.151463851356981, 14.201463851356982, 14.25146385135698, 14.301463851356981, 14.35146385135698, 14.401463851356981], "phase": [0.07705132427757894, 0.08705132427757893, 0.09705132427757894, 0.10705132427757894, 0.11705132427757894, 0.12705132427757893, 0.13705132427757893, 0.14705132427757894, 0.15705132427757895, 0.16705132427757893, 0.17705132427757894, 0.18705132427757892, 0.19705132427757893, 0.20705132427757894, 0.21705132427757895, 0.22705132427757893, 0.23705132427757894, 0.24705132427757895, 0.25705132427757893, 0.26705132427757894, 0.27705132427757895, 0.28705132427757896, 0.29705132427757897, 0.307051324277579, 0.3170513242775789, 0.32705132427757894, 0.33705132427757895, 0.34705132427757895, 0.35705132427757896, 0.3670513242775789, 0.3770513242775789, 0.38705132427757893, 0.39705132427757894, 0.40705132427757895, 0.41705132427757896, 0.42705132427757897, 0.4370513242775789, 0.44705132427757893, 0.45705132427757894, 0.46705132427757895, 0.47705132427757896, 0.48705132427757897, 0.4970513242775789, 0.5070513242775789, 0.5170513242775789, 0.527051324277579, 0.537051324277579, 0.547051324277579, 0.557051324277579, 0.567051324277579, 0.577051324277579, 0.587051324277579, 0.597051324277579, 0.607051324277579, 0.617051324277579, 0.627051324277579]}, {"amplitude": [11.414213562373096, 11.464213562373097, 11.514213562373095, 11.564213562373096, 11.614213562373095, 11.664213562373096, 11.714213562373097, 11.764213562373095, 11.814213562373096, 11.864213562373095, 11.914213562373096, 11.964213562373097, 12.014213562373095, 12.064213562373096, 12.114213562373095, 12.164213562373096, 12.214213562373097, 12.264213562373095, 12.314213562373096, 12.364213562373095, 12.414213562373096, 12.464213562373097, 12.514213562373095, 12.564213562373096, 12.614213562373095, 12.664213562373096, 12.714213562373097, 12.764213562373095, 12.814213562373096, 12.864213562373095, 12.914213562373096, 12.964213562373097, 13.014213562373095, 13.064213562373096, 13.114213562373095, 13.164213562373096, 13.214213562373097, 13.264213562373095, 13.314213562373096, 13.364213562373095, 13.414213562373096, 13.464213562373097, 13.514213562373095, 13.564213562373096, 13.614213562373095, 13.664213562373096, 13.714213562373097, 13.764213562373095, 13.814213562373096, 13.864213562373095, 13.914213562373096, 13.964213562373097, 14.014213562373095, 14.064213562373096, 14.114213562373095, 14.164213562373096], "phase": [0.07071067811865477, 0.08071067811865476, 0.09071067811865477, 0.10071067811865476, 0.11071067811865476, 0.12071067811865477, 0.13071067811865478, 0.1407106781186548, 0.15071067811865477, 0.16071067811865475, 0.17071067811865476, 0.18071067811865477, 0.19071067811865478, 0.20071067811865478, 0.2107106781186548, 0.22071067811865475, 0.23071067811865476, 0.24071067811865476, 0.2507106781186548, 0.2607106781186548, 0.2707106781186548, 0.28071067811865474, 0.29071067811865475, 0.30071067811865476, 0.31071067811865477, 0.3207106781186548, 0.3307106781186548, 0.3407106781186548, 0.3507106781186548, 0.36071067811865476, 0.37071067811865477, 0.3807106781186548, 0.3907106781186548, 0.4007106781186548, 0.4107106781186548, 0.4207106781186548, 0.43071067811865477, 0.4407106781186548, 0.4507106781186548, 0.4607106781186548, 0.4707106781186548, 0.4807106781186548, 0.49071067811865476, 0.5007106781186548, 0.5107106781186548, 0.5207106781186548, 0.5307106781186548, 0.5407106781186548, 0.5507106781186547, 0.5607106781186547, 0.5707106781186547, 0.5807106781186547, 0.5907106781186547, 0.6007106781186548, 0.6107106781186548, 0.6207106781186548]}, {"amplitude": [11.164410613691977, 11.214410613691978, 11.264410613691977, 11.314410613691978, 11.364410613691977, 11.414410613691977, 11.464410613691978, 11.514410613691977, 11.564410613691978, 11.614410613691977, 11.664410613691977, 11.714410613691978, 11.764410613691977, 11.814410613691978, 11.864410613691977, 11.914410613691977, 11.964410613691978, 12.014410613691977, 12.064410613691978, 12.114410613691977, 12.164410613691977, 12.214410613691978, 12.264410613691977, 12.314410613691978, 12.364410613691977, 12.414410613691977, 12.464410613691978, 12.514410613691977, 12.564410613691978, 12.614410613691977, 12.664410613691977, 12.714410613691978, 12.764410613691977, 12.814410613691978, 12.864410613691977, 12.914410613691977, 12.964410613691978, 13.014410613691977, 13.064410613691978, 13.114410613691977, 13.164410613691977, 13.214410613691978, 13.264410613691977, 13.314410613691978, 13.364410613691977, 13.414410613691977, 13.464410613691978, 13.514410613691977, 13.564410613691978, 13.614410613691977, 13.664410613691977, 13.714410613691978, 13.764410613691977, 13.814410613691978, 13.864410613691977, 13.914410613691977], "phase": [0.06374239897486898, 0.07374239897486898, 0.08374239897486899, 0.09374239897486898, 0.10374239897486898, 0.11374239897486899, 0.12374239897486898, 0.133742398974869, 0.14374239897486898, 0.15374239897486897, 0.16374239897486897, 0.17374239897486898, 0.183742398974869, 0.193742398974869, 0.203742398974869, 0.21374239897486896, 0.22374239897486897, 0.23374239897486898, 0.243742398974869, 0.253742398974869, 0.263742398974869, 0.27374239897486896, 0.28374239897486897, 0.293742398974869, 0.303742398974869, 0.313742398974869, 0.323742398974869, 0.333742398974869, 0.343742398974869, 0.353742398974869, 0.363742398974869, 0.373742398974869, 0.383742398974869, 0.393742398974869, 0.403742398974869, 0.41374239897486903, 0.423742398974869, 0.433742398974869, 0.443742398974869, 0.453742398974869, 0.463742398974869, 0.47374239897486903, 0.483742398974869, 0.493742398974869, 0.5037423989748689, 0.513742398974869, 0.523742398974869, 0.533742398974869, 0.543742398974869, 0.553742398974869, 0.563742398974869, 0.573742398974869, 0.583742398974869, 0.593742398974869, 0.603742398974869, 0.613742398974869]}, {"amplitude": [10.918802623925654, 10.968802623925654, 11.018802623925653, 11.068802623925654, 11.118802623925653, 11.168802623925654, 11.218802623925654, 11.268802623925653, 11.318802623925654, 11.368802623925653, 11.418802623925654, 11.468802623925654, 11.518802623925653, 11.568802623925654, 11.618802623925653, 11.668802623925654, 11.718802623925654, 11.768802623925653, 11.818802623925654, 11.868802623925653, 11.918802623925654, 11.968802623925654, 12.018802623925653, 12.068802623925654, 12.118802623925653, 12.168802623925654, 12.218802623925654, 12.268802623925653, 12.318802623925654, 12.368802623925653, 12.418802623925654, 12.468802623925654, 12.518802623925653, 12.568802623925654, 12.618802623925653, 12.668802623925654, 12.718802623925654, 12.768802623925653, 12.818802623925654, 12.868802623925653, 12.918802623925654, 12.968802623925654, 13.018802623925653, 13.068802623925654, 13.118802623925653, 13.168802623925654, 13.218802623925654, 13.268802623925653, 13.318802623925654, 13.368802623925653, 13.418802623925654, 13.468802623925654, 13.518802623925653, 13.568802623925654, 13.618802623925653, 13.668802623925654], "phase": [0.05620833778521305, 0.06620833778521305, 0.07620833778521305, 0.08620833778521306, 0.09620833778521305, 0.10620833778521305, 0.11620833778521306, 0.12620833778521307, 0.13620833778521305, 0.14620833778521306, 0.15620833778521306, 0.16620833778521305, 0.17620833778521305, 0.18620833778521306, 0.19620833778521307, 0.20620833778521305, 0.21620833778521306, 0.22620833778521307, 0.23620833778521305, 0.24620833778521306, 0.25620833778521307, 0.266208337785213, 0.27620833778521303, 0.28620833778521304, 0.29620833778521305, 0.30620833778521306, 0.31620833778521307, 0.3262083377852131, 0.3362083377852131, 0.34620833778521304, 0.35620833778521305, 0.36620833778521306, 0.37620833778521307, 0.3862083377852131, 0.3962083377852131, 0.4062083377852131, 0.41620833778521305, 0.42620833778521305, 0.43620833778521306, 0.44620833778521307, 0.4562083377852131, 0.4662083377852131, 0.47620833778521304, 0.48620833778521305, 0.49620833778521306, 0.506208337785213, 0.516208337785213, 0.526208337785213, 0.536208337785213, 0.546208337785213, 0.5562083377852131, 0.5662083377852131, 0.5762083377852131, 0.5862083377852131, 0.5962083377852131, 0.6062083377852131]}, {"amplitude": [10.692059232463624, 10.742059232463625, 10.792059232463625, 10.842059232463626, 10.892059232463623, 10.942059232463624, 10.992059232463625, 11.042059232463625, 11.092059232463626, 11.142059232463623, 11.192059232463624, 11.242059232463625, 11.292059232463625, 11.342059232463626, 11.392059232463623, 11.442059232463624, 11.492059232463625, 11.542059232463625, 11.592059232463626, 11.642059232463623, 11.692059232463624, 11.742059232463625, 11.792059232463625, 11.842059232463626, 11.892059232463623, 11.942059232463624, 11.992059232463625, 12.042059232463625, 12.092059232463626, 12.142059232463623, 12.192059232463624, 12.242059232463625, 12.292059232463625, 12.342059232463626, 12.392059232463623, 12.442059232463624, 12.492059232463625, 12.542059232463625, 12.592059232463626, 12.642059232463623, 12.692059232463624, 12.742059232463625, 12.792059232463625, 12.842059232463626, 12.892059232463623, 12.942059232463624, 12.992059232463625, 13.042059232463625, 13.092059232463626, 13.142059232463623, 13.192059232463624, 13.242059232463625, 13.292059232463625, 13.342059232463626, 13.392059232463623, 13.442059232463624], "phase": [0.04817536741017156, 0.05817536741017156, 0.06817536741017156, 0.07817536741017156, 0.08817536741017157, 0.09817536741017156, 0.10817536741017156, 0.11817536741017157, 0.12817536741017155, 0.13817536741017156, 0.14817536741017157, 0.15817536741017157, 0.16817536741017156, 0.17817536741017156, 0.18817536741017157, 0.19817536741017155, 0.20817536741017156, 0.21817536741017157, 0.22817536741017155, 0.23817536741017156, 0.24817536741017157, 0.25817536741017155, 0.26817536741017156, 0.27817536741017157, 0.2881753674101716, 0.2981753674101716, 0.3081753674101716, 0.3181753674101716, 0.3281753674101716, 0.3381753674101715, 0.3481753674101715, 0.35817536741017153, 0.36817536741017154, 0.37817536741017155, 0.38817536741017156, 0.39817536741017157, 0.4081753674101716, 0.4181753674101716, 0.4281753674101716, 0.4381753674101716, 0.4481753674101716, 0.4581753674101716, 0.4681753674101715, 0.4781753674101715, 0.48817536741017153, 0.49817536741017154, 0.5081753674101716, 0.5181753674101716, 0.5281753674101716, 0.5381753674101716, 0.5481753674101716, 0.5581753674101716, 0.5681753674101716, 0.5781753674101716, 0.5881753674101716, 0.5981753674101716]}, {"amplitude": [10.49488776274108, 10.54488776274108, 10.59488776274108, 10.64488776274108, 10.694887762741079, 10.74488776274108, 10.79488776274108, 10.84488776274108, 10.89488776274108, 10.944887762741079, 10.99488776274108, 11.04488776274108, 11.09488776274108, 11.14488776274108, 11.194887762741079, 11.24488776274108, 11.29488776274108, 11.34488776274108, 11.39488776274108, 11.444887762741079, 11.49488776274108, 11.54488776274108, 11.59488776274108, 11.64488776274108, 11.694887762741079, 11.74488776274108, 11.79488776274108, 11.84488776274108, 11.89488776274108, 11.944887762741079, 11.99488776274108, 12.04488776274108, 12.09488776274108, 12.14488776274108, 12.194887762741079, 12.24488776274108, 12.29488776274108, 12.34488776274108, 12.39488776274108, 12.444887762741079, 12.49488776274108, 12.54488776274108, 12.59488776274108, 12.64488776274108, 12.694887762741079, 12.74488776274108, 12.79488776274108, 12.84488776274108, 12.89488776274108, 12.944887762741079, 12.99488776274108, 13.04488776274108, 13.09488776274108, 13.14488776274108, 13.194887762741079, 13.24488776274108], "phase": [0.03971478906347806, 0.049714789063478065, 0.05971478906347806, 0.06971478906347806, 0.07971478906347806, 0.08971478906347807, 0.09971478906347805, 0.10971478906347806, 0.11971478906347807, 0.12971478906347805, 0.13971478906347806, 0.14971478906347807, 0.15971478906347805, 0.16971478906347806, 0.17971478906347807, 0.18971478906347805, 0.19971478906347806, 0.20971478906347807, 0.21971478906347805, 0.22971478906347806, 0.23971478906347807, 0.24971478906347805, 0.25971478906347806, 0.26971478906347807, 0.2797147890634781, 0.2897147890634781, 0.2997147890634781, 0.3097147890634781, 0.3197147890634781, 0.32971478906347806, 0.3397147890634781, 0.3497147890634781, 0.3597147890634781, 0.3697147890634781, 0.3797147890634781, 0.3897147890634781, 0.39971478906347807, 0.4097147890634781, 0.4197147890634781, 0.4297147890634781, 0.4397147890634781, 0.4497147890634781, 0.45971478906347807, 0.4697147890634781, 0.4797147890634781, 0.4897147890634781, 0.4997147890634781, 0.5097147890634781, 0.519714789063478, 0.529714789063478, 0.539714789063478, 0.549714789063478, 0.559714789063478, 0.569714789063478, 0.5797147890634781, 0.5897147890634781]}, {"amplitude": [10.332717033861348, 10.382717033861349, 10.432717033861348, 10.482717033861348, 10.532717033861347, 10.582717033861348, 10.632717033861349, 10.682717033861348, 10.732717033861348, 10.782717033861347, 10.832717033861348, 10.882717033861349, 10.932717033861348, 10.982717033861348, 11.032717033861347, 11.082717033861348, 11.132717033861349, 11.182717033861348, 11.232717033861348, 11.282717033861347, 11.332717033861348, 11.382717033861349, 11.432717033861348, 11.482717033861348, 11.532717033861347, 11.582717033861348, 11.632717033861349, 11.682717033861348, 11.732717033861348, 11.782717033861347, 11.832717033861348, 11.882717033861349, 11.932717033861348, 11.982717033861348, 12.032717033861347, 12.082717033861348, 12.132717033861349, 12.182717033861348, 12.232717033861348, 12.282717033861347, 12.332717033861348, 12.382717033861349, 12.432717033861348, 12.482717033861348, 12.532717033861347, 12.582717033861348, 12.632717033861349, 12.682717033861348, 12.732717033861348, 12.782717033861347, 12.832717033861348, 12.882717033861349, 12.932717033861348, 12.982717033861348, 13.032717033861347, 13.082717033861348], "phase": [0.030901699437494753, 0.040901699437494755, 0.05090169943749476, 0.06090169943749475, 0.07090169943749475, 0.08090169943749476, 0.09090169943749475, 0.10090169943749476, 0.11090169943749476, 0.12090169943749475, 0.13090169943749475, 0.14090169943749475, 0.15090169943749476, 0.16090169943749477, 0.17090169943749478, 0.18090169943749473, 0.19090169943749474, 0.20090169943749475, 0.21090169943749476, 0.22090169943749477, 0.23090169943749478, 0.24090169943749473, 0.25090169943749474, 0.26090169943749475, 0.27090169943749476, 0.28090169943749477, 0.2909016994374948, 0.3009016994374948, 0.3109016994374948, 0.32090169943749475, 0.33090169943749476, 0.34090169943749477, 0.3509016994374948, 0.3609016994374948, 0.3709016994374948, 0.3809016994374948, 0.39090169943749475, 0.40090169943749476, 0.41090169943749477, 0.4209016994374948, 0.4309016994374948, 0.4409016994374948, 0.45090169943749475, 0.46090169943749476, 0.47090169943749477, 0.4809016994374948, 0.4909016994374948, 0.5009016994374947, 0.5109016994374947, 0.5209016994374948, 0.5309016994374948, 0.5409016994374948, 0.5509016994374948, 0.5609016994374948, 0.5709016994374948, 0.5809016994374948]}, {"amplitude": [10.20513250996035, 10.255132509960351, 10.30513250996035, 10.35513250996035, 10.40513250996035, 10.45513250996035, 10.505132509960351, 10.55513250996035, 10.60513250996035, 10.65513250996035, 10.70513250996035, 10.755132509960351, 10.80513250996035, 10.85513250996035, 10.90513250996035, 10.95513250996035, 11.005132509960351, 11.05513250996035, 11.10513250996035, 11.15513250996035, 11.20513250996035, 11.255132509960351, 11.30513250996035, 11.35513250996035, 11.40513250996035, 11.45513250996035, 11.505132509960351, 11.55513250996035, 11.60513250996035, 11.65513250996035, 11.70513250996035, 11.755132509960351, 11.80513250996035, 11.85513250996035, 11.90513250996035, 11.95513250996035, 12.005132509960351, 12.05513250996035, 12.10513250996035, 12.15513250996035, 12.20513250996035, 12.255132509960351, 12.30513250996035, 12.35513250996035, 12.40513250996035, 12.45513250996035, 12.505132509960351, 12.55513250996035, 12.60513250996035, 12.65513250996035, 12.70513250996035, 12.755132509960351, 12.80513250996035, 12.85513250996035, 12.90513250996035, 12.95513250996035], "phase": [0.021814324139654277, 0.03181432413965428, 0.041814324139654274, 0.051814324139654276, 0.06181432413965428, 0.07181432413965427, 0.08181432413965428, 0.09181432413965429, 0.10181432413965427, 0.11181432413965428, 0.12181432413965429, 0.13181432413965427, 0.14181432413965428, 0.1518143241396543, 0.1618143241396543, 0.17181432413965428, 0.1818143241396543, 0.1918143241396543, 0.20181432413965428, 0.2118143241396543, 0.2218143241396543, 0.23181432413965428, 0.24181432413965429, 0.25181432413965427, 0.2618143241396543, 0.2718143241396543, 0.2818143241396543, 0.2918143241396543, 0.3018143241396543, 0.31181432413965426, 0.3218143241396543, 0.3318143241396543, 0.3418143241396543, 0.3518143241396543, 0.3618143241396543, 0.3718143241396543, 0.38181432413965427, 0.3918143241396543, 0.4018143241396543, 0.4118143241396543, 0.4218143241396543, 0.4318143241396543, 0.44181432413965427, 0.4518143241396543, 0.4618143241396543, 0.4718143241396543, 0.4818143241396543, 0.4918143241396543, 0.5018143241396542, 0.5118143241396542, 0.5218143241396542, 0.5318143241396542, 0.5418143241396542, 0.5518143241396543, 0.5618143241396543, 0.5718143241396543]}, {"amplitude": [10.106140364898094, 10.156140364898095, 10.206140364898094, 10.256140364898094, 10.306140364898093, 10.356140364898094, 10.406140364898095, 10.456140364898094, 10.506140364898094, 10.556140364898093, 10.606140364898094, 10.656140364898095, 10.706140364898094, 10.756140364898094, 10.806140364898093, 10.856140364898094, 10.906140364898095, 10.956140364898094, 11.006140364898094, 11.056140364898093, 11.106140364898094, 11.156140364898095, 11.206140364898094, 11.256140364898094, 11.306140364898093, 11.356140364898094, 11.406140364898095, 11.456140364898094, 11.506140364898094, 11.556140364898093, 11.606140364898094, 11.656140364898095, 11.706140364898094, 11.756140364898094, 11.806140364898093, 11.856140364898094, 11.906140364898095, 11.956140364898094, 12.006140364898094, 12.056140364898093, 12.106140364898094, 12.156140364898095, 12.206140364898094, 12.256140364898094, 12.306140364898093, 12.356140364898094, 12.406140364898095, 12.456140364898094, 12.506140364898094, 12.556140364898093, 12.606140364898094, 12.656140364898095, 12.706140364898094, 12.756140364898094, 12.806140364898093, 12.856140364898094], "phase": [0.01253332335643041, 0.02253332335643041, 0.03253332335643041, 0.04253332335643041, 0.05253332335643041, 0.06253332335643041, 0.07253332335643041, 0.08253332335643042, 0.09253332335643041, 0.10253332335643041, 0.11253332335643042, 0.12253332335643041, 0.1325333233564304, 0.1425333233564304, 0.1525333233564304, 0.1625333233564304, 0.1725333233564304, 0.1825333233564304, 0.1925333233564304, 0.2025333233564304, 0.2125333233564304, 0.2225333233564304, 0.2325333233564304, 0.2425333233564304, 0.2525333233564304, 0.2625333233564304, 0.27253332335643043, 0.28253332335643044, 0.29253332335643045, 0.3025333233564304, 0.3125333233564304, 0.3225333233564304, 0.33253332335643043, 0.34253332335643044, 0.35253332335643045, 0.36253332335643046, 0.3725333233564304, 0.3825333233564304, 0.39253332335643043, 0.40253332335643044, 0.41253332335643045, 0.42253332335643046, 0.4325333233564304, 0.4425333233564304, 0.45253332335643043, 0.46253332335643044, 0.47253332335643045, 0.48253332335643045, 0.4925333233564304, 0.5025333233564304, 0.5125333233564304, 0.5225333233564304, 0.5325333233564304, 0.5425333233564305, 0.5525333233564305, 0.5625333233564305]}, {"amplitude": [10.025221548086964, 10.075221548086965, 10.125221548086964, 10.175221548086965, 10.225221548086964, 10.275221548086964, 10.325221548086965, 10.375221548086964, 10.425221548086965, 10.475221548086964, 10.525221548086964, 10.575221548086965, 10.625221548086964, 10.675221548086965, 10.725221548086964, 10.775221548086964, 10.825221548086965, 10.875221548086964, 10.925221548086965, 10.975221548086964, 11.025221548086964, 11.075221548086965, 11.125221548086964, 11.175221548086965, 11.225221548086964, 11.275221548086964, 11.325221548086965, 11.375221548086964, 11.425221548086965, 11.475221548086964, 11.525221548086964, 11.575221548086965, 11.625221548086964, 11.675221548086965, 11.725221548086964, 11.775221548086964, 11.825221548086965, 11.875221548086964, 11.925221548086965, 11.975221548086964, 12.025221548086964, 12.075221548086965, 12.125221548086964, 12.175221548086965, 12.225221548086964, 12.275221548086964, 12.325221548086965, 12.375221548086964, 12.425221548086965, 12.475221548086964, 12.525221548086964, 12.575221548086965, 12.625221548086964, 12.675221548086965, 12.725221548086964, 12.775221548086964], "phase": [0.0031410759078128684, 0.013141075907812869, 0.02314107590781287, 0.033141075907812866, 0.04314107590781287, 0.05314107590781287, 0.06314107590781287, 0.07314107590781288, 0.08314107590781288, 0.09314107590781287, 0.10314107590781288, 0.11314107590781287, 0.12314107590781287, 0.13314107590781288, 0.1431410759078129, 0.15314107590781287, 0.16314107590781288, 0.17314107590781289, 0.18314107590781287, 0.19314107590781288, 0.20314107590781288, 0.21314107590781287, 0.22314107590781287, 0.23314107590781288, 0.24314107590781286, 0.2531410759078129, 0.2631410759078129, 0.2731410759078129, 0.2831410759078129, 0.29314107590781285, 0.30314107590781286, 0.31314107590781287, 0.3231410759078129, 0.3331410759078129, 0.3431410759078129, 0.3531410759078129, 0.36314107590781286, 0.37314107590781287, 0.3831410759078129, 0.3931410759078129, 0.4031410759078129, 0.4131410759078129, 0.42314107590781286, 0.43314107590781287, 0.4431410759078129, 0.4531410759078129, 0.4631410759078129, 0.4731410759078129, 0.48314107590781286, 0.49314107590781286, 0.5031410759078129, 0.5131410759078129, 0.5231410759078129, 0.5331410759078129, 0.5431410759078129, 0.5531410759078129]}, {"amplitude": [9.94902592709083, 9.99902592709083, 10.04902592709083, 10.09902592709083, 10.149025927090829, 10.19902592709083, 10.24902592709083, 10.29902592709083, 10.34902592709083, 10.399025927090829, 10.44902592709083, 10.49902592709083, 10.54902592709083, 10.59902592709083, 10.649025927090829, 10.69902592709083, 10.74902592709083, 10.79902592709083, 10.84902592709083, 10.899025927090829, 10.94902592709083, 10.99902592709083, 11.04902592709083, 11.09902592709083, 11.149025927090829, 11.19902592709083, 11.24902592709083, 11.29902592709083, 11.34902592709083, 11.399025927090829, 11.44902592709083, 11.49902592709083, 11.54902592709083, 11.59902592709083, 11.649025927090829, 11.69902592709083, 11.74902592709083, 11.79902592709083, 11.84902592709083, 11.899025927090829, 11.94902592709083, 11.99902592709083, 12.04902592709083, 12.09902592709083, 12.149025927090829, 12.19902592709083, 12.24902592709083, 12.29902592709083, 12.34902592709083, 12.399025927090829, 12.44902592709083, 12.49902592709083, 12.54902592709083, 12.59902592709083, 12.649025927090829, 12.69902592709083], "phase": [-0.006279051952931335, 0.003720948047068665, 0.013720948047068665, 0.023720948047068664, 0.03372094804706867, 0.043720948047068664, 0.05372094804706866, 0.06372094804706867, 0.07372094804706866, 0.08372094804706866, 0.09372094804706867, 0.10372094804706866, 0.11372094804706866, 0.12372094804706867, 0.1337209480470687, 0.14372094804706867, 0.15372094804706868, 0.1637209480470687, 0.17372094804706867, 0.18372094804706868, 0.1937209480470687, 0.20372094804706867, 0.21372094804706868, 0.22372094804706869, 0.23372094804706867, 0.24372094804706868, 0.2537209480470687, 0.2637209480470687, 0.2737209480470687, 0.28372094804706866, 0.29372094804706866, 0.3037209480470687, 0.3137209480470687, 0.3237209480470687, 0.3337209480470687, 0.3437209480470687, 0.35372094804706866, 0.36372094804706867, 0.3737209480470687, 0.3837209480470687, 0.3937209480470687, 0.4037209480470687, 0.41372094804706866, 0.42372094804706867, 0.4337209480470687, 0.4437209480470687, 0.4537209480470687, 0.4637209480470687, 0.47372094804706866, 0.48372094804706867, 0.4937209480470687, 0.5037209480470687, 0.5137209480470687, 0.5237209480470687, 0.5337209480470687, 0.5437209480470687]}, {"amplitude": [9.863466645607279, 9.91346664560728, 9.96346664560728, 10.01346664560728, 10.063466645607278, 10.113466645607279, 10.16346664560728, 10.21346664560728, 10.26346664560728, 10.313466645607278, 10.363466645607279, 10.41346664560728, 10.46346664560728, 10.51346664560728, 10.563466645607278, 10.613466645607279, 10.66346664560728, 10.71346664560728, 10.76346664560728, 10.813466645607278, 10.863466645607279, 10.91346664560728, 10.96346664560728, 11.01346664560728, 11.063466645607278, 11.113466645607279, 11.16346664560728, 11.21346664560728, 11.26346664560728, 11.313466645607278, 11.363466645607279, 11.41346664560728, 11.46346664560728, 11.51346664560728, 11.563466645607278, 11.613466645607279, 11.66346664560728, 11.71346664560728, 11.76346664560728, 11.813466645607278, 11.863466645607279, 11.91346664560728, 11.96346664560728, 12.01346664560728, 12.063466645607278, 12.113466645607279, 12.16346664560728, 12.21346664560728, 12.26346664560728, 12.313466645607278, 12.363466645607279, 12.41346664560728, 12.46346664560728, 12.51346664560728, 12.563466645607278, 12.613466645607279], "phase": [-0.015643446504023075, -0.005643446504023075, 0.004356553495976925, 0.014356553495976924, 0.024356553495976926, 0.034356553495976924, 0.04435655349597692, 0.05435655349597693, 0.06435655349597692, 0.07435655349597692, 0.08435655349597693, 0.09435655349597692, 0.10435655349597692, 0.11435655349597693, 0.12435655349597693, 0.13435655349597692, 0.14435655349597692, 0.15435655349597693, 0.16435655349597691, 0.17435655349597692, 0.18435655349597693, 0.1943565534959769, 0.20435655349597692, 0.21435655349597693, 0.2243565534959769, 0.23435655349597692, 0.24435655349597693, 0.25435655349597697, 0.264356553495977, 0.27435655349597693, 0.28435655349597694, 0.29435655349597695, 0.30435655349597696, 0.31435655349597696, 0.324356553495977, 0.334356553495977, 0.34435655349597694, 0.35435655349597694, 0.36435655349597695, 0.37435655349597696, 0.38435655349597697, 0.394356553495977, 0.40435655349597693, 0.41435655349597694, 0.42435655349597695, 0.43435655349597696, 0.44435655349597697, 0.454356553495977, 0.46435655349597693, 0.47435655349597694, 0.48435655349597695, 0.49435655349597696, 0.504356553495977, 0.514356553495977, 0.524356553495977, 0.534356553495977]}, {"amplitude": [9.755918603320897, 9.805918603320897, 9.855918603320896, 9.905918603320897, 9.955918603320896, 10.005918603320897, 10.055918603320897, 10.105918603320896, 10.155918603320897, 10.205918603320896, 10.255918603320897, 10.305918603320897, 10.355918603320896, 10.405918603320897, 10.455918603320896, 10.505918603320897, 10.555918603320897, 10.605918603320896, 10.655918603320897, 10.705918603320896, 10.755918603320897, 10.805918603320897, 10.855918603320896, 10.905918603320897, 10.955918603320896, 11.005918603320897, 11.055918603320897, 11.105918603320896, 11.155918603320897, 11.205918603320896, 11.255918603320897, 11.305918603320897, 11.355918603320896, 11.405918603320897, 11.455918603320896, 11.505918603320897, 11.555918603320897, 11.605918603320896, 11.655918603320897, 11.705918603320896, 11.755918603320897, 11.805918603320897, 11.855918603320896, 11.905918603320897, 11.955918603320896, 12.005918603320897, 12.055918603320897, 12.105918603320896, 12.155918603320897, 12.205918603320896, 12.255918603320897, 12.305918603320897, 12.355918603320896, 12.405918603320897, 12.455918603320896, 12.505918603320897], "phase": [-0.02486898871648546, -0.01486898871648546, -0.004868988716485459, 0.0051310112835145395, 0.015131011283514541, 0.025131011283514543, 0.035131011283514535, 0.045131011283514544, 0.05513101128351454, 0.06513101128351453, 0.07513101128351454, 0.08513101128351454, 0.09513101128351453, 0.10513101128351454, 0.11513101128351455, 0.12513101128351453, 0.13513101128351454, 0.14513101128351455, 0.15513101128351453, 0.16513101128351454, 0.17513101128351455, 0.18513101128351453, 0.19513101128351454, 0.20513101128351455, 0.21513101128351453, 0.22513101128351454, 0.23513101128351455, 0.24513101128351455, 0.25513101128351456, 0.2651310112835145, 0.2751310112835145, 0.28513101128351453, 0.29513101128351454, 0.30513101128351455, 0.31513101128351456, 0.32513101128351457, 0.3351310112835145, 0.34513101128351453, 0.35513101128351454, 0.36513101128351455, 0.37513101128351456, 0.38513101128351457, 0.3951310112835145, 0.40513101128351453, 0.41513101128351454, 0.42513101128351455, 0.43513101128351456, 0.44513101128351457, 0.4551310112835145, 0.46513101128351453, 0.47513101128351454, 0.48513101128351455, 0.49513101128351455, 0.5051310112835146, 0.5151310112835146, 0.5251310112835146]}, {"amplitude": [9.617210334728023, 9.667210334728024, 9.717210334728023, 9.767210334728023, 9.817210334728022, 9.867210334728023, 9.917210334728024, 9.967210334728023, 10.017210334728023, 10.067210334728022, 10.117210334728023, 10.167210334728024, 10.217210334728023, 10.267210334728023, 10.317210334728022, 10.367210334728023, 10.417210334728024, 10.467210334728023, 10.517210334728023, 10.567210334728022, 10.617210334728023, 10.667210334728024, 10.717210334728023, 10.767210334728023, 10.817210334728022, 10.867210334728023, 10.917210334728024, 10.967210334728023, 11.017210334728023, 11.067210334728022, 11.117210334728023, 11.167210334728024, 11.217210334728023, 11.267210334728023, 11.317210334728022, 11.367210334728023, 11.417210334728024, 11.467210334728023, 11.517210334728023, 11.567210334728022, 11.617210334728023, 11.667210334728024, 11.717210334728023, 11.767210334728023, 11.817210334728022, 11.867210334728023, 11.917210334728024, 11.967210334728023, 12.017210334728023, 12.067210334728022, 12.117210334728023, 12.167210334728024, 12.217210334728023, 12.267210334728023, 12.317210334728022, 12.367210334728023], "phase": [-0.03387379202452915, -0.023873792024529147, -0.013873792024529149, -0.0038737920245291504, 0.0061262079754708515, 0.016126207975470853, 0.02612620797547085, 0.03612620797547086, 0.04612620797547085, 0.05612620797547085, 0.06612620797547086, 0.07612620797547084, 0.08612620797547085, 0.09612620797547086, 0.10612620797547087, 0.11612620797547085, 0.12612620797547086, 0.13612620797547087, 0.14612620797547085, 0.15612620797547086, 0.16612620797547087, 0.17612620797547085, 0.18612620797547086, 0.19612620797547087, 0.20612620797547085, 0.21612620797547086, 0.22612620797547087, 0.23612620797547088, 0.24612620797547088, 0.2561262079754708, 0.2661262079754708, 0.2761262079754708, 0.28612620797547084, 0.29612620797547085, 0.30612620797547085, 0.31612620797547086, 0.3261262079754708, 0.3361262079754708, 0.34612620797547083, 0.35612620797547084, 0.36612620797547085, 0.37612620797547086, 0.3861262079754708, 0.3961262079754708, 0.40612620797547083, 0.41612620797547084, 0.42612620797547085, 0.43612620797547086, 0.4461262079754708, 0.4561262079754708, 0.46612620797547083, 0.47612620797547084, 0.48612620797547085, 0.49612620797547086, 0.5061262079754709, 0.5161262079754709]}, {"amplitude": [9.443127592088462, 9.493127592088463, 9.543127592088462, 9.593127592088463, 9.643127592088462, 9.693127592088462, 9.743127592088463, 9.793127592088462, 9.843127592088463, 9.893127592088462, 9.943127592088462, 9.993127592088463, 10.043127592088462, 10.093127592088463, 10.143127592088462, 10.193127592088462, 10.243127592088463, 10.293127592088462, 10.343127592088463, 10.393127592088462, 10.443127592088462, 10.493127592088463, 10.543127592088462, 10.593127592088463, 10.643127592088462, 10.693127592088462, 10.743127592088463, 10.793127592088462, 10.843127592088463, 10.893127592088462, 10.943127592088462, 10.993127592088463, 11.043127592088462, 11.093127592088463, 11.143127592088462, 11.193127592088462, 11.243127592088463, 11.293127592088462, 11.343127592088463, 11.393127592088462, 11.443127592088462, 11.493127592088463, 11.543127592088462, 11.593127592088463, 11.643127592088462, 11.693127592088462, 11.743127592088463, 11.793127592088462, 11.843127592088463, 11.893127592088462, 11.943127592088462, 11.993127592088463, 12.043127592088462, 12.093127592088463, 12.143127592088462, 12.193127592088462], "phase": [-0.04257792915650723, -0.03257792915650723, -0.02257792915650723, -0.012577929156507232, -0.0025779291565072304, 0.0074220708434927715, 0.017422070843492767, 0.027422070843492775, 0.03742207084349277, 0.047422070843492765, 0.057422070843492774, 0.06742207084349278, 0.07742207084349276, 0.08742207084349277, 0.09742207084349278, 0.10742207084349276, 0.11742207084349277, 0.12742207084349277, 0.13742207084349276, 0.14742207084349276, 0.15742207084349277, 0.16742207084349275, 0.17742207084349276, 0.18742207084349277, 0.19742207084349275, 0.20742207084349276, 0.21742207084349277, 0.22742207084349278, 0.2374220708434928, 0.24742207084349274, 0.2574220708434928, 0.2674220708434928, 0.2774220708434928, 0.2874220708434928, 0.2974220708434928, 0.3074220708434928, 0.3174220708434928, 0.3274220708434928, 0.3374220708434928, 0.3474220708434928, 0.3574220708434928, 0.3674220708434928, 0.3774220708434928, 0.3874220708434928, 0.3974220708434928, 0.4074220708434928, 0.4174220708434928, 0.4274220708434928, 0.43742207084349277, 0.4474220708434928, 0.4574220708434928, 0.4674220708434928, 0.4774220708434928, 0.4874220708434928, 0.4974220708434928, 0.5074220708434928]}, {"amplitude": [9.235215546149863, 9.285215546149864, 9.335215546149863, 9.385215546149864, 9.435215546149863, 9.485215546149863, 9.535215546149864, 9.585215546149863, 9.635215546149864, 9.685215546149863, 9.735215546149863, 9.785215546149864, 9.835215546149863, 9.885215546149864, 9.935215546149863, 9.985215546149863, 10.035215546149864, 10.085215546149863, 10.135215546149864, 10.185215546149863, 10.235215546149863, 10.285215546149864, 10.335215546149863, 10.385215546149864, 10.435215546149863, 10.485215546149863, 10.535215546149864, 10.585215546149863, 10.635215546149864, 10.685215546149863, 10.735215546149863, 10.785215546149864, 10.835215546149863, 10.885215546149864, 10.935215546149863, 10.985215546149863, 11.035215546149864, 11.085215546149863, 11.135215546149864, 11.185215546149863, 11.235215546149863, 11.285215546149864, 11.335215546149863, 11.385215546149864, 11.435215546149863, 11.485215546149863, 11.535215546149864, 11.585215546149863, 11.635215546149864, 11.685215546149863, 11.735215546149863, 11.785215546149864, 11.835215546149863, 11.885215546149864, 11.935215546149863, 11.985215546149863], "phase": [-0.05090414157503712, -0.04090414157503712, -0.03090414157503712, -0.020904141575037123, -0.010904141575037121, -0.0009041415750371193, 0.009095858424962876, 0.019095858424962885, 0.02909585842496288, 0.039095858424962875, 0.049095858424962883, 0.05909585842496288, 0.06909585842496288, 0.07909585842496289, 0.0890958584249629, 0.09909585842496288, 0.10909585842496289, 0.1190958584249629, 0.12909585842496288, 0.1390958584249629, 0.1490958584249629, 0.15909585842496288, 0.16909585842496289, 0.1790958584249629, 0.18909585842496288, 0.19909585842496288, 0.2090958584249629, 0.2190958584249629, 0.2290958584249629, 0.23909585842496286, 0.24909585842496287, 0.25909585842496285, 0.26909585842496286, 0.2790958584249629, 0.2890958584249629, 0.2990958584249629, 0.30909585842496284, 0.31909585842496285, 0.32909585842496286, 0.33909585842496287, 0.3490958584249629, 0.3590958584249629, 0.36909585842496284, 0.37909585842496285, 0.38909585842496286, 0.39909585842496287, 0.4090958584249629, 0.4190958584249629, 0.42909585842496284, 0.43909585842496285, 0.44909585842496286, 0.45909585842496287, 0.4690958584249629, 0.4790958584249629, 0.4890958584249629, 0.4990958584249629]}, {"amplitude": [9.000765071102796, 9.050765071102797, 9.100765071102796, 9.150765071102796, 9.200765071102795, 9.250765071102796, 9.300765071102797, 9.350765071102796, 9.400765071102796, 9.450765071102795, 9.500765071102796, 9.550765071102797, 9.600765071102796, 9.650765071102796, 9.700765071102795, 9.750765071102796, 9.800765071102797, 9.850765071102796, 9.900765071102796, 9.950765071102795, 10.000765071102796, 10.050765071102797, 10.100765071102796, 10.150765071102796, 10.200765071102795, 10.250765071102796, 10.300765071102797, 10.350765071102796, 10.400765071102796, 10.450765071102795, 10.500765071102796, 10.550765071102797, 10.600765071102796, 10.650765071102796, 10.700765071102795, 10.750765071102796, 10.800765071102797, 10.850765071102796, 10.900765071102796, 10.950765071102795, 11.000765071102796, 11.050765071102797, 11.100765071102796, 11.150765071102796, 11.200765071102795, 11.250765071102796, 11.300765071102797, 11.350765071102796, 11.400765071102796, 11.450765071102795, 11.500765071102796, 11.550765071102797, 11.600765071102796, 11.650765071102796, 11.700765071102795, 11.750765071102796], "phase": [-0.05877852522924731, -0.048778525229247305, -0.03877852522924731, -0.028778525229247308, -0.018778525229247306, -0.008778525229247304, 0.001221474770752691, 0.0112214747707527, 0.021221474770752695, 0.03122147477075269, 0.0412214747707527, 0.051221474770752694, 0.06122147477075269, 0.07122147477075269, 0.0812214747707527, 0.09122147477075268, 0.10122147477075269, 0.1112214747707527, 0.12122147477075268, 0.1312214747707527, 0.1412214747707527, 0.15122147477075268, 0.1612214747707527, 0.1712214747707527, 0.18122147477075268, 0.1912214747707527, 0.2012214747707527, 0.2112214747707527, 0.2212214747707527, 0.23122147477075267, 0.24122147477075268, 0.2512214747707527, 0.2612214747707527, 0.2712214747707527, 0.2812214747707527, 0.2912214747707527, 0.3012214747707527, 0.3112214747707527, 0.3212214747707527, 0.3312214747707527, 0.3412214747707527, 0.3512214747707527, 0.36122147477075267, 0.3712214747707527, 0.3812214747707527, 0.3912214747707527, 0.4012214747707527, 0.4112214747707527, 0.42122147477075267, 0.4312214747707527, 0.4412214747707527, 0.4512214747707527, 0.4612214747707527, 0.4712214747707527, 0.4812214747707527, 0.49122147477075273]}, {"amplitude": [8.751983235502154, 8.801983235502155, 8.851983235502153, 8.901983235502154, 8.951983235502153, 9.001983235502154, 9.051983235502155, 9.101983235502153, 9.151983235502154, 9.201983235502153, 9.251983235502154, 9.301983235502155, 9.351983235502153, 9.401983235502154, 9.451983235502153, 9.501983235502154, 9.551983235502155, 9.601983235502153, 9.651983235502154, 9.701983235502153, 9.751983235502154, 9.801983235502155, 9.851983235502153, 9.901983235502154, 9.951983235502153, 10.001983235502154, 10.051983235502155, 10.101983235502153, 10.151983235502154, 10.201983235502153, 10.251983235502154, 10.301983235502155, 10.351983235502153, 10.401983235502154, 10.451983235502153, 10.501983235502154, 10.551983235502155, 10.601983235502153, 10.651983235502154, 10.701983235502153, 10.751983235502154, 10.801983235502155, 10.851983235502153, 10.901983235502154, 10.951983235502153, 11.001983235502154, 11.051983235502155, 11.101983235502153, 11.151983235502154, 11.201983235502153, 11.251983235502154, 11.301983235502155, 11.351983235502153, 11.401983235502154, 11.451983235502153, 11.501983235502154], "phase": [-0.06613118653236515, -0.056131186532365145, -0.04613118653236514, -0.03613118653236515, -0.026131186532365146, -0.016131186532365144, -0.006131186532365149, 0.00386881346763486, 0.013868813467634855, 0.02386881346763485, 0.03386881346763486, 0.043868813467634854, 0.05386881346763485, 0.06386881346763486, 0.07386881346763487, 0.08386881346763485, 0.09386881346763486, 0.10386881346763487, 0.11386881346763485, 0.12386881346763486, 0.13386881346763485, 0.14386881346763486, 0.15386881346763487, 0.16386881346763488, 0.17386881346763483, 0.18386881346763484, 0.19386881346763485, 0.20386881346763486, 0.21386881346763487, 0.22386881346763482, 0.23386881346763483, 0.24386881346763484, 0.25386881346763485, 0.26386881346763486, 0.27386881346763486, 0.2838688134676349, 0.2938688134676348, 0.30386881346763484, 0.31386881346763484, 0.32386881346763485, 0.33386881346763486, 0.34386881346763487, 0.3538688134676348, 0.36386881346763483, 0.37386881346763484, 0.38386881346763485, 0.39386881346763486, 0.40386881346763487, 0.4138688134676348, 0.42386881346763483, 0.43386881346763484, 0.44386881346763485, 0.45386881346763486, 0.46386881346763487, 0.4738688134676349, 0.4838688134676349]}, {"amplitude": [8.504462775087886, 8.554462775087886, 8.604462775087885, 8.654462775087886, 8.704462775087885, 8.754462775087886, 8.804462775087886, 8.854462775087885, 8.904462775087886, 8.954462775087885, 9.004462775087886, 9.054462775087886, 9.104462775087885, 9.154462775087886, 9.204462775087885, 9.254462775087886, 9.304462775087886, 9.354462775087885, 9.404462775087886, 9.454462775087885, 9.504462775087886, 9.554462775087886, 9.604462775087885, 9.654462775087886, 9.704462775087885, 9.754462775087886, 9.804462775087886, 9.854462775087885, 9.904462775087886, 9.954462775087885, 10.004462775087886, 10.054462775087886, 10.104462775087885, 10.154462775087886, 10.204462775087885, 10.254462775087886, 10.304462775087886, 10.354462775087885, 10.404462775087886, 10.454462775087885, 10.504462775087886, 10.554462775087886, 10.604462775087885, 10.654462775087886, 10.704462775087885, 10.754462775087886, 10.804462775087886, 10.854462775087885, 10.904462775087886, 10.954462775087885, 11.004462775087886, 11.054462775087886, 11.104462775087885, 11.154462775087886, 11.204462775087885, 11.254462775087886], "phase": [-0.07289686274214116, -0.06289686274214117, -0.05289686274214116, -0.04289686274214116, -0.03289686274214116, -0.022896862742141158, -0.012896862742141163, -0.002896862742141154, 0.007103137257858841, 0.017103137257858836, 0.027103137257858845, 0.03710313725785884, 0.047103137257858835, 0.057103137257858844, 0.06710313725785885, 0.07710313725785883, 0.08710313725785884, 0.09710313725785885, 0.10710313725785883, 0.11710313725785884, 0.12710313725785885, 0.13710313725785883, 0.14710313725785884, 0.15710313725785885, 0.16710313725785883, 0.17710313725785884, 0.18710313725785885, 0.19710313725785886, 0.20710313725785887, 0.21710313725785882, 0.22710313725785883, 0.23710313725785884, 0.24710313725785885, 0.2571031372578588, 0.26710313725785884, 0.27710313725785884, 0.28710313725785885, 0.29710313725785886, 0.30710313725785887, 0.3171031372578589, 0.3271031372578589, 0.3371031372578589, 0.3471031372578588, 0.3571031372578588, 0.3671031372578588, 0.3771031372578588, 0.38710313725785883, 0.39710313725785884, 0.40710313725785885, 0.41710313725785886, 0.42710313725785887, 0.4371031372578589, 0.4471031372578589, 0.4571031372578589, 0.4671031372578589, 0.4771031372578589]}, {"amplitude": [8.275163873018105, 8.325163873018106, 8.375163873018105, 8.425163873018105, 8.475163873018104, 8.525163873018105, 8.575163873018106, 8.625163873018105, 8.675163873018105, 8.725163873018104, 8.775163873018105, 8.825163873018106, 8.875163873018105, 8.925163873018105, 8.975163873018104, 9.025163873018105, 9.075163873018106, 9.125163873018105, 9.175163873018105, 9.225163873018104, 9.275163873018105, 9.325163873018106, 9.375163873018105, 9.425163873018105, 9.475163873018104, 9.525163873018105, 9.575163873018106, 9.625163873018105, 9.675163873018105, 9.725163873018104, 9.775163873018105, 9.825163873018106, 9.875163873018105, 9.925163873018105, 9.975163873018104, 10.025163873018105, 10.075163873018106, 10.125163873018105, 10.175163873018105, 10.225163873018104, 10.275163873018105, 10.325163873018106, 10.375163873018105, 10.425163873018105, 10.475163873018104, 10.525163873018105, 10.575163873018106, 10.625163873018105, 10.675163873018105, 10.725163873018104, 10.775163873018105, 10.825163873018106, 10.875163873018105, 10.925163873018105, 10.975163873018104, 11.025163873018105], "phase": [-0.07901550123756905, -0.06901550123756905, -0.059015501237569046, -0.04901550123756905, -0.03901550123756905, -0.029015501237569047, -0.019015501237569052, -0.009015501237569043, 0.000984498762430952, 0.010984498762430947, 0.020984498762430956, 0.03098449876243095, 0.040984498762430946, 0.050984498762430955, 0.060984498762430964, 0.07098449876243094, 0.08098449876243095, 0.09098449876243096, 0.10098449876243094, 0.11098449876243095, 0.12098449876243096, 0.13098449876243096, 0.14098449876243097, 0.15098449876243097, 0.16098449876243093, 0.17098449876243094, 0.18098449876243095, 0.19098449876243095, 0.20098449876243096, 0.21098449876243092, 0.22098449876243093, 0.23098449876243093, 0.24098449876243094, 0.25098449876243095, 0.26098449876243096, 0.27098449876243097, 0.2809844987624309, 0.29098449876243093, 0.30098449876243094, 0.31098449876243095, 0.32098449876243096, 0.33098449876243097, 0.3409844987624309, 0.35098449876243093, 0.36098449876243094, 0.37098449876243095, 0.38098449876243096, 0.39098449876243097, 0.4009844987624309, 0.4109844987624309, 0.42098449876243094, 0.43098449876243095, 0.44098449876243095, 0.45098449876243096, 0.46098449876243097, 0.470984498762431]}, {"amplitude": [8.080190176163232, 8.130190176163232, 8.180190176163231, 8.230190176163232, 8.28019017616323, 8.330190176163232, 8.380190176163232, 8.430190176163231, 8.480190176163232, 8.53019017616323, 8.580190176163232, 8.630190176163232, 8.680190176163231, 8.730190176163232, 8.78019017616323, 8.830190176163232, 8.880190176163232, 8.930190176163231, 8.980190176163232, 9.03019017616323, 9.080190176163232, 9.130190176163232, 9.180190176163231, 9.230190176163232, 9.28019017616323, 9.330190176163232, 9.380190176163232, 9.430190176163231, 9.480190176163232, 9.53019017616323, 9.580190176163232, 9.630190176163232, 9.680190176163231, 9.730190176163232, 9.78019017616323, 9.830190176163232, 9.880190176163232, 9.930190176163231, 9.980190176163232, 10.03019017616323, 10.080190176163232, 10.130190176163232, 10.180190176163231, 10.230190176163232, 10.28019017616323, 10.330190176163232, 10.380190176163232, 10.430190176163231, 10.480190176163232, 10.53019017616323, 10.580190176163232, 10.630190176163232, 10.680190176163231, 10.730190176163232, 10.78019017616323, 10.830190176163232], "phase": [-0.08443279255020153, -0.07443279255020153, -0.06443279255020153, -0.05443279255020153, -0.04443279255020153, -0.03443279255020153, -0.024432792550201532, -0.014432792550201523, -0.004432792550201528, 0.005567207449798467, 0.015567207449798476, 0.02556720744979847, 0.035567207449798466, 0.045567207449798475, 0.055567207449798484, 0.06556720744979846, 0.07556720744979847, 0.08556720744979848, 0.09556720744979846, 0.10556720744979847, 0.11556720744979848, 0.12556720744979846, 0.13556720744979847, 0.14556720744979848, 0.15556720744979846, 0.16556720744979847, 0.17556720744979848, 0.1855672074497985, 0.1955672074497985, 0.20556720744979845, 0.21556720744979846, 0.22556720744979847, 0.23556720744979848, 0.24556720744979849, 0.2555672074497985, 0.2655672074497985, 0.27556720744979846, 0.28556720744979847, 0.2955672074497985, 0.3055672074497985, 0.3155672074497985, 0.3255672074497985, 0.33556720744979845, 0.34556720744979846, 0.3555672074497985, 0.3655672074497985, 0.3755672074497985, 0.3855672074497985, 0.39556720744979845, 0.40556720744979846, 0.41556720744979847, 0.4255672074497985, 0.4355672074497985, 0.4455672074497985, 0.4555672074497985, 0.4655672074497985]}, {"amplitude": [7.932669996734718, 7.982669996734718, 8.032669996734718, 8.082669996734719, 8.132669996734716, 8.182669996734717, 8.232669996734717, 8.282669996734718, 8.332669996734719, 8.382669996734716, 8.432669996734717, 8.482669996734717, 8.532669996734718, 8.582669996734719, 8.632669996734716, 8.682669996734717, 8.732669996734717, 8.782669996734718, 8.832669996734719, 8.882669996734716, 8.932669996734717, 8.982669996734717, 9.032669996734718, 9.082669996734719, 9.132669996734716, 9.182669996734717, 9.232669996734717, 9.282669996734718, 9.332669996734719, 9.382669996734716, 9.432669996734717, 9.482669996734717, 9.532669996734718, 9.582669996734719, 9.632669996734716, 9.682669996734717, 9.732669996734717, 9.782669996734718, 9.832669996734719, 9.882669996734716, 9.932669996734717, 9.982669996734717, 10.032669996734718, 10.082669996734719, 10.132669996734716, 10.182669996734717, 10.232669996734717, 10.282669996734718, 10.332669996734719, 10.382669996734716, 10.432669996734717, 10.482669996734717, 10.532669996734718, 10.582669996734719, 10.632669996734716, 10.682669996734717], "phase": [-0.08910065241883679, -0.07910065241883679, -0.06910065241883678, -0.05910065241883679, -0.049100652418836786, -0.039100652418836784, -0.02910065241883679, -0.01910065241883678, -0.009100652418836785, 0.0008993475811632096, 0.010899347581163218, 0.020899347581163213, 0.03089934758116321, 0.04089934758116322, 0.050899347581163226, 0.06089934758116321, 0.07089934758116322, 0.08089934758116323, 0.0908993475811632, 0.10089934758116322, 0.11089934758116322, 0.1208993475811632, 0.13089934758116323, 0.14089934758116324, 0.1508993475811632, 0.1608993475811632, 0.1708993475811632, 0.18089934758116322, 0.19089934758116323, 0.20089934758116318, 0.2108993475811632, 0.2208993475811632, 0.2308993475811632, 0.24089934758116321, 0.2508993475811632, 0.26089934758116323, 0.2708993475811632, 0.2808993475811632, 0.2908993475811632, 0.3008993475811632, 0.3108993475811632, 0.32089934758116323, 0.3308993475811632, 0.3408993475811632, 0.3508993475811632, 0.3608993475811632, 0.3708993475811632, 0.38089934758116323, 0.3908993475811632, 0.4008993475811632, 0.4108993475811632, 0.4208993475811632, 0.4308993475811632, 0.4408993475811632, 0.45089934758116323, 0.46089934758116324]}, {"amplitude": [7.841039009695017, 7.891039009695017, 7.941039009695016, 7.991039009695017, 8.041039009695016, 8.091039009695017, 8.141039009695017, 8.191039009695016, 8.241039009695017, 8.291039009695016, 8.341039009695017, 8.391039009695017, 8.441039009695016, 8.491039009695017, 8.541039009695016, 8.591039009695017, 8.641039009695017, 8.691039009695016, 8.741039009695017, 8.791039009695016, 8.841039009695017, 8.891039009695017, 8.941039009695016, 8.991039009695017, 9.041039009695016, 9.091039009695017, 9.141039009695017, 9.191039009695016, 9.241039009695017, 9.291039009695016, 9.341039009695017, 9.391039009695017, 9.441039009695016, 9.491039009695017, 9.541039009695016, 9.591039009695017, 9.641039009695017, 9.691039009695016, 9.741039009695017, 9.791039009695016, 9.841039009695017, 9.891039009695017, 9.941039009695016, 9.991039009695017, 10.041039009695016, 10.091039009695017, 10.141039009695017, 10.191039009695016, 10.241039009695017, 10.291039009695016, 10.341039009695017, 10.391039009695017, 10.441039009695016, 10.491039009695017, 10.541039009695016, 10.591039009695017], "phase": [-0.09297764858882512, -0.08297764858882513, -0.07297764858882512, -0.06297764858882512, -0.05297764858882512, -0.04297764858882512, -0.032977648588825126, -0.022977648588825117, -0.012977648588825122, -0.002977648588825127, 0.007022351411174882, 0.017022351411174877, 0.027022351411174872, 0.03702235141117488, 0.04702235141117489, 0.05702235141117487, 0.06702235141117488, 0.07702235141117489, 0.08702235141117487, 0.09702235141117488, 0.10702235141117489, 0.11702235141117487, 0.12702235141117488, 0.1370223514111749, 0.14702235141117487, 0.15702235141117488, 0.16702235141117489, 0.1770223514111749, 0.1870223514111749, 0.19702235141117486, 0.20702235141117487, 0.21702235141117487, 0.22702235141117488, 0.2370223514111749, 0.2470223514111749, 0.2570223514111749, 0.26702235141117486, 0.27702235141117487, 0.2870223514111749, 0.2970223514111749, 0.3070223514111749, 0.3170223514111749, 0.32702235141117486, 0.33702235141117487, 0.3470223514111749, 0.3570223514111749, 0.3670223514111749, 0.3770223514111749, 0.38702235141117486, 0.39702235141117487, 0.4070223514111749, 0.4170223514111749, 0.4270223514111749, 0.4370223514111749, 0.4470223514111749, 0.4570223514111749]}, {"amplitude": [7.807964512906309, 7.857964512906309, 7.907964512906308, 7.957964512906309, 8.007964512906307, 8.057964512906308, 8.107964512906308, 8.157964512906307, 8.207964512906308, 8.257964512906307, 8.307964512906308, 8.357964512906308, 8.407964512906307, 8.457964512906308, 8.507964512906307, 8.557964512906308, 8.607964512906308, 8.657964512906307, 8.707964512906308, 8.757964512906307, 8.807964512906308, 8.857964512906308, 8.907964512906307, 8.957964512906308, 9.007964512906307, 9.057964512906308, 9.107964512906308, 9.157964512906307, 9.207964512906308, 9.257964512906307, 9.307964512906308, 9.357964512906308, 9.407964512906307, 9.457964512906308, 9.507964512906307, 9.557964512906308, 9.607964512906308, 9.657964512906307, 9.707964512906308, 9.757964512906307, 9.807964512906308, 9.857964512906308, 9.907964512906307, 9.957964512906308, 10.007964512906307, 10.057964512906308, 10.107964512906308, 10.157964512906307, 10.207964512906308, 10.257964512906307, 10.307964512906308, 10.357964512906308, 10.407964512906307, 10.457964512906308, 10.507964512906307, 10.557964512906308], "phase": [-0.0960293685676943, -0.0860293685676943, -0.0760293685676943, -0.0660293685676943, -0.0560293685676943, -0.046029368567694295, -0.0360293685676943, -0.02602936856769429, -0.016029368567694297, -0.0060293685676943015, 0.003970631432305707, 0.013970631432305702, 0.023970631432305697, 0.033970631432305706, 0.043970631432305715, 0.053970631432305696, 0.0639706314323057, 0.07397063143230571, 0.0839706314323057, 0.0939706314323057, 0.10397063143230571, 0.1139706314323057, 0.1239706314323057, 0.1339706314323057, 0.1439706314323057, 0.15397063143230572, 0.16397063143230572, 0.17397063143230573, 0.18397063143230574, 0.1939706314323057, 0.2039706314323057, 0.2139706314323057, 0.22397063143230572, 0.23397063143230573, 0.24397063143230574, 0.25397063143230575, 0.2639706314323057, 0.2739706314323057, 0.2839706314323057, 0.29397063143230573, 0.30397063143230574, 0.31397063143230575, 0.3239706314323057, 0.3339706314323057, 0.3439706314323057, 0.3539706314323057, 0.36397063143230574, 0.37397063143230574, 0.3839706314323057, 0.3939706314323057, 0.4039706314323057, 0.4139706314323057, 0.42397063143230573, 0.43397063143230574, 0.44397063143230575, 0.45397063143230576]}, {"amplitude": [7.830061366764015, 7.880061366764016, 7.930061366764015, 7.980061366764016, 8.030061366764015, 8.080061366764015, 8.130061366764016, 8.180061366764015, 8.230061366764016, 8.280061366764015, 8.330061366764015, 8.380061366764016, 8.430061366764015, 8.480061366764016, 8.530061366764015, 8.580061366764015, 8.630061366764016, 8.680061366764015, 8.730061366764016, 8.780061366764015, 8.830061366764015, 8.880061366764016, 8.930061366764015, 8.980061366764016, 9.030061366764015, 9.080061366764015, 9.130061366764016, 9.180061366764015, 9.230061366764016, 9.280061366764015, 9.330061366764015, 9.380061366764016, 9.430061366764015, 9.480061366764016, 9.530061366764015, 9.580061366764015, 9.630061366764016, 9.680061366764015, 9.730061366764016, 9.780061366764015, 9.830061366764015, 9.880061366764016, 9.930061366764015, 9.980061366764016, 10.030061366764015, 10.080061366764015, 10.130061366764016, 10.180061366764015, 10.230061366764016, 10.280061366764015, 10.330061366764015, 10.380061366764016, 10.430061366764015, 10.480061366764016, 10.530061366764015, 10.580061366764015], "phase": [-0.09822872507286888, -0.08822872507286889, -0.07822872507286888, -0.06822872507286888, -0.05822872507286888, -0.04822872507286888, -0.03822872507286888, -0.028228725072868874, -0.01822872507286888, -0.008228725072868884, 0.0017712749271311251, 0.01177127492713112, 0.021771274927131115, 0.031771274927131124, 0.04177127492713113, 0.051771274927131114, 0.06177127492713112, 0.07177127492713113, 0.08177127492713111, 0.09177127492713112, 0.10177127492713113, 0.11177127492713111, 0.12177127492713112, 0.13177127492713114, 0.1417712749271311, 0.1517712749271311, 0.16177127492713111, 0.17177127492713112, 0.18177127492713113, 0.19177127492713109, 0.2017712749271311, 0.2117712749271311, 0.2217712749271311, 0.23177127492713112, 0.24177127492713113, 0.25177127492713114, 0.2617712749271311, 0.2717712749271311, 0.2817712749271311, 0.2917712749271311, 0.30177127492713113, 0.31177127492713114, 0.3217712749271311, 0.3317712749271311, 0.3417712749271311, 0.3517712749271311, 0.3617712749271311, 0.37177127492713113, 0.3817712749271311, 0.3917712749271311, 0.4017712749271311, 0.4117712749271311, 0.4217712749271311, 0.43177127492713113, 0.44177127492713114, 0.45177127492713115]}, {"amplitude": [7.898438704988436, 7.948438704988437, 7.998438704988438, 8.048438704988438, 8.098438704988435, 8.148438704988436, 8.198438704988437, 8.248438704988438, 8.298438704988438, 8.348438704988435, 8.398438704988436, 8.448438704988437, 8.498438704988438, 8.548438704988438, 8.598438704988435, 8.648438704988436, 8.698438704988437, 8.748438704988438, 8.798438704988438, 8.848438704988435, 8.898438704988436, 8.948438704988437, 8.998438704988438, 9.048438704988438, 9.098438704988435, 9.148438704988436, 9.198438704988437, 9.248438704988438, 9.298438704988438, 9.348438704988435, 9.398438704988436, 9.448438704988437, 9.498438704988438, 9.548438704988438, 9.598438704988435, 9.648438704988436, 9.698438704988437, 9.748438704988438, 9.798438704988438, 9.848438704988435, 9.898438704988436, 9.948438704988437, 9.998438704988438, 10.048438704988438, 10.098438704988435, 10.148438704988436, 10.198438704988437, 10.248438704988438, 10.298438704988438, 10.348438704988435, 10.398438704988436, 10.448438704988437, 10.498438704988438, 10.548438704988438, 10.598438704988435, 10.648438704988436], "phase": [-0.099556196460308, -0.089556196460308, -0.079556196460308, -0.069556196460308, -0.059556196460308, -0.049556196460308, -0.039556196460308, -0.029556196460307993, -0.019556196460307998, -0.009556196460308003, 0.0004438035396920059, 0.010443803539692001, 0.020443803539691996, 0.030443803539692005, 0.040443803539692014, 0.050443803539691995, 0.060443803539692004, 0.07044380353969201, 0.080443803539692, 0.090443803539692, 0.10044380353969201, 0.11044380353969199, 0.120443803539692, 0.130443803539692, 0.140443803539692, 0.150443803539692, 0.160443803539692, 0.17044380353969202, 0.18044380353969203, 0.19044380353969198, 0.200443803539692, 0.210443803539692, 0.220443803539692, 0.23044380353969202, 0.24044380353969202, 0.25044380353969203, 0.260443803539692, 0.270443803539692, 0.280443803539692, 0.290443803539692, 0.300443803539692, 0.31044380353969203, 0.320443803539692, 0.330443803539692, 0.340443803539692, 0.350443803539692, 0.360443803539692, 0.37044380353969203, 0.380443803539692, 0.390443803539692, 0.400443803539692, 0.410443803539692, 0.420443803539692, 0.430443803539692, 0.44044380353969204, 0.45044380353969204]}, {"amplitude": [8.0, 8.05, 8.1, 8.15, 8.2, 8.25, 8.3, 8.35, 8.4, 8.45, 8.5, 8.55, 8.6, 8.65, 8.7, 8.75, 8.8, 8.85, 8.9, 8.95, 9.0, 9.05, 9.1, 9.15, 9.2, 9.25, 9.3, 9.35, 9.4, 9.45, 9.5, 9.55, 9.6, 9.65, 9.7, 9.75, 9.8, 9.85, 9.9, 9.95, 10.0, 10.05, 10.1, 10.15, 10.2, 10.25, 10.3, 10.35, 10.4, 10.45, 10.5, 10.55, 10.6, 10.65, 10.7, 10.75], "phase": [-0.1, -0.09000000000000001, -0.08, -0.07, -0.060000000000000005, -0.05, -0.04000000000000001, -0.03, -0.020000000000000004, -0.010000000000000009, 0.0, 0.009999999999999995, 0.01999999999999999, 0.03, 0.04000000000000001, 0.04999999999999999, 0.06, 0.07, 0.07999999999999999, 0.09, 0.1, 0.10999999999999999, 0.12, 0.13, 0.13999999999999999, 0.15, 0.16, 0.17, 0.18000000000000002, 0.18999999999999997, 0.19999999999999998, 0.21, 0.22, 0.23, 0.24000000000000002, 0.25, 0.26, 0.27, 0.28, 0.29000000000000004, 0.30000000000000004, 0.31000000000000005, 0.31999999999999995, 0.32999999999999996, 0.33999999999999997, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41000000000000003, 0.42000000000000004, 0.43000000000000005, 0.44000000000000006, 0.45000000000000007]}, {"amplitude": [8.119313436599242, 8.169313436599243, 8.219313436599242, 8.269313436599242, 8.319313436599241, 8.369313436599242, 8.419313436599243, 8.469313436599242, 8.519313436599242, 8.569313436599241, 8.619313436599242, 8.669313436599243, 8.719313436599242, 8.769313436599242, 8.819313436599241, 8.869313436599242, 8.919313436599243, 8.969313436599242, 9.019313436599242, 9.069313436599241, 9.119313436599242, 9.169313436599243, 9.219313436599242, 9.269313436599242, 9.319313436599241, 9.369313436599242, 9.419313436599243, 9.469313436599242, 9.519313436599242, 9.569313436599241, 9.619313436599242, 9.669313436599243, 9.719313436599242, 9.769313436599242, 9.819313436599241, 9.869313436599242, 9.919313436599243, 9.969313436599242, 10.019313436599242, 10.069313436599241, 10.119313436599242, 10.169313436599243, 10.219313436599242, 10.269313436599242, 10.319313436599241, 10.369313436599242, 10.419313436599243, 10.469313436599242, 10.519313436599242, 10.569313436599241, 10.619313436599242, 10.669313436599243, 10.719313436599242, 10.769313436599242, 10.819313436599241, 10.869313436599242], "phase": [-0.09955619646030801, -0.08955619646030802, -0.07955619646030801, -0.06955619646030801, -0.05955619646030801, -0.04955619646030801, -0.039556196460308016, -0.029556196460308007, -0.019556196460308012, -0.009556196460308017, 0.00044380353969199204, 0.010443803539691987, 0.020443803539691982, 0.03044380353969199, 0.040443803539692, 0.05044380353969198, 0.06044380353969199, 0.070443803539692, 0.08044380353969198, 0.09044380353969199, 0.100443803539692, 0.11044380353969198, 0.12044380353969199, 0.13044380353969198, 0.140443803539692, 0.150443803539692, 0.160443803539692, 0.17044380353969202, 0.18044380353969203, 0.19044380353969198, 0.200443803539692, 0.210443803539692, 0.220443803539692, 0.23044380353969202, 0.24044380353969202, 0.25044380353969203, 0.260443803539692, 0.270443803539692, 0.280443803539692, 0.290443803539692, 0.300443803539692, 0.31044380353969203, 0.320443803539692, 0.330443803539692, 0.340443803539692, 0.350443803539692, 0.360443803539692, 0.37044380353969203, 0.380443803539692, 0.390443803539692, 0.400443803539692, 0.410443803539692, 0.420443803539692, 0.430443803539692, 0.44044380353969204, 0.45044380353969204]}, {"amplitude": [8.24078963032123, 8.29078963032123, 8.340789630321229, 8.39078963032123, 8.440789630321229, 8.49078963032123, 8.54078963032123, 8.590789630321229, 8.64078963032123, 8.690789630321229, 8.74078963032123, 8.79078963032123, 8.840789630321229, 8.89078963032123, 8.940789630321229, 8.99078963032123, 9.04078963032123, 9.090789630321229, 9.14078963032123, 9.190789630321229, 9.24078963032123, 9.29078963032123, 9.340789630321229, 9.39078963032123, 9.440789630321229, 9.49078963032123, 9.54078963032123, 9.590789630321229, 9.64078963032123, 9.690789630321229, 9.74078963032123, 9.79078963032123, 9.840789630321229, 9.89078963032123, 9.940789630321229, 9.99078963032123, 10.04078963032123, 10.090789630321229, 10.14078963032123, 10.190789630321229, 10.24078963032123, 10.29078963032123, 10.340789630321229, 10.39078963032123, 10.440789630321229, 10.49078963032123, 10.54078963032123, 10.590789630321229, 10.64078963032123, 10.690789630321229, 10.74078963032123, 10.79078963032123, 10.840789630321229, 10.89078963032123, 10.940789630321229, 10.99078963032123], "phase": [-0.09822872507286888, -0.08822872507286889, -0.07822872507286888, -0.06822872507286888, -0.05822872507286888, -0.04822872507286888, -0.03822872507286888, -0.028228725072868874, -0.01822872507286888, -0.008228725072868884, 0.0017712749271311251, 0.01177127492713112, 0.021771274927131115, 0.031771274927131124, 0.04177127492713113, 0.051771274927131114, 0.06177127492713112, 0.07177127492713113, 0.08177127492713111, 0.09177127492713112, 0.10177127492713113, 0.11177127492713111, 0.12177127492713112, 0.13177127492713114, 0.1417712749271311, 0.1517712749271311, 0.16177127492713111, 0.17177127492713112, 0.18177127492713113, 0.19177127492713109, 0.2017712749271311, 0.2117712749271311, 0.2217712749271311, 0.23177127492713112, 0.24177127492713113, 0.25177127492713114, 0.2617712749271311, 0.2717712749271311, 0.2817712749271311, 0.2917712749271311, 0.30177127492713113, 0.31177127492713114, 0.3217712749271311, 0.3317712749271311, 0.3417712749271311, 0.3517712749271311, 0.3617712749271311, 0.37177127492713113, 0.3817712749271311, 0.3917712749271311, 0.4017712749271311, 0.4117712749271311, 0.4217712749271311, 0.43177127492713113, 0.44177127492713114, 0.45177127492713115]}, {"amplitude": [8.35086074438592, 8.400860744385922, 8.45086074438592, 8.500860744385921, 8.55086074438592, 8.60086074438592, 8.650860744385922, 8.70086074438592, 8.750860744385921, 8.80086074438592, 8.85086074438592, 8.900860744385922, 8.95086074438592, 9.000860744385921, 9.05086074438592, 9.10086074438592, 9.150860744385922, 9.20086074438592, 9.250860744385921, 9.30086074438592, 9.35086074438592, 9.400860744385922, 9.45086074438592, 9.500860744385921, 9.55086074438592, 9.60086074438592, 9.650860744385922, 9.70086074438592, 9.750860744385921, 9.80086074438592, 9.85086074438592, 9.900860744385922, 9.95086074438592, 10.000860744385921, 10.05086074438592, 10.10086074438592, 10.150860744385922, 10.20086074438592, 10.250860744385921, 10.30086074438592, 10.35086074438592, 10.400860744385922, 10.45086074438592, 10.500860744385921, 10.55086074438592, 10.60086074438592, 10.650860744385922, 10.70086074438592, 10.750860744385921, 10.80086074438592, 10.85086074438592, 10.900860744385922, 10.95086074438592, 11.000860744385921, 11.05086074438592, 11.10086074438592], "phase": [-0.09602936856769431, -0.08602936856769432, -0.07602936856769431, -0.06602936856769431, -0.05602936856769431, -0.04602936856769431, -0.036029368567694314, -0.026029368567694305, -0.01602936856769431, -0.006029368567694315, 0.0039706314323056935, 0.013970631432305688, 0.023970631432305683, 0.03397063143230569, 0.0439706314323057, 0.05397063143230568, 0.06397063143230569, 0.0739706314323057, 0.08397063143230568, 0.09397063143230569, 0.1039706314323057, 0.11397063143230568, 0.12397063143230569, 0.1339706314323057, 0.14397063143230568, 0.1539706314323057, 0.1639706314323057, 0.1739706314323057, 0.18397063143230571, 0.19397063143230567, 0.20397063143230568, 0.21397063143230569, 0.2239706314323057, 0.2339706314323057, 0.2439706314323057, 0.2539706314323057, 0.2639706314323057, 0.2739706314323057, 0.2839706314323057, 0.29397063143230573, 0.30397063143230574, 0.31397063143230575, 0.32397063143230564, 0.33397063143230565, 0.34397063143230566, 0.35397063143230567, 0.3639706314323057, 0.3739706314323057, 0.3839706314323057, 0.3939706314323057, 0.4039706314323057, 0.4139706314323057, 0.42397063143230573, 0.43397063143230574, 0.44397063143230575, 0.45397063143230576]}, {"amplitude": [8.43985504675198, 8.48985504675198, 8.53985504675198, 8.58985504675198, 8.639855046751979, 8.68985504675198, 8.73985504675198, 8.78985504675198, 8.83985504675198, 8.889855046751979, 8.93985504675198, 8.98985504675198, 9.03985504675198, 9.08985504675198, 9.139855046751979, 9.18985504675198, 9.23985504675198, 9.28985504675198, 9.33985504675198, 9.389855046751979, 9.43985504675198, 9.48985504675198, 9.53985504675198, 9.58985504675198, 9.639855046751979, 9.68985504675198, 9.73985504675198, 9.78985504675198, 9.83985504675198, 9.889855046751979, 9.93985504675198, 9.98985504675198, 10.03985504675198, 10.08985504675198, 10.139855046751979, 10.18985504675198, 10.23985504675198, 10.28985504675198, 10.33985504675198, 10.389855046751979, 10.43985504675198, 10.48985504675198, 10.53985504675198, 10.58985504675198, 10.639855046751979, 10.68985504675198, 10.73985504675198, 10.78985504675198, 10.83985504675198, 10.889855046751979, 10.93985504675198, 10.98985504675198, 11.03985504675198, 11.08985504675198, 11.139855046751979, 11.18985504675198], "phase": [-0.09297764858882512, -0.08297764858882513, -0.07297764858882512, -0.06297764858882512, -0.05297764858882512, -0.04297764858882512, -0.032977648588825126, -0.022977648588825117, -0.012977648588825122, -0.002977648588825127, 0.007022351411174882, 0.017022351411174877, 0.027022351411174872, 0.03702235141117488, 0.04702235141117489, 0.05702235141117487, 0.06702235141117488, 0.07702235141117489, 0.08702235141117487, 0.09702235141117488, 0.10702235141117489, 0.11702235141117487, 0.12702235141117488, 0.1370223514111749, 0.14702235141117487, 0.15702235141117488, 0.16702235141117489, 0.1770223514111749, 0.1870223514111749, 0.19702235141117486, 0.20702235141117487, 0.21702235141117487, 0.22702235141117488, 0.2370223514111749, 0.2470223514111749, 0.2570223514111749, 0.26702235141117486, 0.27702235141117487, 0.2870223514111749, 0.2970223514111749, 0.3070223514111749, 0.3170223514111749, 0.32702235141117486, 0.33702235141117487, 0.3470223514111749, 0.3570223514111749, 0.3670223514111749, 0.3770223514111749, 0.38702235141117486, 0.39702235141117487, 0.4070223514111749, 0.4170223514111749, 0.4270223514111749, 0.4370223514111749, 0.4470223514111749, 0.4570223514111749]}, {"amplitude": [8.50330390651181, 8.553303906511811, 8.60330390651181, 8.65330390651181, 8.70330390651181, 8.75330390651181, 8.803303906511811, 8.85330390651181, 8.90330390651181, 8.95330390651181, 9.00330390651181, 9.053303906511811, 9.10330390651181, 9.15330390651181, 9.20330390651181, 9.25330390651181, 9.303303906511811, 9.35330390651181, 9.40330390651181, 9.45330390651181, 9.50330390651181, 9.553303906511811, 9.60330390651181, 9.65330390651181, 9.70330390651181, 9.75330390651181, 9.803303906511811, 9.85330390651181, 9.90330390651181, 9.95330390651181, 10.00330390651181, 10.053303906511811, 10.10330390651181, 10.15330390651181, 10.20330390651181, 10.25330390651181, 10.303303906511811, 10.35330390651181, 10.40330390651181, 10.45330390651181, 10.50330390651181, 10.553303906511811, 10.60330390651181, 10.65330390651181, 10.70330390651181, 10.75330390651181, 10.803303906511811, 10.85330390651181, 10.90330390651181, 10.95330390651181, 11.00330390651181, 11.053303906511811, 11.10330390651181, 11.15330390651181, 11.20330390651181, 11.25330390651181], "phase": [-0.0891006524188368, -0.0791006524188368, -0.0691006524188368, -0.0591006524188368, -0.0491006524188368, -0.0391006524188368, -0.029100652418836803, -0.019100652418836794, -0.0091006524188368, 0.0008993475811631957, 0.010899347581163205, 0.0208993475811632, 0.030899347581163195, 0.0408993475811632, 0.05089934758116321, 0.06089934758116319, 0.0708993475811632, 0.08089934758116321, 0.09089934758116319, 0.1008993475811632, 0.11089934758116321, 0.12089934758116319, 0.1308993475811632, 0.1408993475811632, 0.1508993475811632, 0.1608993475811632, 0.1708993475811632, 0.18089934758116322, 0.19089934758116323, 0.20089934758116318, 0.2108993475811632, 0.2208993475811632, 0.2308993475811632, 0.24089934758116321, 0.2508993475811632, 0.26089934758116323, 0.2708993475811632, 0.2808993475811632, 0.2908993475811632, 0.3008993475811632, 0.3108993475811632, 0.32089934758116323, 0.3308993475811632, 0.3408993475811632, 0.3508993475811632, 0.3608993475811632, 0.3708993475811632, 0.38089934758116323, 0.3908993475811632, 0.4008993475811632, 0.4108993475811632, 0.4208993475811632, 0.4308993475811632, 0.4408993475811632, 0.45089934758116323, 0.46089934758116324]}, {"amplitude": [8.542498121828707, 8.592498121828708, 8.642498121828707, 8.692498121828708, 8.742498121828707, 8.792498121828707, 8.842498121828708, 8.892498121828707, 8.942498121828708, 8.992498121828707, 9.042498121828707, 9.092498121828708, 9.142498121828707, 9.192498121828708, 9.242498121828707, 9.292498121828707, 9.342498121828708, 9.392498121828707, 9.442498121828708, 9.492498121828707, 9.542498121828707, 9.592498121828708, 9.642498121828707, 9.692498121828708, 9.742498121828707, 9.792498121828707, 9.842498121828708, 9.892498121828707, 9.942498121828708, 9.992498121828707, 10.042498121828707, 10.092498121828708, 10.142498121828707, 10.192498121828708, 10.242498121828707, 10.292498121828707, 10.342498121828708, 10.392498121828707, 10.442498121828708, 10.492498121828707, 10.542498121828707, 10.592498121828708, 10.642498121828707, 10.692498121828708, 10.742498121828707, 10.792498121828707, 10.842498121828708, 10.892498121828707, 10.942498121828708, 10.992498121828707, 11.042498121828707, 11.092498121828708, 11.142498121828707, 11.192498121828708, 11.242498121828707, 11.292498121828707], "phase": [-0.08443279255020156, -0.07443279255020156, -0.06443279255020155, -0.05443279255020156, -0.04443279255020156, -0.034432792550201555, -0.02443279255020156, -0.01443279255020155, -0.004432792550201556, 0.005567207449798439, 0.015567207449798448, 0.025567207449798443, 0.03556720744979844, 0.04556720744979845, 0.055567207449798456, 0.06556720744979844, 0.07556720744979845, 0.08556720744979845, 0.09556720744979844, 0.10556720744979844, 0.11556720744979845, 0.12556720744979843, 0.13556720744979844, 0.14556720744979845, 0.15556720744979843, 0.16556720744979844, 0.17556720744979845, 0.18556720744979846, 0.19556720744979847, 0.20556720744979842, 0.21556720744979843, 0.22556720744979844, 0.23556720744979845, 0.24556720744979846, 0.25556720744979844, 0.26556720744979845, 0.27556720744979846, 0.28556720744979847, 0.2955672074497985, 0.3055672074497985, 0.3155672074497985, 0.3255672074497985, 0.3355672074497984, 0.3455672074497984, 0.3555672074497984, 0.3655672074497984, 0.37556720744979843, 0.38556720744979844, 0.39556720744979845, 0.40556720744979846, 0.41556720744979847, 0.4255672074497985, 0.4355672074497985, 0.4455672074497985, 0.4555672074497985, 0.4655672074497985]}, {"amplitude": [8.564216077479134, 8.614216077479135, 8.664216077479132, 8.714216077479133, 8.764216077479134, 8.814216077479134, 8.864216077479135, 8.914216077479132, 8.964216077479133, 9.014216077479134, 9.064216077479134, 9.114216077479135, 9.164216077479132, 9.214216077479133, 9.264216077479134, 9.314216077479134, 9.364216077479135, 9.414216077479132, 9.464216077479133, 9.514216077479134, 9.564216077479134, 9.614216077479135, 9.664216077479132, 9.714216077479133, 9.764216077479134, 9.814216077479134, 9.864216077479135, 9.914216077479132, 9.964216077479133, 10.014216077479134, 10.064216077479134, 10.114216077479135, 10.164216077479132, 10.214216077479133, 10.264216077479134, 10.314216077479134, 10.364216077479135, 10.414216077479132, 10.464216077479133, 10.514216077479134, 10.564216077479134, 10.614216077479135, 10.664216077479132, 10.714216077479133, 10.764216077479134, 10.814216077479134, 10.864216077479135, 10.914216077479132, 10.964216077479133, 11.014216077479134, 11.064216077479134, 11.114216077479135, 11.164216077479132, 11.214216077479133, 11.264216077479134, 11.314216077479134], "phase": [-0.07901550123756906, -0.06901550123756907, -0.05901550123756906, -0.049015501237569065, -0.03901550123756906, -0.02901550123756906, -0.019015501237569066, -0.009015501237569057, 0.0009844987624309381, 0.010984498762430933, 0.020984498762430942, 0.030984498762430937, 0.04098449876243093, 0.05098449876243094, 0.06098449876243095, 0.07098449876243093, 0.08098449876243094, 0.09098449876243095, 0.10098449876243093, 0.11098449876243094, 0.12098449876243095, 0.13098449876243093, 0.14098449876243094, 0.15098449876243095, 0.16098449876243093, 0.17098449876243094, 0.18098449876243095, 0.19098449876243095, 0.20098449876243096, 0.21098449876243092, 0.22098449876243093, 0.23098449876243093, 0.24098449876243094, 0.25098449876243095, 0.26098449876243096, 0.27098449876243097, 0.2809844987624309, 0.29098449876243093, 0.30098449876243094, 0.31098449876243095, 0.32098449876243096, 0.33098449876243097, 0.3409844987624309, 0.35098449876243093, 0.36098449876243094, 0.37098449876243095, 0.38098449876243096, 0.39098449876243097, 0.4009844987624309, 0.4109844987624309, 0.42098449876243094, 0.43098449876243095, 0.44098449876243095, 0.45098449876243096, 0.46098449876243097, 0.470984498762431]}, {"amplitude": [8.579662715226467, 8.629662715226468, 8.679662715226467, 8.729662715226468, 8.779662715226467, 8.829662715226467, 8.879662715226468, 8.929662715226467, 8.979662715226468, 9.029662715226467, 9.079662715226467, 9.129662715226468, 9.179662715226467, 9.229662715226468, 9.279662715226467, 9.329662715226467, 9.379662715226468, 9.429662715226467, 9.479662715226468, 9.529662715226467, 9.579662715226467, 9.629662715226468, 9.679662715226467, 9.729662715226468, 9.779662715226467, 9.829662715226467, 9.879662715226468, 9.929662715226467, 9.979662715226468, 10.029662715226467, 10.079662715226467, 10.129662715226468, 10.179662715226467, 10.229662715226468, 10.279662715226467, 10.329662715226467, 10.379662715226468, 10.429662715226467, 10.479662715226468, 10.529662715226467, 10.579662715226467, 10.629662715226468, 10.679662715226467, 10.729662715226468, 10.779662715226467, 10.829662715226467, 10.879662715226468, 10.929662715226467, 10.979662715226468, 11.029662715226467, 11.079662715226467, 11.129662715226468, 11.179662715226467, 11.229662715226468, 11.279662715226467, 11.329662715226467], "phase": [-0.07289686274214116, -0.06289686274214117, -0.05289686274214116, -0.04289686274214116, -0.03289686274214116, -0.022896862742141158, -0.012896862742141163, -0.002896862742141154, 0.007103137257858841, 0.017103137257858836, 0.027103137257858845, 0.03710313725785884, 0.047103137257858835, 0.057103137257858844, 0.06710313725785885, 0.07710313725785883, 0.08710313725785884, 0.09710313725785885, 0.10710313725785883, 0.11710313725785884, 0.12710313725785885, 0.13710313725785883, 0.14710313725785884, 0.15710313725785885, 0.16710313725785883, 0.17710313725785884, 0.18710313725785885, 0.19710313725785886, 0.20710313725785887, 0.21710313725785882, 0.22710313725785883, 0.23710313725785884, 0.24710313725785885, 0.2571031372578588, 0.26710313725785884, 0.27710313725785884, 0.28710313725785885, 0.29710313725785886, 0.30710313725785887, 0.3171031372578589, 0.3271031372578589, 0.3371031372578589, 0.3471031372578588, 0.3571031372578588, 0.3671031372578588, 0.3771031372578588, 0.38710313725785883, 0.39710313725785884, 0.40710313725785885, 0.41710313725785886, 0.42710313725785887, 0.4371031372578589, 0.4471031372578589, 0.4571031372578589, 0.4671031372578589, 0.4771031372578589]}, {"amplitude": [8.60276930320324, 8.652769303203241, 8.70276930320324, 8.752769303203241, 8.80276930320324, 8.85276930320324, 8.902769303203241, 8.95276930320324, 9.002769303203241, 9.05276930320324, 9.10276930320324, 9.152769303203241, 9.20276930320324, 9.252769303203241, 9.30276930320324, 9.35276930320324, 9.402769303203241, 9.45276930320324, 9.502769303203241, 9.55276930320324, 9.60276930320324, 9.652769303203241, 9.70276930320324, 9.752769303203241, 9.80276930320324, 9.85276930320324, 9.902769303203241, 9.95276930320324, 10.002769303203241, 10.05276930320324, 10.10276930320324, 10.152769303203241, 10.20276930320324, 10.252769303203241, 10.30276930320324, 10.35276930320324, 10.402769303203241, 10.45276930320324, 10.502769303203241, 10.55276930320324, 10.60276930320324, 10.652769303203241, 10.70276930320324, 10.752769303203241, 10.80276930320324, 10.85276930320324, 10.902769303203241, 10.95276930320324, 11.002769303203241, 11.05276930320324, 11.10276930320324, 11.152769303203241, 11.20276930320324, 11.252769303203241, 11.30276930320324, 11.35276930320324], "phase": [-0.06613118653236516, -0.05613118653236516, -0.04613118653236516, -0.03613118653236516, -0.02613118653236516, -0.016131186532365158, -0.006131186532365163, 0.0038688134676348462, 0.013868813467634841, 0.023868813467634836, 0.033868813467634845, 0.04386881346763484, 0.053868813467634835, 0.06386881346763484, 0.07386881346763485, 0.08386881346763483, 0.09386881346763484, 0.10386881346763485, 0.11386881346763483, 0.12386881346763484, 0.13386881346763485, 0.14386881346763483, 0.15386881346763484, 0.16386881346763485, 0.17386881346763483, 0.18386881346763484, 0.19386881346763485, 0.20386881346763486, 0.21386881346763487, 0.22386881346763482, 0.23386881346763483, 0.24386881346763484, 0.25386881346763485, 0.26386881346763486, 0.27386881346763486, 0.2838688134676349, 0.2938688134676348, 0.30386881346763484, 0.31386881346763484, 0.32386881346763485, 0.33386881346763486, 0.34386881346763487, 0.3538688134676348, 0.36386881346763483, 0.37386881346763484, 0.38386881346763485, 0.39386881346763486, 0.40386881346763487, 0.4138688134676348, 0.42386881346763483, 0.43386881346763484, 0.44386881346763485, 0.45386881346763486, 0.46386881346763487, 0.4738688134676349, 0.4838688134676349]}, {"amplitude": [8.648093919727312, 8.698093919727313, 8.748093919727312, 8.798093919727313, 8.848093919727312, 8.898093919727312, 8.948093919727313, 8.998093919727312, 9.048093919727313, 9.098093919727312, 9.148093919727312, 9.198093919727313, 9.248093919727312, 9.298093919727313, 9.348093919727312, 9.398093919727312, 9.448093919727313, 9.498093919727312, 9.548093919727313, 9.598093919727312, 9.648093919727312, 9.698093919727313, 9.748093919727312, 9.798093919727313, 9.848093919727312, 9.898093919727312, 9.948093919727313, 9.998093919727312, 10.048093919727313, 10.098093919727312, 10.148093919727312, 10.198093919727313, 10.248093919727312, 10.298093919727313, 10.348093919727312, 10.398093919727312, 10.448093919727313, 10.498093919727312, 10.548093919727313, 10.598093919727312, 10.648093919727312, 10.698093919727313, 10.748093919727312, 10.798093919727313, 10.848093919727312, 10.898093919727312, 10.948093919727313, 10.998093919727312, 11.048093919727313, 11.098093919727312, 11.148093919727312, 11.198093919727313, 11.248093919727312, 11.298093919727313, 11.348093919727312, 11.398093919727312], "phase": [-0.05877852522924734, -0.04877852522924734, -0.03877852522924734, -0.028778525229247343, -0.01877852522924734, -0.008778525229247339, 0.0012214747707526563, 0.011221474770752665, 0.02122147477075266, 0.031221474770752655, 0.041221474770752664, 0.05122147477075266, 0.061221474770752654, 0.07122147477075266, 0.08122147477075267, 0.09122147477075265, 0.10122147477075266, 0.11122147477075267, 0.12122147477075265, 0.13122147477075266, 0.14122147477075267, 0.15122147477075265, 0.16122147477075266, 0.17122147477075267, 0.18122147477075265, 0.19122147477075266, 0.20122147477075267, 0.21122147477075268, 0.22122147477075269, 0.23122147477075264, 0.24122147477075265, 0.25122147477075263, 0.26122147477075264, 0.27122147477075265, 0.28122147477075266, 0.29122147477075266, 0.3012214747707527, 0.3112214747707527, 0.3212214747707527, 0.3312214747707527, 0.3412214747707527, 0.3512214747707527, 0.3612214747707526, 0.3712214747707526, 0.38122147477075263, 0.39122147477075264, 0.40122147477075265, 0.41122147477075266, 0.42122147477075267, 0.4312214747707527, 0.4412214747707527, 0.4512214747707527, 0.4612214747707527, 0.4712214747707527, 0.4812214747707527, 0.49122147477075273]}, {"amplitude": [8.728618790848653, 8.778618790848654, 8.828618790848653, 8.878618790848654, 8.928618790848653, 8.978618790848653, 9.028618790848654, 9.078618790848653, 9.128618790848654, 9.178618790848653, 9.228618790848653, 9.278618790848654, 9.328618790848653, 9.378618790848654, 9.428618790848653, 9.478618790848653, 9.528618790848654, 9.578618790848653, 9.628618790848654, 9.678618790848653, 9.728618790848653, 9.778618790848654, 9.828618790848653, 9.878618790848654, 9.928618790848653, 9.978618790848653, 10.028618790848654, 10.078618790848653, 10.128618790848654, 10.178618790848653, 10.228618790848653, 10.278618790848654, 10.328618790848653, 10.378618790848654, 10.428618790848653, 10.478618790848653, 10.528618790848654, 10.578618790848653, 10.628618790848654, 10.678618790848653, 10.728618790848653, 10.778618790848654, 10.828618790848653, 10.878618790848654, 10.928618790848653, 10.978618790848653, 11.028618790848654, 11.078618790848653, 11.128618790848654, 11.178618790848653, 11.228618790848653, 11.278618790848654, 11.328618790848653, 11.378618790848654, 11.428618790848653, 11.478618790848653], "phase": [-0.0509041415750372, -0.040904141575037196, -0.030904141575037198, -0.0209041415750372, -0.010904141575037198, -0.0009041415750371956, 0.0090958584249628, 0.01909585842496281, 0.029095858424962803, 0.0390958584249628, 0.04909585842496281, 0.0590958584249628, 0.0690958584249628, 0.0790958584249628, 0.08909585842496281, 0.0990958584249628, 0.1090958584249628, 0.11909585842496281, 0.1290958584249628, 0.1390958584249628, 0.1490958584249628, 0.1590958584249628, 0.1690958584249628, 0.1790958584249628, 0.1890958584249628, 0.1990958584249628, 0.2090958584249628, 0.21909585842496282, 0.22909585842496283, 0.23909585842496278, 0.2490958584249628, 0.2590958584249628, 0.2690958584249628, 0.2790958584249628, 0.2890958584249628, 0.29909585842496283, 0.3090958584249628, 0.3190958584249628, 0.3290958584249628, 0.3390958584249628, 0.3490958584249628, 0.35909585842496283, 0.3690958584249628, 0.3790958584249628, 0.3890958584249628, 0.3990958584249628, 0.4090958584249628, 0.41909585842496283, 0.4290958584249628, 0.4390958584249628, 0.4490958584249628, 0.4590958584249628, 0.4690958584249628, 0.47909585842496283, 0.48909585842496284, 0.49909585842496285]}, {"amplitude": [8.853755241651248, 8.903755241651249, 8.953755241651248, 9.003755241651248, 9.053755241651247, 9.103755241651248, 9.153755241651249, 9.203755241651248, 9.253755241651248, 9.303755241651247, 9.353755241651248, 9.403755241651249, 9.453755241651248, 9.503755241651248, 9.553755241651247, 9.603755241651248, 9.653755241651249, 9.703755241651248, 9.753755241651248, 9.803755241651247, 9.853755241651248, 9.903755241651249, 9.953755241651248, 10.003755241651248, 10.053755241651247, 10.103755241651248, 10.153755241651249, 10.203755241651248, 10.253755241651248, 10.303755241651247, 10.353755241651248, 10.403755241651249, 10.453755241651248, 10.503755241651248, 10.553755241651247, 10.603755241651248, 10.653755241651249, 10.703755241651248, 10.753755241651248, 10.803755241651247, 10.853755241651248, 10.903755241651249, 10.953755241651248, 11.003755241651248, 11.053755241651247, 11.103755241651248, 11.153755241651249, 11.203755241651248, 11.253755241651248, 11.303755241651247, 11.353755241651248, 11.403755241651249, 11.453755241651248, 11.503755241651248, 11.553755241651247, 11.603755241651248], "phase": [-0.0425779291565073, -0.0325779291565073, -0.0225779291565073, -0.012577929156507302, -0.0025779291565073, 0.007422070843492702, 0.017422070843492697, 0.027422070843492706, 0.0374220708434927, 0.047422070843492696, 0.057422070843492705, 0.06742207084349269, 0.0774220708434927, 0.08742207084349271, 0.09742207084349272, 0.1074220708434927, 0.11742207084349271, 0.12742207084349272, 0.1374220708434927, 0.1474220708434927, 0.15742207084349272, 0.1674220708434927, 0.1774220708434927, 0.18742207084349272, 0.1974220708434927, 0.2074220708434927, 0.21742207084349272, 0.22742207084349272, 0.23742207084349273, 0.2474220708434927, 0.25742207084349267, 0.2674220708434927, 0.2774220708434927, 0.2874220708434927, 0.2974220708434927, 0.3074220708434927, 0.31742207084349267, 0.3274220708434927, 0.3374220708434927, 0.3474220708434927, 0.3574220708434927, 0.3674220708434927, 0.37742207084349266, 0.38742207084349267, 0.3974220708434927, 0.4074220708434927, 0.4174220708434927, 0.4274220708434927, 0.43742207084349266, 0.44742207084349267, 0.4574220708434927, 0.4674220708434927, 0.4774220708434927, 0.4874220708434927, 0.4974220708434927, 0.5074220708434928]}, {"amplitude": [9.02783798429081, 9.077837984290811, 9.12783798429081, 9.17783798429081, 9.22783798429081, 9.27783798429081, 9.327837984290811, 9.37783798429081, 9.42783798429081, 9.47783798429081, 9.52783798429081, 9.577837984290811, 9.62783798429081, 9.67783798429081, 9.72783798429081, 9.77783798429081, 9.827837984290811, 9.87783798429081, 9.92783798429081, 9.97783798429081, 10.02783798429081, 10.077837984290811, 10.12783798429081, 10.17783798429081, 10.22783798429081, 10.27783798429081, 10.327837984290811, 10.37783798429081, 10.42783798429081, 10.47783798429081, 10.52783798429081, 10.577837984290811, 10.62783798429081, 10.67783798429081, 10.72783798429081, 10.77783798429081, 10.827837984290811, 10.87783798429081, 10.92783798429081, 10.97783798429081, 11.02783798429081, 11.077837984290811, 11.12783798429081, 11.17783798429081, 11.22783798429081, 11.27783798429081, 11.327837984290811, 11.37783798429081, 11.42783798429081, 11.47783798429081, 11.52783798429081, 11.577837984290811, 11.62783798429081, 11.67783798429081, 11.72783798429081, 11.77783798429081], "phase": [-0.03387379202452914, -0.02387379202452914, -0.013873792024529142, -0.0038737920245291435, 0.0061262079754708584, 0.01612620797547086, 0.026126207975470855, 0.036126207975470864, 0.04612620797547086, 0.056126207975470854, 0.06612620797547086, 0.07612620797547086, 0.08612620797547085, 0.09612620797547086, 0.10612620797547087, 0.11612620797547085, 0.12612620797547086, 0.13612620797547087, 0.14612620797547085, 0.15612620797547086, 0.16612620797547087, 0.17612620797547085, 0.18612620797547086, 0.19612620797547087, 0.20612620797547085, 0.21612620797547086, 0.22612620797547087, 0.23612620797547088, 0.24612620797547088, 0.2561262079754708, 0.2661262079754708, 0.2761262079754708, 0.28612620797547084, 0.29612620797547085, 0.30612620797547085, 0.31612620797547086, 0.32612620797547087, 0.3361262079754709, 0.3461262079754709, 0.3561262079754709, 0.3661262079754709, 0.3761262079754709, 0.3861262079754708, 0.3961262079754708, 0.40612620797547083, 0.41612620797547084, 0.42612620797547085, 0.43612620797547086, 0.44612620797547087, 0.4561262079754709, 0.4661262079754709, 0.4761262079754709, 0.4861262079754709, 0.4961262079754709, 0.5061262079754709, 0.5161262079754709]}, {"amplitude": [9.249321848019687, 9.299321848019687, 9.349321848019686, 9.399321848019687, 9.449321848019686, 9.499321848019687, 9.549321848019687, 9.599321848019686, 9.649321848019687, 9.699321848019686, 9.749321848019687, 9.799321848019687, 9.849321848019686, 9.899321848019687, 9.949321848019686, 9.999321848019687, 10.049321848019687, 10.099321848019686, 10.149321848019687, 10.199321848019686, 10.249321848019687, 10.299321848019687, 10.349321848019686, 10.399321848019687, 10.449321848019686, 10.499321848019687, 10.549321848019687, 10.599321848019686, 10.649321848019687, 10.699321848019686, 10.749321848019687, 10.799321848019687, 10.849321848019686, 10.899321848019687, 10.949321848019686, 10.999321848019687, 11.049321848019687, 11.099321848019686, 11.149321848019687, 11.199321848019686, 11.249321848019687, 11.299321848019687, 11.349321848019686, 11.399321848019687, 11.449321848019686, 11.499321848019687, 11.549321848019687, 11.599321848019686, 11.649321848019687, 11.699321848019686, 11.749321848019687, 11.799321848019687, 11.849321848019686, 11.899321848019687, 11.949321848019686, 11.999321848019687], "phase": [-0.02486898871648545, -0.014868988716485449, -0.0048689887164854485, 0.00513101128351455, 0.015131011283514552, 0.025131011283514554, 0.03513101128351455, 0.04513101128351456, 0.05513101128351455, 0.06513101128351455, 0.07513101128351456, 0.08513101128351455, 0.09513101128351455, 0.10513101128351456, 0.11513101128351456, 0.12513101128351456, 0.13513101128351457, 0.14513101128351458, 0.15513101128351453, 0.16513101128351454, 0.17513101128351455, 0.18513101128351456, 0.19513101128351457, 0.20513101128351457, 0.21513101128351453, 0.22513101128351454, 0.23513101128351455, 0.24513101128351455, 0.25513101128351456, 0.2651310112835145, 0.2751310112835145, 0.28513101128351453, 0.29513101128351454, 0.30513101128351455, 0.31513101128351456, 0.32513101128351457, 0.3351310112835145, 0.34513101128351453, 0.35513101128351454, 0.36513101128351455, 0.37513101128351456, 0.38513101128351457, 0.3951310112835145, 0.40513101128351453, 0.41513101128351454, 0.42513101128351455, 0.43513101128351456, 0.44513101128351457, 0.4551310112835145, 0.46513101128351453, 0.47513101128351454, 0.48513101128351455, 0.49513101128351455, 0.5051310112835146, 0.5151310112835146, 0.5251310112835146]}, {"amplitude": [9.510795494231795, 9.560795494231796, 9.610795494231795, 9.660795494231795, 9.710795494231794, 9.760795494231795, 9.810795494231796, 9.860795494231795, 9.910795494231795, 9.960795494231794, 10.010795494231795, 10.060795494231796, 10.110795494231795, 10.160795494231795, 10.210795494231794, 10.260795494231795, 10.310795494231796, 10.360795494231795, 10.410795494231795, 10.460795494231794, 10.510795494231795, 10.560795494231796, 10.610795494231795, 10.660795494231795, 10.710795494231794, 10.760795494231795, 10.810795494231796, 10.860795494231795, 10.910795494231795, 10.960795494231794, 11.010795494231795, 11.060795494231796, 11.110795494231795, 11.160795494231795, 11.210795494231794, 11.260795494231795, 11.310795494231796, 11.360795494231795, 11.410795494231795, 11.460795494231794, 11.510795494231795, 11.560795494231796, 11.610795494231795, 11.660795494231795, 11.710795494231794, 11.760795494231795, 11.810795494231796, 11.860795494231795, 11.910795494231795, 11.960795494231794, 12.010795494231795, 12.060795494231796, 12.110795494231795, 12.160795494231795, 12.210795494231794, 12.260795494231795], "phase": [-0.01564344650402311, -0.00564344650402311, 0.004356553495976891, 0.014356553495976889, 0.02435655349597689, 0.034356553495976896, 0.04435655349597689, 0.0543565534959769, 0.0643565534959769, 0.07435655349597689, 0.0843565534959769, 0.0943565534959769, 0.10435655349597689, 0.1143565534959769, 0.12435655349597691, 0.1343565534959769, 0.1443565534959769, 0.1543565534959769, 0.1643565534959769, 0.1743565534959769, 0.1843565534959769, 0.19435655349597689, 0.2043565534959769, 0.2143565534959769, 0.22435655349597688, 0.2343565534959769, 0.2443565534959769, 0.2543565534959769, 0.2643565534959769, 0.2743565534959769, 0.2843565534959769, 0.2943565534959769, 0.3043565534959769, 0.3143565534959769, 0.3243565534959769, 0.3343565534959769, 0.3443565534959769, 0.3543565534959769, 0.3643565534959769, 0.3743565534959769, 0.3843565534959769, 0.3943565534959769, 0.4043565534959769, 0.4143565534959769, 0.4243565534959769, 0.4343565534959769, 0.4443565534959769, 0.4543565534959769, 0.4643565534959769, 0.4743565534959769, 0.4843565534959769, 0.4943565534959769, 0.5043565534959769, 0.5143565534959769, 0.5243565534959769, 0.5343565534959769]}, {"amplitude": [9.799811994791915, 9.849811994791915, 9.899811994791914, 9.949811994791915, 9.999811994791914, 10.049811994791915, 10.099811994791915, 10.149811994791914, 10.199811994791915, 10.249811994791914, 10.299811994791915, 10.349811994791915, 10.399811994791914, 10.449811994791915, 10.499811994791914, 10.549811994791915, 10.599811994791915, 10.649811994791914, 10.699811994791915, 10.749811994791914, 10.799811994791915, 10.849811994791915, 10.899811994791914, 10.949811994791915, 10.999811994791914, 11.049811994791915, 11.099811994791915, 11.149811994791914, 11.199811994791915, 11.249811994791914, 11.299811994791915, 11.349811994791915, 11.399811994791914, 11.449811994791915, 11.499811994791914, 11.549811994791915, 11.599811994791915, 11.649811994791914, 11.699811994791915, 11.749811994791914, 11.799811994791915, 11.849811994791915, 11.899811994791914, 11.949811994791915, 11.999811994791914, 12.049811994791915, 12.099811994791915, 12.149811994791914, 12.199811994791915, 12.249811994791914, 12.299811994791915, 12.349811994791915, 12.399811994791914, 12.449811994791915, 12.499811994791914, 12.549811994791915], "phase": [-0.006279051952931415, 0.003720948047068585, 0.013720948047068585, 0.023720948047068584, 0.033720948047068586, 0.04372094804706859, 0.05372094804706858, 0.0637209480470686, 0.07372094804706858, 0.08372094804706859, 0.0937209480470686, 0.10372094804706858, 0.11372094804706859, 0.1237209480470686, 0.1337209480470686, 0.1437209480470686, 0.1537209480470686, 0.1637209480470686, 0.17372094804706859, 0.1837209480470686, 0.1937209480470686, 0.20372094804706858, 0.2137209480470686, 0.2237209480470686, 0.23372094804706858, 0.2437209480470686, 0.2537209480470686, 0.2637209480470686, 0.2737209480470686, 0.28372094804706854, 0.29372094804706855, 0.30372094804706856, 0.31372094804706857, 0.3237209480470686, 0.3337209480470686, 0.3437209480470686, 0.35372094804706855, 0.36372094804706856, 0.37372094804706857, 0.3837209480470686, 0.3937209480470686, 0.4037209480470686, 0.41372094804706855, 0.42372094804706856, 0.43372094804706857, 0.4437209480470686, 0.4537209480470686, 0.4637209480470686, 0.47372094804706855, 0.48372094804706856, 0.49372094804706856, 0.5037209480470686, 0.5137209480470686, 0.5237209480470686, 0.5337209480470686, 0.5437209480470686]}, {"amplitude": [10.100421488225546, 10.150421488225547, 10.200421488225546, 10.250421488225546, 10.300421488225545, 10.350421488225546, 10.400421488225547, 10.450421488225546, 10.500421488225546, 10.550421488225545, 10.600421488225546, 10.650421488225547, 10.700421488225546, 10.750421488225546, 10.800421488225545, 10.850421488225546, 10.900421488225547, 10.950421488225546, 11.000421488225546, 11.050421488225545, 11.100421488225546, 11.150421488225547, 11.200421488225546, 11.250421488225546, 11.300421488225545, 11.350421488225546, 11.400421488225547, 11.450421488225546, 11.500421488225546, 11.550421488225545, 11.600421488225546, 11.650421488225547, 11.700421488225546, 11.750421488225546, 11.800421488225545, 11.850421488225546, 11.900421488225547, 11.950421488225546, 12.000421488225546, 12.050421488225545, 12.100421488225546, 12.150421488225547, 12.200421488225546, 12.250421488225546, 12.300421488225545, 12.350421488225546, 12.400421488225547, 12.450421488225546, 12.500421488225546, 12.550421488225545, 12.600421488225546, 12.650421488225547, 12.700421488225546, 12.750421488225546, 12.800421488225545, 12.850421488225546], "phase": [0.003141075907812787, 0.013141075907812787, 0.023141075907812787, 0.03314107590781279, 0.043141075907812784, 0.05314107590781279, 0.06314107590781279, 0.0731410759078128, 0.08314107590781279, 0.09314107590781279, 0.1031410759078128, 0.11314107590781279, 0.12314107590781279, 0.1331410759078128, 0.1431410759078128, 0.15314107590781278, 0.1631410759078128, 0.1731410759078128, 0.18314107590781278, 0.1931410759078128, 0.2031410759078128, 0.21314107590781278, 0.2231410759078128, 0.2331410759078128, 0.24314107590781278, 0.25314107590781276, 0.26314107590781277, 0.2731410759078128, 0.2831410759078128, 0.29314107590781274, 0.30314107590781275, 0.31314107590781276, 0.32314107590781277, 0.3331410759078128, 0.3431410759078128, 0.3531410759078128, 0.36314107590781275, 0.37314107590781276, 0.38314107590781277, 0.3931410759078128, 0.4031410759078128, 0.4131410759078128, 0.42314107590781275, 0.43314107590781276, 0.44314107590781276, 0.4531410759078128, 0.4631410759078128, 0.4731410759078128, 0.48314107590781274, 0.49314107590781275, 0.5031410759078128, 0.5131410759078128, 0.5231410759078128, 0.5331410759078128, 0.5431410759078128, 0.5531410759078128]}, {"amplitude": [10.395192569359123, 10.445192569359124, 10.495192569359123, 10.545192569359124, 10.595192569359122, 10.645192569359123, 10.695192569359124, 10.745192569359123, 10.795192569359124, 10.845192569359122, 10.895192569359123, 10.945192569359124, 10.995192569359123, 11.045192569359124, 11.095192569359122, 11.145192569359123, 11.195192569359124, 11.245192569359123, 11.295192569359124, 11.345192569359122, 11.395192569359123, 11.445192569359124, 11.495192569359123, 11.545192569359124, 11.595192569359122, 11.645192569359123, 11.695192569359124, 11.745192569359123, 11.795192569359124, 11.845192569359122, 11.895192569359123, 11.945192569359124, 11.995192569359123, 12.045192569359124, 12.095192569359122, 12.145192569359123, 12.195192569359124, 12.245192569359123, 12.295192569359124, 12.345192569359122, 12.395192569359123, 12.445192569359124, 12.495192569359123, 12.545192569359124, 12.595192569359122, 12.645192569359123, 12.695192569359124, 12.745192569359123, 12.795192569359124, 12.845192569359122, 12.895192569359123, 12.945192569359124, 12.995192569359123, 13.045192569359124, 13.095192569359122, 13.145192569359123], "phase": [0.012533323356430419, 0.02253332335643042, 0.032533323356430416, 0.04253332335643042, 0.05253332335643042, 0.06253332335643041, 0.07253332335643042, 0.08253332335643043, 0.09253332335643041, 0.10253332335643042, 0.11253332335643043, 0.12253332335643041, 0.13253332335643042, 0.14253332335643043, 0.15253332335643044, 0.16253332335643042, 0.17253332335643043, 0.18253332335643044, 0.19253332335643042, 0.20253332335643043, 0.21253332335643044, 0.22253332335643042, 0.23253332335643043, 0.24253332335643044, 0.2525333233564304, 0.2625333233564304, 0.27253332335643043, 0.28253332335643044, 0.29253332335643045, 0.3025333233564304, 0.3125333233564304, 0.3225333233564304, 0.33253332335643043, 0.34253332335643044, 0.35253332335643045, 0.36253332335643046, 0.3725333233564304, 0.3825333233564304, 0.39253332335643043, 0.40253332335643044, 0.41253332335643045, 0.42253332335643046, 0.4325333233564304, 0.4425333233564304, 0.45253332335643043, 0.46253332335643044, 0.47253332335643045, 0.48253332335643045, 0.4925333233564304, 0.5025333233564304, 0.5125333233564304, 0.5225333233564304, 0.5325333233564304, 0.5425333233564305, 0.5525333233564305, 0.5625333233564305]}, {"amplitude": [10.667440455625822, 10.717440455625823, 10.767440455625824, 10.817440455625825, 10.867440455625822, 10.917440455625822, 10.967440455625823, 11.017440455625824, 11.067440455625825, 11.117440455625822, 11.167440455625822, 11.217440455625823, 11.267440455625824, 11.317440455625825, 11.367440455625822, 11.417440455625822, 11.467440455625823, 11.517440455625824, 11.567440455625825, 11.617440455625822, 11.667440455625822, 11.717440455625823, 11.767440455625824, 11.817440455625825, 11.867440455625822, 11.917440455625822, 11.967440455625823, 12.017440455625824, 12.067440455625825, 12.117440455625822, 12.167440455625822, 12.217440455625823, 12.267440455625824, 12.317440455625825, 12.367440455625822, 12.417440455625822, 12.467440455625823, 12.517440455625824, 12.567440455625825, 12.617440455625822, 12.667440455625822, 12.717440455625823, 12.767440455625824, 12.817440455625825, 12.867440455625822, 12.917440455625822, 12.967440455625823, 13.017440455625824, 13.067440455625825, 13.117440455625822, 13.167440455625822, 13.217440455625823, 13.267440455625824, 13.317440455625825, 13.367440455625822, 13.417440455625822], "phase": [0.021814324139654284, 0.031814324139654286, 0.04181432413965429, 0.05181432413965428, 0.061814324139654285, 0.07181432413965429, 0.08181432413965428, 0.09181432413965429, 0.10181432413965429, 0.11181432413965428, 0.12181432413965429, 0.13181432413965427, 0.14181432413965428, 0.1518143241396543, 0.1618143241396543, 0.17181432413965428, 0.1818143241396543, 0.1918143241396543, 0.20181432413965428, 0.2118143241396543, 0.2218143241396543, 0.23181432413965428, 0.24181432413965429, 0.2518143241396543, 0.2618143241396543, 0.2718143241396543, 0.2818143241396543, 0.2918143241396543, 0.3018143241396543, 0.31181432413965426, 0.3218143241396543, 0.3318143241396543, 0.3418143241396543, 0.3518143241396543, 0.3618143241396543, 0.3718143241396543, 0.38181432413965427, 0.3918143241396543, 0.4018143241396543, 0.4118143241396543, 0.4218143241396543, 0.4318143241396543, 0.44181432413965427, 0.4518143241396543, 0.4618143241396543, 0.4718143241396543, 0.4818143241396543, 0.4918143241396543, 0.5018143241396542, 0.5118143241396542, 0.5218143241396542, 0.5318143241396542, 0.5418143241396542, 0.5518143241396543, 0.5618143241396543, 0.5718143241396543]}, {"amplitude": [10.903350943638442, 10.953350943638442, 11.003350943638441, 11.053350943638442, 11.103350943638441, 11.153350943638442, 11.203350943638442, 11.253350943638441, 11.303350943638442, 11.353350943638441, 11.403350943638442, 11.453350943638442, 11.503350943638441, 11.553350943638442, 11.603350943638441, 11.653350943638442, 11.703350943638442, 11.753350943638441, 11.803350943638442, 11.853350943638441, 11.903350943638442, 11.953350943638442, 12.003350943638441, 12.053350943638442, 12.103350943638441, 12.153350943638442, 12.203350943638442, 12.253350943638441, 12.303350943638442, 12.353350943638441, 12.403350943638442, 12.453350943638442, 12.503350943638441, 12.553350943638442, 12.603350943638441, 12.653350943638442, 12.703350943638442, 12.753350943638441, 12.803350943638442, 12.853350943638441, 12.903350943638442, 12.953350943638442, 13.003350943638441, 13.053350943638442, 13.103350943638441, 13.153350943638442, 13.203350943638442, 13.253350943638441, 13.303350943638442, 13.353350943638441, 13.403350943638442, 13.453350943638442, 13.503350943638441, 13.553350943638442, 13.603350943638441, 13.653350943638442], "phase": [0.03090169943749472, 0.04090169943749472, 0.050901699437494716, 0.06090169943749472, 0.07090169943749472, 0.08090169943749473, 0.09090169943749471, 0.10090169943749472, 0.11090169943749473, 0.12090169943749471, 0.13090169943749472, 0.14090169943749473, 0.1509016994374947, 0.16090169943749472, 0.17090169943749473, 0.1809016994374947, 0.19090169943749472, 0.20090169943749472, 0.2109016994374947, 0.22090169943749471, 0.23090169943749472, 0.2409016994374947, 0.25090169943749474, 0.26090169943749475, 0.2709016994374947, 0.2809016994374947, 0.2909016994374947, 0.30090169943749473, 0.31090169943749474, 0.3209016994374947, 0.3309016994374947, 0.3409016994374947, 0.3509016994374947, 0.3609016994374947, 0.37090169943749474, 0.38090169943749475, 0.3909016994374947, 0.4009016994374947, 0.4109016994374947, 0.4209016994374947, 0.43090169943749473, 0.44090169943749474, 0.4509016994374947, 0.4609016994374947, 0.4709016994374947, 0.4809016994374947, 0.49090169943749473, 0.5009016994374947, 0.5109016994374947, 0.5209016994374948, 0.5309016994374948, 0.5409016994374948, 0.5509016994374948, 0.5609016994374948, 0.5709016994374948, 0.5809016994374948]}, {"amplitude": [11.09370379979804, 11.143703799798041, 11.19370379979804, 11.243703799798041, 11.29370379979804, 11.34370379979804, 11.393703799798041, 11.44370379979804, 11.493703799798041, 11.54370379979804, 11.59370379979804, 11.643703799798041, 11.69370379979804, 11.743703799798041, 11.79370379979804, 11.84370379979804, 11.893703799798041, 11.94370379979804, 11.993703799798041, 12.04370379979804, 12.09370379979804, 12.143703799798041, 12.19370379979804, 12.243703799798041, 12.29370379979804, 12.34370379979804, 12.393703799798041, 12.44370379979804, 12.493703799798041, 12.54370379979804, 12.59370379979804, 12.643703799798041, 12.69370379979804, 12.743703799798041, 12.79370379979804, 12.84370379979804, 12.893703799798041, 12.94370379979804, 12.993703799798041, 13.04370379979804, 13.09370379979804, 13.143703799798041, 13.19370379979804, 13.243703799798041, 13.29370379979804, 13.34370379979804, 13.393703799798041, 13.44370379979804, 13.493703799798041, 13.54370379979804, 13.59370379979804, 13.643703799798041, 13.69370379979804, 13.743703799798041, 13.79370379979804, 13.84370379979804], "phase": [0.039714789063477994, 0.049714789063477996, 0.05971478906347799, 0.069714789063478, 0.079714789063478, 0.08971478906347799, 0.099714789063478, 0.10971478906347801, 0.11971478906347799, 0.129714789063478, 0.139714789063478, 0.149714789063478, 0.159714789063478, 0.169714789063478, 0.17971478906347801, 0.189714789063478, 0.199714789063478, 0.209714789063478, 0.219714789063478, 0.229714789063478, 0.239714789063478, 0.249714789063478, 0.259714789063478, 0.269714789063478, 0.27971478906347796, 0.289714789063478, 0.299714789063478, 0.309714789063478, 0.319714789063478, 0.32971478906347795, 0.33971478906347796, 0.34971478906347797, 0.359714789063478, 0.369714789063478, 0.379714789063478, 0.389714789063478, 0.39971478906347796, 0.40971478906347797, 0.419714789063478, 0.429714789063478, 0.439714789063478, 0.449714789063478, 0.45971478906347796, 0.46971478906347797, 0.479714789063478, 0.489714789063478, 0.499714789063478, 0.509714789063478, 0.519714789063478, 0.529714789063478, 0.539714789063478, 0.549714789063478, 0.559714789063478, 0.569714789063478, 0.5797147890634781, 0.5897147890634781]}, {"amplitude": [11.234955463943237, 11.284955463943238, 11.334955463943237, 11.384955463943237, 11.434955463943236, 11.484955463943237, 11.534955463943238, 11.584955463943237, 11.634955463943237, 11.684955463943236, 11.734955463943237, 11.784955463943238, 11.834955463943237, 11.884955463943237, 11.934955463943236, 11.984955463943237, 12.034955463943238, 12.084955463943237, 12.134955463943237, 12.184955463943236, 12.234955463943237, 12.284955463943238, 12.334955463943237, 12.384955463943237, 12.434955463943236, 12.484955463943237, 12.534955463943238, 12.584955463943237, 12.634955463943237, 12.684955463943236, 12.734955463943237, 12.784955463943238, 12.834955463943237, 12.884955463943237, 12.934955463943236, 12.984955463943237, 13.034955463943238, 13.084955463943237, 13.134955463943237, 13.184955463943236, 13.234955463943237, 13.284955463943238, 13.334955463943237, 13.384955463943237, 13.434955463943236, 13.484955463943237, 13.534955463943238, 13.584955463943237, 13.634955463943237, 13.684955463943236, 13.734955463943237, 13.784955463943238, 13.834955463943237, 13.884955463943237, 13.934955463943236, 13.984955463943237], "phase": [0.04817536741017149, 0.05817536741017149, 0.0681753674101715, 0.07817536741017149, 0.08817536741017148, 0.0981753674101715, 0.10817536741017149, 0.1181753674101715, 0.1281753674101715, 0.1381753674101715, 0.1481753674101715, 0.1581753674101715, 0.16817536741017147, 0.17817536741017148, 0.1881753674101715, 0.1981753674101715, 0.2081753674101715, 0.21817536741017152, 0.22817536741017147, 0.23817536741017148, 0.2481753674101715, 0.2581753674101715, 0.2681753674101715, 0.2781753674101715, 0.28817536741017147, 0.2981753674101715, 0.3081753674101715, 0.3181753674101715, 0.3281753674101715, 0.33817536741017146, 0.34817536741017147, 0.3581753674101715, 0.3681753674101715, 0.3781753674101715, 0.3881753674101715, 0.3981753674101715, 0.40817536741017146, 0.4181753674101715, 0.4281753674101715, 0.4381753674101715, 0.4481753674101715, 0.4581753674101715, 0.46817536741017146, 0.47817536741017147, 0.4881753674101715, 0.4981753674101715, 0.5081753674101716, 0.5181753674101716, 0.5281753674101715, 0.5381753674101715, 0.5481753674101715, 0.5581753674101715, 0.5681753674101715, 0.5781753674101715, 0.5881753674101715, 0.5981753674101715]}, {"amplitude": [11.329530887482868, 11.379530887482868, 11.429530887482867, 11.479530887482868, 11.529530887482867, 11.579530887482868, 11.629530887482868, 11.679530887482867, 11.729530887482868, 11.779530887482867, 11.829530887482868, 11.879530887482868, 11.929530887482867, 11.979530887482868, 12.029530887482867, 12.079530887482868, 12.129530887482868, 12.179530887482867, 12.229530887482868, 12.279530887482867, 12.329530887482868, 12.379530887482868, 12.429530887482867, 12.479530887482868, 12.529530887482867, 12.579530887482868, 12.629530887482868, 12.679530887482867, 12.729530887482868, 12.779530887482867, 12.829530887482868, 12.879530887482868, 12.929530887482867, 12.979530887482868, 13.029530887482867, 13.079530887482868, 13.129530887482868, 13.179530887482867, 13.229530887482868, 13.279530887482867, 13.329530887482868, 13.379530887482868, 13.429530887482867, 13.479530887482868, 13.529530887482867, 13.579530887482868, 13.629530887482868, 13.679530887482867, 13.729530887482868, 13.779530887482867, 13.829530887482868, 13.879530887482868, 13.929530887482867, 13.979530887482868, 14.029530887482867, 14.079530887482868], "phase": [0.05620833778521305, 0.06620833778521305, 0.07620833778521305, 0.08620833778521306, 0.09620833778521305, 0.10620833778521305, 0.11620833778521306, 0.12620833778521307, 0.13620833778521305, 0.14620833778521306, 0.15620833778521306, 0.16620833778521305, 0.17620833778521305, 0.18620833778521306, 0.19620833778521307, 0.20620833778521305, 0.21620833778521306, 0.22620833778521307, 0.23620833778521305, 0.24620833778521306, 0.25620833778521307, 0.266208337785213, 0.27620833778521303, 0.28620833778521304, 0.29620833778521305, 0.30620833778521306, 0.31620833778521307, 0.3262083377852131, 0.3362083377852131, 0.34620833778521304, 0.35620833778521305, 0.36620833778521306, 0.37620833778521307, 0.3862083377852131, 0.3962083377852131, 0.4062083377852131, 0.41620833778521305, 0.42620833778521305, 0.43620833778521306, 0.44620833778521307, 0.4562083377852131, 0.4662083377852131, 0.47620833778521304, 0.48620833778521305, 0.49620833778521306, 0.506208337785213, 0.516208337785213, 0.526208337785213, 0.536208337785213, 0.546208337785213, 0.5562083377852131, 0.5662083377852131, 0.5762083377852131, 0.5862083377852131, 0.5962083377852131, 0.6062083377852131]}, {"amplitude": [11.385285345302783, 11.435285345302784, 11.485285345302783, 11.535285345302784, 11.585285345302783, 11.635285345302783, 11.685285345302784, 11.735285345302783, 11.785285345302784, 11.835285345302783, 11.885285345302783, 11.935285345302784, 11.985285345302783, 12.035285345302784, 12.085285345302783, 12.135285345302783, 12.185285345302784, 12.235285345302783, 12.285285345302784, 12.335285345302783, 12.385285345302783, 12.435285345302784, 12.485285345302783, 12.535285345302784, 12.585285345302783, 12.635285345302783, 12.685285345302784, 12.735285345302783, 12.785285345302784, 12.835285345302783, 12.885285345302783, 12.935285345302784, 12.985285345302783, 13.035285345302784, 13.085285345302783, 13.135285345302783, 13.185285345302784, 13.235285345302783, 13.285285345302784, 13.335285345302783, 13.385285345302783, 13.435285345302784, 13.485285345302783, 13.535285345302784, 13.585285345302783, 13.635285345302783, 13.685285345302784, 13.735285345302783, 13.785285345302784, 13.835285345302783, 13.885285345302783, 13.935285345302784, 13.985285345302783, 14.035285345302784, 14.085285345302783, 14.135285345302783], "phase": [0.063742398974869, 0.07374239897486899, 0.083742398974869, 0.093742398974869, 0.103742398974869, 0.113742398974869, 0.123742398974869, 0.133742398974869, 0.143742398974869, 0.153742398974869, 0.163742398974869, 0.17374239897486898, 0.183742398974869, 0.193742398974869, 0.203742398974869, 0.213742398974869, 0.223742398974869, 0.233742398974869, 0.243742398974869, 0.253742398974869, 0.263742398974869, 0.27374239897486896, 0.28374239897486897, 0.293742398974869, 0.303742398974869, 0.313742398974869, 0.323742398974869, 0.333742398974869, 0.343742398974869, 0.353742398974869, 0.363742398974869, 0.373742398974869, 0.383742398974869, 0.393742398974869, 0.403742398974869, 0.41374239897486903, 0.423742398974869, 0.433742398974869, 0.443742398974869, 0.453742398974869, 0.463742398974869, 0.47374239897486903, 0.483742398974869, 0.493742398974869, 0.503742398974869, 0.5137423989748691, 0.5237423989748691, 0.5337423989748691, 0.543742398974869, 0.553742398974869, 0.563742398974869, 0.573742398974869, 0.583742398974869, 0.593742398974869, 0.603742398974869, 0.613742398974869]}, {"amplitude": [11.414213562373094, 11.464213562373095, 11.514213562373094, 11.564213562373094, 11.614213562373093, 11.664213562373094, 11.714213562373095, 11.764213562373094, 11.814213562373094, 11.864213562373093, 11.914213562373094, 11.964213562373095, 12.014213562373094, 12.064213562373094, 12.114213562373093, 12.164213562373094, 12.214213562373095, 12.264213562373094, 12.314213562373094, 12.364213562373093, 12.414213562373094, 12.464213562373095, 12.514213562373094, 12.564213562373094, 12.614213562373093, 12.664213562373094, 12.714213562373095, 12.764213562373094, 12.814213562373094, 12.864213562373093, 12.914213562373094, 12.964213562373095, 13.014213562373094, 13.064213562373094, 13.114213562373093, 13.164213562373094, 13.214213562373095, 13.264213562373094, 13.314213562373094, 13.364213562373093, 13.414213562373094, 13.464213562373095, 13.514213562373094, 13.564213562373094, 13.614213562373093, 13.664213562373094, 13.714213562373095, 13.764213562373094, 13.814213562373094, 13.864213562373093, 13.914213562373094, 13.964213562373095, 14.014213562373094, 14.064213562373094, 14.114213562373093, 14.164213562373094], "phase": [0.07071067811865474, 0.08071067811865473, 0.09071067811865474, 0.10071067811865474, 0.11071067811865473, 0.12071067811865474, 0.13071067811865472, 0.14071067811865473, 0.15071067811865474, 0.16071067811865475, 0.17071067811865476, 0.18071067811865474, 0.19071067811865472, 0.20071067811865473, 0.21071067811865474, 0.22071067811865475, 0.23071067811865476, 0.24071067811865476, 0.2507106781186547, 0.2607106781186547, 0.27071067811865474, 0.28071067811865474, 0.29071067811865475, 0.30071067811865476, 0.3107106781186547, 0.3207106781186547, 0.33071067811865473, 0.34071067811865474, 0.35071067811865475, 0.3607106781186547, 0.3707106781186547, 0.3807106781186547, 0.39071067811865473, 0.40071067811865474, 0.41071067811865475, 0.42071067811865476, 0.4307106781186547, 0.4407106781186547, 0.45071067811865473, 0.46071067811865474, 0.47071067811865475, 0.48071067811865476, 0.4907106781186547, 0.5007106781186548, 0.5107106781186548, 0.5207106781186548, 0.5307106781186548, 0.5407106781186548, 0.5507106781186547, 0.5607106781186547, 0.5707106781186547, 0.5807106781186547, 0.5907106781186547, 0.6007106781186548, 0.6107106781186548, 0.6207106781186548]}, {"amplitude": [11.430589119746175, 11.480589119746176, 11.530589119746175, 11.580589119746175, 11.630589119746174, 11.680589119746175, 11.730589119746176, 11.780589119746175, 11.830589119746175, 11.880589119746174, 11.930589119746175, 11.980589119746176, 12.030589119746175, 12.080589119746175, 12.130589119746174, 12.180589119746175, 12.230589119746176, 12.280589119746175, 12.330589119746175, 12.380589119746174, 12.430589119746175, 12.480589119746176, 12.530589119746175, 12.580589119746175, 12.630589119746174, 12.680589119746175, 12.730589119746176, 12.780589119746175, 12.830589119746175, 12.880589119746174, 12.930589119746175, 12.980589119746176, 13.030589119746175, 13.080589119746175, 13.130589119746174, 13.180589119746175, 13.230589119746176, 13.280589119746175, 13.330589119746175, 13.380589119746174, 13.430589119746175, 13.480589119746176, 13.530589119746175, 13.580589119746175, 13.630589119746174, 13.680589119746175, 13.730589119746176, 13.780589119746175, 13.830589119746175, 13.880589119746174, 13.930589119746175, 13.980589119746176, 14.030589119746175, 14.080589119746175, 14.130589119746174, 14.180589119746175], "phase": [0.07705132427757888, 0.08705132427757888, 0.09705132427757888, 0.10705132427757888, 0.11705132427757889, 0.12705132427757887, 0.13705132427757888, 0.1470513242775789, 0.1570513242775789, 0.16705132427757888, 0.1770513242775789, 0.18705132427757887, 0.19705132427757888, 0.20705132427757889, 0.2170513242775789, 0.22705132427757888, 0.23705132427757888, 0.2470513242775789, 0.2570513242775789, 0.2670513242775789, 0.2770513242775789, 0.28705132427757885, 0.29705132427757885, 0.30705132427757886, 0.31705132427757887, 0.3270513242775789, 0.3370513242775789, 0.3470513242775789, 0.3570513242775789, 0.36705132427757886, 0.37705132427757887, 0.3870513242775789, 0.3970513242775789, 0.4070513242775789, 0.4170513242775789, 0.4270513242775789, 0.43705132427757887, 0.4470513242775789, 0.4570513242775789, 0.4670513242775789, 0.4770513242775789, 0.4870513242775789, 0.49705132427757887, 0.5070513242775789, 0.5170513242775789, 0.527051324277579, 0.537051324277579, 0.547051324277579, 0.5570513242775789, 0.5670513242775789, 0.5770513242775789, 0.5870513242775789, 0.5970513242775789, 0.6070513242775789, 0.6170513242775789, 0.6270513242775789]}, {"amplitude": [11.448797016770516, 11.498797016770517, 11.548797016770516, 11.598797016770517, 11.648797016770516, 11.698797016770516, 11.748797016770517, 11.798797016770516, 11.848797016770517, 11.898797016770516, 11.948797016770516, 11.998797016770517, 12.048797016770516, 12.098797016770517, 12.148797016770516, 12.198797016770516, 12.248797016770517, 12.298797016770516, 12.348797016770517, 12.398797016770516, 12.448797016770516, 12.498797016770517, 12.548797016770516, 12.598797016770517, 12.648797016770516, 12.698797016770516, 12.748797016770517, 12.798797016770516, 12.848797016770517, 12.898797016770516, 12.948797016770516, 12.998797016770517, 13.048797016770516, 13.098797016770517, 13.148797016770516, 13.198797016770516, 13.248797016770517, 13.298797016770516, 13.348797016770517, 13.398797016770516, 13.448797016770516, 13.498797016770517, 13.548797016770516, 13.598797016770517, 13.648797016770516, 13.698797016770516, 13.748797016770517, 13.798797016770516, 13.848797016770517, 13.898797016770516, 13.948797016770516, 13.998797016770517, 14.048797016770516, 14.098797016770517, 14.148797016770516, 14.198797016770516], "phase": [0.08270805742745617, 0.09270805742745616, 0.10270805742745617, 0.11270805742745617, 0.12270805742745616, 0.13270805742745617, 0.14270805742745618, 0.1527080574274562, 0.16270805742745617, 0.17270805742745615, 0.18270805742745616, 0.19270805742745617, 0.20270805742745618, 0.2127080574274562, 0.2227080574274562, 0.23270805742745615, 0.24270805742745616, 0.25270805742745617, 0.2627080574274562, 0.2727080574274562, 0.2827080574274562, 0.29270805742745615, 0.30270805742745616, 0.31270805742745617, 0.3227080574274562, 0.3327080574274562, 0.3427080574274562, 0.3527080574274562, 0.3627080574274562, 0.37270805742745616, 0.38270805742745617, 0.3927080574274562, 0.4027080574274562, 0.4127080574274562, 0.4227080574274562, 0.4327080574274562, 0.44270805742745617, 0.4527080574274562, 0.4627080574274562, 0.4727080574274562, 0.4827080574274562, 0.4927080574274562, 0.5027080574274562, 0.5127080574274562, 0.5227080574274562, 0.5327080574274562, 0.5427080574274562, 0.5527080574274562, 0.5627080574274561, 0.5727080574274561, 0.5827080574274561, 0.5927080574274561, 0.6027080574274561, 0.6127080574274562, 0.6227080574274562, 0.6327080574274562]}, {"amplitude": [11.48116524434792, 11.531165244347921, 11.58116524434792, 11.63116524434792, 11.68116524434792, 11.73116524434792, 11.781165244347921, 11.83116524434792, 11.88116524434792, 11.93116524434792, 11.98116524434792, 12.031165244347921, 12.08116524434792, 12.13116524434792, 12.18116524434792, 12.23116524434792, 12.281165244347921, 12.33116524434792, 12.38116524434792, 12.43116524434792, 12.48116524434792, 12.531165244347921, 12.58116524434792, 12.63116524434792, 12.68116524434792, 12.73116524434792, 12.781165244347921, 12.83116524434792, 12.88116524434792, 12.93116524434792, 12.98116524434792, 13.031165244347921, 13.08116524434792, 13.13116524434792, 13.18116524434792, 13.23116524434792, 13.281165244347921, 13.33116524434792, 13.38116524434792, 13.43116524434792, 13.48116524434792, 13.531165244347921, 13.58116524434792, 13.63116524434792, 13.68116524434792, 13.73116524434792, 13.781165244347921, 13.83116524434792, 13.88116524434792, 13.93116524434792, 13.98116524434792, 14.031165244347921, 14.08116524434792, 14.13116524434792, 14.18116524434792, 14.23116524434792], "phase": [0.08763066800438636, 0.09763066800438636, 0.10763066800438637, 0.11763066800438636, 0.12763066800438636, 0.13763066800438636, 0.14763066800438635, 0.15763066800438635, 0.16763066800438636, 0.17763066800438637, 0.18763066800438638, 0.19763066800438636, 0.20763066800438634, 0.21763066800438635, 0.22763066800438636, 0.23763066800438637, 0.24763066800438638, 0.2576306680043864, 0.26763066800438634, 0.27763066800438635, 0.28763066800438636, 0.29763066800438637, 0.3076306680043864, 0.3176306680043864, 0.32763066800438634, 0.33763066800438635, 0.34763066800438636, 0.35763066800438637, 0.3676306680043864, 0.3776306680043863, 0.38763066800438634, 0.39763066800438635, 0.40763066800438635, 0.41763066800438636, 0.42763066800438637, 0.4376306680043864, 0.44763066800438633, 0.45763066800438634, 0.46763066800438635, 0.47763066800438636, 0.48763066800438637, 0.4976306680043864, 0.5076306680043864, 0.5176306680043864, 0.5276306680043864, 0.5376306680043864, 0.5476306680043864, 0.5576306680043864, 0.5676306680043863, 0.5776306680043863, 0.5876306680043863, 0.5976306680043864, 0.6076306680043864, 0.6176306680043864, 0.6276306680043864, 0.6376306680043864]}, {"amplitude": [11.536101232839481, 11.586101232839482, 11.636101232839481, 11.686101232839482, 11.73610123283948, 11.786101232839481, 11.836101232839482, 11.886101232839481, 11.936101232839482, 11.98610123283948, 12.036101232839481, 12.086101232839482, 12.136101232839481, 12.186101232839482, 12.23610123283948, 12.286101232839481, 12.336101232839482, 12.386101232839481, 12.436101232839482, 12.48610123283948, 12.536101232839481, 12.586101232839482, 12.636101232839481, 12.686101232839482, 12.73610123283948, 12.786101232839481, 12.836101232839482, 12.886101232839481, 12.936101232839482, 12.98610123283948, 13.036101232839481, 13.086101232839482, 13.136101232839481, 13.186101232839482, 13.23610123283948, 13.286101232839481, 13.336101232839482, 13.386101232839481, 13.436101232839482, 13.48610123283948, 13.536101232839481, 13.586101232839482, 13.636101232839481, 13.686101232839482, 13.73610123283948, 13.786101232839481, 13.836101232839482, 13.886101232839481, 13.936101232839482, 13.98610123283948, 14.036101232839481, 14.086101232839482, 14.136101232839481, 14.186101232839482, 14.23610123283948, 14.286101232839481], "phase": [0.09177546256839814, 0.10177546256839813, 0.11177546256839814, 0.12177546256839814, 0.13177546256839814, 0.14177546256839813, 0.15177546256839813, 0.16177546256839814, 0.17177546256839815, 0.18177546256839813, 0.19177546256839814, 0.20177546256839812, 0.21177546256839813, 0.22177546256839814, 0.23177546256839815, 0.24177546256839813, 0.2517754625683981, 0.2617754625683981, 0.27177546256839813, 0.28177546256839814, 0.29177546256839815, 0.30177546256839816, 0.31177546256839817, 0.3217754625683982, 0.3317754625683981, 0.34177546256839814, 0.35177546256839815, 0.36177546256839815, 0.37177546256839816, 0.3817754625683981, 0.3917754625683981, 0.40177546256839813, 0.41177546256839814, 0.42177546256839815, 0.43177546256839816, 0.44177546256839817, 0.4517754625683981, 0.46177546256839813, 0.47177546256839814, 0.48177546256839815, 0.49177546256839816, 0.5017754625683981, 0.5117754625683981, 0.5217754625683981, 0.5317754625683981, 0.5417754625683981, 0.5517754625683982, 0.5617754625683982, 0.5717754625683982, 0.5817754625683982, 0.5917754625683982, 0.6017754625683982, 0.6117754625683982, 0.6217754625683982, 0.6317754625683982, 0.6417754625683982]}, {"amplitude": [11.61679607770176, 11.666796077701761, 11.71679607770176, 11.76679607770176, 11.81679607770176, 11.86679607770176, 11.916796077701761, 11.96679607770176, 12.01679607770176, 12.06679607770176, 12.11679607770176, 12.166796077701761, 12.21679607770176, 12.26679607770176, 12.31679607770176, 12.36679607770176, 12.416796077701761, 12.46679607770176, 12.51679607770176, 12.56679607770176, 12.61679607770176, 12.666796077701761, 12.71679607770176, 12.76679607770176, 12.81679607770176, 12.86679607770176, 12.916796077701761, 12.96679607770176, 13.01679607770176, 13.06679607770176, 13.11679607770176, 13.166796077701761, 13.21679607770176, 13.26679607770176, 13.31679607770176, 13.36679607770176, 13.416796077701761, 13.46679607770176, 13.51679607770176, 13.56679607770176, 13.61679607770176, 13.666796077701761, 13.71679607770176, 13.76679607770176, 13.81679607770176, 13.86679607770176, 13.916796077701761, 13.96679607770176, 14.01679607770176, 14.06679607770176, 14.11679607770176, 14.166796077701761, 14.21679607770176, 14.26679607770176, 14.31679607770176, 14.36679607770176], "phase": [0.09510565162951536, 0.10510565162951535, 0.11510565162951536, 0.12510565162951537, 0.13510565162951535, 0.14510565162951536, 0.15510565162951534, 0.16510565162951535, 0.17510565162951536, 0.18510565162951537, 0.19510565162951538, 0.20510565162951536, 0.21510565162951534, 0.22510565162951535, 0.23510565162951536, 0.24510565162951536, 0.2551056516295154, 0.2651056516295154, 0.27510565162951534, 0.28510565162951534, 0.29510565162951535, 0.30510565162951536, 0.31510565162951537, 0.3251056516295154, 0.33510565162951533, 0.34510565162951534, 0.35510565162951535, 0.36510565162951536, 0.37510565162951537, 0.3851056516295153, 0.39510565162951533, 0.40510565162951534, 0.41510565162951535, 0.42510565162951536, 0.43510565162951537, 0.4451056516295154, 0.45510565162951533, 0.46510565162951534, 0.47510565162951535, 0.48510565162951536, 0.49510565162951536, 0.5051056516295154, 0.5151056516295154, 0.5251056516295154, 0.5351056516295154, 0.5451056516295154, 0.5551056516295154, 0.5651056516295154, 0.5751056516295153, 0.5851056516295153, 0.5951056516295153, 0.6051056516295154, 0.6151056516295154, 0.6251056516295154, 0.6351056516295154, 0.6451056516295154]}, {"amplitude": [11.720679551044757, 11.770679551044758, 11.820679551044757, 11.870679551044757, 11.920679551044756, 11.970679551044757, 12.020679551044758, 12.070679551044757, 12.120679551044757, 12.170679551044756, 12.220679551044757, 12.270679551044758, 12.320679551044757, 12.370679551044757, 12.420679551044756, 12.470679551044757, 12.520679551044758, 12.570679551044757, 12.620679551044757, 12.670679551044756, 12.720679551044757, 12.770679551044758, 12.820679551044757, 12.870679551044757, 12.920679551044756, 12.970679551044757, 13.020679551044758, 13.070679551044757, 13.120679551044757, 13.170679551044756, 13.220679551044757, 13.270679551044758, 13.320679551044757, 13.370679551044757, 13.420679551044756, 13.470679551044757, 13.520679551044758, 13.570679551044757, 13.620679551044757, 13.670679551044756, 13.720679551044757, 13.770679551044758, 13.820679551044757, 13.870679551044757, 13.920679551044756, 13.970679551044757, 14.020679551044758, 14.070679551044757, 14.120679551044757, 14.170679551044756, 14.220679551044757, 14.270679551044758, 14.320679551044757, 14.370679551044757, 14.420679551044756, 14.470679551044757], "phase": [0.09759167619387472, 0.10759167619387472, 0.11759167619387473, 0.12759167619387474, 0.13759167619387472, 0.14759167619387473, 0.1575916761938747, 0.16759167619387472, 0.17759167619387473, 0.18759167619387473, 0.19759167619387474, 0.20759167619387472, 0.2175916761938747, 0.22759167619387471, 0.23759167619387472, 0.24759167619387473, 0.25759167619387474, 0.26759167619387475, 0.2775916761938747, 0.2875916761938747, 0.2975916761938747, 0.30759167619387473, 0.31759167619387474, 0.32759167619387475, 0.3375916761938747, 0.3475916761938747, 0.3575916761938747, 0.36759167619387473, 0.37759167619387474, 0.3875916761938747, 0.3975916761938747, 0.4075916761938747, 0.4175916761938747, 0.4275916761938747, 0.43759167619387473, 0.44759167619387474, 0.4575916761938747, 0.4675916761938747, 0.4775916761938747, 0.4875916761938747, 0.49759167619387473, 0.5075916761938748, 0.5175916761938747, 0.5275916761938747, 0.5375916761938747, 0.5475916761938747, 0.5575916761938747, 0.5675916761938747, 0.5775916761938747, 0.5875916761938748, 0.5975916761938748, 0.6075916761938748, 0.6175916761938748, 0.6275916761938748, 0.6375916761938748, 0.6475916761938748]}, {"amplitude": [11.839703300398439, 11.88970330039844, 11.939703300398438, 11.989703300398439, 12.039703300398438, 12.089703300398439, 12.13970330039844, 12.189703300398438, 12.239703300398439, 12.289703300398438, 12.339703300398439, 12.38970330039844, 12.439703300398438, 12.489703300398439, 12.539703300398438, 12.589703300398439, 12.63970330039844, 12.689703300398438, 12.739703300398439, 12.789703300398438, 12.839703300398439, 12.88970330039844, 12.939703300398438, 12.989703300398439, 13.039703300398438, 13.089703300398439, 13.13970330039844, 13.189703300398438, 13.239703300398439, 13.289703300398438, 13.339703300398439, 13.38970330039844, 13.439703300398438, 13.489703300398439, 13.539703300398438, 13.589703300398439, 13.63970330039844, 13.689703300398438, 13.739703300398439, 13.789703300398438, 13.839703300398439, 13.88970330039844, 13.939703300398438, 13.989703300398439, 14.039703300398438, 14.089703300398439, 14.13970330039844, 14.189703300398438, 14.239703300398439, 14.289703300398438, 14.339703300398439, 14.38970330039844, 14.439703300398438, 14.489703300398439, 14.539703300398438, 14.589703300398439], "phase": [0.09921147013144777, 0.10921147013144776, 0.11921147013144777, 0.12921147013144776, 0.13921147013144777, 0.14921147013144775, 0.15921147013144776, 0.16921147013144777, 0.17921147013144778, 0.18921147013144776, 0.19921147013144777, 0.20921147013144775, 0.21921147013144776, 0.22921147013144777, 0.23921147013144778, 0.24921147013144776, 0.25921147013144774, 0.26921147013144775, 0.27921147013144776, 0.28921147013144777, 0.2992114701314478, 0.3092114701314478, 0.3192114701314478, 0.3292114701314478, 0.33921147013144776, 0.34921147013144777, 0.3592114701314478, 0.3692114701314478, 0.3792114701314478, 0.38921147013144775, 0.39921147013144775, 0.40921147013144776, 0.41921147013144777, 0.4292114701314478, 0.4392114701314478, 0.4492114701314478, 0.45921147013144775, 0.46921147013144776, 0.47921147013144777, 0.4892114701314478, 0.4992114701314478, 0.5092114701314479, 0.5192114701314477, 0.5292114701314478, 0.5392114701314478, 0.5492114701314478, 0.5592114701314478, 0.5692114701314478, 0.5792114701314477, 0.5892114701314477, 0.5992114701314477, 0.6092114701314477, 0.6192114701314477, 0.6292114701314477, 0.6392114701314477, 0.6492114701314478]}, {"amplitude": [11.961413150662173, 12.011413150662174, 12.061413150662172, 12.111413150662173, 12.161413150662172, 12.211413150662173, 12.261413150662174, 12.311413150662172, 12.361413150662173, 12.411413150662172, 12.461413150662173, 12.511413150662174, 12.561413150662172, 12.611413150662173, 12.661413150662172, 12.711413150662173, 12.761413150662174, 12.811413150662172, 12.861413150662173, 12.911413150662172, 12.961413150662173, 13.011413150662174, 13.061413150662172, 13.111413150662173, 13.161413150662172, 13.211413150662173, 13.261413150662174, 13.311413150662172, 13.361413150662173, 13.411413150662172, 13.461413150662173, 13.511413150662174, 13.561413150662172, 13.611413150662173, 13.661413150662172, 13.711413150662173, 13.761413150662174, 13.811413150662172, 13.861413150662173, 13.911413150662172, 13.961413150662173, 14.011413150662174, 14.061413150662172, 14.111413150662173, 14.161413150662172, 14.211413150662173, 14.261413150662174, 14.311413150662172, 14.361413150662173, 14.411413150662172, 14.461413150662173, 14.511413150662174, 14.561413150662172, 14.611413150662173, 14.661413150662172, 14.711413150662173], "phase": [0.09995065603657316, 0.10995065603657316, 0.11995065603657316, 0.12995065603657316, 0.13995065603657317, 0.14995065603657315, 0.15995065603657316, 0.16995065603657317, 0.17995065603657318, 0.18995065603657316, 0.19995065603657317, 0.20995065603657315, 0.21995065603657316, 0.22995065603657316, 0.23995065603657317, 0.24995065603657315, 0.2599506560365732, 0.2699506560365732, 0.27995065603657315, 0.28995065603657316, 0.29995065603657317, 0.3099506560365731, 0.31995065603657313, 0.32995065603657314, 0.33995065603657315, 0.34995065603657316, 0.35995065603657317, 0.3699506560365732, 0.3799506560365732, 0.38995065603657314, 0.39995065603657315, 0.40995065603657316, 0.41995065603657317, 0.4299506560365732, 0.4399506560365732, 0.4499506560365732, 0.45995065603657315, 0.46995065603657316, 0.47995065603657316, 0.4899506560365732, 0.4999506560365732, 0.5099506560365732, 0.5199506560365732, 0.5299506560365732, 0.5399506560365732, 0.5499506560365732, 0.5599506560365732, 0.5699506560365732, 0.5799506560365731, 0.5899506560365732, 0.5999506560365732, 0.6099506560365732, 0.6199506560365732, 0.6299506560365732, 0.6399506560365732, 0.6499506560365732]}, {"amplitude": [12.070660423006, 12.120660423006, 12.170660423006, 12.220660423006, 12.270660423006, 12.320660423006, 12.370660423006, 12.420660423006, 12.470660423006, 12.520660423006, 12.570660423006, 12.620660423006, 12.670660423006, 12.720660423006, 12.770660423006, 12.820660423006, 12.870660423006, 12.920660423006, 12.970660423006, 13.020660423006, 13.070660423006, 13.120660423006, 13.170660423006, 13.220660423006, 13.270660423006, 13.320660423006, 13.370660423006, 13.420660423006, 13.470660423006, 13.520660423006, 13.570660423006, 13.620660423006, 13.670660423006, 13.720660423006, 13.770660423006, 13.820660423006, 13.870660423006, 13.920660423006, 13.970660423006, 14.020660423006, 14.070660423006, 14.120660423006, 14.170660423006, 14.220660423006, 14.270660423006, 14.320660423006, 14.370660423006, 14.420660423006, 14.470660423006, 14.520660423006, 14.570660423006, 14.620660423006, 14.670660423006, 14.720660423006, 14.770660423006, 14.820660423006], "phase": [0.09980267284282716, 0.10980267284282716, 0.11980267284282717, 0.12980267284282715, 0.13980267284282716, 0.14980267284282717, 0.15980267284282718, 0.16980267284282718, 0.17980267284282717, 0.18980267284282715, 0.19980267284282716, 0.20980267284282716, 0.21980267284282717, 0.22980267284282718, 0.2398026728428272, 0.24980267284282714, 0.25980267284282715, 0.26980267284282716, 0.27980267284282717, 0.2898026728428272, 0.2998026728428272, 0.30980267284282714, 0.31980267284282715, 0.32980267284282716, 0.33980267284282717, 0.3498026728428272, 0.3598026728428272, 0.3698026728428272, 0.3798026728428272, 0.38980267284282716, 0.39980267284282717, 0.4098026728428272, 0.4198026728428272, 0.4298026728428272, 0.4398026728428272, 0.4498026728428272, 0.45980267284282716, 0.4698026728428272, 0.4798026728428272, 0.4898026728428272, 0.4998026728428272, 0.5098026728428272, 0.5198026728428271, 0.5298026728428271, 0.5398026728428271, 0.5498026728428271, 0.5598026728428271, 0.5698026728428272, 0.5798026728428272, 0.5898026728428272, 0.5998026728428272, 0.6098026728428272, 0.6198026728428272, 0.6298026728428272, 0.6398026728428272, 0.6498026728428272]}, {"amplitude": [12.151712256878017, 12.201712256878018, 12.251712256878017, 12.301712256878018, 12.351712256878017, 12.401712256878017, 12.451712256878018, 12.501712256878017, 12.551712256878018, 12.601712256878017, 12.651712256878017, 12.701712256878018, 12.751712256878017, 12.801712256878018, 12.851712256878017, 12.901712256878017, 12.951712256878018, 13.001712256878017, 13.051712256878018, 13.101712256878017, 13.151712256878017, 13.201712256878018, 13.251712256878017, 13.301712256878018, 13.351712256878017, 13.401712256878017, 13.451712256878018, 13.501712256878017, 13.551712256878018, 13.601712256878017, 13.651712256878017, 13.701712256878018, 13.751712256878017, 13.801712256878018, 13.851712256878017, 13.901712256878017, 13.951712256878018, 14.001712256878017, 14.051712256878018, 14.101712256878017, 14.151712256878017, 14.201712256878018, 14.251712256878017, 14.301712256878018, 14.351712256878017, 14.401712256878017, 14.451712256878018, 14.501712256878017, 14.551712256878018, 14.601712256878017, 14.651712256878017, 14.701712256878018, 14.751712256878017, 14.801712256878018, 14.851712256878017, 14.901712256878017], "phase": [0.0987688340595138, 0.10876883405951379, 0.1187688340595138, 0.12876883405951378, 0.1387688340595138, 0.1487688340595138, 0.1587688340595138, 0.16876883405951382, 0.1787688340595138, 0.18876883405951378, 0.1987688340595138, 0.2087688340595138, 0.2187688340595138, 0.22876883405951381, 0.23876883405951382, 0.24876883405951378, 0.2587688340595138, 0.2687688340595138, 0.2787688340595138, 0.2887688340595138, 0.2987688340595138, 0.3087688340595138, 0.3187688340595138, 0.3287688340595138, 0.3387688340595138, 0.3487688340595138, 0.3587688340595138, 0.36876883405951383, 0.37876883405951384, 0.3887688340595138, 0.3987688340595138, 0.4087688340595138, 0.4187688340595138, 0.4287688340595138, 0.43876883405951383, 0.44876883405951384, 0.4587688340595138, 0.4687688340595138, 0.4787688340595138, 0.4887688340595138, 0.49876883405951383, 0.5087688340595138, 0.5187688340595138, 0.5287688340595138, 0.5387688340595138, 0.5487688340595138, 0.5587688340595138, 0.5687688340595138, 0.5787688340595137, 0.5887688340595137, 0.5987688340595138, 0.6087688340595138, 0.6187688340595138, 0.6287688340595138, 0.6387688340595138, 0.6487688340595138]}, {"amplitude": [12.190464699907867, 12.240464699907868, 12.290464699907867, 12.340464699907868, 12.390464699907866, 12.440464699907867, 12.490464699907868, 12.540464699907867, 12.590464699907868, 12.640464699907866, 12.690464699907867, 12.740464699907868, 12.790464699907867, 12.840464699907868, 12.890464699907866, 12.940464699907867, 12.990464699907868, 13.040464699907867, 13.090464699907868, 13.140464699907866, 13.190464699907867, 13.240464699907868, 13.290464699907867, 13.340464699907868, 13.390464699907866, 13.440464699907867, 13.490464699907868, 13.540464699907867, 13.590464699907868, 13.640464699907866, 13.690464699907867, 13.740464699907868, 13.790464699907867, 13.840464699907868, 13.890464699907866, 13.940464699907867, 13.990464699907868, 14.040464699907867, 14.090464699907868, 14.140464699907866, 14.190464699907867, 14.240464699907868, 14.290464699907867, 14.340464699907868, 14.390464699907866, 14.440464699907867, 14.490464699907868, 14.540464699907867, 14.590464699907868, 14.640464699907866, 14.690464699907867, 14.740464699907868, 14.790464699907867, 14.840464699907868, 14.890464699907866, 14.940464699907867], "phase": [0.09685831611286311, 0.1068583161128631, 0.11685831611286311, 0.1268583161128631, 0.13685831611286312, 0.1468583161128631, 0.1568583161128631, 0.16685831611286311, 0.17685831611286312, 0.1868583161128631, 0.1968583161128631, 0.2068583161128631, 0.2168583161128631, 0.2268583161128631, 0.23685831611286312, 0.2468583161128631, 0.25685831611286314, 0.26685831611286315, 0.2768583161128631, 0.2868583161128631, 0.2968583161128631, 0.30685831611286307, 0.3168583161128631, 0.3268583161128631, 0.3368583161128631, 0.3468583161128631, 0.3568583161128631, 0.3668583161128631, 0.37685831611286313, 0.3868583161128631, 0.3968583161128631, 0.4068583161128631, 0.4168583161128631, 0.4268583161128631, 0.43685831611286313, 0.44685831611286314, 0.4568583161128631, 0.4668583161128631, 0.4768583161128631, 0.4868583161128631, 0.49685831611286313, 0.5068583161128631, 0.516858316112863, 0.526858316112863, 0.536858316112863, 0.5468583161128631, 0.5568583161128631, 0.5668583161128631, 0.5768583161128631, 0.5868583161128631, 0.5968583161128631, 0.6068583161128631, 0.6168583161128631, 0.6268583161128631, 0.6368583161128631, 0.6468583161128632]}, {"amplitude": [12.176447713127057, 12.226447713127058, 12.276447713127057, 12.326447713127058, 12.376447713127057, 12.426447713127057, 12.476447713127058, 12.526447713127057, 12.576447713127058, 12.626447713127057, 12.676447713127057, 12.726447713127058, 12.776447713127057, 12.826447713127058, 12.876447713127057, 12.926447713127057, 12.976447713127058, 13.026447713127057, 13.076447713127058, 13.126447713127057, 13.176447713127057, 13.226447713127058, 13.276447713127057, 13.326447713127058, 13.376447713127057, 13.426447713127057, 13.476447713127058, 13.526447713127057, 13.576447713127058, 13.626447713127057, 13.676447713127057, 13.726447713127058, 13.776447713127057, 13.826447713127058, 13.876447713127057, 13.926447713127057, 13.976447713127058, 14.026447713127057, 14.076447713127058, 14.126447713127057, 14.176447713127057, 14.226447713127058, 14.276447713127057, 14.326447713127058, 14.376447713127057, 14.426447713127057, 14.476447713127058, 14.526447713127057, 14.576447713127058, 14.626447713127057, 14.676447713127057, 14.726447713127058, 14.776447713127057, 14.826447713127058, 14.876447713127057, 14.926447713127057], "phase": [0.09408807689542258, 0.10408807689542257, 0.11408807689542258, 0.12408807689542257, 0.13408807689542257, 0.14408807689542258, 0.1540880768954226, 0.1640880768954226, 0.17408807689542258, 0.18408807689542256, 0.19408807689542257, 0.20408807689542258, 0.21408807689542259, 0.2240880768954226, 0.2340880768954226, 0.24408807689542256, 0.25408807689542257, 0.2640880768954226, 0.2740880768954226, 0.2840880768954226, 0.2940880768954226, 0.30408807689542255, 0.31408807689542256, 0.32408807689542257, 0.3340880768954226, 0.3440880768954226, 0.3540880768954226, 0.3640880768954226, 0.3740880768954226, 0.38408807689542257, 0.3940880768954226, 0.4040880768954226, 0.4140880768954226, 0.4240880768954226, 0.4340880768954226, 0.4440880768954226, 0.4540880768954226, 0.4640880768954226, 0.4740880768954226, 0.4840880768954226, 0.4940880768954226, 0.5040880768954226, 0.5140880768954226, 0.5240880768954226, 0.5340880768954226, 0.5440880768954226, 0.5540880768954226, 0.5640880768954226, 0.5740880768954225, 0.5840880768954225, 0.5940880768954225, 0.6040880768954225, 0.6140880768954226, 0.6240880768954226, 0.6340880768954226, 0.6440880768954226]}, {"amplitude": [12.104340280150645, 12.154340280150645, 12.204340280150644, 12.254340280150645, 12.304340280150644, 12.354340280150645, 12.404340280150645, 12.454340280150644, 12.504340280150645, 12.554340280150644, 12.604340280150645, 12.654340280150645, 12.704340280150644, 12.754340280150645, 12.804340280150644, 12.854340280150645, 12.904340280150645, 12.954340280150644, 13.004340280150645, 13.054340280150644, 13.104340280150645, 13.154340280150645, 13.204340280150644, 13.254340280150645, 13.304340280150644, 13.354340280150645, 13.404340280150645, 13.454340280150644, 13.504340280150645, 13.554340280150644, 13.604340280150645, 13.654340280150645, 13.704340280150644, 13.754340280150645, 13.804340280150644, 13.854340280150645, 13.904340280150645, 13.954340280150644, 14.004340280150645, 14.054340280150644, 14.104340280150645, 14.154340280150645, 14.204340280150644, 14.254340280150645, 14.304340280150644, 14.354340280150645, 14.404340280150645, 14.454340280150644, 14.504340280150645, 14.554340280150644, 14.604340280150645, 14.654340280150645, 14.704340280150644, 14.754340280150645, 14.804340280150644, 14.854340280150645], "phase": [0.09048270524660193, 0.10048270524660192, 0.11048270524660193, 0.12048270524660193, 0.13048270524660194, 0.14048270524660195, 0.15048270524660193, 0.16048270524660194, 0.17048270524660192, 0.18048270524660193, 0.19048270524660194, 0.20048270524660194, 0.21048270524660193, 0.22048270524660193, 0.23048270524660194, 0.24048270524660192, 0.25048270524660193, 0.26048270524660194, 0.2704827052466019, 0.2804827052466019, 0.2904827052466019, 0.3004827052466019, 0.31048270524660193, 0.32048270524660194, 0.33048270524660195, 0.34048270524660196, 0.35048270524660197, 0.360482705246602, 0.370482705246602, 0.3804827052466019, 0.3904827052466019, 0.4004827052466019, 0.4104827052466019, 0.4204827052466019, 0.4304827052466019, 0.44048270524660194, 0.45048270524660194, 0.46048270524660195, 0.47048270524660196, 0.48048270524660197, 0.490482705246602, 0.500482705246602, 0.5104827052466019, 0.5204827052466019, 0.5304827052466019, 0.5404827052466019, 0.5504827052466019, 0.5604827052466019, 0.5704827052466019, 0.580482705246602, 0.590482705246602, 0.600482705246602, 0.610482705246602, 0.620482705246602, 0.630482705246602, 0.640482705246602]}, {"amplitude": [11.974782431658491, 12.024782431658492, 12.074782431658491, 12.124782431658492, 12.17478243165849, 12.224782431658491, 12.274782431658492, 12.324782431658491, 12.374782431658492, 12.42478243165849, 12.474782431658491, 12.524782431658492, 12.574782431658491, 12.624782431658492, 12.67478243165849, 12.724782431658491, 12.774782431658492, 12.824782431658491, 12.874782431658492, 12.92478243165849, 12.974782431658491, 13.024782431658492, 13.074782431658491, 13.124782431658492, 13.17478243165849, 13.224782431658491, 13.274782431658492, 13.324782431658491, 13.374782431658492, 13.42478243165849, 13.474782431658491, 13.524782431658492, 13.574782431658491, 13.624782431658492, 13.67478243165849, 13.724782431658491, 13.774782431658492, 13.824782431658491, 13.874782431658492, 13.92478243165849, 13.974782431658491, 14.024782431658492, 14.074782431658491, 14.124782431658492, 14.17478243165849, 14.224782431658491, 14.274782431658492, 14.324782431658491, 14.374782431658492, 14.42478243165849, 14.474782431658491, 14.524782431658492, 14.574782431658491, 14.624782431658492, 14.67478243165849, 14.724782431658491], "phase": [0.08607420270039436, 0.09607420270039435, 0.10607420270039436, 0.11607420270039435, 0.12607420270039435, 0.13607420270039436, 0.14607420270039434, 0.15607420270039435, 0.16607420270039436, 0.17607420270039437, 0.18607420270039438, 0.19607420270039436, 0.20607420270039434, 0.21607420270039435, 0.22607420270039436, 0.23607420270039436, 0.24607420270039437, 0.2560742027003944, 0.26607420270039434, 0.27607420270039434, 0.28607420270039435, 0.29607420270039436, 0.30607420270039437, 0.3160742027003944, 0.32607420270039433, 0.33607420270039434, 0.34607420270039435, 0.35607420270039436, 0.36607420270039437, 0.3760742027003943, 0.38607420270039433, 0.39607420270039434, 0.40607420270039435, 0.41607420270039436, 0.42607420270039437, 0.4360742027003944, 0.44607420270039433, 0.45607420270039434, 0.46607420270039435, 0.47607420270039436, 0.48607420270039436, 0.4960742027003944, 0.5060742027003944, 0.5160742027003944, 0.5260742027003944, 0.5360742027003944, 0.5460742027003944, 0.5560742027003944, 0.5660742027003943, 0.5760742027003943, 0.5860742027003943, 0.5960742027003944, 0.6060742027003944, 0.6160742027003944, 0.6260742027003944, 0.6360742027003944]}, {"amplitude": [11.794369564437638, 11.844369564437638, 11.894369564437637, 11.944369564437638, 11.994369564437637, 12.044369564437638, 12.094369564437638, 12.144369564437637, 12.194369564437638, 12.244369564437637, 12.294369564437638, 12.344369564437638, 12.394369564437637, 12.444369564437638, 12.494369564437637, 12.544369564437638, 12.594369564437638, 12.644369564437637, 12.694369564437638, 12.744369564437637, 12.794369564437638, 12.844369564437638, 12.894369564437637, 12.944369564437638, 12.994369564437637, 13.044369564437638, 13.094369564437638, 13.144369564437637, 13.194369564437638, 13.244369564437637, 13.294369564437638, 13.344369564437638, 13.394369564437637, 13.444369564437638, 13.494369564437637, 13.544369564437638, 13.594369564437638, 13.644369564437637, 13.694369564437638, 13.744369564437637, 13.794369564437638, 13.844369564437638, 13.894369564437637, 13.944369564437638, 13.994369564437637, 14.044369564437638, 14.094369564437638, 14.144369564437637, 14.194369564437638, 14.244369564437637, 14.294369564437638, 14.344369564437638, 14.394369564437637, 14.444369564437638, 14.494369564437637, 14.544369564437638], "phase": [0.08090169943749476, 0.09090169943749475, 0.10090169943749476, 0.11090169943749476, 0.12090169943749476, 0.13090169943749475, 0.14090169943749475, 0.15090169943749476, 0.16090169943749477, 0.17090169943749475, 0.18090169943749476, 0.19090169943749474, 0.20090169943749475, 0.21090169943749476, 0.22090169943749477, 0.23090169943749475, 0.24090169943749476, 0.25090169943749474, 0.26090169943749475, 0.27090169943749476, 0.28090169943749477, 0.2909016994374948, 0.3009016994374948, 0.3109016994374948, 0.32090169943749475, 0.33090169943749476, 0.34090169943749477, 0.3509016994374948, 0.3609016994374948, 0.37090169943749474, 0.38090169943749475, 0.39090169943749475, 0.40090169943749476, 0.41090169943749477, 0.4209016994374948, 0.4309016994374948, 0.44090169943749474, 0.45090169943749475, 0.46090169943749476, 0.47090169943749477, 0.4809016994374948, 0.4909016994374948, 0.5009016994374947, 0.5109016994374947, 0.5209016994374948, 0.5309016994374948, 0.5409016994374948, 0.5509016994374948, 0.5609016994374947, 0.5709016994374947, 0.5809016994374947, 0.5909016994374947, 0.6009016994374947, 0.6109016994374947, 0.6209016994374947, 0.6309016994374947]}, {"amplitude": [11.574829105410377, 11.624829105410377, 11.674829105410376, 11.724829105410377, 11.774829105410376, 11.824829105410377, 11.874829105410377, 11.924829105410376, 11.974829105410377, 12.024829105410376, 12.074829105410377, 12.124829105410377, 12.174829105410376, 12.224829105410377, 12.274829105410376, 12.324829105410377, 12.374829105410377, 12.424829105410376, 12.474829105410377, 12.524829105410376, 12.574829105410377, 12.624829105410377, 12.674829105410376, 12.724829105410377, 12.774829105410376, 12.824829105410377, 12.874829105410377, 12.924829105410376, 12.974829105410377, 13.024829105410376, 13.074829105410377, 13.124829105410377, 13.174829105410376, 13.224829105410377, 13.274829105410376, 13.324829105410377, 13.374829105410377, 13.424829105410376, 13.474829105410377, 13.524829105410376, 13.574829105410377, 13.624829105410377, 13.674829105410376, 13.724829105410377, 13.774829105410376, 13.824829105410377, 13.874829105410377, 13.924829105410376, 13.974829105410377, 14.024829105410376, 14.074829105410377, 14.124829105410377, 14.174829105410376, 14.224829105410377, 14.274829105410376, 14.324829105410377], "phase": [0.07501110696304603, 0.08501110696304602, 0.09501110696304603, 0.10501110696304602, 0.11501110696304603, 0.12501110696304601, 0.13501110696304602, 0.14501110696304603, 0.15501110696304604, 0.16501110696304602, 0.17501110696304603, 0.185011106963046, 0.19501110696304602, 0.20501110696304603, 0.21501110696304604, 0.22501110696304602, 0.23501110696304603, 0.24501110696304604, 0.255011106963046, 0.26501110696304603, 0.27501110696304604, 0.285011106963046, 0.295011106963046, 0.305011106963046, 0.315011106963046, 0.325011106963046, 0.33501110696304603, 0.34501110696304604, 0.35501110696304605, 0.365011106963046, 0.375011106963046, 0.385011106963046, 0.39501110696304603, 0.40501110696304604, 0.41501110696304605, 0.42501110696304606, 0.435011106963046, 0.445011106963046, 0.45501110696304603, 0.46501110696304604, 0.47501110696304605, 0.48501110696304606, 0.495011106963046, 0.5050111069630461, 0.5150111069630461, 0.5250111069630461, 0.5350111069630461, 0.5450111069630461, 0.555011106963046, 0.565011106963046, 0.575011106963046, 0.585011106963046, 0.595011106963046, 0.605011106963046, 0.6150111069630461, 0.6250111069630461]}, {"amplitude": [11.331494241788091, 11.381494241788092, 11.43149424178809, 11.481494241788091, 11.53149424178809, 11.581494241788091, 11.631494241788092, 11.68149424178809, 11.731494241788091, 11.78149424178809, 11.831494241788091, 11.881494241788092, 11.93149424178809, 11.981494241788091, 12.03149424178809, 12.081494241788091, 12.131494241788092, 12.18149424178809, 12.231494241788091, 12.28149424178809, 12.331494241788091, 12.381494241788092, 12.43149424178809, 12.481494241788091, 12.53149424178809, 12.581494241788091, 12.631494241788092, 12.68149424178809, 12.731494241788091, 12.78149424178809, 12.831494241788091, 12.881494241788092, 12.93149424178809, 12.981494241788091, 13.03149424178809, 13.081494241788091, 13.131494241788092, 13.18149424178809, 13.231494241788091, 13.28149424178809, 13.331494241788091, 13.381494241788092, 13.43149424178809, 13.481494241788091, 13.53149424178809, 13.581494241788091, 13.631494241788092, 13.68149424178809, 13.731494241788091, 13.78149424178809, 13.831494241788091, 13.881494241788092, 13.93149424178809, 13.981494241788091, 14.03149424178809, 14.081494241788091], "phase": [0.06845471059286898, 0.07845471059286897, 0.08845471059286898, 0.09845471059286898, 0.10845471059286899, 0.11845471059286898, 0.12845471059286898, 0.13845471059286898, 0.14845471059286897, 0.15845471059286897, 0.16845471059286898, 0.178454710592869, 0.18845471059286897, 0.19845471059286898, 0.208454710592869, 0.21845471059286897, 0.22845471059286898, 0.238454710592869, 0.24845471059286897, 0.25845471059286895, 0.26845471059286896, 0.27845471059286897, 0.288454710592869, 0.298454710592869, 0.308454710592869, 0.318454710592869, 0.328454710592869, 0.338454710592869, 0.34845471059286903, 0.35845471059286893, 0.36845471059286894, 0.37845471059286895, 0.38845471059286896, 0.39845471059286897, 0.408454710592869, 0.418454710592869, 0.428454710592869, 0.438454710592869, 0.448454710592869, 0.458454710592869, 0.46845471059286903, 0.47845471059286904, 0.48845471059286893, 0.49845471059286894, 0.508454710592869, 0.518454710592869, 0.528454710592869, 0.538454710592869, 0.548454710592869, 0.558454710592869, 0.568454710592869, 0.578454710592869, 0.588454710592869, 0.598454710592869, 0.608454710592869, 0.618454710592869]}, {"amplitude": [11.08128800507544, 11.13128800507544, 11.181288005075437, 11.231288005075438, 11.281288005075439, 11.33128800507544, 11.38128800507544, 11.431288005075437, 11.481288005075438, 11.531288005075439, 11.58128800507544, 11.63128800507544, 11.681288005075437, 11.731288005075438, 11.781288005075439, 11.83128800507544, 11.88128800507544, 11.931288005075437, 11.981288005075438, 12.031288005075439, 12.08128800507544, 12.13128800507544, 12.181288005075437, 12.231288005075438, 12.281288005075439, 12.33128800507544, 12.38128800507544, 12.431288005075437, 12.481288005075438, 12.531288005075439, 12.58128800507544, 12.63128800507544, 12.681288005075437, 12.731288005075438, 12.781288005075439, 12.83128800507544, 12.88128800507544, 12.931288005075437, 12.981288005075438, 13.031288005075439, 13.08128800507544, 13.13128800507544, 13.181288005075437, 13.231288005075438, 13.281288005075439, 13.33128800507544, 13.38128800507544, 13.431288005075437, 13.481288005075438, 13.531288005075439, 13.58128800507544, 13.63128800507544, 13.681288005075437, 13.731288005075438, 13.781288005075439, 13.83128800507544], "phase": [0.06129070536529766, 0.07129070536529766, 0.08129070536529766, 0.09129070536529765, 0.10129070536529766, 0.11129070536529767, 0.12129070536529765, 0.13129070536529766, 0.14129070536529767, 0.15129070536529765, 0.16129070536529766, 0.17129070536529767, 0.18129070536529765, 0.19129070536529766, 0.20129070536529767, 0.21129070536529765, 0.22129070536529766, 0.23129070536529767, 0.24129070536529765, 0.2512907053652977, 0.2612907053652977, 0.27129070536529765, 0.28129070536529766, 0.29129070536529766, 0.3012907053652977, 0.3112907053652977, 0.3212907053652977, 0.3312907053652977, 0.3412907053652977, 0.35129070536529766, 0.36129070536529767, 0.3712907053652977, 0.3812907053652977, 0.3912907053652977, 0.4012907053652977, 0.4112907053652977, 0.42129070536529767, 0.4312907053652977, 0.4412907053652977, 0.4512907053652977, 0.4612907053652977, 0.4712907053652977, 0.48129070536529767, 0.4912907053652977, 0.5012907053652976, 0.5112907053652976, 0.5212907053652976, 0.5312907053652977, 0.5412907053652977, 0.5512907053652977, 0.5612907053652977, 0.5712907053652977, 0.5812907053652977, 0.5912907053652977, 0.6012907053652977, 0.6112907053652977]}, {"amplitude": [10.840499617125259, 10.89049961712526, 10.940499617125258, 10.99049961712526, 11.040499617125258, 11.090499617125259, 11.14049961712526, 11.190499617125258, 11.24049961712526, 11.290499617125258, 11.340499617125259, 11.39049961712526, 11.440499617125258, 11.49049961712526, 11.540499617125258, 11.590499617125259, 11.64049961712526, 11.690499617125258, 11.74049961712526, 11.790499617125258, 11.840499617125259, 11.89049961712526, 11.940499617125258, 11.99049961712526, 12.040499617125258, 12.090499617125259, 12.14049961712526, 12.190499617125258, 12.24049961712526, 12.290499617125258, 12.340499617125259, 12.39049961712526, 12.440499617125258, 12.49049961712526, 12.540499617125258, 12.590499617125259, 12.64049961712526, 12.690499617125258, 12.74049961712526, 12.790499617125258, 12.840499617125259, 12.89049961712526, 12.940499617125258, 12.99049961712526, 13.040499617125258, 13.090499617125259, 13.14049961712526, 13.190499617125258, 13.24049961712526, 13.290499617125258, 13.340499617125259, 13.39049961712526, 13.440499617125258, 13.49049961712526, 13.540499617125258, 13.590499617125259], "phase": [0.05358267949789972, 0.06358267949789972, 0.07358267949789972, 0.08358267949789971, 0.09358267949789972, 0.10358267949789973, 0.11358267949789971, 0.12358267949789972, 0.13358267949789973, 0.1435826794978997, 0.15358267949789972, 0.16358267949789973, 0.1735826794978997, 0.18358267949789972, 0.19358267949789973, 0.2035826794978997, 0.21358267949789972, 0.22358267949789973, 0.2335826794978997, 0.24358267949789972, 0.25358267949789975, 0.2635826794978997, 0.2735826794978997, 0.2835826794978997, 0.29358267949789973, 0.30358267949789974, 0.31358267949789975, 0.32358267949789976, 0.33358267949789977, 0.3435826794978997, 0.35358267949789973, 0.36358267949789974, 0.37358267949789975, 0.38358267949789976, 0.39358267949789977, 0.4035826794978998, 0.41358267949789973, 0.42358267949789974, 0.43358267949789975, 0.44358267949789976, 0.45358267949789977, 0.4635826794978998, 0.47358267949789973, 0.48358267949789974, 0.49358267949789975, 0.5035826794978997, 0.5135826794978997, 0.5235826794978997, 0.5335826794978997, 0.5435826794978997, 0.5535826794978997, 0.5635826794978998, 0.5735826794978998, 0.5835826794978998, 0.5935826794978998, 0.6035826794978998]}, {"amplitude": [10.622664044590547, 10.672664044590547, 10.722664044590545, 10.772664044590545, 10.822664044590546, 10.872664044590547, 10.922664044590547, 10.972664044590545, 11.022664044590545, 11.072664044590546, 11.122664044590547, 11.172664044590547, 11.222664044590545, 11.272664044590545, 11.322664044590546, 11.372664044590547, 11.422664044590547, 11.472664044590545, 11.522664044590545, 11.572664044590546, 11.622664044590547, 11.672664044590547, 11.722664044590545, 11.772664044590545, 11.822664044590546, 11.872664044590547, 11.922664044590547, 11.972664044590545, 12.022664044590545, 12.072664044590546, 12.122664044590547, 12.172664044590547, 12.222664044590545, 12.272664044590545, 12.322664044590546, 12.372664044590547, 12.422664044590547, 12.472664044590545, 12.522664044590545, 12.572664044590546, 12.622664044590547, 12.672664044590547, 12.722664044590545, 12.772664044590545, 12.822664044590546, 12.872664044590547, 12.922664044590547, 12.972664044590545, 13.022664044590545, 13.072664044590546, 13.122664044590547, 13.172664044590547, 13.222664044590545, 13.272664044590545, 13.322664044590546, 13.372664044590547], "phase": [0.045399049973954636, 0.05539904997395464, 0.06539904997395464, 0.07539904997395463, 0.08539904997395464, 0.09539904997395464, 0.10539904997395463, 0.11539904997395464, 0.12539904997395462, 0.13539904997395463, 0.14539904997395464, 0.15539904997395465, 0.16539904997395463, 0.17539904997395464, 0.18539904997395465, 0.19539904997395463, 0.20539904997395464, 0.21539904997395465, 0.22539904997395463, 0.23539904997395464, 0.24539904997395465, 0.25539904997395463, 0.26539904997395464, 0.27539904997395465, 0.2853990499739546, 0.2953990499739546, 0.3053990499739546, 0.3153990499739546, 0.32539904997395463, 0.33539904997395464, 0.34539904997395465, 0.35539904997395466, 0.36539904997395467, 0.3753990499739547, 0.3853990499739547, 0.3953990499739547, 0.4053990499739546, 0.4153990499739546, 0.4253990499739546, 0.4353990499739546, 0.44539904997395463, 0.45539904997395464, 0.46539904997395465, 0.47539904997395466, 0.48539904997395467, 0.4953990499739547, 0.5053990499739547, 0.5153990499739547, 0.5253990499739546, 0.5353990499739546, 0.5453990499739546, 0.5553990499739546, 0.5653990499739546, 0.5753990499739546, 0.5853990499739546, 0.5953990499739547]}, {"amplitude": [10.436841086840875, 10.486841086840876, 10.536841086840875, 10.586841086840876, 10.636841086840874, 10.686841086840875, 10.736841086840876, 10.786841086840875, 10.836841086840876, 10.886841086840874, 10.936841086840875, 10.986841086840876, 11.036841086840875, 11.086841086840876, 11.136841086840874, 11.186841086840875, 11.236841086840876, 11.286841086840875, 11.336841086840876, 11.386841086840874, 11.436841086840875, 11.486841086840876, 11.536841086840875, 11.586841086840876, 11.636841086840874, 11.686841086840875, 11.736841086840876, 11.786841086840875, 11.836841086840876, 11.886841086840874, 11.936841086840875, 11.986841086840876, 12.036841086840875, 12.086841086840876, 12.136841086840874, 12.186841086840875, 12.236841086840876, 12.286841086840875, 12.336841086840876, 12.386841086840874, 12.436841086840875, 12.486841086840876, 12.536841086840875, 12.586841086840876, 12.636841086840874, 12.686841086840875, 12.736841086840876, 12.786841086840875, 12.836841086840876, 12.886841086840874, 12.936841086840875, 12.986841086840876, 13.036841086840875, 13.086841086840876, 13.136841086840874, 13.186841086840875], "phase": [0.0368124552684678, 0.0468124552684678, 0.0568124552684678, 0.0668124552684678, 0.0768124552684678, 0.0868124552684678, 0.0968124552684678, 0.1068124552684678, 0.1168124552684678, 0.1268124552684678, 0.1368124552684678, 0.1468124552684678, 0.1568124552684678, 0.1668124552684678, 0.1768124552684678, 0.1868124552684678, 0.1968124552684678, 0.2068124552684678, 0.2168124552684678, 0.2268124552684678, 0.2368124552684678, 0.2468124552684678, 0.2568124552684678, 0.2668124552684678, 0.27681245526846776, 0.28681245526846777, 0.2968124552684678, 0.3068124552684678, 0.3168124552684678, 0.3268124552684678, 0.3368124552684678, 0.3468124552684678, 0.35681245526846783, 0.36681245526846784, 0.37681245526846785, 0.38681245526846786, 0.39681245526846776, 0.40681245526846777, 0.4168124552684678, 0.4268124552684678, 0.4368124552684678, 0.4468124552684678, 0.4568124552684678, 0.4668124552684678, 0.4768124552684678, 0.48681245526846784, 0.49681245526846785, 0.5068124552684679, 0.5168124552684678, 0.5268124552684678, 0.5368124552684678, 0.5468124552684678, 0.5568124552684678, 0.5668124552684678, 0.5768124552684678, 0.5868124552684678]}, {"amplitude": [10.286534096338652, 10.336534096338653, 10.386534096338652, 10.436534096338653, 10.486534096338652, 10.536534096338652, 10.586534096338653, 10.636534096338652, 10.686534096338653, 10.736534096338652, 10.786534096338652, 10.836534096338653, 10.886534096338652, 10.936534096338653, 10.986534096338652, 11.036534096338652, 11.086534096338653, 11.136534096338652, 11.186534096338653, 11.236534096338652, 11.286534096338652, 11.336534096338653, 11.386534096338652, 11.436534096338653, 11.486534096338652, 11.536534096338652, 11.586534096338653, 11.636534096338652, 11.686534096338653, 11.736534096338652, 11.786534096338652, 11.836534096338653, 11.886534096338652, 11.936534096338653, 11.986534096338652, 12.036534096338652, 12.086534096338653, 12.136534096338652, 12.186534096338653, 12.236534096338652, 12.286534096338652, 12.336534096338653, 12.386534096338652, 12.436534096338653, 12.486534096338652, 12.536534096338652, 12.586534096338653, 12.636534096338652, 12.686534096338653, 12.736534096338652, 12.786534096338652, 12.836534096338653, 12.886534096338652, 12.936534096338653, 12.986534096338652, 13.036534096338652], "phase": [0.02789911060392298, 0.03789911060392298, 0.047899110603922976, 0.05789911060392298, 0.06789911060392298, 0.07789911060392299, 0.08789911060392297, 0.09789911060392298, 0.10789911060392299, 0.11789911060392297, 0.12789911060392298, 0.137899110603923, 0.14789911060392297, 0.15789911060392298, 0.16789911060392299, 0.17789911060392297, 0.18789911060392298, 0.19789911060392298, 0.20789911060392297, 0.21789911060392297, 0.22789911060392298, 0.23789911060392296, 0.24789911060392297, 0.257899110603923, 0.26789911060392296, 0.27789911060392297, 0.287899110603923, 0.297899110603923, 0.307899110603923, 0.31789911060392295, 0.32789911060392296, 0.33789911060392297, 0.347899110603923, 0.357899110603923, 0.367899110603923, 0.377899110603923, 0.38789911060392296, 0.39789911060392297, 0.407899110603923, 0.417899110603923, 0.427899110603923, 0.437899110603923, 0.44789911060392296, 0.45789911060392297, 0.467899110603923, 0.477899110603923, 0.487899110603923, 0.497899110603923, 0.507899110603923, 0.517899110603923, 0.527899110603923, 0.537899110603923, 0.547899110603923, 0.557899110603923, 0.5678991106039231, 0.5778991106039231]}, {"amplitude": [10.169398497392843, 10.219398497392843, 10.269398497392842, 10.319398497392843, 10.369398497392842, 10.419398497392843, 10.469398497392843, 10.519398497392842, 10.569398497392843, 10.619398497392842, 10.669398497392843, 10.719398497392843, 10.769398497392842, 10.819398497392843, 10.869398497392842, 10.919398497392843, 10.969398497392843, 11.019398497392842, 11.069398497392843, 11.119398497392842, 11.169398497392843, 11.219398497392843, 11.269398497392842, 11.319398497392843, 11.369398497392842, 11.419398497392843, 11.469398497392843, 11.519398497392842, 11.569398497392843, 11.619398497392842, 11.669398497392843, 11.719398497392843, 11.769398497392842, 11.819398497392843, 11.869398497392842, 11.919398497392843, 11.969398497392843, 12.019398497392842, 12.069398497392843, 12.119398497392842, 12.169398497392843, 12.219398497392843, 12.269398497392842, 12.319398497392843, 12.369398497392842, 12.419398497392843, 12.469398497392843, 12.519398497392842, 12.569398497392843, 12.619398497392842, 12.669398497392843, 12.719398497392843, 12.769398497392842, 12.819398497392843, 12.869398497392842, 12.919398497392843], "phase": [0.018738131458572393, 0.028738131458572395, 0.0387381314585724, 0.04873813145857239, 0.058738131458572394, 0.0687381314585724, 0.07873813145857239, 0.0887381314585724, 0.0987381314585724, 0.10873813145857239, 0.1187381314585724, 0.12873813145857238, 0.1387381314585724, 0.1487381314585724, 0.1587381314585724, 0.1687381314585724, 0.1787381314585724, 0.1887381314585724, 0.1987381314585724, 0.2087381314585724, 0.2187381314585724, 0.22873813145857239, 0.2387381314585724, 0.2487381314585724, 0.2587381314585724, 0.2687381314585724, 0.2787381314585724, 0.2887381314585724, 0.2987381314585724, 0.3087381314585724, 0.3187381314585724, 0.3287381314585724, 0.3387381314585724, 0.3487381314585724, 0.3587381314585724, 0.3687381314585724, 0.3787381314585724, 0.3887381314585724, 0.3987381314585724, 0.4087381314585724, 0.4187381314585724, 0.4287381314585724, 0.4387381314585724, 0.4487381314585724, 0.4587381314585724, 0.4687381314585724, 0.4787381314585724, 0.4887381314585724, 0.4987381314585724, 0.5087381314585724, 0.5187381314585724, 0.5287381314585724, 0.5387381314585724, 0.5487381314585724, 0.5587381314585724, 0.5687381314585724]}, {"amplitude": [10.077779260831626, 10.127779260831627, 10.177779260831626, 10.227779260831626, 10.277779260831625, 10.327779260831626, 10.377779260831627, 10.427779260831626, 10.477779260831626, 10.527779260831625, 10.577779260831626, 10.627779260831627, 10.677779260831626, 10.727779260831626, 10.777779260831625, 10.827779260831626, 10.877779260831627, 10.927779260831626, 10.977779260831626, 11.027779260831625, 11.077779260831626, 11.127779260831627, 11.177779260831626, 11.227779260831626, 11.277779260831625, 11.327779260831626, 11.377779260831627, 11.427779260831626, 11.477779260831626, 11.527779260831625, 11.577779260831626, 11.627779260831627, 11.677779260831626, 11.727779260831626, 11.777779260831625, 11.827779260831626, 11.877779260831627, 11.927779260831626, 11.977779260831626, 12.027779260831625, 12.077779260831626, 12.127779260831627, 12.177779260831626, 12.227779260831626, 12.277779260831625, 12.327779260831626, 12.377779260831627, 12.427779260831626, 12.477779260831626, 12.527779260831625, 12.577779260831626, 12.627779260831627, 12.677779260831626, 12.727779260831626, 12.777779260831625, 12.827779260831626], "phase": [0.009410831331851416, 0.019410831331851418, 0.029410831331851416, 0.039410831331851415, 0.04941083133185142, 0.05941083133185142, 0.06941083133185141, 0.07941083133185142, 0.08941083133185142, 0.09941083133185141, 0.10941083133185142, 0.11941083133185142, 0.1294108313318514, 0.13941083133185142, 0.14941083133185143, 0.1594108313318514, 0.16941083133185142, 0.17941083133185143, 0.1894108313318514, 0.19941083133185142, 0.20941083133185143, 0.2194108313318514, 0.22941083133185142, 0.23941083133185143, 0.2494108313318514, 0.2594108313318514, 0.2694108313318514, 0.2794108313318514, 0.2894108313318514, 0.2994108313318514, 0.30941083133185143, 0.31941083133185144, 0.32941083133185145, 0.33941083133185146, 0.34941083133185147, 0.3594108313318515, 0.3694108313318514, 0.3794108313318514, 0.3894108313318514, 0.3994108313318514, 0.4094108313318514, 0.4194108313318514, 0.42941083133185143, 0.43941083133185144, 0.44941083133185145, 0.45941083133185145, 0.46941083133185146, 0.4794108313318515, 0.48941083133185137, 0.4994108313318514, 0.5094108313318514, 0.5194108313318514, 0.5294108313318514, 0.5394108313318514, 0.5494108313318514, 0.5594108313318514]}, {"amplitude": [10.0, 10.05, 10.1, 10.15, 10.2, 10.25, 10.3, 10.35, 10.4, 10.45, 10.5, 10.55, 10.6, 10.65, 10.7, 10.75, 10.8, 10.85, 10.9, 10.95, 11.0, 11.05, 11.1, 11.15, 11.2, 11.25, 11.3, 11.35, 11.4, 11.45, 11.5, 11.55, 11.6, 11.65, 11.7, 11.75, 11.8, 11.85, 11.9, 11.95, 12.0, 12.05, 12.1, 12.15, 12.2, 12.25, 12.3, 12.35, 12.4, 12.45, 12.5, 12.55, 12.6, 12.65, 12.7, 12.75], "phase": [3.6739403974420595e-17, 0.010000000000000037, 0.02000000000000004, 0.030000000000000037, 0.040000000000000036, 0.05000000000000004, 0.06000000000000003, 0.07000000000000005, 0.08000000000000004, 0.09000000000000004, 0.10000000000000005, 0.11000000000000004, 0.12000000000000004, 0.13000000000000003, 0.14000000000000004, 0.15000000000000002, 0.16000000000000003, 0.17000000000000004, 0.18000000000000002, 0.19000000000000003, 0.20000000000000004, 0.21000000000000002, 0.22000000000000003, 0.23000000000000004, 0.24000000000000002, 0.25000000000000006, 0.26000000000000006, 0.2700000000000001, 0.2800000000000001, 0.29000000000000004, 0.30000000000000004, 0.31000000000000005, 0.32000000000000006, 0.33000000000000007, 0.3400000000000001, 0.3500000000000001, 0.36000000000000004, 0.37000000000000005, 0.38000000000000006, 0.39000000000000007, 0.4000000000000001, 0.4100000000000001, 0.42000000000000004, 0.43000000000000005, 0.44000000000000006, 0.45000000000000007, 0.4600000000000001, 0.4700000000000001, 0.48000000000000004, 0.49000000000000005, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55]}, {"amplitude": [9.922220739168376, 9.972220739168376, 10.022220739168375, 10.072220739168376, 10.122220739168375, 10.172220739168376, 10.222220739168376, 10.272220739168375, 10.322220739168376, 10.372220739168375, 10.422220739168376, 10.472220739168376, 10.522220739168375, 10.572220739168376, 10.622220739168375, 10.672220739168376, 10.722220739168376, 10.772220739168375, 10.822220739168376, 10.872220739168375, 10.922220739168376, 10.972220739168376, 11.022220739168375, 11.072220739168376, 11.122220739168375, 11.172220739168376, 11.222220739168376, 11.272220739168375, 11.322220739168376, 11.372220739168375, 11.422220739168376, 11.472220739168376, 11.522220739168375, 11.572220739168376, 11.622220739168375, 11.672220739168376, 11.722220739168376, 11.772220739168375, 11.822220739168376, 11.872220739168375, 11.922220739168376, 11.972220739168376, 12.022220739168375, 12.072220739168376, 12.122220739168375, 12.172220739168376, 12.222220739168376, 12.272220739168375, 12.322220739168376, 12.372220739168375, 12.422220739168376, 12.472220739168376, 12.522220739168375, 12.572220739168376, 12.622220739168375, 12.672220739168376], "phase": [-0.009410831331851343, 0.0005891686681486572, 0.010589168668148657, 0.020589168668148656, 0.030589168668148658, 0.040589168668148656, 0.05058916866814865, 0.06058916866814866, 0.07058916866814866, 0.08058916866814865, 0.09058916866814866, 0.10058916866814865, 0.11058916866814865, 0.12058916866814866, 0.13058916866814868, 0.14058916866814866, 0.15058916866814867, 0.16058916866814868, 0.17058916866814866, 0.18058916866814867, 0.19058916866814868, 0.20058916866814866, 0.21058916866814867, 0.22058916866814868, 0.23058916866814866, 0.24058916866814867, 0.2505891686681487, 0.2605891686681487, 0.2705891686681487, 0.28058916866814865, 0.29058916866814866, 0.30058916866814867, 0.3105891686681487, 0.3205891686681487, 0.3305891686681487, 0.3405891686681487, 0.35058916866814865, 0.36058916866814866, 0.37058916866814867, 0.3805891686681487, 0.3905891686681487, 0.4005891686681487, 0.41058916866814865, 0.42058916866814866, 0.43058916866814867, 0.4405891686681487, 0.4505891686681487, 0.4605891686681487, 0.47058916866814865, 0.48058916866814866, 0.49058916866814867, 0.5005891686681486, 0.5105891686681486, 0.5205891686681486, 0.5305891686681486, 0.5405891686681487]}, {"amplitude": [9.83060150260716, 9.88060150260716, 9.930601502607159, 9.98060150260716, 10.030601502607158, 10.08060150260716, 10.13060150260716, 10.180601502607159, 10.23060150260716, 10.280601502607158, 10.33060150260716, 10.38060150260716, 10.430601502607159, 10.48060150260716, 10.530601502607158, 10.58060150260716, 10.63060150260716, 10.680601502607159, 10.73060150260716, 10.780601502607158, 10.83060150260716, 10.88060150260716, 10.930601502607159, 10.98060150260716, 11.030601502607158, 11.08060150260716, 11.13060150260716, 11.180601502607159, 11.23060150260716, 11.280601502607158, 11.33060150260716, 11.38060150260716, 11.430601502607159, 11.48060150260716, 11.530601502607158, 11.58060150260716, 11.63060150260716, 11.680601502607159, 11.73060150260716, 11.780601502607158, 11.83060150260716, 11.88060150260716, 11.930601502607159, 11.98060150260716, 12.030601502607158, 12.08060150260716, 12.13060150260716, 12.180601502607159, 12.23060150260716, 12.280601502607158, 12.33060150260716, 12.38060150260716, 12.430601502607159, 12.48060150260716, 12.530601502607158, 12.58060150260716], "phase": [-0.01873813145857232, -0.00873813145857232, 0.0012618685414276798, 0.011261868541427678, 0.02126186854142768, 0.03126186854142768, 0.041261868541427674, 0.05126186854142768, 0.06126186854142768, 0.07126186854142767, 0.08126186854142768, 0.09126186854142768, 0.10126186854142767, 0.11126186854142768, 0.12126186854142769, 0.13126186854142768, 0.1412618685414277, 0.1512618685414277, 0.16126186854142768, 0.1712618685414277, 0.1812618685414277, 0.19126186854142768, 0.2012618685414277, 0.2112618685414277, 0.22126186854142768, 0.2312618685414277, 0.2412618685414277, 0.2512618685414277, 0.2612618685414277, 0.27126186854142764, 0.28126186854142765, 0.29126186854142766, 0.30126186854142767, 0.3112618685414277, 0.3212618685414277, 0.3312618685414277, 0.34126186854142765, 0.35126186854142766, 0.36126186854142767, 0.3712618685414277, 0.3812618685414277, 0.3912618685414277, 0.40126186854142765, 0.41126186854142766, 0.42126186854142766, 0.4312618685414277, 0.4412618685414277, 0.4512618685414277, 0.46126186854142764, 0.47126186854142765, 0.48126186854142766, 0.49126186854142767, 0.5012618685414277, 0.5112618685414277, 0.5212618685414278, 0.5312618685414278]}, {"amplitude": [9.713465903661348, 9.763465903661348, 9.813465903661347, 9.863465903661348, 9.913465903661347, 9.963465903661348, 10.013465903661348, 10.063465903661347, 10.113465903661348, 10.163465903661347, 10.213465903661348, 10.263465903661348, 10.313465903661347, 10.363465903661348, 10.413465903661347, 10.463465903661348, 10.513465903661348, 10.563465903661347, 10.613465903661348, 10.663465903661347, 10.713465903661348, 10.763465903661348, 10.813465903661347, 10.863465903661348, 10.913465903661347, 10.963465903661348, 11.013465903661348, 11.063465903661347, 11.113465903661348, 11.163465903661347, 11.213465903661348, 11.263465903661348, 11.313465903661347, 11.363465903661348, 11.413465903661347, 11.463465903661348, 11.513465903661348, 11.563465903661347, 11.613465903661348, 11.663465903661347, 11.713465903661348, 11.763465903661348, 11.813465903661347, 11.863465903661348, 11.913465903661347, 11.963465903661348, 12.013465903661348, 12.063465903661347, 12.113465903661348, 12.163465903661347, 12.213465903661348, 12.263465903661348, 12.313465903661347, 12.363465903661348, 12.413465903661347, 12.463465903661348], "phase": [-0.027899110603922906, -0.017899110603922908, -0.007899110603922906, 0.002100889396077093, 0.012100889396077095, 0.022100889396077097, 0.032100889396077095, 0.042100889396077104, 0.0521008893960771, 0.062100889396077094, 0.0721008893960771, 0.0821008893960771, 0.09210088939607709, 0.1021008893960771, 0.11210088939607711, 0.12210088939607709, 0.1321008893960771, 0.1421008893960771, 0.15210088939607708, 0.16210088939607709, 0.1721008893960771, 0.18210088939607708, 0.19210088939607708, 0.2021008893960771, 0.21210088939607707, 0.22210088939607708, 0.2321008893960771, 0.2421008893960771, 0.2521008893960771, 0.26210088939607706, 0.2721008893960771, 0.2821008893960771, 0.2921008893960771, 0.3021008893960771, 0.3121008893960771, 0.3221008893960771, 0.33210088939607707, 0.3421008893960771, 0.3521008893960771, 0.3621008893960771, 0.3721008893960771, 0.3821008893960771, 0.39210088939607707, 0.4021008893960771, 0.4121008893960771, 0.4221008893960771, 0.4321008893960771, 0.4421008893960771, 0.45210088939607707, 0.4621008893960771, 0.4721008893960771, 0.4821008893960771, 0.4921008893960771, 0.5021008893960771, 0.5121008893960771, 0.5221008893960771]}, {"amplitude": [9.563158913159127, 9.613158913159127, 9.663158913159126, 9.713158913159127, 9.763158913159126, 9.813158913159127, 9.863158913159127, 9.913158913159126, 9.963158913159127, 10.013158913159126, 10.063158913159127, 10.113158913159127, 10.163158913159126, 10.213158913159127, 10.263158913159126, 10.313158913159127, 10.363158913159127, 10.413158913159126, 10.463158913159127, 10.513158913159126, 10.563158913159127, 10.613158913159127, 10.663158913159126, 10.713158913159127, 10.763158913159126, 10.813158913159127, 10.863158913159127, 10.913158913159126, 10.963158913159127, 11.013158913159126, 11.063158913159127, 11.113158913159127, 11.163158913159126, 11.213158913159127, 11.263158913159126, 11.313158913159127, 11.363158913159127, 11.413158913159126, 11.463158913159127, 11.513158913159126, 11.563158913159127, 11.613158913159127, 11.663158913159126, 11.713158913159127, 11.763158913159126, 11.813158913159127, 11.863158913159127, 11.913158913159126, 11.963158913159127, 12.013158913159126, 12.063158913159127, 12.113158913159127, 12.163158913159126, 12.213158913159127, 12.263158913159126, 12.313158913159127], "phase": [-0.03681245526846773, -0.026812455268467726, -0.016812455268467728, -0.006812455268467729, 0.0031875447315322727, 0.013187544731532275, 0.02318754473153227, 0.03318754473153228, 0.043187544731532274, 0.05318754473153227, 0.06318754473153228, 0.07318754473153227, 0.08318754473153227, 0.09318754473153228, 0.10318754473153229, 0.11318754473153227, 0.12318754473153228, 0.13318754473153227, 0.14318754473153228, 0.1531875447315323, 0.1631875447315323, 0.17318754473153225, 0.18318754473153226, 0.19318754473153227, 0.20318754473153228, 0.21318754473153229, 0.2231875447315323, 0.2331875447315323, 0.2431875447315323, 0.25318754473153227, 0.2631875447315323, 0.2731875447315323, 0.2831875447315323, 0.2931875447315323, 0.3031875447315323, 0.3131875447315323, 0.3231875447315323, 0.3331875447315323, 0.3431875447315323, 0.3531875447315323, 0.3631875447315323, 0.3731875447315323, 0.38318754473153227, 0.3931875447315323, 0.4031875447315323, 0.4131875447315323, 0.4231875447315323, 0.4331875447315323, 0.44318754473153227, 0.4531875447315323, 0.4631875447315323, 0.4731875447315323, 0.4831875447315323, 0.4931875447315323, 0.5031875447315323, 0.5131875447315323]}, {"amplitude": [9.377335955409455, 9.427335955409456, 9.477335955409455, 9.527335955409455, 9.577335955409454, 9.627335955409455, 9.677335955409456, 9.727335955409455, 9.777335955409455, 9.827335955409454, 9.877335955409455, 9.927335955409456, 9.977335955409455, 10.027335955409455, 10.077335955409454, 10.127335955409455, 10.177335955409456, 10.227335955409455, 10.277335955409455, 10.327335955409454, 10.377335955409455, 10.427335955409456, 10.477335955409455, 10.527335955409455, 10.577335955409454, 10.627335955409455, 10.677335955409456, 10.727335955409455, 10.777335955409455, 10.827335955409454, 10.877335955409455, 10.927335955409456, 10.977335955409455, 11.027335955409455, 11.077335955409454, 11.127335955409455, 11.177335955409456, 11.227335955409455, 11.277335955409455, 11.327335955409454, 11.377335955409455, 11.427335955409456, 11.477335955409455, 11.527335955409455, 11.577335955409454, 11.627335955409455, 11.677335955409456, 11.727335955409455, 11.777335955409455, 11.827335955409454, 11.877335955409455, 11.927335955409456, 11.977335955409455, 12.027335955409455, 12.077335955409454, 12.127335955409455], "phase": [-0.04539904997395457, -0.035399049973954565, -0.025399049973954566, -0.015399049973954568, -0.005399049973954566, 0.004600950026045436, 0.014600950026045431, 0.02460095002604544, 0.034600950026045435, 0.04460095002604543, 0.05460095002604544, 0.06460095002604543, 0.07460095002604543, 0.08460095002604544, 0.09460095002604545, 0.10460095002604543, 0.11460095002604544, 0.12460095002604545, 0.13460095002604544, 0.14460095002604545, 0.15460095002604546, 0.1646009500260454, 0.17460095002604542, 0.18460095002604543, 0.19460095002604544, 0.20460095002604545, 0.21460095002604546, 0.22460095002604546, 0.23460095002604547, 0.24460095002604543, 0.25460095002604544, 0.26460095002604545, 0.27460095002604545, 0.28460095002604546, 0.29460095002604547, 0.3046009500260455, 0.31460095002604543, 0.32460095002604544, 0.33460095002604545, 0.34460095002604546, 0.35460095002604547, 0.3646009500260455, 0.37460095002604543, 0.38460095002604544, 0.39460095002604545, 0.40460095002604546, 0.41460095002604547, 0.4246009500260455, 0.43460095002604543, 0.44460095002604544, 0.45460095002604545, 0.46460095002604546, 0.47460095002604546, 0.4846009500260455, 0.4946009500260455, 0.5046009500260454]}, {"amplitude": [9.159500382874743, 9.209500382874744, 9.259500382874743, 9.309500382874743, 9.359500382874742, 9.409500382874743, 9.459500382874744, 9.509500382874743, 9.559500382874743, 9.609500382874742, 9.659500382874743, 9.709500382874744, 9.759500382874743, 9.809500382874743, 9.859500382874742, 9.909500382874743, 9.959500382874744, 10.009500382874743, 10.059500382874743, 10.109500382874742, 10.159500382874743, 10.209500382874744, 10.259500382874743, 10.309500382874743, 10.359500382874742, 10.409500382874743, 10.459500382874744, 10.509500382874743, 10.559500382874743, 10.609500382874742, 10.659500382874743, 10.709500382874744, 10.759500382874743, 10.809500382874743, 10.859500382874742, 10.909500382874743, 10.959500382874744, 11.009500382874743, 11.059500382874743, 11.109500382874742, 11.159500382874743, 11.209500382874744, 11.259500382874743, 11.309500382874743, 11.359500382874742, 11.409500382874743, 11.459500382874744, 11.509500382874743, 11.559500382874743, 11.609500382874742, 11.659500382874743, 11.709500382874744, 11.759500382874743, 11.809500382874743, 11.859500382874742, 11.909500382874743], "phase": [-0.05358267949789966, -0.04358267949789966, -0.033582679497899656, -0.02358267949789966, -0.01358267949789966, -0.0035826794978996573, 0.006417320502100338, 0.016417320502100347, 0.02641732050210034, 0.03641732050210034, 0.046417320502100345, 0.05641732050210034, 0.06641732050210034, 0.07641732050210034, 0.08641732050210035, 0.09641732050210033, 0.10641732050210034, 0.11641732050210035, 0.12641732050210033, 0.13641732050210034, 0.14641732050210035, 0.15641732050210033, 0.16641732050210034, 0.17641732050210035, 0.18641732050210033, 0.19641732050210034, 0.20641732050210035, 0.21641732050210036, 0.22641732050210037, 0.23641732050210032, 0.24641732050210033, 0.2564173205021003, 0.2664173205021003, 0.2764173205021003, 0.28641732050210034, 0.29641732050210035, 0.30641732050210035, 0.31641732050210036, 0.32641732050210037, 0.3364173205021004, 0.3464173205021004, 0.3564173205021004, 0.3664173205021003, 0.3764173205021003, 0.3864173205021003, 0.3964173205021003, 0.40641732050210033, 0.41641732050210034, 0.42641732050210035, 0.43641732050210036, 0.44641732050210037, 0.4564173205021004, 0.4664173205021004, 0.4764173205021004, 0.4864173205021004, 0.4964173205021004]}, {"amplitude": [8.918711994924562, 8.968711994924563, 9.018711994924562, 9.068711994924563, 9.118711994924562, 9.168711994924562, 9.218711994924563, 9.268711994924562, 9.318711994924563, 9.368711994924562, 9.418711994924562, 9.468711994924563, 9.518711994924562, 9.568711994924563, 9.618711994924562, 9.668711994924562, 9.718711994924563, 9.768711994924562, 9.818711994924563, 9.868711994924562, 9.918711994924562, 9.968711994924563, 10.018711994924562, 10.068711994924563, 10.118711994924562, 10.168711994924562, 10.218711994924563, 10.268711994924562, 10.318711994924563, 10.368711994924562, 10.418711994924562, 10.468711994924563, 10.518711994924562, 10.568711994924563, 10.618711994924562, 10.668711994924562, 10.718711994924563, 10.768711994924562, 10.818711994924563, 10.868711994924562, 10.918711994924562, 10.968711994924563, 11.018711994924562, 11.068711994924563, 11.118711994924562, 11.168711994924562, 11.218711994924563, 11.268711994924562, 11.318711994924563, 11.368711994924562, 11.418711994924562, 11.468711994924563, 11.518711994924562, 11.568711994924563, 11.618711994924562, 11.668711994924562], "phase": [-0.061290705365297606, -0.051290705365297604, -0.04129070536529761, -0.03129070536529761, -0.021290705365297605, -0.011290705365297603, -0.0012907053652976078, 0.008709294634702401, 0.018709294634702396, 0.02870929463470239, 0.0387092946347024, 0.048709294634702395, 0.05870929463470239, 0.0687092946347024, 0.07870929463470241, 0.0887092946347024, 0.0987092946347024, 0.10870929463470241, 0.1187092946347024, 0.1287092946347024, 0.1387092946347024, 0.1487092946347024, 0.1587092946347024, 0.1687092946347024, 0.1787092946347024, 0.1887092946347024, 0.1987092946347024, 0.20870929463470242, 0.21870929463470243, 0.22870929463470238, 0.2387092946347024, 0.2487092946347024, 0.2587092946347024, 0.2687092946347024, 0.2787092946347024, 0.2887092946347024, 0.29870929463470236, 0.30870929463470237, 0.3187092946347024, 0.3287092946347024, 0.3387092946347024, 0.3487092946347024, 0.35870929463470236, 0.36870929463470237, 0.3787092946347024, 0.3887092946347024, 0.3987092946347024, 0.4087092946347024, 0.41870929463470236, 0.42870929463470236, 0.4387092946347024, 0.4487092946347024, 0.4587092946347024, 0.4687092946347024, 0.4787092946347024, 0.4887092946347024]}, {"amplitude": [8.668505758211912, 8.718505758211913, 8.768505758211912, 8.818505758211913, 8.868505758211912, 8.918505758211912, 8.968505758211913, 9.018505758211912, 9.068505758211913, 9.118505758211912, 9.168505758211912, 9.218505758211913, 9.268505758211912, 9.318505758211913, 9.368505758211912, 9.418505758211912, 9.468505758211913, 9.518505758211912, 9.568505758211913, 9.618505758211912, 9.668505758211912, 9.718505758211913, 9.768505758211912, 9.818505758211913, 9.868505758211912, 9.918505758211912, 9.968505758211913, 10.018505758211912, 10.068505758211913, 10.118505758211912, 10.168505758211912, 10.218505758211913, 10.268505758211912, 10.318505758211913, 10.368505758211912, 10.418505758211912, 10.468505758211913, 10.518505758211912, 10.568505758211913, 10.618505758211912, 10.668505758211912, 10.718505758211913, 10.768505758211912, 10.818505758211913, 10.868505758211912, 10.918505758211912, 10.968505758211913, 11.018505758211912, 11.068505758211913, 11.118505758211912, 11.168505758211912, 11.218505758211913, 11.268505758211912, 11.318505758211913, 11.368505758211912, 11.418505758211912], "phase": [-0.06845471059286892, -0.05845471059286892, -0.04845471059286892, -0.038454710592868924, -0.028454710592868922, -0.01845471059286892, -0.008454710592868925, 0.001545289407131084, 0.011545289407131079, 0.021545289407131074, 0.03154528940713108, 0.04154528940713108, 0.05154528940713107, 0.06154528940713108, 0.07154528940713109, 0.08154528940713107, 0.09154528940713108, 0.10154528940713109, 0.11154528940713107, 0.12154528940713108, 0.1315452894071311, 0.14154528940713107, 0.15154528940713108, 0.1615452894071311, 0.17154528940713107, 0.18154528940713108, 0.1915452894071311, 0.2015452894071311, 0.2115452894071311, 0.22154528940713106, 0.23154528940713107, 0.24154528940713108, 0.25154528940713106, 0.26154528940713107, 0.2715452894071311, 0.2815452894071311, 0.2915452894071311, 0.3015452894071311, 0.3115452894071311, 0.3215452894071311, 0.3315452894071311, 0.34154528940713114, 0.35154528940713103, 0.36154528940713104, 0.37154528940713105, 0.38154528940713106, 0.39154528940713107, 0.4015452894071311, 0.4115452894071311, 0.4215452894071311, 0.4315452894071311, 0.4415452894071311, 0.4515452894071311, 0.46154528940713113, 0.47154528940713114, 0.48154528940713115]}, {"amplitude": [8.425170894589623, 8.475170894589624, 8.525170894589625, 8.575170894589625, 8.625170894589623, 8.675170894589623, 8.725170894589624, 8.775170894589625, 8.825170894589625, 8.875170894589623, 8.925170894589623, 8.975170894589624, 9.025170894589625, 9.075170894589625, 9.125170894589623, 9.175170894589623, 9.225170894589624, 9.275170894589625, 9.325170894589625, 9.375170894589623, 9.425170894589623, 9.475170894589624, 9.525170894589625, 9.575170894589625, 9.625170894589623, 9.675170894589623, 9.725170894589624, 9.775170894589625, 9.825170894589625, 9.875170894589623, 9.925170894589623, 9.975170894589624, 10.025170894589625, 10.075170894589625, 10.125170894589623, 10.175170894589623, 10.225170894589624, 10.275170894589625, 10.325170894589625, 10.375170894589623, 10.425170894589623, 10.475170894589624, 10.525170894589625, 10.575170894589625, 10.625170894589623, 10.675170894589623, 10.725170894589624, 10.775170894589625, 10.825170894589625, 10.875170894589623, 10.925170894589623, 10.975170894589624, 11.025170894589625, 11.075170894589625, 11.125170894589623, 11.175170894589623], "phase": [-0.07501110696304597, -0.06501110696304598, -0.055011106963045966, -0.04501110696304597, -0.03501110696304597, -0.025011106963045968, -0.015011106963045973, -0.005011106963045964, 0.004988893036954031, 0.014988893036954026, 0.024988893036954035, 0.03498889303695403, 0.044988893036954025, 0.054988893036954034, 0.06498889303695404, 0.07498889303695402, 0.08498889303695403, 0.09498889303695404, 0.10498889303695402, 0.11498889303695403, 0.12498889303695404, 0.13498889303695402, 0.14498889303695403, 0.15498889303695404, 0.16498889303695402, 0.17498889303695403, 0.18498889303695404, 0.19498889303695405, 0.20498889303695406, 0.214988893036954, 0.22498889303695402, 0.23498889303695403, 0.24498889303695404, 0.25498889303695405, 0.26498889303695405, 0.27498889303695406, 0.284988893036954, 0.294988893036954, 0.30498889303695403, 0.31498889303695404, 0.32498889303695405, 0.33498889303695406, 0.344988893036954, 0.354988893036954, 0.36498889303695403, 0.37498889303695404, 0.38498889303695405, 0.39498889303695406, 0.404988893036954, 0.414988893036954, 0.42498889303695403, 0.43498889303695404, 0.44498889303695405, 0.45498889303695406, 0.46498889303695407, 0.4749888930369541]}, {"amplitude": [8.205630435562364, 8.255630435562365, 8.305630435562364, 8.355630435562365, 8.405630435562363, 8.455630435562364, 8.505630435562365, 8.555630435562364, 8.605630435562365, 8.655630435562363, 8.705630435562364, 8.755630435562365, 8.805630435562364, 8.855630435562365, 8.905630435562363, 8.955630435562364, 9.005630435562365, 9.055630435562364, 9.105630435562365, 9.155630435562363, 9.205630435562364, 9.255630435562365, 9.305630435562364, 9.355630435562365, 9.405630435562363, 9.455630435562364, 9.505630435562365, 9.555630435562364, 9.605630435562365, 9.655630435562363, 9.705630435562364, 9.755630435562365, 9.805630435562364, 9.855630435562365, 9.905630435562363, 9.955630435562364, 10.005630435562365, 10.055630435562364, 10.105630435562365, 10.155630435562363, 10.205630435562364, 10.255630435562365, 10.305630435562364, 10.355630435562365, 10.405630435562363, 10.455630435562364, 10.505630435562365, 10.555630435562364, 10.605630435562365, 10.655630435562363, 10.705630435562364, 10.755630435562365, 10.805630435562364, 10.855630435562365, 10.905630435562363, 10.955630435562364], "phase": [-0.08090169943749473, -0.07090169943749473, -0.060901699437494725, -0.05090169943749473, -0.04090169943749473, -0.030901699437494726, -0.02090169943749473, -0.010901699437494722, -0.0009016994374947268, 0.009098300562505268, 0.019098300562505277, 0.029098300562505272, 0.03909830056250527, 0.049098300562505276, 0.059098300562505285, 0.06909830056250527, 0.07909830056250527, 0.08909830056250528, 0.09909830056250526, 0.10909830056250527, 0.11909830056250528, 0.12909830056250526, 0.13909830056250527, 0.14909830056250528, 0.15909830056250526, 0.16909830056250527, 0.17909830056250528, 0.1890983005625053, 0.1990983005625053, 0.20909830056250525, 0.21909830056250526, 0.22909830056250527, 0.23909830056250528, 0.2490983005625053, 0.25909830056250527, 0.2690983005625053, 0.2790983005625053, 0.2890983005625053, 0.2990983005625053, 0.3090983005625053, 0.3190983005625053, 0.32909830056250533, 0.33909830056250523, 0.34909830056250524, 0.35909830056250525, 0.36909830056250525, 0.37909830056250526, 0.3890983005625053, 0.3990983005625053, 0.4090983005625053, 0.4190983005625053, 0.4290983005625053, 0.4390983005625053, 0.4490983005625053, 0.45909830056250533, 0.46909830056250534]}, {"amplitude": [8.02521756834151, 8.075217568341511, 8.12521756834151, 8.17521756834151, 8.22521756834151, 8.27521756834151, 8.325217568341511, 8.37521756834151, 8.42521756834151, 8.47521756834151, 8.52521756834151, 8.575217568341511, 8.62521756834151, 8.67521756834151, 8.72521756834151, 8.77521756834151, 8.825217568341511, 8.87521756834151, 8.92521756834151, 8.97521756834151, 9.02521756834151, 9.075217568341511, 9.12521756834151, 9.17521756834151, 9.22521756834151, 9.27521756834151, 9.325217568341511, 9.37521756834151, 9.42521756834151, 9.47521756834151, 9.52521756834151, 9.575217568341511, 9.62521756834151, 9.67521756834151, 9.72521756834151, 9.77521756834151, 9.825217568341511, 9.87521756834151, 9.92521756834151, 9.97521756834151, 10.02521756834151, 10.075217568341511, 10.12521756834151, 10.17521756834151, 10.22521756834151, 10.27521756834151, 10.325217568341511, 10.37521756834151, 10.42521756834151, 10.47521756834151, 10.52521756834151, 10.575217568341511, 10.62521756834151, 10.67521756834151, 10.72521756834151, 10.77521756834151], "phase": [-0.08607420270039433, -0.07607420270039433, -0.06607420270039432, -0.05607420270039433, -0.04607420270039433, -0.036074202700394326, -0.02607420270039433, -0.01607420270039432, -0.006074202700394327, 0.003925797299605668, 0.013925797299605677, 0.023925797299605672, 0.03392579729960567, 0.043925797299605676, 0.053925797299605685, 0.06392579729960567, 0.07392579729960568, 0.08392579729960568, 0.09392579729960567, 0.10392579729960567, 0.11392579729960568, 0.12392579729960566, 0.1339257972996057, 0.1439257972996057, 0.15392579729960565, 0.16392579729960566, 0.17392579729960567, 0.18392579729960568, 0.19392579729960568, 0.20392579729960564, 0.21392579729960565, 0.22392579729960566, 0.23392579729960566, 0.24392579729960567, 0.2539257972996057, 0.2639257972996057, 0.27392579729960564, 0.28392579729960565, 0.29392579729960566, 0.30392579729960567, 0.3139257972996057, 0.3239257972996057, 0.33392579729960564, 0.34392579729960565, 0.35392579729960566, 0.36392579729960567, 0.3739257972996057, 0.3839257972996057, 0.39392579729960564, 0.40392579729960565, 0.41392579729960566, 0.42392579729960567, 0.4339257972996057, 0.4439257972996057, 0.4539257972996057, 0.4639257972996057]}, {"amplitude": [7.895659719849355, 7.945659719849356, 7.995659719849355, 8.045659719849356, 8.095659719849355, 8.145659719849355, 8.195659719849356, 8.245659719849355, 8.295659719849356, 8.345659719849355, 8.395659719849355, 8.445659719849356, 8.495659719849355, 8.545659719849356, 8.595659719849355, 8.645659719849355, 8.695659719849356, 8.745659719849355, 8.795659719849356, 8.845659719849355, 8.895659719849355, 8.945659719849356, 8.995659719849355, 9.045659719849356, 9.095659719849355, 9.145659719849355, 9.195659719849356, 9.245659719849355, 9.295659719849356, 9.345659719849355, 9.395659719849355, 9.445659719849356, 9.495659719849355, 9.545659719849356, 9.595659719849355, 9.645659719849355, 9.695659719849356, 9.745659719849355, 9.795659719849356, 9.845659719849355, 9.895659719849355, 9.945659719849356, 9.995659719849355, 10.045659719849356, 10.095659719849355, 10.145659719849355, 10.195659719849356, 10.245659719849355, 10.295659719849356, 10.345659719849355, 10.395659719849355, 10.445659719849356, 10.495659719849355, 10.545659719849356, 10.595659719849355, 10.645659719849355], "phase": [-0.0904827052466019, -0.08048270524660191, -0.0704827052466019, -0.0604827052466019, -0.0504827052466019, -0.0404827052466019, -0.030482705246601904, -0.020482705246601896, -0.0104827052466019, -0.0004827052466019055, 0.009517294753398103, 0.0195172947533981, 0.029517294753398093, 0.0395172947533981, 0.04951729475339811, 0.05951729475339809, 0.0695172947533981, 0.07951729475339811, 0.08951729475339809, 0.0995172947533981, 0.10951729475339811, 0.11951729475339809, 0.1295172947533981, 0.1395172947533981, 0.1495172947533981, 0.1595172947533981, 0.1695172947533981, 0.17951729475339812, 0.18951729475339812, 0.19951729475339808, 0.2095172947533981, 0.2195172947533981, 0.2295172947533981, 0.2395172947533981, 0.24951729475339812, 0.25951729475339813, 0.2695172947533981, 0.2795172947533981, 0.2895172947533981, 0.2995172947533981, 0.3095172947533981, 0.31951729475339813, 0.3295172947533981, 0.3395172947533981, 0.3495172947533981, 0.3595172947533981, 0.3695172947533981, 0.3795172947533981, 0.3895172947533981, 0.3995172947533981, 0.4095172947533981, 0.4195172947533981, 0.4295172947533981, 0.4395172947533981, 0.44951729475339813, 0.45951729475339814]}, {"amplitude": [7.823552286872943, 7.873552286872943, 7.923552286872942, 7.973552286872943, 8.023552286872942, 8.073552286872943, 8.123552286872943, 8.173552286872942, 8.223552286872943, 8.273552286872942, 8.323552286872943, 8.373552286872943, 8.423552286872942, 8.473552286872943, 8.523552286872942, 8.573552286872943, 8.623552286872943, 8.673552286872942, 8.723552286872943, 8.773552286872942, 8.823552286872943, 8.873552286872943, 8.923552286872942, 8.973552286872943, 9.023552286872942, 9.073552286872943, 9.123552286872943, 9.173552286872942, 9.223552286872943, 9.273552286872942, 9.323552286872943, 9.373552286872943, 9.423552286872942, 9.473552286872943, 9.523552286872942, 9.573552286872943, 9.623552286872943, 9.673552286872942, 9.723552286872943, 9.773552286872942, 9.823552286872943, 9.873552286872943, 9.923552286872942, 9.973552286872943, 10.023552286872942, 10.073552286872943, 10.123552286872943, 10.173552286872942, 10.223552286872943, 10.273552286872942, 10.323552286872943, 10.373552286872943, 10.423552286872942, 10.473552286872943, 10.523552286872942, 10.573552286872943], "phase": [-0.09408807689542253, -0.08408807689542254, -0.07408807689542253, -0.06408807689542254, -0.054088076895422534, -0.04408807689542253, -0.03408807689542254, -0.024088076895422528, -0.014088076895422533, -0.004088076895422538, 0.005911923104577471, 0.015911923104577466, 0.02591192310457746, 0.03591192310457747, 0.04591192310457748, 0.05591192310457746, 0.06591192310457747, 0.07591192310457748, 0.08591192310457746, 0.09591192310457747, 0.10591192310457748, 0.11591192310457746, 0.12591192310457747, 0.13591192310457748, 0.14591192310457746, 0.15591192310457747, 0.16591192310457747, 0.17591192310457748, 0.1859119231045775, 0.19591192310457745, 0.20591192310457745, 0.21591192310457746, 0.22591192310457747, 0.23591192310457748, 0.2459119231045775, 0.2559119231045775, 0.26591192310457745, 0.27591192310457746, 0.28591192310457747, 0.2959119231045775, 0.3059119231045775, 0.3159119231045775, 0.32591192310457745, 0.33591192310457746, 0.34591192310457747, 0.3559119231045775, 0.3659119231045775, 0.3759119231045775, 0.38591192310457745, 0.39591192310457746, 0.40591192310457747, 0.4159119231045775, 0.4259119231045775, 0.4359119231045775, 0.4459119231045775, 0.4559119231045775]}, {"amplitude": [7.809535300092133, 7.8595353000921335, 7.9095353000921325, 7.959535300092133, 8.009535300092132, 8.059535300092133, 8.109535300092134, 8.159535300092132, 8.209535300092133, 8.259535300092132, 8.309535300092133, 8.359535300092134, 8.409535300092132, 8.459535300092133, 8.509535300092132, 8.559535300092133, 8.609535300092134, 8.659535300092132, 8.709535300092133, 8.759535300092132, 8.809535300092133, 8.859535300092134, 8.909535300092132, 8.959535300092133, 9.009535300092132, 9.059535300092133, 9.109535300092134, 9.159535300092132, 9.209535300092133, 9.259535300092132, 9.309535300092133, 9.359535300092134, 9.409535300092132, 9.459535300092133, 9.509535300092132, 9.559535300092133, 9.609535300092134, 9.659535300092132, 9.709535300092133, 9.759535300092132, 9.809535300092133, 9.859535300092134, 9.909535300092132, 9.959535300092133, 10.009535300092132, 10.059535300092133, 10.109535300092134, 10.159535300092132, 10.209535300092133, 10.259535300092132, 10.309535300092133, 10.359535300092134, 10.409535300092132, 10.459535300092133, 10.509535300092132, 10.559535300092133], "phase": [-0.09685831611286311, -0.08685831611286311, -0.0768583161128631, -0.06685831611286311, -0.05685831611286311, -0.046858316112863105, -0.03685831611286311, -0.0268583161128631, -0.016858316112863106, -0.006858316112863111, 0.003141683887136898, 0.013141683887136893, 0.023141683887136888, 0.0331416838871369, 0.043141683887136906, 0.05314168388713689, 0.0631416838871369, 0.0731416838871369, 0.08314168388713689, 0.0931416838871369, 0.1031416838871369, 0.11314168388713688, 0.1231416838871369, 0.1331416838871369, 0.14314168388713688, 0.1531416838871369, 0.1631416838871369, 0.1731416838871369, 0.18314168388713692, 0.19314168388713687, 0.20314168388713688, 0.2131416838871369, 0.2231416838871369, 0.2331416838871369, 0.24314168388713692, 0.2531416838871369, 0.2631416838871369, 0.2731416838871369, 0.2831416838871369, 0.2931416838871369, 0.3031416838871369, 0.3131416838871369, 0.3231416838871369, 0.3331416838871369, 0.3431416838871369, 0.3531416838871369, 0.3631416838871369, 0.3731416838871369, 0.3831416838871369, 0.3931416838871369, 0.4031416838871369, 0.4131416838871369, 0.4231416838871369, 0.4331416838871369, 0.44314168388713693, 0.45314168388713694]}, {"amplitude": [7.848287743121982, 7.8982877431219825, 7.948287743121983, 7.998287743121984, 8.048287743121982, 8.098287743121983, 8.148287743121983, 8.198287743121984, 8.248287743121985, 8.298287743121982, 8.348287743121983, 8.398287743121983, 8.448287743121984, 8.498287743121985, 8.548287743121982, 8.598287743121983, 8.648287743121983, 8.698287743121984, 8.748287743121985, 8.798287743121982, 8.848287743121983, 8.898287743121983, 8.948287743121984, 8.998287743121985, 9.048287743121982, 9.098287743121983, 9.148287743121983, 9.198287743121984, 9.248287743121985, 9.298287743121982, 9.348287743121983, 9.398287743121983, 9.448287743121984, 9.498287743121985, 9.548287743121982, 9.598287743121983, 9.648287743121983, 9.698287743121984, 9.748287743121985, 9.798287743121982, 9.848287743121983, 9.898287743121983, 9.948287743121984, 9.998287743121985, 10.048287743121982, 10.098287743121983, 10.148287743121983, 10.198287743121984, 10.248287743121985, 10.298287743121982, 10.348287743121983, 10.398287743121983, 10.448287743121984, 10.498287743121985, 10.548287743121982, 10.598287743121983], "phase": [-0.09876883405951378, -0.08876883405951379, -0.07876883405951378, -0.06876883405951378, -0.05876883405951378, -0.04876883405951378, -0.038768834059513785, -0.028768834059513776, -0.01876883405951378, -0.008768834059513786, 0.001231165940486223, 0.011231165940486218, 0.021231165940486213, 0.031231165940486222, 0.04123116594048623, 0.05123116594048621, 0.06123116594048622, 0.07123116594048623, 0.08123116594048621, 0.09123116594048622, 0.10123116594048623, 0.11123116594048621, 0.12123116594048622, 0.13123116594048623, 0.1412311659404862, 0.15123116594048622, 0.16123116594048623, 0.17123116594048624, 0.18123116594048624, 0.1912311659404862, 0.2012311659404862, 0.21123116594048622, 0.22123116594048622, 0.23123116594048623, 0.24123116594048624, 0.2512311659404862, 0.26123116594048623, 0.27123116594048624, 0.28123116594048625, 0.29123116594048626, 0.30123116594048627, 0.3112311659404863, 0.3212311659404862, 0.3312311659404862, 0.3412311659404862, 0.3512311659404862, 0.3612311659404862, 0.3712311659404862, 0.3812311659404862, 0.39123116594048624, 0.40123116594048625, 0.41123116594048625, 0.42123116594048626, 0.43123116594048627, 0.4412311659404863, 0.4512311659404863]}, {"amplitude": [7.929339576994, 7.9793395769940005, 8.029339576994, 8.079339576994, 8.129339576994, 8.179339576994, 8.229339576994, 8.279339576994, 8.329339576994, 8.379339576994, 8.429339576994, 8.479339576994, 8.529339576994, 8.579339576994, 8.629339576994, 8.679339576994, 8.729339576994, 8.779339576994, 8.829339576994, 8.879339576994, 8.929339576994, 8.979339576994, 9.029339576994, 9.079339576994, 9.129339576994, 9.179339576994, 9.229339576994, 9.279339576994, 9.329339576994, 9.379339576994, 9.429339576994, 9.479339576994, 9.529339576994, 9.579339576994, 9.629339576994, 9.679339576994, 9.729339576994, 9.779339576994, 9.829339576994, 9.879339576994, 9.929339576994, 9.979339576994, 10.029339576994, 10.079339576994, 10.129339576994, 10.179339576994, 10.229339576994, 10.279339576994, 10.329339576994, 10.379339576994, 10.429339576994, 10.479339576994, 10.529339576994, 10.579339576994, 10.629339576994, 10.679339576994], "phase": [-0.09980267284282716, -0.08980267284282717, -0.07980267284282716, -0.06980267284282717, -0.05980267284282716, -0.04980267284282716, -0.039802672842827166, -0.029802672842827158, -0.019802672842827163, -0.009802672842827168, 0.00019732715717284133, 0.010197327157172836, 0.02019732715717283, 0.03019732715717284, 0.04019732715717285, 0.05019732715717283, 0.06019732715717284, 0.07019732715717285, 0.08019732715717283, 0.09019732715717284, 0.10019732715717285, 0.11019732715717283, 0.12019732715717284, 0.13019732715717286, 0.1401973271571728, 0.15019732715717282, 0.16019732715717283, 0.17019732715717284, 0.18019732715717285, 0.1901973271571728, 0.2001973271571728, 0.21019732715717282, 0.22019732715717283, 0.23019732715717284, 0.24019732715717285, 0.25019732715717286, 0.2601973271571728, 0.2701973271571728, 0.2801973271571728, 0.29019732715717284, 0.30019732715717284, 0.31019732715717285, 0.3201973271571728, 0.3301973271571728, 0.3401973271571728, 0.35019732715717283, 0.36019732715717284, 0.37019732715717285, 0.3801973271571728, 0.3901973271571728, 0.4001973271571728, 0.41019732715717283, 0.42019732715717284, 0.43019732715717285, 0.44019732715717286, 0.45019732715717287]}, {"amplitude": [8.038586849337827, 8.088586849337828, 8.138586849337827, 8.188586849337828, 8.238586849337826, 8.288586849337827, 8.338586849337828, 8.388586849337827, 8.438586849337828, 8.488586849337826, 8.538586849337827, 8.588586849337828, 8.638586849337827, 8.688586849337828, 8.738586849337826, 8.788586849337827, 8.838586849337828, 8.888586849337827, 8.938586849337828, 8.988586849337826, 9.038586849337827, 9.088586849337828, 9.138586849337827, 9.188586849337828, 9.238586849337826, 9.288586849337827, 9.338586849337828, 9.388586849337827, 9.438586849337828, 9.488586849337826, 9.538586849337827, 9.588586849337828, 9.638586849337827, 9.688586849337828, 9.738586849337826, 9.788586849337827, 9.838586849337828, 9.888586849337827, 9.938586849337828, 9.988586849337826, 10.038586849337827, 10.088586849337828, 10.138586849337827, 10.188586849337828, 10.238586849337826, 10.288586849337827, 10.338586849337828, 10.388586849337827, 10.438586849337828, 10.488586849337826, 10.538586849337827, 10.588586849337828, 10.638586849337827, 10.688586849337828, 10.738586849337826, 10.788586849337827], "phase": [-0.09995065603657316, -0.08995065603657316, -0.07995065603657316, -0.06995065603657316, -0.05995065603657316, -0.04995065603657316, -0.03995065603657316, -0.029950656036573153, -0.01995065603657316, -0.009950656036573163, 4.934396342684555e-05, 0.01004934396342684, 0.020049343963426836, 0.030049343963426844, 0.04004934396342685, 0.050049343963426834, 0.06004934396342684, 0.07004934396342685, 0.08004934396342683, 0.09004934396342684, 0.10004934396342685, 0.11004934396342683, 0.12004934396342684, 0.13004934396342685, 0.14004934396342683, 0.15004934396342684, 0.16004934396342685, 0.17004934396342686, 0.18004934396342687, 0.19004934396342682, 0.20004934396342683, 0.21004934396342684, 0.22004934396342685, 0.23004934396342686, 0.24004934396342686, 0.2500493439634269, 0.2600493439634268, 0.27004934396342684, 0.28004934396342684, 0.29004934396342685, 0.30004934396342686, 0.31004934396342687, 0.3200493439634268, 0.33004934396342683, 0.34004934396342684, 0.35004934396342685, 0.36004934396342686, 0.37004934396342687, 0.3800493439634268, 0.39004934396342683, 0.40004934396342684, 0.41004934396342685, 0.42004934396342686, 0.43004934396342687, 0.4400493439634269, 0.4500493439634269]}, {"amplitude": [8.16029669960156, 8.21029669960156, 8.26029669960156, 8.31029669960156, 8.360296699601559, 8.41029669960156, 8.46029669960156, 8.51029669960156, 8.56029669960156, 8.610296699601559, 8.66029669960156, 8.71029669960156, 8.76029669960156, 8.81029669960156, 8.860296699601559, 8.91029669960156, 8.96029669960156, 9.01029669960156, 9.06029669960156, 9.110296699601559, 9.16029669960156, 9.21029669960156, 9.26029669960156, 9.31029669960156, 9.360296699601559, 9.41029669960156, 9.46029669960156, 9.51029669960156, 9.56029669960156, 9.610296699601559, 9.66029669960156, 9.71029669960156, 9.76029669960156, 9.81029669960156, 9.860296699601559, 9.91029669960156, 9.96029669960156, 10.01029669960156, 10.06029669960156, 10.110296699601559, 10.16029669960156, 10.21029669960156, 10.26029669960156, 10.31029669960156, 10.360296699601559, 10.41029669960156, 10.46029669960156, 10.51029669960156, 10.56029669960156, 10.610296699601559, 10.66029669960156, 10.71029669960156, 10.76029669960156, 10.81029669960156, 10.860296699601559, 10.91029669960156], "phase": [-0.09921147013144778, -0.08921147013144778, -0.07921147013144778, -0.06921147013144778, -0.05921147013144778, -0.049211470131447776, -0.03921147013144778, -0.029211470131447773, -0.019211470131447778, -0.009211470131447783, 0.0007885298685522263, 0.010788529868552221, 0.020788529868552216, 0.030788529868552225, 0.040788529868552234, 0.050788529868552215, 0.060788529868552224, 0.07078852986855223, 0.08078852986855221, 0.09078852986855222, 0.10078852986855223, 0.11078852986855221, 0.12078852986855222, 0.13078852986855222, 0.14078852986855223, 0.15078852986855223, 0.16078852986855224, 0.17078852986855225, 0.18078852986855226, 0.19078852986855221, 0.20078852986855222, 0.21078852986855223, 0.22078852986855224, 0.23078852986855225, 0.24078852986855226, 0.25078852986855227, 0.2607885298685522, 0.27078852986855223, 0.28078852986855224, 0.29078852986855225, 0.30078852986855226, 0.31078852986855227, 0.3207885298685522, 0.33078852986855223, 0.34078852986855224, 0.35078852986855225, 0.36078852986855225, 0.37078852986855226, 0.3807885298685522, 0.3907885298685522, 0.40078852986855223, 0.41078852986855224, 0.42078852986855225, 0.43078852986855226, 0.44078852986855227, 0.4507885298685523]}, {"amplitude": [8.279320448955241, 8.329320448955242, 8.37932044895524, 8.429320448955242, 8.47932044895524, 8.529320448955241, 8.579320448955242, 8.62932044895524, 8.679320448955242, 8.72932044895524, 8.779320448955241, 8.829320448955242, 8.87932044895524, 8.929320448955242, 8.97932044895524, 9.029320448955241, 9.079320448955242, 9.12932044895524, 9.179320448955242, 9.22932044895524, 9.279320448955241, 9.329320448955242, 9.37932044895524, 9.429320448955242, 9.47932044895524, 9.529320448955241, 9.579320448955242, 9.62932044895524, 9.679320448955242, 9.72932044895524, 9.779320448955241, 9.829320448955242, 9.87932044895524, 9.929320448955242, 9.97932044895524, 10.029320448955241, 10.079320448955242, 10.12932044895524, 10.179320448955242, 10.22932044895524, 10.279320448955241, 10.329320448955242, 10.37932044895524, 10.429320448955242, 10.47932044895524, 10.529320448955241, 10.579320448955242, 10.62932044895524, 10.679320448955242, 10.72932044895524, 10.779320448955241, 10.829320448955242, 10.87932044895524, 10.929320448955242, 10.97932044895524, 11.029320448955241], "phase": [-0.09759167619387474, -0.08759167619387474, -0.07759167619387473, -0.06759167619387474, -0.05759167619387474, -0.047591676193874735, -0.03759167619387474, -0.02759167619387473, -0.017591676193874736, -0.007591676193874741, 0.0024083238061252676, 0.012408323806125263, 0.022408323806125258, 0.03240832380612527, 0.042408323806125275, 0.05240832380612526, 0.062408323806125265, 0.07240832380612527, 0.08240832380612526, 0.09240832380612526, 0.10240832380612527, 0.11240832380612525, 0.12240832380612526, 0.13240832380612527, 0.14240832380612525, 0.15240832380612526, 0.16240832380612527, 0.17240832380612528, 0.1824083238061253, 0.19240832380612524, 0.20240832380612525, 0.21240832380612526, 0.22240832380612527, 0.23240832380612528, 0.2424083238061253, 0.2524083238061253, 0.2624083238061252, 0.27240832380612523, 0.28240832380612524, 0.29240832380612525, 0.30240832380612526, 0.31240832380612527, 0.3224083238061253, 0.3324083238061253, 0.3424083238061253, 0.3524083238061253, 0.3624083238061253, 0.3724083238061253, 0.3824083238061252, 0.3924083238061252, 0.40240832380612523, 0.41240832380612524, 0.42240832380612525, 0.43240832380612526, 0.44240832380612527, 0.4524083238061253]}, {"amplitude": [8.383203922298238, 8.433203922298238, 8.483203922298237, 8.533203922298238, 8.583203922298237, 8.633203922298238, 8.683203922298238, 8.733203922298237, 8.783203922298238, 8.833203922298237, 8.883203922298238, 8.933203922298238, 8.983203922298237, 9.033203922298238, 9.083203922298237, 9.133203922298238, 9.183203922298238, 9.233203922298237, 9.283203922298238, 9.333203922298237, 9.383203922298238, 9.433203922298238, 9.483203922298237, 9.533203922298238, 9.583203922298237, 9.633203922298238, 9.683203922298238, 9.733203922298237, 9.783203922298238, 9.833203922298237, 9.883203922298238, 9.933203922298238, 9.983203922298237, 10.033203922298238, 10.083203922298237, 10.133203922298238, 10.183203922298238, 10.233203922298237, 10.283203922298238, 10.333203922298237, 10.383203922298238, 10.433203922298238, 10.483203922298237, 10.533203922298238, 10.583203922298237, 10.633203922298238, 10.683203922298238, 10.733203922298237, 10.783203922298238, 10.833203922298237, 10.883203922298238, 10.933203922298238, 10.983203922298237, 11.033203922298238, 11.083203922298237, 11.133203922298238], "phase": [-0.09510565162951538, -0.08510565162951539, -0.07510565162951538, -0.06510565162951538, -0.05510565162951538, -0.04510565162951538, -0.035105651629515386, -0.025105651629515377, -0.015105651629515382, -0.005105651629515387, 0.004894348370484622, 0.014894348370484617, 0.024894348370484612, 0.03489434837048462, 0.04489434837048463, 0.05489434837048461, 0.06489434837048462, 0.07489434837048463, 0.08489434837048461, 0.09489434837048462, 0.10489434837048463, 0.11489434837048461, 0.12489434837048462, 0.13489434837048464, 0.1448943483704846, 0.1548943483704846, 0.1648943483704846, 0.17489434837048462, 0.18489434837048463, 0.19489434837048458, 0.2048943483704846, 0.2148943483704846, 0.2248943483704846, 0.23489434837048462, 0.24489434837048463, 0.25489434837048464, 0.2648943483704846, 0.2748943483704846, 0.2848943483704846, 0.2948943483704846, 0.3048943483704846, 0.31489434837048463, 0.3248943483704846, 0.3348943483704846, 0.3448943483704846, 0.3548943483704846, 0.3648943483704846, 0.37489434837048463, 0.3848943483704846, 0.3948943483704846, 0.4048943483704846, 0.4148943483704846, 0.4248943483704846, 0.43489434837048463, 0.44489434837048464, 0.45489434837048465]}, {"amplitude": [8.463898767160519, 8.51389876716052, 8.563898767160518, 8.613898767160519, 8.663898767160518, 8.713898767160519, 8.76389876716052, 8.813898767160518, 8.863898767160519, 8.913898767160518, 8.963898767160519, 9.01389876716052, 9.063898767160518, 9.113898767160519, 9.163898767160518, 9.213898767160519, 9.26389876716052, 9.313898767160518, 9.363898767160519, 9.413898767160518, 9.463898767160519, 9.51389876716052, 9.563898767160518, 9.613898767160519, 9.663898767160518, 9.713898767160519, 9.76389876716052, 9.813898767160518, 9.863898767160519, 9.913898767160518, 9.963898767160519, 10.01389876716052, 10.063898767160518, 10.113898767160519, 10.163898767160518, 10.213898767160519, 10.26389876716052, 10.313898767160518, 10.363898767160519, 10.413898767160518, 10.463898767160519, 10.51389876716052, 10.563898767160518, 10.613898767160519, 10.663898767160518, 10.713898767160519, 10.76389876716052, 10.813898767160518, 10.863898767160519, 10.913898767160518, 10.963898767160519, 11.01389876716052, 11.063898767160518, 11.113898767160519, 11.163898767160518, 11.213898767160519], "phase": [-0.09177546256839815, -0.08177546256839816, -0.07177546256839815, -0.06177546256839815, -0.05177546256839815, -0.04177546256839815, -0.03177546256839815, -0.021775462568398143, -0.011775462568398148, -0.0017754625683981534, 0.008224537431601855, 0.01822453743160185, 0.028224537431601845, 0.038224537431601854, 0.04822453743160186, 0.058224537431601844, 0.06822453743160185, 0.07822453743160186, 0.08822453743160184, 0.09822453743160185, 0.10822453743160186, 0.11822453743160184, 0.12822453743160184, 0.13822453743160185, 0.14822453743160185, 0.15822453743160186, 0.16822453743160187, 0.17822453743160188, 0.1882245374316019, 0.19822453743160184, 0.20822453743160185, 0.21822453743160186, 0.22822453743160187, 0.23822453743160188, 0.2482245374316019, 0.2582245374316019, 0.26822453743160185, 0.27822453743160186, 0.28822453743160187, 0.2982245374316019, 0.3082245374316019, 0.3182245374316019, 0.32822453743160185, 0.33822453743160186, 0.34822453743160187, 0.3582245374316019, 0.3682245374316019, 0.3782245374316019, 0.38822453743160185, 0.39822453743160185, 0.40822453743160186, 0.4182245374316019, 0.4282245374316019, 0.4382245374316019, 0.4482245374316019, 0.4582245374316019]}, {"amplitude": [8.518834755652078, 8.568834755652079, 8.618834755652077, 8.668834755652078, 8.718834755652077, 8.768834755652078, 8.818834755652079, 8.868834755652077, 8.918834755652078, 8.968834755652077, 9.018834755652078, 9.068834755652079, 9.118834755652077, 9.168834755652078, 9.218834755652077, 9.268834755652078, 9.318834755652079, 9.368834755652077, 9.418834755652078, 9.468834755652077, 9.518834755652078, 9.568834755652079, 9.618834755652077, 9.668834755652078, 9.718834755652077, 9.768834755652078, 9.818834755652079, 9.868834755652077, 9.918834755652078, 9.968834755652077, 10.018834755652078, 10.068834755652079, 10.118834755652077, 10.168834755652078, 10.218834755652077, 10.268834755652078, 10.318834755652079, 10.368834755652077, 10.418834755652078, 10.468834755652077, 10.518834755652078, 10.568834755652079, 10.618834755652077, 10.668834755652078, 10.718834755652077, 10.768834755652078, 10.818834755652079, 10.868834755652077, 10.918834755652078, 10.968834755652077, 11.018834755652078, 11.068834755652079, 11.118834755652077, 11.168834755652078, 11.218834755652077, 11.268834755652078], "phase": [-0.08763066800438644, -0.07763066800438645, -0.06763066800438644, -0.057630668004386446, -0.047630668004386444, -0.03763066800438644, -0.027630668004386447, -0.017630668004386438, -0.007630668004386443, 0.0023693319956135522, 0.012369331995613561, 0.022369331995613556, 0.03236933199561355, 0.04236933199561356, 0.05236933199561357, 0.06236933199561355, 0.07236933199561356, 0.08236933199561357, 0.09236933199561355, 0.10236933199561356, 0.11236933199561357, 0.12236933199561355, 0.13236933199561357, 0.14236933199561358, 0.15236933199561353, 0.16236933199561354, 0.17236933199561355, 0.18236933199561356, 0.19236933199561357, 0.20236933199561352, 0.21236933199561353, 0.22236933199561354, 0.23236933199561355, 0.24236933199561356, 0.25236933199561357, 0.2623693319956136, 0.27236933199561353, 0.28236933199561354, 0.29236933199561355, 0.30236933199561356, 0.31236933199561356, 0.3223693319956136, 0.3323693319956135, 0.34236933199561354, 0.35236933199561354, 0.36236933199561355, 0.37236933199561356, 0.38236933199561357, 0.3923693319956135, 0.40236933199561353, 0.41236933199561354, 0.42236933199561355, 0.43236933199561356, 0.44236933199561357, 0.4523693319956136, 0.4623693319956136]}, {"amplitude": [8.551202983229484, 8.601202983229484, 8.651202983229483, 8.701202983229484, 8.751202983229483, 8.801202983229484, 8.851202983229484, 8.901202983229483, 8.951202983229484, 9.001202983229483, 9.051202983229484, 9.101202983229484, 9.151202983229483, 9.201202983229484, 9.251202983229483, 9.301202983229484, 9.351202983229484, 9.401202983229483, 9.451202983229484, 9.501202983229483, 9.551202983229484, 9.601202983229484, 9.651202983229483, 9.701202983229484, 9.751202983229483, 9.801202983229484, 9.851202983229484, 9.901202983229483, 9.951202983229484, 10.001202983229483, 10.051202983229484, 10.101202983229484, 10.151202983229483, 10.201202983229484, 10.251202983229483, 10.301202983229484, 10.351202983229484, 10.401202983229483, 10.451202983229484, 10.501202983229483, 10.551202983229484, 10.601202983229484, 10.651202983229483, 10.701202983229484, 10.751202983229483, 10.801202983229484, 10.851202983229484, 10.901202983229483, 10.951202983229484, 11.001202983229483, 11.051202983229484, 11.101202983229484, 11.151202983229483, 11.201202983229484, 11.251202983229483, 11.301202983229484], "phase": [-0.0827080574274562, -0.0727080574274562, -0.06270805742745619, -0.0527080574274562, -0.042708057427456196, -0.032708057427456194, -0.0227080574274562, -0.01270805742745619, -0.0027080574274561953, 0.0072919425725438, 0.01729194257254381, 0.027291942572543804, 0.0372919425725438, 0.04729194257254381, 0.057291942572543816, 0.0672919425725438, 0.0772919425725438, 0.08729194257254382, 0.0972919425725438, 0.1072919425725438, 0.11729194257254381, 0.12729194257254378, 0.1372919425725438, 0.1472919425725438, 0.1572919425725438, 0.16729194257254382, 0.17729194257254383, 0.18729194257254383, 0.19729194257254384, 0.2072919425725438, 0.2172919425725438, 0.22729194257254381, 0.23729194257254382, 0.24729194257254383, 0.25729194257254384, 0.26729194257254385, 0.2772919425725438, 0.2872919425725438, 0.2972919425725438, 0.30729194257254383, 0.31729194257254384, 0.32729194257254385, 0.3372919425725438, 0.3472919425725438, 0.3572919425725438, 0.36729194257254383, 0.37729194257254384, 0.38729194257254385, 0.3972919425725438, 0.4072919425725438, 0.4172919425725438, 0.4272919425725438, 0.43729194257254383, 0.44729194257254384, 0.45729194257254385, 0.46729194257254386]}, {"amplitude": [8.569410880253825, 8.619410880253826, 8.669410880253825, 8.719410880253825, 8.769410880253824, 8.819410880253825, 8.869410880253826, 8.919410880253825, 8.969410880253825, 9.019410880253824, 9.069410880253825, 9.119410880253826, 9.169410880253825, 9.219410880253825, 9.269410880253824, 9.319410880253825, 9.369410880253826, 9.419410880253825, 9.469410880253825, 9.519410880253824, 9.569410880253825, 9.619410880253826, 9.669410880253825, 9.719410880253825, 9.769410880253824, 9.819410880253825, 9.869410880253826, 9.919410880253825, 9.969410880253825, 10.019410880253824, 10.069410880253825, 10.119410880253826, 10.169410880253825, 10.219410880253825, 10.269410880253824, 10.319410880253825, 10.369410880253826, 10.419410880253825, 10.469410880253825, 10.519410880253824, 10.569410880253825, 10.619410880253826, 10.669410880253825, 10.719410880253825, 10.769410880253824, 10.819410880253825, 10.869410880253826, 10.919410880253825, 10.969410880253825, 11.019410880253824, 11.069410880253825, 11.119410880253826, 11.169410880253825, 11.219410880253825, 11.269410880253824, 11.319410880253825], "phase": [-0.07705132427757899, -0.067051324277579, -0.05705132427757899, -0.04705132427757899, -0.03705132427757899, -0.02705132427757899, -0.017051324277578994, -0.007051324277578985, 0.0029486757224210097, 0.012948675722421005, 0.022948675722421014, 0.03294867572242101, 0.042948675722421004, 0.05294867572242101, 0.06294867572242102, 0.072948675722421, 0.08294867572242101, 0.09294867572242102, 0.102948675722421, 0.11294867572242101, 0.12294867572242102, 0.132948675722421, 0.142948675722421, 0.15294867572242102, 0.162948675722421, 0.172948675722421, 0.18294867572242102, 0.19294867572242103, 0.20294867572242103, 0.212948675722421, 0.222948675722421, 0.232948675722421, 0.24294867572242101, 0.252948675722421, 0.26294867572242103, 0.27294867572242104, 0.282948675722421, 0.292948675722421, 0.302948675722421, 0.312948675722421, 0.32294867572242103, 0.33294867572242104, 0.342948675722421, 0.352948675722421, 0.362948675722421, 0.372948675722421, 0.38294867572242103, 0.39294867572242104, 0.402948675722421, 0.412948675722421, 0.422948675722421, 0.432948675722421, 0.442948675722421, 0.45294867572242103, 0.46294867572242104, 0.47294867572242105]}, {"amplitude": [8.585786437626904, 8.635786437626905, 8.685786437626904, 8.735786437626905, 8.785786437626903, 8.835786437626904, 8.885786437626905, 8.935786437626904, 8.985786437626905, 9.035786437626903, 9.085786437626904, 9.135786437626905, 9.185786437626904, 9.235786437626905, 9.285786437626903, 9.335786437626904, 9.385786437626905, 9.435786437626904, 9.485786437626905, 9.535786437626903, 9.585786437626904, 9.635786437626905, 9.685786437626904, 9.735786437626905, 9.785786437626903, 9.835786437626904, 9.885786437626905, 9.935786437626904, 9.985786437626905, 10.035786437626903, 10.085786437626904, 10.135786437626905, 10.185786437626904, 10.235786437626905, 10.285786437626903, 10.335786437626904, 10.385786437626905, 10.435786437626904, 10.485786437626905, 10.535786437626903, 10.585786437626904, 10.635786437626905, 10.685786437626904, 10.735786437626905, 10.785786437626903, 10.835786437626904, 10.885786437626905, 10.935786437626904, 10.985786437626905, 11.035786437626903, 11.085786437626904, 11.135786437626905, 11.185786437626904, 11.235786437626905, 11.285786437626903, 11.335786437626904], "phase": [-0.07071067811865485, -0.06071067811865485, -0.050710678118654845, -0.04071067811865485, -0.030710678118654848, -0.020710678118654846, -0.010710678118654851, -0.0007106781186548422, 0.009289321881345153, 0.019289321881345148, 0.029289321881345157, 0.03928932188134515, 0.04928932188134515, 0.059289321881345156, 0.06928932188134516, 0.07928932188134515, 0.08928932188134515, 0.09928932188134516, 0.10928932188134514, 0.11928932188134515, 0.12928932188134518, 0.13928932188134513, 0.14928932188134514, 0.15928932188134515, 0.16928932188134516, 0.17928932188134517, 0.18928932188134517, 0.19928932188134518, 0.2092893218813452, 0.21928932188134515, 0.22928932188134515, 0.23928932188134516, 0.24928932188134517, 0.2592893218813452, 0.2692893218813452, 0.2792893218813452, 0.28928932188134515, 0.29928932188134516, 0.30928932188134517, 0.3192893218813452, 0.3292893218813452, 0.3392893218813452, 0.34928932188134515, 0.35928932188134516, 0.36928932188134517, 0.3792893218813452, 0.3892893218813452, 0.3992893218813452, 0.40928932188134515, 0.41928932188134516, 0.42928932188134517, 0.4392893218813452, 0.4492893218813452, 0.4592893218813452, 0.4692893218813452, 0.4792893218813452]}, {"amplitude": [8.614714654697217, 8.664714654697217, 8.714714654697218, 8.764714654697219, 8.814714654697216, 8.864714654697217, 8.914714654697217, 8.964714654697218, 9.014714654697219, 9.064714654697216, 9.114714654697217, 9.164714654697217, 9.214714654697218, 9.264714654697219, 9.314714654697216, 9.364714654697217, 9.414714654697217, 9.464714654697218, 9.514714654697219, 9.564714654697216, 9.614714654697217, 9.664714654697217, 9.714714654697218, 9.764714654697219, 9.814714654697216, 9.864714654697217, 9.914714654697217, 9.964714654697218, 10.014714654697219, 10.064714654697216, 10.114714654697217, 10.164714654697217, 10.214714654697218, 10.264714654697219, 10.314714654697216, 10.364714654697217, 10.414714654697217, 10.464714654697218, 10.514714654697219, 10.564714654697216, 10.614714654697217, 10.664714654697217, 10.714714654697218, 10.764714654697219, 10.814714654697216, 10.864714654697217, 10.914714654697217, 10.964714654697218, 11.014714654697219, 11.064714654697216, 11.114714654697217, 11.164714654697217, 11.214714654697218, 11.264714654697219, 11.314714654697216, 11.364714654697217], "phase": [-0.06374239897486898, -0.05374239897486898, -0.04374239897486898, -0.033742398974868984, -0.023742398974868982, -0.01374239897486898, -0.003742398974868985, 0.006257601025131024, 0.01625760102513102, 0.026257601025131014, 0.03625760102513102, 0.04625760102513102, 0.05625760102513101, 0.06625760102513102, 0.07625760102513103, 0.08625760102513101, 0.09625760102513102, 0.10625760102513103, 0.11625760102513101, 0.126257601025131, 0.13625760102513101, 0.14625760102513102, 0.15625760102513103, 0.16625760102513104, 0.176257601025131, 0.186257601025131, 0.196257601025131, 0.20625760102513102, 0.21625760102513103, 0.22625760102513098, 0.236257601025131, 0.246257601025131, 0.256257601025131, 0.266257601025131, 0.276257601025131, 0.28625760102513104, 0.296257601025131, 0.306257601025131, 0.316257601025131, 0.326257601025131, 0.336257601025131, 0.34625760102513103, 0.356257601025131, 0.366257601025131, 0.376257601025131, 0.386257601025131, 0.396257601025131, 0.40625760102513103, 0.416257601025131, 0.426257601025131, 0.436257601025131, 0.446257601025131, 0.456257601025131, 0.46625760102513103, 0.47625760102513104, 0.48625760102513105]}, {"amplitude": [8.670469112517132, 8.720469112517133, 8.770469112517132, 8.820469112517133, 8.870469112517132, 8.920469112517132, 8.970469112517133, 9.020469112517132, 9.070469112517133, 9.120469112517132, 9.170469112517132, 9.220469112517133, 9.270469112517132, 9.320469112517133, 9.370469112517132, 9.420469112517132, 9.470469112517133, 9.520469112517132, 9.570469112517133, 9.620469112517132, 9.670469112517132, 9.720469112517133, 9.770469112517132, 9.820469112517133, 9.870469112517132, 9.920469112517132, 9.970469112517133, 10.020469112517132, 10.070469112517133, 10.120469112517132, 10.170469112517132, 10.220469112517133, 10.270469112517132, 10.320469112517133, 10.370469112517132, 10.420469112517132, 10.470469112517133, 10.520469112517132, 10.570469112517133, 10.620469112517132, 10.670469112517132, 10.720469112517133, 10.770469112517132, 10.820469112517133, 10.870469112517132, 10.920469112517132, 10.970469112517133, 11.020469112517132, 11.070469112517133, 11.120469112517132, 11.170469112517132, 11.220469112517133, 11.270469112517132, 11.320469112517133, 11.370469112517132, 11.420469112517132], "phase": [-0.056208337785213114, -0.04620833778521311, -0.03620833778521311, -0.026208337785213115, -0.016208337785213113, -0.006208337785213111, 0.003791662214786884, 0.013791662214786893, 0.023791662214786888, 0.03379166221478688, 0.04379166221478689, 0.05379166221478689, 0.06379166221478688, 0.07379166221478689, 0.0837916622147869, 0.09379166221478688, 0.10379166221478689, 0.1137916622147869, 0.12379166221478688, 0.1337916622147869, 0.1437916622147869, 0.15379166221478688, 0.1637916622147869, 0.1737916622147869, 0.18379166221478688, 0.1937916622147869, 0.2037916622147869, 0.2137916622147869, 0.2237916622147869, 0.23379166221478687, 0.24379166221478688, 0.2537916622147869, 0.2637916622147869, 0.2737916622147869, 0.2837916622147869, 0.2937916622147869, 0.3037916622147869, 0.3137916622147869, 0.3237916622147869, 0.3337916622147869, 0.3437916622147869, 0.3537916622147869, 0.36379166221478687, 0.3737916622147869, 0.3837916622147869, 0.3937916622147869, 0.4037916622147869, 0.4137916622147869, 0.42379166221478687, 0.4337916622147869, 0.4437916622147869, 0.4537916622147869, 0.4637916622147869, 0.4737916622147869, 0.4837916622147869, 0.49379166221478693]}, {"amplitude": [8.765044536056765, 8.815044536056766, 8.865044536056763, 8.915044536056763, 8.965044536056764, 9.015044536056765, 9.065044536056766, 9.115044536056763, 9.165044536056763, 9.215044536056764, 9.265044536056765, 9.315044536056766, 9.365044536056763, 9.415044536056763, 9.465044536056764, 9.515044536056765, 9.565044536056766, 9.615044536056763, 9.665044536056763, 9.715044536056764, 9.765044536056765, 9.815044536056766, 9.865044536056763, 9.915044536056763, 9.965044536056764, 10.015044536056765, 10.065044536056766, 10.115044536056763, 10.165044536056763, 10.215044536056764, 10.265044536056765, 10.315044536056766, 10.365044536056763, 10.415044536056763, 10.465044536056764, 10.515044536056765, 10.565044536056766, 10.615044536056763, 10.665044536056763, 10.715044536056764, 10.765044536056765, 10.815044536056766, 10.865044536056763, 10.915044536056763, 10.965044536056764, 11.015044536056765, 11.065044536056766, 11.115044536056763, 11.165044536056763, 11.215044536056764, 11.265044536056765, 11.315044536056766, 11.365044536056763, 11.415044536056763, 11.465044536056764, 11.515044536056765], "phase": [-0.04817536741017148, -0.038175367410171475, -0.028175367410171476, -0.018175367410171478, -0.008175367410171476, 0.001824632589828526, 0.011824632589828521, 0.02182463258982853, 0.031824632589828525, 0.04182463258982852, 0.05182463258982853, 0.061824632589828524, 0.07182463258982852, 0.08182463258982853, 0.09182463258982854, 0.10182463258982852, 0.11182463258982853, 0.12182463258982854, 0.13182463258982852, 0.14182463258982853, 0.15182463258982853, 0.16182463258982852, 0.17182463258982852, 0.18182463258982853, 0.19182463258982851, 0.20182463258982852, 0.21182463258982853, 0.22182463258982854, 0.23182463258982855, 0.2418246325898285, 0.2518246325898285, 0.2618246325898285, 0.27182463258982853, 0.28182463258982854, 0.29182463258982855, 0.30182463258982856, 0.3118246325898285, 0.3218246325898285, 0.3318246325898285, 0.34182463258982854, 0.35182463258982855, 0.36182463258982855, 0.3718246325898285, 0.3818246325898285, 0.3918246325898285, 0.40182463258982853, 0.41182463258982854, 0.42182463258982855, 0.4318246325898285, 0.4418246325898285, 0.4518246325898285, 0.46182463258982853, 0.47182463258982854, 0.48182463258982855, 0.49182463258982856, 0.5018246325898286]}, {"amplitude": [8.906296200201957, 8.956296200201958, 9.006296200201957, 9.056296200201958, 9.106296200201957, 9.156296200201957, 9.206296200201958, 9.256296200201957, 9.306296200201958, 9.356296200201957, 9.406296200201957, 9.456296200201958, 9.506296200201957, 9.556296200201958, 9.606296200201957, 9.656296200201957, 9.706296200201958, 9.756296200201957, 9.806296200201958, 9.856296200201957, 9.906296200201957, 9.956296200201958, 10.006296200201957, 10.056296200201958, 10.106296200201957, 10.156296200201957, 10.206296200201958, 10.256296200201957, 10.306296200201958, 10.356296200201957, 10.406296200201957, 10.456296200201958, 10.506296200201957, 10.556296200201958, 10.606296200201957, 10.656296200201957, 10.706296200201958, 10.756296200201957, 10.806296200201958, 10.856296200201957, 10.906296200201957, 10.956296200201958, 11.006296200201957, 11.056296200201958, 11.106296200201957, 11.156296200201957, 11.206296200201958, 11.256296200201957, 11.306296200201958, 11.356296200201957, 11.406296200201957, 11.456296200201958, 11.506296200201957, 11.556296200201958, 11.606296200201957, 11.656296200201957], "phase": [-0.039714789063478056, -0.029714789063478055, -0.019714789063478056, -0.009714789063478058, 0.00028521093652194435, 0.010285210936521946, 0.02028521093652194, 0.03028521093652195, 0.040285210936521945, 0.05028521093652194, 0.06028521093652195, 0.07028521093652194, 0.08028521093652194, 0.09028521093652195, 0.10028521093652196, 0.11028521093652194, 0.12028521093652195, 0.13028521093652196, 0.14028521093652194, 0.15028521093652195, 0.16028521093652195, 0.17028521093652194, 0.18028521093652194, 0.19028521093652195, 0.20028521093652193, 0.21028521093652194, 0.22028521093652195, 0.23028521093652196, 0.24028521093652197, 0.2502852109365219, 0.2602852109365219, 0.2702852109365219, 0.2802852109365219, 0.29028521093652193, 0.30028521093652194, 0.31028521093652195, 0.32028521093652196, 0.33028521093652197, 0.340285210936522, 0.350285210936522, 0.360285210936522, 0.370285210936522, 0.3802852109365219, 0.3902852109365219, 0.4002852109365219, 0.4102852109365219, 0.42028521093652194, 0.43028521093652194, 0.44028521093652195, 0.45028521093652196, 0.46028521093652197, 0.470285210936522, 0.480285210936522, 0.490285210936522, 0.500285210936522, 0.510285210936522]}, {"amplitude": [9.096649056361557, 9.146649056361557, 9.196649056361558, 9.246649056361559, 9.296649056361556, 9.346649056361557, 9.396649056361557, 9.446649056361558, 9.496649056361559, 9.546649056361556, 9.596649056361557, 9.646649056361557, 9.696649056361558, 9.746649056361559, 9.796649056361556, 9.846649056361557, 9.896649056361557, 9.946649056361558, 9.996649056361559, 10.046649056361556, 10.096649056361557, 10.146649056361557, 10.196649056361558, 10.246649056361559, 10.296649056361556, 10.346649056361557, 10.396649056361557, 10.446649056361558, 10.496649056361559, 10.546649056361556, 10.596649056361557, 10.646649056361557, 10.696649056361558, 10.746649056361559, 10.796649056361556, 10.846649056361557, 10.896649056361557, 10.946649056361558, 10.996649056361559, 11.046649056361556, 11.096649056361557, 11.146649056361557, 11.196649056361558, 11.246649056361559, 11.296649056361556, 11.346649056361557, 11.396649056361557, 11.446649056361558, 11.496649056361559, 11.546649056361556, 11.596649056361557, 11.646649056361557, 11.696649056361558, 11.746649056361559, 11.796649056361556, 11.846649056361557], "phase": [-0.03090169943749479, -0.020901699437494793, -0.010901699437494791, -0.0009016994374947927, 0.00909830056250521, 0.01909830056250521, 0.029098300562505206, 0.03909830056250521, 0.04909830056250521, 0.0590983005625052, 0.06909830056250521, 0.0790983005625052, 0.0890983005625052, 0.09909830056250521, 0.10909830056250522, 0.1190983005625052, 0.1290983005625052, 0.13909830056250522, 0.1490983005625052, 0.1590983005625052, 0.16909830056250522, 0.1790983005625052, 0.1890983005625052, 0.19909830056250521, 0.2090983005625052, 0.2190983005625052, 0.2290983005625052, 0.23909830056250522, 0.24909830056250523, 0.2590983005625052, 0.2690983005625052, 0.27909830056250523, 0.28909830056250524, 0.29909830056250525, 0.30909830056250526, 0.31909830056250527, 0.3290983005625052, 0.33909830056250523, 0.34909830056250524, 0.35909830056250525, 0.36909830056250525, 0.37909830056250526, 0.3890983005625052, 0.3990983005625052, 0.40909830056250523, 0.41909830056250524, 0.42909830056250525, 0.43909830056250526, 0.4490983005625052, 0.4590983005625052, 0.46909830056250523, 0.47909830056250524, 0.48909830056250525, 0.49909830056250526, 0.5090983005625053, 0.5190983005625053]}, {"amplitude": [9.332559544374176, 9.382559544374176, 9.432559544374175, 9.482559544374176, 9.532559544374175, 9.582559544374176, 9.632559544374176, 9.682559544374175, 9.732559544374176, 9.782559544374175, 9.832559544374176, 9.882559544374176, 9.932559544374175, 9.982559544374176, 10.032559544374175, 10.082559544374176, 10.132559544374176, 10.182559544374175, 10.232559544374176, 10.282559544374175, 10.332559544374176, 10.382559544374176, 10.432559544374175, 10.482559544374176, 10.532559544374175, 10.582559544374176, 10.632559544374176, 10.682559544374175, 10.732559544374176, 10.782559544374175, 10.832559544374176, 10.882559544374176, 10.932559544374175, 10.982559544374176, 11.032559544374175, 11.082559544374176, 11.132559544374176, 11.182559544374175, 11.232559544374176, 11.282559544374175, 11.332559544374176, 11.382559544374176, 11.432559544374175, 11.482559544374176, 11.532559544374175, 11.582559544374176, 11.632559544374176, 11.682559544374175, 11.732559544374176, 11.782559544374175, 11.832559544374176, 11.882559544374176, 11.932559544374175, 11.982559544374176, 12.032559544374175, 12.082559544374176], "phase": [-0.021814324139654354, -0.011814324139654353, -0.0018143241396543532, 0.008185675860345645, 0.018185675860345647, 0.02818567586034565, 0.038185675860345644, 0.04818567586034565, 0.05818567586034565, 0.06818567586034564, 0.07818567586034565, 0.08818567586034565, 0.09818567586034564, 0.10818567586034565, 0.11818567586034566, 0.12818567586034563, 0.13818567586034564, 0.14818567586034564, 0.15818567586034565, 0.16818567586034566, 0.17818567586034567, 0.18818567586034562, 0.19818567586034563, 0.20818567586034564, 0.21818567586034565, 0.22818567586034566, 0.23818567586034567, 0.24818567586034568, 0.2581856758603457, 0.26818567586034564, 0.27818567586034565, 0.28818567586034566, 0.29818567586034567, 0.3081856758603457, 0.3181856758603457, 0.3281856758603457, 0.33818567586034565, 0.34818567586034566, 0.35818567586034566, 0.3681856758603457, 0.3781856758603457, 0.3881856758603457, 0.39818567586034564, 0.40818567586034565, 0.41818567586034566, 0.42818567586034567, 0.4381856758603457, 0.4481856758603457, 0.45818567586034564, 0.46818567586034565, 0.47818567586034566, 0.48818567586034567, 0.4981856758603457, 0.5081856758603457, 0.5181856758603457, 0.5281856758603457]}, {"amplitude": [9.604807430640872, 9.654807430640872, 9.704807430640871, 9.754807430640872, 9.80480743064087, 9.854807430640872, 9.904807430640872, 9.954807430640871, 10.004807430640872, 10.05480743064087, 10.104807430640872, 10.154807430640872, 10.204807430640871, 10.254807430640872, 10.30480743064087, 10.354807430640872, 10.404807430640872, 10.454807430640871, 10.504807430640872, 10.55480743064087, 10.604807430640872, 10.654807430640872, 10.704807430640871, 10.754807430640872, 10.80480743064087, 10.854807430640872, 10.904807430640872, 10.954807430640871, 11.004807430640872, 11.05480743064087, 11.104807430640872, 11.154807430640872, 11.204807430640871, 11.254807430640872, 11.30480743064087, 11.354807430640872, 11.404807430640872, 11.454807430640871, 11.504807430640872, 11.55480743064087, 11.604807430640872, 11.654807430640872, 11.704807430640871, 11.754807430640872, 11.80480743064087, 11.854807430640872, 11.904807430640872, 11.954807430640871, 12.004807430640872, 12.05480743064087, 12.104807430640872, 12.154807430640872, 12.204807430640871, 12.254807430640872, 12.30480743064087, 12.354807430640872], "phase": [-0.012533323356430578, -0.0025333233564305783, 0.007466676643569422, 0.01746667664356942, 0.027466676643569422, 0.037466676643569424, 0.04746667664356942, 0.05746667664356943, 0.06746667664356942, 0.07746667664356942, 0.08746667664356943, 0.09746667664356942, 0.10746667664356942, 0.11746667664356943, 0.12746667664356942, 0.13746667664356943, 0.14746667664356944, 0.15746667664356945, 0.1674666766435694, 0.1774666766435694, 0.18746667664356942, 0.19746667664356943, 0.20746667664356944, 0.21746667664356945, 0.2274666766435694, 0.2374666766435694, 0.24746667664356942, 0.2574666766435694, 0.26746667664356943, 0.2774666766435694, 0.2874666766435694, 0.2974666766435694, 0.3074666766435694, 0.3174666766435694, 0.32746667664356943, 0.33746667664356944, 0.3474666766435694, 0.3574666766435694, 0.3674666766435694, 0.3774666766435694, 0.38746667664356943, 0.39746667664356944, 0.4074666766435694, 0.4174666766435694, 0.4274666766435694, 0.4374666766435694, 0.4474666766435694, 0.45746667664356944, 0.4674666766435694, 0.4774666766435694, 0.4874666766435694, 0.4974666766435694, 0.5074666766435695, 0.5174666766435695, 0.5274666766435695, 0.5374666766435695]}, {"amplitude": [9.899578511774452, 9.949578511774453, 9.999578511774452, 10.049578511774452, 10.099578511774451, 10.149578511774452, 10.199578511774453, 10.249578511774452, 10.299578511774452, 10.349578511774451, 10.399578511774452, 10.449578511774453, 10.499578511774452, 10.549578511774452, 10.599578511774451, 10.649578511774452, 10.699578511774453, 10.749578511774452, 10.799578511774452, 10.849578511774451, 10.899578511774452, 10.949578511774453, 10.999578511774452, 11.049578511774452, 11.099578511774451, 11.149578511774452, 11.199578511774453, 11.249578511774452, 11.299578511774452, 11.349578511774451, 11.399578511774452, 11.449578511774453, 11.499578511774452, 11.549578511774452, 11.599578511774451, 11.649578511774452, 11.699578511774453, 11.749578511774452, 11.799578511774452, 11.849578511774451, 11.899578511774452, 11.949578511774453, 11.999578511774452, 12.049578511774452, 12.099578511774451, 12.149578511774452, 12.199578511774453, 12.249578511774452, 12.299578511774452, 12.349578511774451, 12.399578511774452, 12.449578511774453, 12.499578511774452, 12.549578511774452, 12.599578511774451, 12.649578511774452], "phase": [-0.0031410759078128606, 0.00685892409218714, 0.01685892409218714, 0.02685892409218714, 0.03685892409218714, 0.04685892409218714, 0.05685892409218714, 0.06685892409218715, 0.07685892409218714, 0.08685892409218714, 0.09685892409218715, 0.10685892409218714, 0.11685892409218714, 0.12685892409218713, 0.13685892409218714, 0.14685892409218712, 0.15685892409218713, 0.16685892409218714, 0.17685892409218712, 0.18685892409218713, 0.19685892409218714, 0.20685892409218712, 0.21685892409218713, 0.22685892409218714, 0.23685892409218712, 0.24685892409218713, 0.25685892409218714, 0.26685892409218714, 0.27685892409218715, 0.2868589240921871, 0.2968589240921871, 0.3068589240921871, 0.31685892409218713, 0.32685892409218714, 0.33685892409218715, 0.34685892409218716, 0.3568589240921871, 0.3668589240921871, 0.37685892409218713, 0.38685892409218714, 0.39685892409218715, 0.40685892409218716, 0.4168589240921871, 0.4268589240921871, 0.43685892409218713, 0.44685892409218714, 0.45685892409218715, 0.46685892409218716, 0.4768589240921871, 0.4868589240921871, 0.4968589240921871, 0.5068589240921871, 0.5168589240921871, 0.5268589240921872, 0.5368589240921872, 0.5468589240921872]}, {"amplitude": [10.20018800520808, 10.25018800520808, 10.30018800520808, 10.35018800520808, 10.40018800520808, 10.45018800520808, 10.50018800520808, 10.55018800520808, 10.60018800520808, 10.65018800520808, 10.70018800520808, 10.75018800520808, 10.80018800520808, 10.85018800520808, 10.90018800520808, 10.95018800520808, 11.00018800520808, 11.05018800520808, 11.10018800520808, 11.15018800520808, 11.20018800520808, 11.25018800520808, 11.30018800520808, 11.35018800520808, 11.40018800520808, 11.45018800520808, 11.50018800520808, 11.55018800520808, 11.60018800520808, 11.65018800520808, 11.70018800520808, 11.75018800520808, 11.80018800520808, 11.85018800520808, 11.90018800520808, 11.95018800520808, 12.00018800520808, 12.05018800520808, 12.10018800520808, 12.15018800520808, 12.20018800520808, 12.25018800520808, 12.30018800520808, 12.35018800520808, 12.40018800520808, 12.45018800520808, 12.50018800520808, 12.55018800520808, 12.60018800520808, 12.65018800520808, 12.70018800520808, 12.75018800520808, 12.80018800520808, 12.85018800520808, 12.90018800520808, 12.95018800520808], "phase": [0.006279051952931253, 0.016279051952931254, 0.026279051952931252, 0.036279051952931254, 0.046279051952931256, 0.05627905195293126, 0.06627905195293125, 0.07627905195293126, 0.08627905195293126, 0.09627905195293125, 0.10627905195293126, 0.11627905195293126, 0.12627905195293124, 0.13627905195293125, 0.14627905195293125, 0.15627905195293124, 0.16627905195293124, 0.17627905195293125, 0.18627905195293123, 0.19627905195293124, 0.20627905195293125, 0.21627905195293123, 0.22627905195293124, 0.23627905195293125, 0.24627905195293123, 0.25627905195293127, 0.2662790519529313, 0.2762790519529313, 0.2862790519529313, 0.29627905195293125, 0.30627905195293126, 0.31627905195293127, 0.3262790519529313, 0.3362790519529313, 0.3462790519529313, 0.3562790519529313, 0.36627905195293126, 0.37627905195293126, 0.3862790519529313, 0.3962790519529313, 0.4062790519529313, 0.4162790519529313, 0.42627905195293125, 0.43627905195293126, 0.44627905195293127, 0.4562790519529313, 0.4662790519529313, 0.4762790519529313, 0.48627905195293125, 0.49627905195293126, 0.5062790519529312, 0.5162790519529312, 0.5262790519529312, 0.5362790519529312, 0.5462790519529312, 0.5562790519529313]}, {"amplitude": [10.489204505768205, 10.539204505768206, 10.589204505768205, 10.639204505768205, 10.689204505768204, 10.739204505768205, 10.789204505768206, 10.839204505768205, 10.889204505768205, 10.939204505768204, 10.989204505768205, 11.039204505768206, 11.089204505768205, 11.139204505768205, 11.189204505768204, 11.239204505768205, 11.289204505768206, 11.339204505768205, 11.389204505768205, 11.439204505768204, 11.489204505768205, 11.539204505768206, 11.589204505768205, 11.639204505768205, 11.689204505768204, 11.739204505768205, 11.789204505768206, 11.839204505768205, 11.889204505768205, 11.939204505768204, 11.989204505768205, 12.039204505768206, 12.089204505768205, 12.139204505768205, 12.189204505768204, 12.239204505768205, 12.289204505768206, 12.339204505768205, 12.389204505768205, 12.439204505768204, 12.489204505768205, 12.539204505768206, 12.589204505768205, 12.639204505768205, 12.689204505768204, 12.739204505768205, 12.789204505768206, 12.839204505768205, 12.889204505768205, 12.939204505768204, 12.989204505768205, 13.039204505768206, 13.089204505768205, 13.139204505768205, 13.189204505768204, 13.239204505768205], "phase": [0.015643446504023127, 0.02564344650402313, 0.035643446504023124, 0.045643446504023126, 0.05564344650402313, 0.06564344650402312, 0.07564344650402313, 0.08564344650402314, 0.09564344650402312, 0.10564344650402313, 0.11564344650402314, 0.12564344650402312, 0.13564344650402313, 0.14564344650402314, 0.15564344650402315, 0.16564344650402313, 0.17564344650402314, 0.18564344650402315, 0.19564344650402313, 0.20564344650402314, 0.21564344650402315, 0.22564344650402313, 0.23564344650402314, 0.24564344650402314, 0.2556434465040231, 0.2656434465040231, 0.2756434465040231, 0.2856434465040231, 0.29564344650402313, 0.3056434465040231, 0.3156434465040231, 0.3256434465040231, 0.3356434465040231, 0.3456434465040231, 0.35564344650402313, 0.36564344650402314, 0.3756434465040231, 0.3856434465040231, 0.3956434465040231, 0.4056434465040231, 0.41564344650402313, 0.42564344650402314, 0.4356434465040231, 0.4456434465040231, 0.4556434465040231, 0.4656434465040231, 0.4756434465040231, 0.48564344650402314, 0.4956434465040231, 0.5056434465040232, 0.5156434465040232, 0.5256434465040232, 0.5356434465040232, 0.5456434465040232, 0.5556434465040232, 0.5656434465040232]}, {"amplitude": [10.750678151980315, 10.800678151980316, 10.850678151980315, 10.900678151980316, 10.950678151980314, 11.000678151980315, 11.050678151980316, 11.100678151980315, 11.150678151980316, 11.200678151980314, 11.250678151980315, 11.300678151980316, 11.350678151980315, 11.400678151980316, 11.450678151980314, 11.500678151980315, 11.550678151980316, 11.600678151980315, 11.650678151980316, 11.700678151980314, 11.750678151980315, 11.800678151980316, 11.850678151980315, 11.900678151980316, 11.950678151980314, 12.000678151980315, 12.050678151980316, 12.100678151980315, 12.150678151980316, 12.200678151980314, 12.250678151980315, 12.300678151980316, 12.350678151980315, 12.400678151980316, 12.450678151980314, 12.500678151980315, 12.550678151980316, 12.600678151980315, 12.650678151980316, 12.700678151980314, 12.750678151980315, 12.800678151980316, 12.850678151980315, 12.900678151980316, 12.950678151980314, 13.000678151980315, 13.050678151980316, 13.100678151980315, 13.150678151980316, 13.200678151980314, 13.250678151980315, 13.300678151980316, 13.350678151980315, 13.400678151980316, 13.450678151980314, 13.500678151980315], "phase": [0.024868988716485466, 0.034868988716485465, 0.04486898871648547, 0.05486898871648546, 0.06486898871648547, 0.07486898871648547, 0.08486898871648546, 0.09486898871648547, 0.10486898871648546, 0.11486898871648546, 0.12486898871648547, 0.13486898871648548, 0.14486898871648546, 0.15486898871648547, 0.16486898871648548, 0.17486898871648546, 0.18486898871648547, 0.19486898871648548, 0.20486898871648546, 0.21486898871648547, 0.22486898871648547, 0.23486898871648546, 0.24486898871648546, 0.2548689887164855, 0.26486898871648545, 0.27486898871648546, 0.28486898871648547, 0.2948689887164855, 0.3048689887164855, 0.31486898871648544, 0.32486898871648545, 0.33486898871648546, 0.34486898871648547, 0.3548689887164855, 0.3648689887164855, 0.3748689887164855, 0.38486898871648545, 0.39486898871648546, 0.40486898871648547, 0.4148689887164855, 0.4248689887164855, 0.4348689887164855, 0.44486898871648545, 0.45486898871648546, 0.46486898871648547, 0.4748689887164855, 0.4848689887164855, 0.4948689887164855, 0.5048689887164854, 0.5148689887164855, 0.5248689887164855, 0.5348689887164855, 0.5448689887164855, 0.5548689887164855, 0.5648689887164855, 0.5748689887164855]}, {"amplitude": [10.972162015709188, 11.022162015709188, 11.072162015709187, 11.122162015709188, 11.172162015709187, 11.222162015709188, 11.272162015709188, 11.322162015709187, 11.372162015709188, 11.422162015709187, 11.472162015709188, 11.522162015709188, 11.572162015709187, 11.622162015709188, 11.672162015709187, 11.722162015709188, 11.772162015709188, 11.822162015709187, 11.872162015709188, 11.922162015709187, 11.972162015709188, 12.022162015709188, 12.072162015709187, 12.122162015709188, 12.172162015709187, 12.222162015709188, 12.272162015709188, 12.322162015709187, 12.372162015709188, 12.422162015709187, 12.472162015709188, 12.522162015709188, 12.572162015709187, 12.622162015709188, 12.672162015709187, 12.722162015709188, 12.772162015709188, 12.822162015709187, 12.872162015709188, 12.922162015709187, 12.972162015709188, 13.022162015709188, 13.072162015709187, 13.122162015709188, 13.172162015709187, 13.222162015709188, 13.272162015709188, 13.322162015709187, 13.372162015709188, 13.422162015709187, 13.472162015709188, 13.522162015709188, 13.572162015709187, 13.622162015709188, 13.672162015709187, 13.722162015709188], "phase": [0.03387379202452908, 0.04387379202452908, 0.05387379202452908, 0.06387379202452909, 0.07387379202452908, 0.08387379202452908, 0.09387379202452908, 0.1038737920245291, 0.11387379202452907, 0.12387379202452908, 0.1338737920245291, 0.14387379202452907, 0.15387379202452908, 0.1638737920245291, 0.1738737920245291, 0.18387379202452908, 0.1938737920245291, 0.2038737920245291, 0.21387379202452908, 0.2238737920245291, 0.2338737920245291, 0.24387379202452908, 0.2538737920245291, 0.2638737920245291, 0.27387379202452905, 0.28387379202452906, 0.29387379202452907, 0.3038737920245291, 0.3138737920245291, 0.32387379202452904, 0.33387379202452905, 0.34387379202452906, 0.35387379202452907, 0.3638737920245291, 0.3738737920245291, 0.3838737920245291, 0.39387379202452905, 0.40387379202452905, 0.41387379202452906, 0.4238737920245291, 0.4338737920245291, 0.4438737920245291, 0.45387379202452904, 0.46387379202452905, 0.47387379202452906, 0.48387379202452907, 0.4938737920245291, 0.5038737920245291, 0.5138737920245291, 0.5238737920245291, 0.5338737920245291, 0.5438737920245291, 0.5538737920245291, 0.5638737920245291, 0.5738737920245292, 0.5838737920245292]}, {"amplitude": [11.146244758348752, 11.196244758348753, 11.246244758348752, 11.296244758348752, 11.346244758348751, 11.396244758348752, 11.446244758348753, 11.496244758348752, 11.546244758348752, 11.596244758348751, 11.646244758348752, 11.696244758348753, 11.746244758348752, 11.796244758348752, 11.846244758348751, 11.896244758348752, 11.946244758348753, 11.996244758348752, 12.046244758348752, 12.096244758348751, 12.146244758348752, 12.196244758348753, 12.246244758348752, 12.296244758348752, 12.346244758348751, 12.396244758348752, 12.446244758348753, 12.496244758348752, 12.546244758348752, 12.596244758348751, 12.646244758348752, 12.696244758348753, 12.746244758348752, 12.796244758348752, 12.846244758348751, 12.896244758348752, 12.946244758348753, 12.996244758348752, 13.046244758348752, 13.096244758348751, 13.146244758348752, 13.196244758348753, 13.246244758348752, 13.296244758348752, 13.346244758348751, 13.396244758348752, 13.446244758348753, 13.496244758348752, 13.546244758348752, 13.596244758348751, 13.646244758348752, 13.696244758348753, 13.746244758348752, 13.796244758348752, 13.846244758348751, 13.896244758348752], "phase": [0.04257792915650732, 0.05257792915650732, 0.06257792915650733, 0.07257792915650732, 0.08257792915650733, 0.09257792915650732, 0.10257792915650732, 0.11257792915650733, 0.12257792915650732, 0.13257792915650732, 0.14257792915650733, 0.1525779291565073, 0.16257792915650732, 0.17257792915650733, 0.18257792915650733, 0.19257792915650732, 0.20257792915650732, 0.21257792915650733, 0.22257792915650731, 0.23257792915650732, 0.24257792915650733, 0.25257792915650734, 0.26257792915650735, 0.27257792915650736, 0.2825779291565073, 0.2925779291565073, 0.30257792915650733, 0.31257792915650734, 0.32257792915650735, 0.3325779291565073, 0.3425779291565073, 0.3525779291565073, 0.36257792915650733, 0.37257792915650734, 0.38257792915650735, 0.39257792915650735, 0.4025779291565073, 0.4125779291565073, 0.4225779291565073, 0.43257792915650733, 0.44257792915650734, 0.45257792915650735, 0.4625779291565073, 0.4725779291565073, 0.4825779291565073, 0.49257792915650733, 0.5025779291565073, 0.5125779291565074, 0.5225779291565074, 0.5325779291565074, 0.5425779291565074, 0.5525779291565074, 0.5625779291565074, 0.5725779291565074, 0.5825779291565074, 0.5925779291565074]}, {"amplitude": [11.271381209151347, 11.321381209151347, 11.371381209151348, 11.421381209151349, 11.471381209151346, 11.521381209151347, 11.571381209151347, 11.621381209151348, 11.671381209151349, 11.721381209151346, 11.771381209151347, 11.821381209151347, 11.871381209151348, 11.921381209151349, 11.971381209151346, 12.021381209151347, 12.071381209151347, 12.121381209151348, 12.171381209151349, 12.221381209151346, 12.271381209151347, 12.321381209151347, 12.371381209151348, 12.421381209151349, 12.471381209151346, 12.521381209151347, 12.571381209151347, 12.621381209151348, 12.671381209151349, 12.721381209151346, 12.771381209151347, 12.821381209151347, 12.871381209151348, 12.921381209151349, 12.971381209151346, 13.021381209151347, 13.071381209151347, 13.121381209151348, 13.171381209151349, 13.221381209151346, 13.271381209151347, 13.321381209151347, 13.371381209151348, 13.421381209151349, 13.471381209151346, 13.521381209151347, 13.571381209151347, 13.621381209151348, 13.671381209151349, 13.721381209151346, 13.771381209151347, 13.821381209151347, 13.871381209151348, 13.921381209151349, 13.971381209151346, 14.021381209151347], "phase": [0.050904141575037136, 0.06090414157503714, 0.07090414157503713, 0.08090414157503714, 0.09090414157503714, 0.10090414157503713, 0.11090414157503714, 0.12090414157503715, 0.13090414157503713, 0.14090414157503714, 0.15090414157503715, 0.16090414157503713, 0.17090414157503714, 0.18090414157503715, 0.19090414157503716, 0.20090414157503714, 0.21090414157503715, 0.22090414157503716, 0.23090414157503714, 0.24090414157503715, 0.25090414157503715, 0.2609041415750371, 0.2709041415750371, 0.2809041415750371, 0.29090414157503713, 0.30090414157503714, 0.31090414157503715, 0.32090414157503716, 0.33090414157503717, 0.3409041415750371, 0.35090414157503713, 0.36090414157503714, 0.37090414157503715, 0.38090414157503716, 0.39090414157503717, 0.4009041415750372, 0.41090414157503713, 0.42090414157503714, 0.43090414157503715, 0.44090414157503716, 0.45090414157503717, 0.4609041415750372, 0.4709041415750371, 0.48090414157503714, 0.49090414157503715, 0.5009041415750372, 0.5109041415750372, 0.5209041415750372, 0.5309041415750371, 0.5409041415750371, 0.5509041415750371, 0.5609041415750371, 0.5709041415750371, 0.5809041415750371, 0.5909041415750371, 0.6009041415750371]}, {"amplitude": [11.351906080272688, 11.401906080272688, 11.451906080272687, 11.501906080272688, 11.551906080272687, 11.601906080272688, 11.651906080272688, 11.701906080272687, 11.751906080272688, 11.801906080272687, 11.851906080272688, 11.901906080272688, 11.951906080272687, 12.001906080272688, 12.051906080272687, 12.101906080272688, 12.151906080272688, 12.201906080272687, 12.251906080272688, 12.301906080272687, 12.351906080272688, 12.401906080272688, 12.451906080272687, 12.501906080272688, 12.551906080272687, 12.601906080272688, 12.651906080272688, 12.701906080272687, 12.751906080272688, 12.801906080272687, 12.851906080272688, 12.901906080272688, 12.951906080272687, 13.001906080272688, 13.051906080272687, 13.101906080272688, 13.151906080272688, 13.201906080272687, 13.251906080272688, 13.301906080272687, 13.351906080272688, 13.401906080272688, 13.451906080272687, 13.501906080272688, 13.551906080272687, 13.601906080272688, 13.651906080272688, 13.701906080272687, 13.751906080272688, 13.801906080272687, 13.851906080272688, 13.901906080272688, 13.951906080272687, 14.001906080272688, 14.051906080272687, 14.101906080272688], "phase": [0.05877852522924727, 0.06877852522924727, 0.07877852522924728, 0.08877852522924727, 0.09877852522924727, 0.10877852522924727, 0.11877852522924727, 0.12877852522924726, 0.13877852522924727, 0.14877852522924728, 0.1587785252292473, 0.16877852522924727, 0.17877852522924725, 0.18877852522924726, 0.19877852522924727, 0.20877852522924728, 0.2187785252292473, 0.2287785252292473, 0.23877852522924725, 0.24877852522924726, 0.25877852522924727, 0.2687785252292473, 0.2787785252292473, 0.2887785252292473, 0.29877852522924725, 0.30877852522924726, 0.31877852522924727, 0.3287785252292473, 0.3387785252292473, 0.34877852522924724, 0.35877852522924725, 0.36877852522924726, 0.37877852522924726, 0.3887785252292473, 0.3987785252292473, 0.4087785252292473, 0.41877852522924724, 0.42877852522924725, 0.43877852522924726, 0.44877852522924727, 0.4587785252292473, 0.4687785252292473, 0.47877852522924724, 0.48877852522924725, 0.49877852522924726, 0.5087785252292473, 0.5187785252292473, 0.5287785252292473, 0.5387785252292473, 0.5487785252292473, 0.5587785252292473, 0.5687785252292473, 0.5787785252292473, 0.5887785252292473, 0.5987785252292473, 0.6087785252292474]}, {"amplitude": [11.397230696796761, 11.447230696796762, 11.49723069679676, 11.547230696796762, 11.59723069679676, 11.647230696796761, 11.697230696796762, 11.74723069679676, 11.797230696796762, 11.84723069679676, 11.897230696796761, 11.947230696796762, 11.99723069679676, 12.047230696796762, 12.09723069679676, 12.147230696796761, 12.197230696796762, 12.24723069679676, 12.297230696796762, 12.34723069679676, 12.397230696796761, 12.447230696796762, 12.49723069679676, 12.547230696796762, 12.59723069679676, 12.647230696796761, 12.697230696796762, 12.74723069679676, 12.797230696796762, 12.84723069679676, 12.897230696796761, 12.947230696796762, 12.99723069679676, 13.047230696796762, 13.09723069679676, 13.147230696796761, 13.197230696796762, 13.24723069679676, 13.297230696796762, 13.34723069679676, 13.397230696796761, 13.447230696796762, 13.49723069679676, 13.547230696796762, 13.59723069679676, 13.647230696796761, 13.697230696796762, 13.74723069679676, 13.797230696796762, 13.84723069679676, 13.897230696796761, 13.947230696796762, 13.99723069679676, 14.047230696796762, 14.09723069679676, 14.147230696796761], "phase": [0.0661311865323651, 0.0761311865323651, 0.08613118653236511, 0.0961311865323651, 0.10613118653236511, 0.11613118653236511, 0.1261311865323651, 0.1361311865323651, 0.14613118653236512, 0.1561311865323651, 0.1661311865323651, 0.1761311865323651, 0.1861311865323651, 0.1961311865323651, 0.20613118653236512, 0.2161311865323651, 0.2261311865323651, 0.23613118653236512, 0.2461311865323651, 0.2561311865323651, 0.2661311865323651, 0.2761311865323651, 0.28613118653236513, 0.29613118653236514, 0.3061311865323651, 0.3161311865323651, 0.3261311865323651, 0.3361311865323651, 0.34613118653236513, 0.3561311865323651, 0.3661311865323651, 0.3761311865323651, 0.3861311865323651, 0.3961311865323651, 0.40613118653236513, 0.41613118653236514, 0.4261311865323651, 0.4361311865323651, 0.4461311865323651, 0.4561311865323651, 0.4661311865323651, 0.47613118653236514, 0.4861311865323651, 0.4961311865323651, 0.5061311865323651, 0.5161311865323651, 0.5261311865323651, 0.5361311865323651, 0.546131186532365, 0.556131186532365, 0.566131186532365, 0.5761311865323651, 0.5861311865323651, 0.5961311865323651, 0.6061311865323651, 0.6161311865323651]}, {"amplitude": [11.420337284773533, 11.470337284773533, 11.52033728477353, 11.570337284773531, 11.620337284773532, 11.670337284773533, 11.720337284773533, 11.77033728477353, 11.820337284773531, 11.870337284773532, 11.920337284773533, 11.970337284773533, 12.02033728477353, 12.070337284773531, 12.120337284773532, 12.170337284773533, 12.220337284773533, 12.27033728477353, 12.320337284773531, 12.370337284773532, 12.420337284773533, 12.470337284773533, 12.52033728477353, 12.570337284773531, 12.620337284773532, 12.670337284773533, 12.720337284773533, 12.77033728477353, 12.820337284773531, 12.870337284773532, 12.920337284773533, 12.970337284773533, 13.02033728477353, 13.070337284773531, 13.120337284773532, 13.170337284773533, 13.220337284773533, 13.27033728477353, 13.320337284773531, 13.370337284773532, 13.420337284773533, 13.470337284773533, 13.52033728477353, 13.570337284773531, 13.620337284773532, 13.670337284773533, 13.720337284773533, 13.77033728477353, 13.820337284773531, 13.870337284773532, 13.920337284773533, 13.970337284773533, 14.02033728477353, 14.070337284773531, 14.120337284773532, 14.170337284773533], "phase": [0.07289686274214105, 0.08289686274214104, 0.09289686274214105, 0.10289686274214105, 0.11289686274214106, 0.12289686274214105, 0.13289686274214105, 0.14289686274214106, 0.15289686274214104, 0.16289686274214105, 0.17289686274214106, 0.18289686274214106, 0.19289686274214105, 0.20289686274214105, 0.21289686274214106, 0.22289686274214104, 0.23289686274214105, 0.24289686274214106, 0.25289686274214107, 0.2628968627421411, 0.2728968627421411, 0.28289686274214104, 0.29289686274214105, 0.30289686274214106, 0.312896862742141, 0.322896862742141, 0.33289686274214103, 0.34289686274214104, 0.35289686274214105, 0.36289686274214106, 0.37289686274214107, 0.3828968627421411, 0.3928968627421411, 0.4028968627421411, 0.4128968627421411, 0.4228968627421411, 0.432896862742141, 0.442896862742141, 0.452896862742141, 0.46289686274214104, 0.47289686274214104, 0.48289686274214105, 0.49289686274214106, 0.5028968627421411, 0.5128968627421411, 0.5228968627421411, 0.5328968627421411, 0.5428968627421411, 0.552896862742141, 0.562896862742141, 0.572896862742141, 0.582896862742141, 0.592896862742141, 0.602896862742141, 0.6128968627421411, 0.6228968627421411]}, {"amplitude": [11.435783922520866, 11.485783922520866, 11.535783922520865, 11.585783922520866, 11.635783922520865, 11.685783922520866, 11.735783922520866, 11.785783922520865, 11.835783922520866, 11.885783922520865, 11.935783922520866, 11.985783922520866, 12.035783922520865, 12.085783922520866, 12.135783922520865, 12.185783922520866, 12.235783922520866, 12.285783922520865, 12.335783922520866, 12.385783922520865, 12.435783922520866, 12.485783922520866, 12.535783922520865, 12.585783922520866, 12.635783922520865, 12.685783922520866, 12.735783922520866, 12.785783922520865, 12.835783922520866, 12.885783922520865, 12.935783922520866, 12.985783922520866, 13.035783922520865, 13.085783922520866, 13.135783922520865, 13.185783922520866, 13.235783922520866, 13.285783922520865, 13.335783922520866, 13.385783922520865, 13.435783922520866, 13.485783922520866, 13.535783922520865, 13.585783922520866, 13.635783922520865, 13.685783922520866, 13.735783922520866, 13.785783922520865, 13.835783922520866, 13.885783922520865, 13.935783922520866, 13.985783922520866, 14.035783922520865, 14.085783922520866, 14.135783922520865, 14.185783922520866], "phase": [0.07901550123756902, 0.08901550123756902, 0.09901550123756903, 0.10901550123756902, 0.11901550123756902, 0.12901550123756902, 0.139015501237569, 0.14901550123756901, 0.15901550123756902, 0.16901550123756903, 0.17901550123756904, 0.18901550123756902, 0.199015501237569, 0.209015501237569, 0.21901550123756902, 0.22901550123756903, 0.23901550123756904, 0.24901550123756905, 0.259015501237569, 0.269015501237569, 0.279015501237569, 0.28901550123756903, 0.29901550123756904, 0.30901550123756905, 0.319015501237569, 0.329015501237569, 0.339015501237569, 0.349015501237569, 0.35901550123756903, 0.369015501237569, 0.379015501237569, 0.389015501237569, 0.399015501237569, 0.409015501237569, 0.41901550123756903, 0.42901550123756904, 0.439015501237569, 0.449015501237569, 0.459015501237569, 0.469015501237569, 0.47901550123756903, 0.48901550123756904, 0.499015501237569, 0.509015501237569, 0.519015501237569, 0.529015501237569, 0.539015501237569, 0.549015501237569, 0.559015501237569, 0.569015501237569, 0.5790155012375691, 0.5890155012375691, 0.5990155012375691, 0.6090155012375691, 0.6190155012375691, 0.6290155012375691]}, {"amplitude": [11.457501878171293, 11.507501878171293, 11.557501878171292, 11.607501878171293, 11.657501878171292, 11.707501878171293, 11.757501878171293, 11.807501878171292, 11.857501878171293, 11.907501878171292, 11.957501878171293, 12.007501878171293, 12.057501878171292, 12.107501878171293, 12.157501878171292, 12.207501878171293, 12.257501878171293, 12.307501878171292, 12.357501878171293, 12.407501878171292, 12.457501878171293, 12.507501878171293, 12.557501878171292, 12.607501878171293, 12.657501878171292, 12.707501878171293, 12.757501878171293, 12.807501878171292, 12.857501878171293, 12.907501878171292, 12.957501878171293, 13.007501878171293, 13.057501878171292, 13.107501878171293, 13.157501878171292, 13.207501878171293, 13.257501878171293, 13.307501878171292, 13.357501878171293, 13.407501878171292, 13.457501878171293, 13.507501878171293, 13.557501878171292, 13.607501878171293, 13.657501878171292, 13.707501878171293, 13.757501878171293, 13.807501878171292, 13.857501878171293, 13.907501878171292, 13.957501878171293, 14.007501878171293, 14.057501878171292, 14.107501878171293, 14.157501878171292, 14.207501878171293], "phase": [0.08443279255020147, 0.09443279255020147, 0.10443279255020148, 0.11443279255020147, 0.12443279255020148, 0.13443279255020146, 0.14443279255020147, 0.15443279255020148, 0.1644327925502015, 0.17443279255020147, 0.18443279255020148, 0.19443279255020146, 0.20443279255020147, 0.21443279255020148, 0.2244327925502015, 0.23443279255020147, 0.24443279255020148, 0.25443279255020146, 0.26443279255020147, 0.2744327925502015, 0.2844327925502015, 0.2944327925502015, 0.3044327925502015, 0.3144327925502015, 0.32443279255020147, 0.3344327925502015, 0.3444327925502015, 0.3544327925502015, 0.3644327925502015, 0.37443279255020145, 0.38443279255020146, 0.39443279255020147, 0.4044327925502015, 0.4144327925502015, 0.4244327925502015, 0.4344327925502015, 0.44443279255020146, 0.45443279255020147, 0.4644327925502015, 0.4744327925502015, 0.4844327925502015, 0.4944327925502015, 0.5044327925502015, 0.5144327925502015, 0.5244327925502015, 0.5344327925502015, 0.5444327925502015, 0.5544327925502015, 0.5644327925502015, 0.5744327925502015, 0.5844327925502015, 0.5944327925502015, 0.6044327925502015, 0.6144327925502016, 0.6244327925502016, 0.6344327925502016]}, {"amplitude": [11.49669609348819, 11.54669609348819, 11.59669609348819, 11.64669609348819, 11.696696093488189, 11.74669609348819, 11.79669609348819, 11.84669609348819, 11.89669609348819, 11.946696093488189, 11.99669609348819, 12.04669609348819, 12.09669609348819, 12.14669609348819, 12.196696093488189, 12.24669609348819, 12.29669609348819, 12.34669609348819, 12.39669609348819, 12.446696093488189, 12.49669609348819, 12.54669609348819, 12.59669609348819, 12.64669609348819, 12.696696093488189, 12.74669609348819, 12.79669609348819, 12.84669609348819, 12.89669609348819, 12.946696093488189, 12.99669609348819, 13.04669609348819, 13.09669609348819, 13.14669609348819, 13.196696093488189, 13.24669609348819, 13.29669609348819, 13.34669609348819, 13.39669609348819, 13.446696093488189, 13.49669609348819, 13.54669609348819, 13.59669609348819, 13.64669609348819, 13.696696093488189, 13.74669609348819, 13.79669609348819, 13.84669609348819, 13.89669609348819, 13.946696093488189, 13.99669609348819, 14.04669609348819, 14.09669609348819, 14.14669609348819, 14.196696093488189, 14.24669609348819], "phase": [0.08910065241883673, 0.09910065241883673, 0.10910065241883674, 0.11910065241883673, 0.12910065241883673, 0.13910065241883673, 0.14910065241883674, 0.15910065241883675, 0.16910065241883673, 0.17910065241883671, 0.18910065241883672, 0.19910065241883673, 0.20910065241883674, 0.21910065241883675, 0.22910065241883676, 0.2391006524188367, 0.24910065241883672, 0.25910065241883673, 0.26910065241883674, 0.27910065241883675, 0.28910065241883676, 0.2991006524188367, 0.3091006524188367, 0.3191006524188367, 0.32910065241883674, 0.33910065241883675, 0.34910065241883675, 0.35910065241883676, 0.36910065241883677, 0.3791006524188367, 0.38910065241883673, 0.39910065241883674, 0.40910065241883675, 0.41910065241883676, 0.42910065241883677, 0.4391006524188368, 0.44910065241883673, 0.45910065241883674, 0.46910065241883675, 0.47910065241883676, 0.48910065241883677, 0.4991006524188368, 0.5091006524188367, 0.5191006524188367, 0.5291006524188367, 0.5391006524188368, 0.5491006524188368, 0.5591006524188368, 0.5691006524188367, 0.5791006524188367, 0.5891006524188367, 0.5991006524188367, 0.6091006524188367, 0.6191006524188367, 0.6291006524188367, 0.6391006524188367]}, {"amplitude": [11.56014495324802, 11.610144953248021, 11.660144953248022, 11.710144953248022, 11.76014495324802, 11.81014495324802, 11.860144953248021, 11.910144953248022, 11.960144953248022, 12.01014495324802, 12.06014495324802, 12.110144953248021, 12.160144953248022, 12.210144953248022, 12.26014495324802, 12.31014495324802, 12.360144953248021, 12.410144953248022, 12.460144953248022, 12.51014495324802, 12.56014495324802, 12.610144953248021, 12.660144953248022, 12.710144953248022, 12.76014495324802, 12.81014495324802, 12.860144953248021, 12.910144953248022, 12.960144953248022, 13.01014495324802, 13.06014495324802, 13.110144953248021, 13.160144953248022, 13.210144953248022, 13.26014495324802, 13.31014495324802, 13.360144953248021, 13.410144953248022, 13.460144953248022, 13.51014495324802, 13.56014495324802, 13.610144953248021, 13.660144953248022, 13.710144953248022, 13.76014495324802, 13.81014495324802, 13.860144953248021, 13.910144953248022, 13.960144953248022, 14.01014495324802, 14.06014495324802, 14.110144953248021, 14.160144953248022, 14.210144953248022, 14.26014495324802, 14.31014495324802], "phase": [0.09297764858882514, 0.10297764858882513, 0.11297764858882514, 0.12297764858882514, 0.13297764858882513, 0.14297764858882514, 0.15297764858882512, 0.16297764858882513, 0.17297764858882514, 0.18297764858882515, 0.19297764858882516, 0.20297764858882514, 0.21297764858882512, 0.22297764858882513, 0.23297764858882514, 0.24297764858882515, 0.25297764858882515, 0.26297764858882516, 0.2729776485888251, 0.2829776485888251, 0.29297764858882513, 0.30297764858882514, 0.31297764858882515, 0.32297764858882516, 0.3329776485888251, 0.3429776485888251, 0.35297764858882513, 0.36297764858882514, 0.37297764858882515, 0.3829776485888251, 0.3929776485888251, 0.4029776485888251, 0.41297764858882513, 0.42297764858882514, 0.43297764858882515, 0.44297764858882516, 0.4529776485888251, 0.4629776485888251, 0.47297764858882513, 0.48297764858882514, 0.49297764858882515, 0.5029776485888252, 0.5129776485888251, 0.5229776485888251, 0.5329776485888251, 0.5429776485888251, 0.5529776485888251, 0.5629776485888252, 0.5729776485888252, 0.5829776485888252, 0.5929776485888252, 0.6029776485888252, 0.6129776485888252, 0.6229776485888252, 0.6329776485888252, 0.6429776485888252]}, {"amplitude": [11.64913925561408, 11.69913925561408, 11.749139255614079, 11.79913925561408, 11.849139255614078, 11.89913925561408, 11.94913925561408, 11.999139255614079, 12.04913925561408, 12.099139255614078, 12.14913925561408, 12.19913925561408, 12.249139255614079, 12.29913925561408, 12.349139255614078, 12.39913925561408, 12.44913925561408, 12.499139255614079, 12.54913925561408, 12.599139255614078, 12.64913925561408, 12.69913925561408, 12.749139255614079, 12.79913925561408, 12.849139255614078, 12.89913925561408, 12.94913925561408, 12.999139255614079, 13.04913925561408, 13.099139255614078, 13.14913925561408, 13.19913925561408, 13.249139255614079, 13.29913925561408, 13.349139255614078, 13.39913925561408, 13.44913925561408, 13.499139255614079, 13.54913925561408, 13.599139255614078, 13.64913925561408, 13.69913925561408, 13.749139255614079, 13.79913925561408, 13.849139255614078, 13.89913925561408, 13.94913925561408, 13.999139255614079, 14.04913925561408, 14.099139255614078, 14.14913925561408, 14.19913925561408, 14.249139255614079, 14.29913925561408, 14.349139255614078, 14.39913925561408], "phase": [0.09602936856769428, 0.10602936856769428, 0.11602936856769429, 0.12602936856769428, 0.1360293685676943, 0.14602936856769427, 0.15602936856769428, 0.1660293685676943, 0.1760293685676943, 0.18602936856769428, 0.1960293685676943, 0.20602936856769427, 0.21602936856769428, 0.2260293685676943, 0.2360293685676943, 0.24602936856769428, 0.2560293685676943, 0.2660293685676943, 0.2760293685676943, 0.2860293685676943, 0.2960293685676943, 0.30602936856769425, 0.31602936856769426, 0.32602936856769427, 0.3360293685676943, 0.3460293685676943, 0.3560293685676943, 0.3660293685676943, 0.3760293685676943, 0.38602936856769426, 0.3960293685676943, 0.4060293685676943, 0.4160293685676943, 0.4260293685676943, 0.4360293685676943, 0.4460293685676943, 0.45602936856769427, 0.4660293685676943, 0.4760293685676943, 0.4860293685676943, 0.4960293685676943, 0.5060293685676943, 0.5160293685676942, 0.5260293685676942, 0.5360293685676942, 0.5460293685676942, 0.5560293685676942, 0.5660293685676943, 0.5760293685676943, 0.5860293685676943, 0.5960293685676943, 0.6060293685676943, 0.6160293685676943, 0.6260293685676943, 0.6360293685676943, 0.6460293685676943]}, {"amplitude": [11.75921036967877, 11.809210369678771, 11.85921036967877, 11.909210369678771, 11.95921036967877, 12.00921036967877, 12.059210369678771, 12.10921036967877, 12.159210369678771, 12.20921036967877, 12.25921036967877, 12.309210369678771, 12.35921036967877, 12.409210369678771, 12.45921036967877, 12.50921036967877, 12.559210369678771, 12.60921036967877, 12.659210369678771, 12.70921036967877, 12.75921036967877, 12.809210369678771, 12.85921036967877, 12.909210369678771, 12.95921036967877, 13.00921036967877, 13.059210369678771, 13.10921036967877, 13.159210369678771, 13.20921036967877, 13.25921036967877, 13.309210369678771, 13.35921036967877, 13.409210369678771, 13.45921036967877, 13.50921036967877, 13.559210369678771, 13.60921036967877, 13.659210369678771, 13.70921036967877, 13.75921036967877, 13.809210369678771, 13.85921036967877, 13.909210369678771, 13.95921036967877, 14.00921036967877, 14.059210369678771, 14.10921036967877, 14.159210369678771, 14.20921036967877, 14.25921036967877, 14.309210369678771, 14.35921036967877, 14.409210369678771, 14.45921036967877, 14.50921036967877], "phase": [0.0982287250728689, 0.10822872507286889, 0.1182287250728689, 0.1282287250728689, 0.1382287250728689, 0.14822872507286888, 0.1582287250728689, 0.1682287250728689, 0.1782287250728689, 0.1882287250728689, 0.1982287250728689, 0.20822872507286888, 0.2182287250728689, 0.2282287250728689, 0.2382287250728689, 0.2482287250728689, 0.25822872507286887, 0.2682287250728689, 0.2782287250728689, 0.2882287250728689, 0.2982287250728689, 0.3082287250728689, 0.3182287250728689, 0.32822872507286893, 0.3382287250728689, 0.3482287250728689, 0.3582287250728689, 0.3682287250728689, 0.3782287250728689, 0.3882287250728689, 0.3982287250728689, 0.4082287250728689, 0.4182287250728689, 0.4282287250728689, 0.4382287250728689, 0.4482287250728689, 0.4582287250728689, 0.4682287250728689, 0.4782287250728689, 0.4882287250728689, 0.4982287250728689, 0.508228725072869, 0.5182287250728689, 0.5282287250728689, 0.5382287250728689, 0.5482287250728689, 0.5582287250728689, 0.5682287250728689, 0.5782287250728688, 0.5882287250728688, 0.5982287250728688, 0.6082287250728688, 0.6182287250728689, 0.6282287250728689, 0.6382287250728689, 0.6482287250728689]}, {"amplitude": [11.880686563400758, 11.930686563400759, 11.980686563400756, 12.030686563400756, 12.080686563400757, 12.130686563400758, 12.180686563400759, 12.230686563400756, 12.280686563400756, 12.330686563400757, 12.380686563400758, 12.430686563400759, 12.480686563400756, 12.530686563400756, 12.580686563400757, 12.630686563400758, 12.680686563400759, 12.730686563400756, 12.780686563400756, 12.830686563400757, 12.880686563400758, 12.930686563400759, 12.980686563400756, 13.030686563400756, 13.080686563400757, 13.130686563400758, 13.180686563400759, 13.230686563400756, 13.280686563400756, 13.330686563400757, 13.380686563400758, 13.430686563400759, 13.480686563400756, 13.530686563400756, 13.580686563400757, 13.630686563400758, 13.680686563400759, 13.730686563400756, 13.780686563400756, 13.830686563400757, 13.880686563400758, 13.930686563400759, 13.980686563400756, 14.030686563400756, 14.080686563400757, 14.130686563400758, 14.180686563400759, 14.230686563400756, 14.280686563400756, 14.330686563400757, 14.380686563400758, 14.430686563400759, 14.480686563400756, 14.530686563400756, 14.580686563400757, 14.630686563400758], "phase": [0.099556196460308, 0.109556196460308, 0.119556196460308, 0.129556196460308, 0.139556196460308, 0.149556196460308, 0.159556196460308, 0.169556196460308, 0.17955619646030802, 0.189556196460308, 0.199556196460308, 0.209556196460308, 0.219556196460308, 0.229556196460308, 0.239556196460308, 0.249556196460308, 0.25955619646030803, 0.26955619646030804, 0.279556196460308, 0.289556196460308, 0.299556196460308, 0.30955619646030796, 0.319556196460308, 0.329556196460308, 0.339556196460308, 0.349556196460308, 0.359556196460308, 0.369556196460308, 0.379556196460308, 0.389556196460308, 0.399556196460308, 0.409556196460308, 0.419556196460308, 0.429556196460308, 0.439556196460308, 0.44955619646030803, 0.459556196460308, 0.469556196460308, 0.479556196460308, 0.489556196460308, 0.499556196460308, 0.509556196460308, 0.5195561964603079, 0.5295561964603079, 0.539556196460308, 0.549556196460308, 0.559556196460308, 0.569556196460308, 0.579556196460308, 0.589556196460308, 0.599556196460308, 0.609556196460308, 0.619556196460308, 0.629556196460308, 0.639556196460308, 0.649556196460308]}, {"amplitude": [12.0, 12.05, 12.1, 12.15, 12.2, 12.25, 12.3, 12.35, 12.4, 12.45, 12.5, 12.55, 12.6, 12.65, 12.7, 12.75, 12.8, 12.85, 12.9, 12.95, 13.0, 13.05, 13.1, 13.15, 13.2, 13.25, 13.3, 13.35, 13.4, 13.45, 13.5, 13.55, 13.6, 13.65, 13.7, 13.75, 13.8, 13.85, 13.9, 13.95, 14.0, 14.05, 14.1, 14.15, 14.2, 14.25, 14.3, 14.35, 14.4, 14.45, 14.5, 14.55, 14.6, 14.65, 14.7, 14.75], "phase": [0.1, 0.11, 0.12000000000000001, 0.13, 0.14, 0.15000000000000002, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21000000000000002, 0.22, 0.23, 0.24000000000000002, 0.25, 0.26, 0.27, 0.28, 0.29000000000000004, 0.30000000000000004, 0.31, 0.32, 0.33, 0.33999999999999997, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41000000000000003, 0.42000000000000004, 0.43000000000000005, 0.44000000000000006, 0.45000000000000007, 0.45999999999999996, 0.47, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.5700000000000001, 0.58, 0.59, 0.6, 0.61, 0.62, 0.63, 0.64, 0.65]}, {"amplitude": [12.101561295011564, 12.151561295011565, 12.201561295011564, 12.251561295011564, 12.301561295011563, 12.351561295011564, 12.401561295011565, 12.451561295011564, 12.501561295011564, 12.551561295011563, 12.601561295011564, 12.651561295011565, 12.701561295011564, 12.751561295011564, 12.801561295011563, 12.851561295011564, 12.901561295011565, 12.951561295011564, 13.001561295011564, 13.051561295011563, 13.101561295011564, 13.151561295011565, 13.201561295011564, 13.251561295011564, 13.301561295011563, 13.351561295011564, 13.401561295011565, 13.451561295011564, 13.501561295011564, 13.551561295011563, 13.601561295011564, 13.651561295011565, 13.701561295011564, 13.751561295011564, 13.801561295011563, 13.851561295011564, 13.901561295011565, 13.951561295011564, 14.001561295011564, 14.051561295011563, 14.101561295011564, 14.151561295011565, 14.201561295011564, 14.251561295011564, 14.301561295011563, 14.351561295011564, 14.401561295011565, 14.451561295011564, 14.501561295011564, 14.551561295011563, 14.601561295011564, 14.651561295011565, 14.701561295011564, 14.751561295011564, 14.801561295011563, 14.851561295011564], "phase": [0.09955619646030801, 0.10955619646030801, 0.11955619646030802, 0.12955619646030803, 0.139556196460308, 0.14955619646030802, 0.159556196460308, 0.169556196460308, 0.17955619646030802, 0.18955619646030802, 0.19955619646030803, 0.20955619646030801, 0.219556196460308, 0.229556196460308, 0.239556196460308, 0.24955619646030802, 0.25955619646030803, 0.26955619646030804, 0.279556196460308, 0.289556196460308, 0.299556196460308, 0.309556196460308, 0.31955619646030803, 0.32955619646030804, 0.339556196460308, 0.349556196460308, 0.359556196460308, 0.369556196460308, 0.379556196460308, 0.389556196460308, 0.399556196460308, 0.409556196460308, 0.419556196460308, 0.429556196460308, 0.439556196460308, 0.44955619646030803, 0.459556196460308, 0.469556196460308, 0.479556196460308, 0.489556196460308, 0.499556196460308, 0.509556196460308, 0.519556196460308, 0.529556196460308, 0.5395561964603081, 0.5495561964603081, 0.5595561964603081, 0.5695561964603081, 0.579556196460308, 0.589556196460308, 0.599556196460308, 0.609556196460308, 0.619556196460308, 0.629556196460308, 0.639556196460308, 0.649556196460308]}, {"amplitude": [12.169938633235983, 12.219938633235984, 12.269938633235983, 12.319938633235983, 12.369938633235982, 12.419938633235983, 12.469938633235984, 12.519938633235983, 12.569938633235983, 12.619938633235982, 12.669938633235983, 12.719938633235984, 12.769938633235983, 12.819938633235983, 12.869938633235982, 12.919938633235983, 12.969938633235984, 13.019938633235983, 13.069938633235983, 13.119938633235982, 13.169938633235983, 13.219938633235984, 13.269938633235983, 13.319938633235983, 13.369938633235982, 13.419938633235983, 13.469938633235984, 13.519938633235983, 13.569938633235983, 13.619938633235982, 13.669938633235983, 13.719938633235984, 13.769938633235983, 13.819938633235983, 13.869938633235982, 13.919938633235983, 13.969938633235984, 14.019938633235983, 14.069938633235983, 14.119938633235982, 14.169938633235983, 14.219938633235984, 14.269938633235983, 14.319938633235983, 14.369938633235982, 14.419938633235983, 14.469938633235984, 14.519938633235983, 14.569938633235983, 14.619938633235982, 14.669938633235983, 14.719938633235984, 14.769938633235983, 14.819938633235983, 14.869938633235982, 14.919938633235983], "phase": [0.0982287250728689, 0.10822872507286889, 0.1182287250728689, 0.1282287250728689, 0.1382287250728689, 0.14822872507286888, 0.1582287250728689, 0.1682287250728689, 0.1782287250728689, 0.1882287250728689, 0.1982287250728689, 0.20822872507286888, 0.2182287250728689, 0.2282287250728689, 0.2382287250728689, 0.2482287250728689, 0.25822872507286887, 0.2682287250728689, 0.2782287250728689, 0.2882287250728689, 0.2982287250728689, 0.3082287250728689, 0.3182287250728689, 0.32822872507286893, 0.3382287250728689, 0.3482287250728689, 0.3582287250728689, 0.3682287250728689, 0.3782287250728689, 0.3882287250728689, 0.3982287250728689, 0.4082287250728689, 0.4182287250728689, 0.4282287250728689, 0.4382287250728689, 0.4482287250728689, 0.4582287250728689, 0.4682287250728689, 0.4782287250728689, 0.4882287250728689, 0.4982287250728689, 0.508228725072869, 0.5182287250728689, 0.5282287250728689, 0.5382287250728689, 0.5482287250728689, 0.5582287250728689, 0.5682287250728689, 0.5782287250728688, 0.5882287250728688, 0.5982287250728688, 0.6082287250728688, 0.6182287250728689, 0.6282287250728689, 0.6382287250728689, 0.6482287250728689]}, {"amplitude": [12.19203548709369, 12.242035487093691, 12.292035487093692, 12.342035487093693, 12.39203548709369, 12.44203548709369, 12.492035487093691, 12.542035487093692, 12.592035487093693, 12.64203548709369, 12.69203548709369, 12.742035487093691, 12.792035487093692, 12.842035487093693, 12.89203548709369, 12.94203548709369, 12.992035487093691, 13.042035487093692, 13.092035487093693, 13.14203548709369, 13.19203548709369, 13.242035487093691, 13.292035487093692, 13.342035487093693, 13.39203548709369, 13.44203548709369, 13.492035487093691, 13.542035487093692, 13.592035487093693, 13.64203548709369, 13.69203548709369, 13.742035487093691, 13.792035487093692, 13.842035487093693, 13.89203548709369, 13.94203548709369, 13.992035487093691, 14.042035487093692, 14.092035487093693, 14.14203548709369, 14.19203548709369, 14.242035487093691, 14.292035487093692, 14.342035487093693, 14.39203548709369, 14.44203548709369, 14.492035487093691, 14.542035487093692, 14.592035487093693, 14.64203548709369, 14.69203548709369, 14.742035487093691, 14.792035487093692, 14.842035487093693, 14.89203548709369, 14.94203548709369], "phase": [0.09602936856769433, 0.10602936856769432, 0.11602936856769433, 0.1260293685676943, 0.13602936856769432, 0.14602936856769433, 0.15602936856769434, 0.16602936856769435, 0.17602936856769433, 0.1860293685676943, 0.19602936856769432, 0.20602936856769433, 0.21602936856769434, 0.22602936856769434, 0.23602936856769435, 0.2460293685676943, 0.2560293685676943, 0.2660293685676943, 0.27602936856769433, 0.28602936856769434, 0.29602936856769435, 0.3060293685676943, 0.3160293685676943, 0.3260293685676943, 0.33602936856769433, 0.34602936856769434, 0.35602936856769435, 0.36602936856769436, 0.37602936856769437, 0.3860293685676943, 0.39602936856769433, 0.40602936856769434, 0.41602936856769435, 0.42602936856769436, 0.43602936856769436, 0.4460293685676944, 0.4560293685676943, 0.46602936856769434, 0.47602936856769434, 0.48602936856769435, 0.49602936856769436, 0.5060293685676943, 0.5160293685676943, 0.5260293685676943, 0.5360293685676943, 0.5460293685676944, 0.5560293685676944, 0.5660293685676944, 0.5760293685676943, 0.5860293685676943, 0.5960293685676943, 0.6060293685676943, 0.6160293685676943, 0.6260293685676943, 0.6360293685676943, 0.6460293685676943]}, {"amplitude": [12.158960990304985, 12.208960990304986, 12.258960990304985, 12.308960990304985, 12.358960990304984, 12.408960990304985, 12.458960990304986, 12.508960990304985, 12.558960990304985, 12.608960990304984, 12.658960990304985, 12.708960990304986, 12.758960990304985, 12.808960990304985, 12.858960990304984, 12.908960990304985, 12.958960990304986, 13.008960990304985, 13.058960990304985, 13.108960990304984, 13.158960990304985, 13.208960990304986, 13.258960990304985, 13.308960990304985, 13.358960990304984, 13.408960990304985, 13.458960990304986, 13.508960990304985, 13.558960990304985, 13.608960990304984, 13.658960990304985, 13.708960990304986, 13.758960990304985, 13.808960990304985, 13.858960990304984, 13.908960990304985, 13.958960990304986, 14.008960990304985, 14.058960990304985, 14.108960990304984, 14.158960990304985, 14.208960990304986, 14.258960990304985, 14.308960990304985, 14.358960990304984, 14.408960990304985, 14.458960990304986, 14.508960990304985, 14.558960990304985, 14.608960990304984, 14.658960990304985, 14.708960990304986, 14.758960990304985, 14.808960990304985, 14.858960990304984, 14.908960990304985], "phase": [0.09297764858882518, 0.10297764858882517, 0.11297764858882518, 0.12297764858882518, 0.1329776485888252, 0.14297764858882517, 0.15297764858882518, 0.16297764858882519, 0.1729776485888252, 0.18297764858882518, 0.19297764858882518, 0.20297764858882517, 0.21297764858882517, 0.22297764858882518, 0.2329776485888252, 0.24297764858882517, 0.2529776485888252, 0.2629776485888252, 0.2729776485888252, 0.2829776485888252, 0.2929776485888252, 0.30297764858882514, 0.31297764858882515, 0.32297764858882516, 0.33297764858882517, 0.3429776485888252, 0.3529776485888252, 0.3629776485888252, 0.3729776485888252, 0.38297764858882516, 0.39297764858882517, 0.4029776485888252, 0.4129776485888252, 0.4229776485888252, 0.4329776485888252, 0.4429776485888252, 0.45297764858882517, 0.4629776485888252, 0.4729776485888252, 0.4829776485888252, 0.4929776485888252, 0.5029776485888252, 0.5129776485888251, 0.5229776485888251, 0.5329776485888251, 0.5429776485888251, 0.5529776485888251, 0.5629776485888252, 0.5729776485888252, 0.5829776485888252, 0.5929776485888252, 0.6029776485888252, 0.6129776485888252, 0.6229776485888252, 0.6329776485888252, 0.6429776485888252]}, {"amplitude": [12.067330003265281, 12.117330003265282, 12.167330003265281, 12.217330003265282, 12.26733000326528, 12.317330003265281, 12.367330003265282, 12.417330003265281, 12.467330003265282, 12.51733000326528, 12.567330003265281, 12.617330003265282, 12.667330003265281, 12.717330003265282, 12.76733000326528, 12.817330003265281, 12.867330003265282, 12.917330003265281, 12.967330003265282, 13.01733000326528, 13.067330003265281, 13.117330003265282, 13.167330003265281, 13.217330003265282, 13.26733000326528, 13.317330003265281, 13.367330003265282, 13.417330003265281, 13.467330003265282, 13.51733000326528, 13.567330003265281, 13.617330003265282, 13.667330003265281, 13.717330003265282, 13.76733000326528, 13.817330003265281, 13.867330003265282, 13.917330003265281, 13.967330003265282, 14.01733000326528, 14.067330003265281, 14.117330003265282, 14.167330003265281, 14.217330003265282, 14.26733000326528, 14.317330003265281, 14.367330003265282, 14.417330003265281, 14.467330003265282, 14.51733000326528, 14.567330003265281, 14.617330003265282, 14.667330003265281, 14.717330003265282, 14.76733000326528, 14.817330003265281], "phase": [0.08910065241883677, 0.09910065241883677, 0.10910065241883678, 0.11910065241883677, 0.12910065241883678, 0.1391006524188368, 0.14910065241883677, 0.15910065241883678, 0.16910065241883676, 0.17910065241883677, 0.18910065241883678, 0.1991006524188368, 0.20910065241883677, 0.21910065241883678, 0.2291006524188368, 0.23910065241883677, 0.24910065241883678, 0.2591006524188368, 0.26910065241883674, 0.27910065241883675, 0.28910065241883676, 0.29910065241883677, 0.3091006524188368, 0.3191006524188368, 0.3291006524188368, 0.3391006524188368, 0.3491006524188368, 0.3591006524188368, 0.3691006524188368, 0.3791006524188367, 0.38910065241883673, 0.39910065241883674, 0.40910065241883675, 0.41910065241883676, 0.42910065241883677, 0.4391006524188368, 0.4491006524188368, 0.4591006524188368, 0.4691006524188368, 0.4791006524188368, 0.4891006524188368, 0.49910065241883683, 0.5091006524188367, 0.5191006524188367, 0.5291006524188367, 0.5391006524188368, 0.5491006524188368, 0.5591006524188368, 0.5691006524188368, 0.5791006524188368, 0.5891006524188368, 0.5991006524188368, 0.6091006524188368, 0.6191006524188368, 0.6291006524188368, 0.6391006524188368]}, {"amplitude": [11.919809823836767, 11.969809823836767, 12.019809823836766, 12.069809823836767, 12.119809823836766, 12.169809823836767, 12.219809823836767, 12.269809823836766, 12.319809823836767, 12.369809823836766, 12.419809823836767, 12.469809823836767, 12.519809823836766, 12.569809823836767, 12.619809823836766, 12.669809823836767, 12.719809823836767, 12.769809823836766, 12.819809823836767, 12.869809823836766, 12.919809823836767, 12.969809823836767, 13.019809823836766, 13.069809823836767, 13.119809823836766, 13.169809823836767, 13.219809823836767, 13.269809823836766, 13.319809823836767, 13.369809823836766, 13.419809823836767, 13.469809823836767, 13.519809823836766, 13.569809823836767, 13.619809823836766, 13.669809823836767, 13.719809823836767, 13.769809823836766, 13.819809823836767, 13.869809823836766, 13.919809823836767, 13.969809823836767, 14.019809823836766, 14.069809823836767, 14.119809823836766, 14.169809823836767, 14.219809823836767, 14.269809823836766, 14.319809823836767, 14.369809823836766, 14.419809823836767, 14.469809823836767, 14.519809823836766, 14.569809823836767, 14.619809823836766, 14.669809823836767], "phase": [0.08443279255020153, 0.09443279255020152, 0.10443279255020153, 0.11443279255020153, 0.12443279255020154, 0.13443279255020152, 0.14443279255020153, 0.15443279255020154, 0.16443279255020155, 0.17443279255020153, 0.18443279255020154, 0.19443279255020152, 0.20443279255020153, 0.21443279255020153, 0.22443279255020154, 0.23443279255020152, 0.24443279255020153, 0.25443279255020157, 0.2644327925502015, 0.27443279255020153, 0.28443279255020154, 0.2944327925502015, 0.3044327925502015, 0.3144327925502015, 0.3244327925502015, 0.33443279255020153, 0.34443279255020154, 0.35443279255020155, 0.36443279255020156, 0.3744327925502015, 0.3844327925502015, 0.3944327925502015, 0.40443279255020154, 0.41443279255020155, 0.42443279255020155, 0.43443279255020156, 0.4444327925502015, 0.4544327925502015, 0.46443279255020153, 0.47443279255020154, 0.48443279255020155, 0.49443279255020156, 0.5044327925502015, 0.5144327925502015, 0.5244327925502015, 0.5344327925502015, 0.5444327925502015, 0.5544327925502015, 0.5644327925502015, 0.5744327925502015, 0.5844327925502015, 0.5944327925502015, 0.6044327925502015, 0.6144327925502016, 0.6244327925502016, 0.6344327925502016]}, {"amplitude": [11.724836126981897, 11.774836126981898, 11.824836126981896, 11.874836126981897, 11.924836126981896, 11.974836126981897, 12.024836126981898, 12.074836126981896, 12.124836126981897, 12.174836126981896, 12.224836126981897, 12.274836126981898, 12.324836126981896, 12.374836126981897, 12.424836126981896, 12.474836126981897, 12.524836126981898, 12.574836126981896, 12.624836126981897, 12.674836126981896, 12.724836126981897, 12.774836126981898, 12.824836126981896, 12.874836126981897, 12.924836126981896, 12.974836126981897, 13.024836126981898, 13.074836126981896, 13.124836126981897, 13.174836126981896, 13.224836126981897, 13.274836126981898, 13.324836126981896, 13.374836126981897, 13.424836126981896, 13.474836126981897, 13.524836126981898, 13.574836126981896, 13.624836126981897, 13.674836126981896, 13.724836126981897, 13.774836126981898, 13.824836126981896, 13.874836126981897, 13.924836126981896, 13.974836126981897, 14.024836126981898, 14.074836126981896, 14.124836126981897, 14.174836126981896, 14.224836126981897, 14.274836126981898, 14.324836126981896, 14.374836126981897, 14.424836126981896, 14.474836126981897], "phase": [0.07901550123756909, 0.08901550123756909, 0.0990155012375691, 0.10901550123756909, 0.1190155012375691, 0.1290155012375691, 0.1390155012375691, 0.1490155012375691, 0.15901550123756908, 0.1690155012375691, 0.1790155012375691, 0.1890155012375691, 0.1990155012375691, 0.2090155012375691, 0.2190155012375691, 0.22901550123756909, 0.2390155012375691, 0.2490155012375691, 0.2590155012375691, 0.2690155012375691, 0.27901550123756913, 0.2890155012375691, 0.2990155012375691, 0.3090155012375691, 0.31901550123756905, 0.32901550123756906, 0.3390155012375691, 0.3490155012375691, 0.3590155012375691, 0.3690155012375691, 0.3790155012375691, 0.3890155012375691, 0.3990155012375691, 0.40901550123756913, 0.41901550123756914, 0.42901550123756915, 0.43901550123756905, 0.44901550123756906, 0.45901550123756907, 0.4690155012375691, 0.4790155012375691, 0.4890155012375691, 0.4990155012375691, 0.5090155012375691, 0.5190155012375691, 0.5290155012375691, 0.5390155012375691, 0.5490155012375691, 0.559015501237569, 0.569015501237569, 0.5790155012375691, 0.5890155012375691, 0.5990155012375691, 0.6090155012375691, 0.6190155012375691, 0.6290155012375691]}, {"amplitude": [11.495537224912113, 11.545537224912113, 11.595537224912112, 11.645537224912113, 11.695537224912112, 11.745537224912113, 11.795537224912113, 11.845537224912112, 11.895537224912113, 11.945537224912112, 11.995537224912113, 12.045537224912113, 12.095537224912112, 12.145537224912113, 12.195537224912112, 12.245537224912113, 12.295537224912113, 12.345537224912112, 12.395537224912113, 12.445537224912112, 12.495537224912113, 12.545537224912113, 12.595537224912112, 12.645537224912113, 12.695537224912112, 12.745537224912113, 12.795537224912113, 12.845537224912112, 12.895537224912113, 12.945537224912112, 12.995537224912113, 13.045537224912113, 13.095537224912112, 13.145537224912113, 13.195537224912112, 13.245537224912113, 13.295537224912113, 13.345537224912112, 13.395537224912113, 13.445537224912112, 13.495537224912113, 13.545537224912113, 13.595537224912112, 13.645537224912113, 13.695537224912112, 13.745537224912113, 13.795537224912113, 13.845537224912112, 13.895537224912113, 13.945537224912112, 13.995537224912113, 14.045537224912113, 14.095537224912112, 14.145537224912113, 14.195537224912112, 14.245537224912113], "phase": [0.07289686274214112, 0.08289686274214111, 0.09289686274214112, 0.10289686274214112, 0.11289686274214111, 0.12289686274214112, 0.13289686274214113, 0.14289686274214114, 0.15289686274214112, 0.1628968627421411, 0.1728968627421411, 0.18289686274214112, 0.19289686274214113, 0.20289686274214114, 0.21289686274214115, 0.2228968627421411, 0.2328968627421411, 0.24289686274214112, 0.2528968627421411, 0.26289686274214114, 0.27289686274214114, 0.2828968627421411, 0.2928968627421411, 0.3028968627421411, 0.3128968627421411, 0.32289686274214113, 0.33289686274214114, 0.34289686274214115, 0.35289686274214116, 0.3628968627421411, 0.3728968627421411, 0.38289686274214113, 0.39289686274214114, 0.40289686274214115, 0.41289686274214116, 0.42289686274214117, 0.4328968627421411, 0.44289686274214113, 0.45289686274214114, 0.46289686274214115, 0.47289686274214116, 0.48289686274214116, 0.4928968627421411, 0.5028968627421411, 0.5128968627421411, 0.5228968627421411, 0.5328968627421411, 0.5428968627421411, 0.5528968627421411, 0.5628968627421411, 0.5728968627421411, 0.5828968627421411, 0.5928968627421412, 0.6028968627421412, 0.6128968627421412, 0.6228968627421412]}, {"amplitude": [11.248016764497848, 11.298016764497849, 11.348016764497848, 11.398016764497848, 11.448016764497847, 11.498016764497848, 11.548016764497849, 11.598016764497848, 11.648016764497848, 11.698016764497847, 11.748016764497848, 11.798016764497849, 11.848016764497848, 11.898016764497848, 11.948016764497847, 11.998016764497848, 12.048016764497849, 12.098016764497848, 12.148016764497848, 12.198016764497847, 12.248016764497848, 12.298016764497849, 12.348016764497848, 12.398016764497848, 12.448016764497847, 12.498016764497848, 12.548016764497849, 12.598016764497848, 12.648016764497848, 12.698016764497847, 12.748016764497848, 12.798016764497849, 12.848016764497848, 12.898016764497848, 12.948016764497847, 12.998016764497848, 13.048016764497849, 13.098016764497848, 13.148016764497848, 13.198016764497847, 13.248016764497848, 13.298016764497849, 13.348016764497848, 13.398016764497848, 13.448016764497847, 13.498016764497848, 13.548016764497849, 13.598016764497848, 13.648016764497848, 13.698016764497847, 13.748016764497848, 13.798016764497849, 13.848016764497848, 13.898016764497848, 13.948016764497847, 13.998016764497848], "phase": [0.0661311865323652, 0.0761311865323652, 0.0861311865323652, 0.0961311865323652, 0.1061311865323652, 0.1161311865323652, 0.1261311865323652, 0.13613118653236522, 0.1461311865323652, 0.15613118653236518, 0.1661311865323652, 0.1761311865323652, 0.1861311865323652, 0.19613118653236522, 0.20613118653236523, 0.21613118653236518, 0.2261311865323652, 0.2361311865323652, 0.2461311865323652, 0.2561311865323652, 0.2661311865323652, 0.2761311865323652, 0.2861311865323652, 0.2961311865323652, 0.3061311865323652, 0.3161311865323652, 0.3261311865323652, 0.33613118653236523, 0.34613118653236524, 0.3561311865323652, 0.3661311865323652, 0.3761311865323652, 0.3861311865323652, 0.39613118653236523, 0.40613118653236524, 0.41613118653236525, 0.4261311865323652, 0.4361311865323652, 0.4461311865323652, 0.45613118653236523, 0.46613118653236524, 0.47613118653236525, 0.4861311865323652, 0.4961311865323652, 0.5061311865323652, 0.5161311865323652, 0.5261311865323652, 0.5361311865323652, 0.5461311865323651, 0.5561311865323652, 0.5661311865323652, 0.5761311865323652, 0.5861311865323652, 0.5961311865323652, 0.6061311865323652, 0.6161311865323652]}, {"amplitude": [10.999234928897206, 11.049234928897206, 11.099234928897205, 11.149234928897206, 11.199234928897205, 11.249234928897206, 11.299234928897206, 11.349234928897205, 11.399234928897206, 11.449234928897205, 11.499234928897206, 11.549234928897206, 11.599234928897205, 11.649234928897206, 11.699234928897205, 11.749234928897206, 11.799234928897206, 11.849234928897205, 11.899234928897206, 11.949234928897205, 11.999234928897206, 12.049234928897206, 12.099234928897205, 12.149234928897206, 12.199234928897205, 12.249234928897206, 12.299234928897206, 12.349234928897205, 12.399234928897206, 12.449234928897205, 12.499234928897206, 12.549234928897206, 12.599234928897205, 12.649234928897206, 12.699234928897205, 12.749234928897206, 12.799234928897206, 12.849234928897205, 12.899234928897206, 12.949234928897205, 12.999234928897206, 13.049234928897206, 13.099234928897205, 13.149234928897206, 13.199234928897205, 13.249234928897206, 13.299234928897206, 13.349234928897205, 13.399234928897206, 13.449234928897205, 13.499234928897206, 13.549234928897206, 13.599234928897205, 13.649234928897206, 13.699234928897205, 13.749234928897206], "phase": [0.05877852522924736, 0.06877852522924736, 0.07877852522924736, 0.08877852522924737, 0.09877852522924736, 0.10877852522924736, 0.11877852522924737, 0.12877852522924738, 0.13877852522924736, 0.14877852522924737, 0.15877852522924737, 0.16877852522924736, 0.17877852522924736, 0.18877852522924737, 0.19877852522924738, 0.20877852522924736, 0.21877852522924737, 0.22877852522924738, 0.23877852522924736, 0.24877852522924737, 0.2587785252292474, 0.26877852522924733, 0.27877852522924734, 0.28877852522924735, 0.29877852522924736, 0.30877852522924737, 0.3187785252292474, 0.3287785252292474, 0.3387785252292474, 0.34877852522924735, 0.35877852522924736, 0.36877852522924737, 0.3787785252292474, 0.3887785252292474, 0.3987785252292474, 0.4087785252292474, 0.41877852522924736, 0.42877852522924736, 0.4387785252292474, 0.4487785252292474, 0.4587785252292474, 0.4687785252292474, 0.47877852522924735, 0.48877852522924736, 0.49877852522924737, 0.5087785252292474, 0.5187785252292474, 0.5287785252292474, 0.5387785252292473, 0.5487785252292473, 0.5587785252292473, 0.5687785252292473, 0.5787785252292473, 0.5887785252292473, 0.5987785252292473, 0.6087785252292474]}, {"amplitude": [10.764784453850137, 10.814784453850137, 10.864784453850136, 10.914784453850137, 10.964784453850136, 11.014784453850137, 11.064784453850137, 11.114784453850136, 11.164784453850137, 11.214784453850136, 11.264784453850137, 11.314784453850137, 11.364784453850136, 11.414784453850137, 11.464784453850136, 11.514784453850137, 11.564784453850137, 11.614784453850136, 11.664784453850137, 11.714784453850136, 11.764784453850137, 11.814784453850137, 11.864784453850136, 11.914784453850137, 11.964784453850136, 12.014784453850137, 12.064784453850137, 12.114784453850136, 12.164784453850137, 12.214784453850136, 12.264784453850137, 12.314784453850137, 12.364784453850136, 12.414784453850137, 12.464784453850136, 12.514784453850137, 12.564784453850137, 12.614784453850136, 12.664784453850137, 12.714784453850136, 12.764784453850137, 12.814784453850137, 12.864784453850136, 12.914784453850137, 12.964784453850136, 13.014784453850137, 13.064784453850137, 13.114784453850136, 13.164784453850137, 13.214784453850136, 13.264784453850137, 13.314784453850137, 13.364784453850136, 13.414784453850137, 13.464784453850136, 13.514784453850137], "phase": [0.05090414157503708, 0.06090414157503708, 0.07090414157503708, 0.08090414157503709, 0.09090414157503708, 0.10090414157503708, 0.11090414157503709, 0.1209041415750371, 0.13090414157503708, 0.14090414157503708, 0.1509041415750371, 0.16090414157503707, 0.17090414157503708, 0.1809041415750371, 0.1909041415750371, 0.20090414157503708, 0.2109041415750371, 0.2209041415750371, 0.23090414157503708, 0.2409041415750371, 0.2509041415750371, 0.26090414157503705, 0.27090414157503706, 0.28090414157503707, 0.2909041415750371, 0.3009041415750371, 0.3109041415750371, 0.3209041415750371, 0.3309041415750371, 0.34090414157503707, 0.3509041415750371, 0.3609041415750371, 0.3709041415750371, 0.3809041415750371, 0.3909041415750371, 0.4009041415750371, 0.4109041415750371, 0.4209041415750371, 0.4309041415750371, 0.4409041415750371, 0.4509041415750371, 0.4609041415750371, 0.47090414157503707, 0.4809041415750371, 0.4909041415750371, 0.500904141575037, 0.510904141575037, 0.5209041415750371, 0.5309041415750371, 0.5409041415750371, 0.5509041415750371, 0.5609041415750371, 0.5709041415750371, 0.5809041415750371, 0.5909041415750371, 0.6009041415750371]}, {"amplitude": [10.556872407911541, 10.606872407911542, 10.656872407911541, 10.706872407911542, 10.75687240791154, 10.806872407911541, 10.856872407911542, 10.906872407911541, 10.956872407911542, 11.00687240791154, 11.056872407911541, 11.106872407911542, 11.156872407911541, 11.206872407911542, 11.25687240791154, 11.306872407911541, 11.356872407911542, 11.406872407911541, 11.456872407911542, 11.50687240791154, 11.556872407911541, 11.606872407911542, 11.656872407911541, 11.706872407911542, 11.75687240791154, 11.806872407911541, 11.856872407911542, 11.906872407911541, 11.956872407911542, 12.00687240791154, 12.056872407911541, 12.106872407911542, 12.156872407911541, 12.206872407911542, 12.25687240791154, 12.306872407911541, 12.356872407911542, 12.406872407911541, 12.456872407911542, 12.50687240791154, 12.556872407911541, 12.606872407911542, 12.656872407911541, 12.706872407911542, 12.75687240791154, 12.806872407911541, 12.856872407911542, 12.906872407911541, 12.956872407911542, 13.00687240791154, 13.056872407911541, 13.106872407911542, 13.156872407911541, 13.206872407911542, 13.25687240791154, 13.306872407911541], "phase": [0.04257792915650742, 0.05257792915650742, 0.06257792915650742, 0.07257792915650742, 0.08257792915650741, 0.09257792915650742, 0.10257792915650742, 0.11257792915650743, 0.12257792915650742, 0.1325779291565074, 0.1425779291565074, 0.15257792915650742, 0.16257792915650743, 0.17257792915650744, 0.18257792915650745, 0.1925779291565074, 0.2025779291565074, 0.21257792915650742, 0.22257792915650743, 0.23257792915650743, 0.24257792915650744, 0.2525779291565074, 0.2625779291565074, 0.2725779291565074, 0.2825779291565074, 0.29257792915650743, 0.30257792915650744, 0.31257792915650745, 0.32257792915650746, 0.3325779291565074, 0.3425779291565074, 0.35257792915650743, 0.36257792915650744, 0.37257792915650745, 0.38257792915650746, 0.39257792915650747, 0.4025779291565074, 0.41257792915650743, 0.42257792915650744, 0.43257792915650745, 0.44257792915650745, 0.45257792915650746, 0.4625779291565074, 0.4725779291565074, 0.48257792915650743, 0.49257792915650744, 0.5025779291565075, 0.5125779291565075, 0.5225779291565074, 0.5325779291565074, 0.5425779291565074, 0.5525779291565074, 0.5625779291565074, 0.5725779291565074, 0.5825779291565074, 0.5925779291565074]}, {"amplitude": [10.382789665271977, 10.432789665271978, 10.482789665271977, 10.532789665271977, 10.582789665271976, 10.632789665271977, 10.682789665271978, 10.732789665271977, 10.782789665271977, 10.832789665271976, 10.882789665271977, 10.932789665271978, 10.982789665271977, 11.032789665271977, 11.082789665271976, 11.132789665271977, 11.182789665271978, 11.232789665271977, 11.282789665271977, 11.332789665271976, 11.382789665271977, 11.432789665271978, 11.482789665271977, 11.532789665271977, 11.582789665271976, 11.632789665271977, 11.682789665271978, 11.732789665271977, 11.782789665271977, 11.832789665271976, 11.882789665271977, 11.932789665271978, 11.982789665271977, 12.032789665271977, 12.082789665271976, 12.132789665271977, 12.182789665271978, 12.232789665271977, 12.282789665271977, 12.332789665271976, 12.382789665271977, 12.432789665271978, 12.482789665271977, 12.532789665271977, 12.582789665271976, 12.632789665271977, 12.682789665271978, 12.732789665271977, 12.782789665271977, 12.832789665271976, 12.882789665271977, 12.932789665271978, 12.982789665271977, 13.032789665271977, 13.082789665271976, 13.132789665271977], "phase": [0.03387379202452918, 0.04387379202452918, 0.053873792024529174, 0.06387379202452917, 0.07387379202452918, 0.08387379202452919, 0.09387379202452917, 0.10387379202452918, 0.11387379202452919, 0.12387379202452917, 0.13387379202452918, 0.14387379202452918, 0.15387379202452917, 0.16387379202452917, 0.17387379202452918, 0.18387379202452916, 0.19387379202452917, 0.20387379202452918, 0.21387379202452916, 0.22387379202452917, 0.23387379202452918, 0.24387379202452916, 0.2538737920245292, 0.2638737920245292, 0.27387379202452916, 0.28387379202452917, 0.2938737920245292, 0.3038737920245292, 0.3138737920245292, 0.32387379202452915, 0.33387379202452916, 0.34387379202452917, 0.3538737920245292, 0.3638737920245292, 0.3738737920245292, 0.3838737920245292, 0.39387379202452916, 0.40387379202452917, 0.4138737920245292, 0.4238737920245292, 0.4338737920245292, 0.4438737920245292, 0.45387379202452915, 0.46387379202452916, 0.4738737920245292, 0.4838737920245292, 0.4938737920245292, 0.5038737920245292, 0.5138737920245292, 0.5238737920245292, 0.5338737920245292, 0.5438737920245292, 0.5538737920245292, 0.5638737920245293, 0.5738737920245293, 0.5838737920245293]}, {"amplitude": [10.244081396679109, 10.29408139667911, 10.344081396679108, 10.394081396679109, 10.444081396679108, 10.494081396679109, 10.54408139667911, 10.594081396679108, 10.644081396679109, 10.694081396679108, 10.744081396679109, 10.79408139667911, 10.844081396679108, 10.894081396679109, 10.944081396679108, 10.994081396679109, 11.04408139667911, 11.094081396679108, 11.144081396679109, 11.194081396679108, 11.244081396679109, 11.29408139667911, 11.344081396679108, 11.394081396679109, 11.444081396679108, 11.494081396679109, 11.54408139667911, 11.594081396679108, 11.644081396679109, 11.694081396679108, 11.744081396679109, 11.79408139667911, 11.844081396679108, 11.894081396679109, 11.944081396679108, 11.994081396679109, 12.04408139667911, 12.094081396679108, 12.144081396679109, 12.194081396679108, 12.244081396679109, 12.29408139667911, 12.344081396679108, 12.394081396679109, 12.444081396679108, 12.494081396679109, 12.54408139667911, 12.594081396679108, 12.644081396679109, 12.694081396679108, 12.744081396679109, 12.79408139667911, 12.844081396679108, 12.894081396679109, 12.944081396679108, 12.994081396679109], "phase": [0.024868988716485744, 0.03486898871648574, 0.044868988716485744, 0.05486898871648574, 0.06486898871648575, 0.07486898871648574, 0.08486898871648574, 0.09486898871648575, 0.10486898871648574, 0.11486898871648574, 0.12486898871648575, 0.13486898871648575, 0.14486898871648574, 0.15486898871648574, 0.16486898871648575, 0.17486898871648573, 0.18486898871648574, 0.19486898871648575, 0.20486898871648573, 0.21486898871648574, 0.22486898871648575, 0.23486898871648573, 0.24486898871648574, 0.2548689887164858, 0.26486898871648573, 0.27486898871648574, 0.28486898871648575, 0.29486898871648576, 0.30486898871648577, 0.3148689887164857, 0.32486898871648573, 0.33486898871648574, 0.34486898871648575, 0.35486898871648576, 0.36486898871648576, 0.3748689887164858, 0.3848689887164857, 0.39486898871648574, 0.40486898871648574, 0.41486898871648575, 0.42486898871648576, 0.43486898871648577, 0.4448689887164857, 0.45486898871648573, 0.46486898871648574, 0.47486898871648575, 0.48486898871648576, 0.49486898871648577, 0.5048689887164858, 0.5148689887164858, 0.5248689887164858, 0.5348689887164858, 0.5448689887164858, 0.5548689887164858, 0.5648689887164858, 0.5748689887164858]}, {"amplitude": [10.136533354392721, 10.186533354392722, 10.236533354392721, 10.286533354392722, 10.33653335439272, 10.386533354392721, 10.436533354392722, 10.486533354392721, 10.536533354392722, 10.58653335439272, 10.636533354392721, 10.686533354392722, 10.736533354392721, 10.786533354392722, 10.83653335439272, 10.886533354392721, 10.936533354392722, 10.986533354392721, 11.036533354392722, 11.08653335439272, 11.136533354392721, 11.186533354392722, 11.236533354392721, 11.286533354392722, 11.33653335439272, 11.386533354392721, 11.436533354392722, 11.486533354392721, 11.536533354392722, 11.58653335439272, 11.636533354392721, 11.686533354392722, 11.736533354392721, 11.786533354392722, 11.83653335439272, 11.886533354392721, 11.936533354392722, 11.986533354392721, 12.036533354392722, 12.08653335439272, 12.136533354392721, 12.186533354392722, 12.236533354392721, 12.286533354392722, 12.33653335439272, 12.386533354392721, 12.436533354392722, 12.486533354392721, 12.536533354392722, 12.58653335439272, 12.636533354392721, 12.686533354392722, 12.736533354392721, 12.786533354392722, 12.83653335439272, 12.886533354392721], "phase": [0.015643446504023235, 0.025643446504023233, 0.035643446504023235, 0.04564344650402323, 0.05564344650402324, 0.06564344650402323, 0.07564344650402323, 0.08564344650402324, 0.09564344650402323, 0.10564344650402323, 0.11564344650402324, 0.12564344650402323, 0.13564344650402324, 0.14564344650402325, 0.15564344650402326, 0.16564344650402324, 0.17564344650402325, 0.18564344650402326, 0.19564344650402324, 0.20564344650402325, 0.21564344650402326, 0.22564344650402324, 0.23564344650402325, 0.24564344650402326, 0.2556434465040232, 0.2656434465040232, 0.2756434465040232, 0.28564344650402324, 0.29564344650402324, 0.3056434465040232, 0.3156434465040232, 0.3256434465040232, 0.3356434465040232, 0.34564344650402323, 0.35564344650402324, 0.36564344650402325, 0.3756434465040232, 0.3856434465040232, 0.3956434465040232, 0.40564344650402323, 0.41564344650402324, 0.42564344650402325, 0.4356434465040232, 0.4456434465040232, 0.4556434465040232, 0.46564344650402323, 0.47564344650402324, 0.48564344650402325, 0.4956434465040232, 0.5056434465040233, 0.5156434465040233, 0.5256434465040233, 0.5356434465040233, 0.5456434465040233, 0.5556434465040233, 0.5656434465040233]}, {"amplitude": [10.050974072909169, 10.10097407290917, 10.150974072909168, 10.200974072909169, 10.250974072909168, 10.300974072909169, 10.35097407290917, 10.400974072909168, 10.450974072909169, 10.500974072909168, 10.550974072909169, 10.60097407290917, 10.650974072909168, 10.700974072909169, 10.750974072909168, 10.800974072909169, 10.85097407290917, 10.900974072909168, 10.950974072909169, 11.000974072909168, 11.050974072909169, 11.10097407290917, 11.150974072909168, 11.200974072909169, 11.250974072909168, 11.300974072909169, 11.35097407290917, 11.400974072909168, 11.450974072909169, 11.500974072909168, 11.550974072909169, 11.60097407290917, 11.650974072909168, 11.700974072909169, 11.750974072909168, 11.800974072909169, 11.85097407290917, 11.900974072909168, 11.950974072909169, 12.000974072909168, 12.050974072909169, 12.10097407290917, 12.150974072909168, 12.200974072909169, 12.250974072909168, 12.300974072909169, 12.35097407290917, 12.400974072909168, 12.450974072909169, 12.500974072909168, 12.550974072909169, 12.60097407290917, 12.650974072909168, 12.700974072909169, 12.750974072909168, 12.800974072909169], "phase": [0.006279051952931186, 0.016279051952931188, 0.026279051952931187, 0.036279051952931185, 0.04627905195293119, 0.05627905195293119, 0.06627905195293118, 0.07627905195293119, 0.08627905195293119, 0.09627905195293118, 0.10627905195293119, 0.11627905195293119, 0.12627905195293118, 0.1362790519529312, 0.1462790519529312, 0.15627905195293118, 0.1662790519529312, 0.1762790519529312, 0.18627905195293118, 0.1962790519529312, 0.2062790519529312, 0.21627905195293118, 0.2262790519529312, 0.2362790519529312, 0.24627905195293118, 0.2562790519529312, 0.2662790519529312, 0.27627905195293123, 0.28627905195293124, 0.29627905195293114, 0.30627905195293115, 0.31627905195293116, 0.32627905195293117, 0.3362790519529312, 0.3462790519529312, 0.3562790519529312, 0.3662790519529312, 0.3762790519529312, 0.3862790519529312, 0.3962790519529312, 0.40627905195293124, 0.41627905195293124, 0.42627905195293114, 0.43627905195293115, 0.44627905195293116, 0.45627905195293117, 0.4662790519529312, 0.4762790519529312, 0.4862790519529312, 0.4962790519529312, 0.5062790519529312, 0.5162790519529312, 0.5262790519529312, 0.5362790519529312, 0.5462790519529312, 0.5562790519529313]}, {"amplitude": [9.974778451913036, 10.024778451913036, 10.074778451913035, 10.124778451913036, 10.174778451913035, 10.224778451913036, 10.274778451913036, 10.324778451913035, 10.374778451913036, 10.424778451913035, 10.474778451913036, 10.524778451913036, 10.574778451913035, 10.624778451913036, 10.674778451913035, 10.724778451913036, 10.774778451913036, 10.824778451913035, 10.874778451913036, 10.924778451913035, 10.974778451913036, 11.024778451913036, 11.074778451913035, 11.124778451913036, 11.174778451913035, 11.224778451913036, 11.274778451913036, 11.324778451913035, 11.374778451913036, 11.424778451913035, 11.474778451913036, 11.524778451913036, 11.574778451913035, 11.624778451913036, 11.674778451913035, 11.724778451913036, 11.774778451913036, 11.824778451913035, 11.874778451913036, 11.924778451913035, 11.974778451913036, 12.024778451913036, 12.074778451913035, 12.124778451913036, 12.174778451913035, 12.224778451913036, 12.274778451913036, 12.324778451913035, 12.374778451913036, 12.424778451913035, 12.474778451913036, 12.524778451913036, 12.574778451913035, 12.624778451913036, 12.674778451913035, 12.724778451913036], "phase": [-0.0031410759078127504, 0.00685892409218725, 0.016858924092187248, 0.02685892409218725, 0.03685892409218725, 0.046858924092187254, 0.05685892409218725, 0.06685892409218726, 0.07685892409218725, 0.08685892409218725, 0.09685892409218726, 0.10685892409218725, 0.11685892409218725, 0.12685892409218724, 0.13685892409218725, 0.14685892409218723, 0.15685892409218724, 0.16685892409218725, 0.17685892409218723, 0.18685892409218724, 0.19685892409218725, 0.20685892409218723, 0.21685892409218724, 0.22685892409218725, 0.23685892409218723, 0.24685892409218724, 0.25685892409218725, 0.26685892409218726, 0.27685892409218726, 0.2868589240921872, 0.2968589240921872, 0.30685892409218724, 0.31685892409218724, 0.32685892409218725, 0.33685892409218726, 0.34685892409218727, 0.3568589240921872, 0.36685892409218723, 0.37685892409218724, 0.38685892409218725, 0.39685892409218726, 0.40685892409218727, 0.4168589240921872, 0.42685892409218723, 0.43685892409218724, 0.44685892409218725, 0.45685892409218726, 0.46685892409218727, 0.4768589240921872, 0.48685892409218723, 0.49685892409218724, 0.5068589240921872, 0.5168589240921873, 0.5268589240921873, 0.5368589240921873, 0.5468589240921873]}, {"amplitude": [9.893859635101904, 9.943859635101905, 9.993859635101906, 10.043859635101906, 10.093859635101904, 10.143859635101904, 10.193859635101905, 10.243859635101906, 10.293859635101906, 10.343859635101904, 10.393859635101904, 10.443859635101905, 10.493859635101906, 10.543859635101906, 10.593859635101904, 10.643859635101904, 10.693859635101905, 10.743859635101906, 10.793859635101906, 10.843859635101904, 10.893859635101904, 10.943859635101905, 10.993859635101906, 11.043859635101906, 11.093859635101904, 11.143859635101904, 11.193859635101905, 11.243859635101906, 11.293859635101906, 11.343859635101904, 11.393859635101904, 11.443859635101905, 11.493859635101906, 11.543859635101906, 11.593859635101904, 11.643859635101904, 11.693859635101905, 11.743859635101906, 11.793859635101906, 11.843859635101904, 11.893859635101904, 11.943859635101905, 11.993859635101906, 12.043859635101906, 12.093859635101904, 12.143859635101904, 12.193859635101905, 12.243859635101906, 12.293859635101906, 12.343859635101904, 12.393859635101904, 12.443859635101905, 12.493859635101906, 12.543859635101906, 12.593859635101904, 12.643859635101904], "phase": [-0.012533323356430471, -0.0025333233564304707, 0.0074666766435695295, 0.017466676643569528, 0.02746667664356953, 0.037466676643569535, 0.04746667664356953, 0.05746667664356954, 0.06746667664356953, 0.07746667664356953, 0.08746667664356954, 0.09746667664356953, 0.10746667664356953, 0.11746667664356954, 0.12746667664356953, 0.1374666766435695, 0.14746667664356952, 0.15746667664356953, 0.1674666766435695, 0.17746667664356952, 0.18746667664356953, 0.1974666766435695, 0.20746667664356952, 0.21746667664356953, 0.2274666766435695, 0.23746667664356952, 0.24746667664356953, 0.25746667664356954, 0.26746667664356955, 0.2774666766435695, 0.2874666766435695, 0.2974666766435695, 0.3074666766435695, 0.31746667664356953, 0.32746667664356954, 0.33746667664356955, 0.3474666766435695, 0.3574666766435695, 0.3674666766435695, 0.37746667664356953, 0.38746667664356954, 0.39746667664356955, 0.4074666766435695, 0.4174666766435695, 0.4274666766435695, 0.43746667664356953, 0.44746667664356954, 0.45746667664356955, 0.4674666766435695, 0.4774666766435695, 0.4874666766435695, 0.4974666766435695, 0.5074666766435696, 0.5174666766435696, 0.5274666766435696, 0.5374666766435696]}, {"amplitude": [9.794867490039655, 9.844867490039656, 9.894867490039655, 9.944867490039655, 9.994867490039654, 10.044867490039655, 10.094867490039656, 10.144867490039655, 10.194867490039655, 10.244867490039654, 10.294867490039655, 10.344867490039656, 10.394867490039655, 10.444867490039655, 10.494867490039654, 10.544867490039655, 10.594867490039656, 10.644867490039655, 10.694867490039655, 10.744867490039654, 10.794867490039655, 10.844867490039656, 10.894867490039655, 10.944867490039655, 10.994867490039654, 11.044867490039655, 11.094867490039656, 11.144867490039655, 11.194867490039655, 11.244867490039654, 11.294867490039655, 11.344867490039656, 11.394867490039655, 11.444867490039655, 11.494867490039654, 11.544867490039655, 11.594867490039656, 11.644867490039655, 11.694867490039655, 11.744867490039654, 11.794867490039655, 11.844867490039656, 11.894867490039655, 11.944867490039655, 11.994867490039654, 12.044867490039655, 12.094867490039656, 12.144867490039655, 12.194867490039655, 12.244867490039654, 12.294867490039655, 12.344867490039656, 12.394867490039655, 12.444867490039655, 12.494867490039654, 12.544867490039655], "phase": [-0.021814324139654076, -0.011814324139654076, -0.0018143241396540756, 0.008185675860345923, 0.018185675860345925, 0.028185675860345927, 0.03818567586034592, 0.04818567586034593, 0.058185675860345926, 0.06818567586034592, 0.07818567586034593, 0.08818567586034592, 0.09818567586034592, 0.10818567586034593, 0.11818567586034594, 0.1281856758603459, 0.1381856758603459, 0.14818567586034592, 0.15818567586034593, 0.16818567586034594, 0.17818567586034595, 0.1881856758603459, 0.1981856758603459, 0.20818567586034592, 0.21818567586034593, 0.22818567586034594, 0.23818567586034595, 0.24818567586034596, 0.25818567586034596, 0.2681856758603459, 0.2781856758603459, 0.28818567586034594, 0.29818567586034594, 0.30818567586034595, 0.31818567586034596, 0.32818567586034597, 0.3381856758603459, 0.34818567586034593, 0.35818567586034594, 0.36818567586034595, 0.37818567586034596, 0.38818567586034597, 0.3981856758603459, 0.40818567586034593, 0.41818567586034594, 0.42818567586034595, 0.43818567586034596, 0.44818567586034597, 0.4581856758603459, 0.46818567586034593, 0.47818567586034594, 0.48818567586034595, 0.49818567586034596, 0.5081856758603459, 0.5181856758603459, 0.5281856758603459]}, {"amplitude": [9.667282966138655, 9.717282966138656, 9.767282966138655, 9.817282966138656, 9.867282966138655, 9.917282966138655, 9.967282966138656, 10.017282966138655, 10.067282966138656, 10.117282966138655, 10.167282966138655, 10.217282966138656, 10.267282966138655, 10.317282966138656, 10.367282966138655, 10.417282966138655, 10.467282966138656, 10.517282966138655, 10.567282966138656, 10.617282966138655, 10.667282966138655, 10.717282966138656, 10.767282966138655, 10.817282966138656, 10.867282966138655, 10.917282966138655, 10.967282966138656, 11.017282966138655, 11.067282966138656, 11.117282966138655, 11.167282966138655, 11.217282966138656, 11.267282966138655, 11.317282966138656, 11.367282966138655, 11.417282966138655, 11.467282966138656, 11.517282966138655, 11.567282966138656, 11.617282966138655, 11.667282966138655, 11.717282966138656, 11.767282966138655, 11.817282966138656, 11.867282966138655, 11.917282966138655, 11.967282966138656, 12.017282966138655, 12.067282966138656, 12.117282966138655, 12.167282966138655, 12.217282966138656, 12.267282966138655, 12.317282966138656, 12.367282966138655, 12.417282966138655], "phase": [-0.030901699437494514, -0.020901699437494516, -0.010901699437494514, -0.0009016994374945152, 0.009098300562505487, 0.01909830056250549, 0.029098300562505484, 0.03909830056250549, 0.049098300562505484, 0.05909830056250548, 0.06909830056250549, 0.07909830056250548, 0.08909830056250548, 0.09909830056250549, 0.1090983005625055, 0.11909830056250548, 0.12909830056250549, 0.1390983005625055, 0.14909830056250548, 0.15909830056250548, 0.1690983005625055, 0.17909830056250547, 0.18909830056250548, 0.1990983005625055, 0.20909830056250547, 0.21909830056250548, 0.2290983005625055, 0.2390983005625055, 0.2490983005625055, 0.2590983005625055, 0.2690983005625055, 0.2790983005625055, 0.2890983005625055, 0.2990983005625055, 0.30909830056250553, 0.31909830056250554, 0.3290983005625055, 0.3390983005625055, 0.3490983005625055, 0.3590983005625055, 0.36909830056250553, 0.37909830056250554, 0.3890983005625055, 0.3990983005625055, 0.4090983005625055, 0.4190983005625055, 0.42909830056250553, 0.43909830056250554, 0.4490983005625055, 0.4590983005625055, 0.4690983005625055, 0.4790983005625055, 0.48909830056250553, 0.49909830056250554, 0.5090983005625055, 0.5190983005625055]}, {"amplitude": [9.505112237258915, 9.555112237258916, 9.605112237258915, 9.655112237258916, 9.705112237258914, 9.755112237258915, 9.805112237258916, 9.855112237258915, 9.905112237258916, 9.955112237258914, 10.005112237258915, 10.055112237258916, 10.105112237258915, 10.155112237258916, 10.205112237258914, 10.255112237258915, 10.305112237258916, 10.355112237258915, 10.405112237258916, 10.455112237258914, 10.505112237258915, 10.555112237258916, 10.605112237258915, 10.655112237258916, 10.705112237258914, 10.755112237258915, 10.805112237258916, 10.855112237258915, 10.905112237258916, 10.955112237258914, 11.005112237258915, 11.055112237258916, 11.105112237258915, 11.155112237258916, 11.205112237258914, 11.255112237258915, 11.305112237258916, 11.355112237258915, 11.405112237258916, 11.455112237258914, 11.505112237258915, 11.555112237258916, 11.605112237258915, 11.655112237258916, 11.705112237258914, 11.755112237258915, 11.805112237258916, 11.855112237258915, 11.905112237258916, 11.955112237258914, 12.005112237258915, 12.055112237258916, 12.105112237258915, 12.155112237258916, 12.205112237258914, 12.255112237258915], "phase": [-0.03971478906347828, -0.029714789063478277, -0.019714789063478278, -0.00971478906347828, 0.0002852109365217223, 0.010285210936521724, 0.02028521093652172, 0.030285210936521728, 0.04028521093652172, 0.05028521093652172, 0.06028521093652173, 0.07028521093652172, 0.08028521093652172, 0.09028521093652173, 0.10028521093652173, 0.11028521093652172, 0.12028521093652172, 0.13028521093652173, 0.14028521093652171, 0.15028521093652172, 0.16028521093652173, 0.1702852109365217, 0.18028521093652172, 0.19028521093652173, 0.2002852109365217, 0.21028521093652172, 0.22028521093652173, 0.23028521093652174, 0.24028521093652175, 0.2502852109365217, 0.2602852109365217, 0.2702852109365217, 0.2802852109365217, 0.2902852109365217, 0.3002852109365217, 0.3102852109365217, 0.32028521093652174, 0.33028521093652174, 0.34028521093652175, 0.35028521093652176, 0.36028521093652177, 0.3702852109365218, 0.3802852109365217, 0.3902852109365217, 0.4002852109365217, 0.4102852109365217, 0.4202852109365217, 0.4302852109365217, 0.44028521093652173, 0.45028521093652174, 0.46028521093652175, 0.47028521093652176, 0.48028521093652177, 0.4902852109365218, 0.5002852109365218, 0.5102852109365218]}, {"amplitude": [9.307940767536376, 9.357940767536377, 9.407940767536376, 9.457940767536376, 9.507940767536375, 9.557940767536376, 9.607940767536377, 9.657940767536376, 9.707940767536376, 9.757940767536375, 9.807940767536376, 9.857940767536377, 9.907940767536376, 9.957940767536376, 10.007940767536375, 10.057940767536376, 10.107940767536377, 10.157940767536376, 10.207940767536376, 10.257940767536375, 10.307940767536376, 10.357940767536377, 10.407940767536376, 10.457940767536376, 10.507940767536375, 10.557940767536376, 10.607940767536377, 10.657940767536376, 10.707940767536376, 10.757940767536375, 10.807940767536376, 10.857940767536377, 10.907940767536376, 10.957940767536376, 11.007940767536375, 11.057940767536376, 11.107940767536377, 11.157940767536376, 11.207940767536376, 11.257940767536375, 11.307940767536376, 11.357940767536377, 11.407940767536376, 11.457940767536376, 11.507940767536375, 11.557940767536376, 11.607940767536377, 11.657940767536376, 11.707940767536376, 11.757940767536375, 11.807940767536376, 11.857940767536377, 11.907940767536376, 11.957940767536376, 12.007940767536375, 12.057940767536376], "phase": [-0.04817536741017153, -0.03817536741017153, -0.028175367410171532, -0.018175367410171533, -0.008175367410171532, 0.0018246325898284704, 0.011824632589828465, 0.021824632589828474, 0.03182463258982847, 0.041824632589828464, 0.05182463258982847, 0.06182463258982847, 0.07182463258982846, 0.08182463258982847, 0.09182463258982848, 0.10182463258982846, 0.11182463258982847, 0.12182463258982848, 0.13182463258982846, 0.14182463258982847, 0.15182463258982848, 0.16182463258982846, 0.17182463258982847, 0.18182463258982848, 0.19182463258982846, 0.20182463258982847, 0.21182463258982848, 0.22182463258982849, 0.2318246325898285, 0.24182463258982845, 0.25182463258982846, 0.26182463258982847, 0.2718246325898285, 0.2818246325898285, 0.2918246325898285, 0.3018246325898285, 0.31182463258982845, 0.32182463258982846, 0.33182463258982847, 0.3418246325898285, 0.3518246325898285, 0.3618246325898285, 0.37182463258982845, 0.38182463258982846, 0.39182463258982847, 0.4018246325898285, 0.4118246325898285, 0.4218246325898285, 0.43182463258982845, 0.44182463258982846, 0.45182463258982847, 0.4618246325898285, 0.4718246325898285, 0.4818246325898285, 0.4918246325898285, 0.5018246325898286]}, {"amplitude": [9.081197376074343, 9.131197376074343, 9.18119737607434, 9.231197376074341, 9.281197376074342, 9.331197376074343, 9.381197376074343, 9.43119737607434, 9.481197376074341, 9.531197376074342, 9.581197376074343, 9.631197376074343, 9.68119737607434, 9.731197376074341, 9.781197376074342, 9.831197376074343, 9.881197376074343, 9.93119737607434, 9.981197376074341, 10.031197376074342, 10.081197376074343, 10.131197376074343, 10.18119737607434, 10.231197376074341, 10.281197376074342, 10.331197376074343, 10.381197376074343, 10.43119737607434, 10.481197376074341, 10.531197376074342, 10.581197376074343, 10.631197376074343, 10.68119737607434, 10.731197376074341, 10.781197376074342, 10.831197376074343, 10.881197376074343, 10.93119737607434, 10.981197376074341, 11.031197376074342, 11.081197376074343, 11.131197376074343, 11.18119737607434, 11.231197376074341, 11.281197376074342, 11.331197376074343, 11.381197376074343, 11.43119737607434, 11.481197376074341, 11.531197376074342, 11.581197376074343, 11.631197376074343, 11.68119737607434, 11.731197376074341, 11.781197376074342, 11.831197376074343], "phase": [-0.05620833778521317, -0.04620833778521317, -0.036208337785213165, -0.02620833778521317, -0.01620833778521317, -0.006208337785213167, 0.0037916622147868284, 0.013791662214786837, 0.023791662214786832, 0.03379166221478683, 0.043791662214786836, 0.05379166221478683, 0.06379166221478683, 0.07379166221478684, 0.08379166221478684, 0.09379166221478683, 0.10379166221478683, 0.11379166221478684, 0.12379166221478682, 0.13379166221478683, 0.14379166221478684, 0.15379166221478682, 0.16379166221478683, 0.17379166221478684, 0.18379166221478682, 0.19379166221478683, 0.20379166221478684, 0.21379166221478685, 0.22379166221478686, 0.2337916622147868, 0.24379166221478682, 0.25379166221478683, 0.26379166221478684, 0.27379166221478685, 0.28379166221478686, 0.29379166221478686, 0.3037916622147868, 0.3137916622147868, 0.32379166221478684, 0.33379166221478684, 0.34379166221478685, 0.35379166221478686, 0.3637916622147868, 0.3737916622147868, 0.38379166221478683, 0.39379166221478684, 0.40379166221478685, 0.41379166221478686, 0.4237916622147868, 0.4337916622147868, 0.44379166221478683, 0.45379166221478684, 0.46379166221478685, 0.47379166221478686, 0.48379166221478687, 0.4937916622147869]}, {"amplitude": [8.835589386308026, 8.885589386308027, 8.935589386308026, 8.985589386308027, 9.035589386308025, 9.085589386308026, 9.135589386308027, 9.185589386308026, 9.235589386308027, 9.285589386308025, 9.335589386308026, 9.385589386308027, 9.435589386308026, 9.485589386308027, 9.535589386308025, 9.585589386308026, 9.635589386308027, 9.685589386308026, 9.735589386308027, 9.785589386308025, 9.835589386308026, 9.885589386308027, 9.935589386308026, 9.985589386308027, 10.035589386308025, 10.085589386308026, 10.135589386308027, 10.185589386308026, 10.235589386308027, 10.285589386308025, 10.335589386308026, 10.385589386308027, 10.435589386308026, 10.485589386308027, 10.535589386308025, 10.585589386308026, 10.635589386308027, 10.685589386308026, 10.735589386308027, 10.785589386308025, 10.835589386308026, 10.885589386308027, 10.935589386308026, 10.985589386308027, 11.035589386308025, 11.085589386308026, 11.135589386308027, 11.185589386308026, 11.235589386308027, 11.285589386308025, 11.335589386308026, 11.385589386308027, 11.435589386308026, 11.485589386308027, 11.535589386308025, 11.585589386308026], "phase": [-0.0637423989748689, -0.0537423989748689, -0.043742398974868896, -0.0337423989748689, -0.0237423989748689, -0.013742398974868897, -0.003742398974868902, 0.006257601025131107, 0.016257601025131102, 0.026257601025131097, 0.036257601025131106, 0.0462576010251311, 0.056257601025131096, 0.0662576010251311, 0.07625760102513111, 0.0862576010251311, 0.0962576010251311, 0.10625760102513111, 0.1162576010251311, 0.12625760102513112, 0.13625760102513113, 0.14625760102513108, 0.1562576010251311, 0.1662576010251311, 0.1762576010251311, 0.18625760102513111, 0.19625760102513112, 0.20625760102513113, 0.21625760102513114, 0.2262576010251311, 0.2362576010251311, 0.2462576010251311, 0.2562576010251311, 0.26625760102513113, 0.27625760102513114, 0.28625760102513115, 0.2962576010251311, 0.3062576010251311, 0.3162576010251311, 0.3262576010251311, 0.33625760102513114, 0.34625760102513115, 0.3562576010251311, 0.3662576010251311, 0.3762576010251311, 0.3862576010251311, 0.39625760102513113, 0.40625760102513114, 0.4162576010251311, 0.4262576010251311, 0.4362576010251311, 0.4462576010251311, 0.45625760102513113, 0.46625760102513114, 0.47625760102513115, 0.48625760102513116]}, {"amplitude": [8.585786437626904, 8.635786437626905, 8.685786437626904, 8.735786437626905, 8.785786437626903, 8.835786437626904, 8.885786437626905, 8.935786437626904, 8.985786437626905, 9.035786437626903, 9.085786437626904, 9.135786437626905, 9.185786437626904, 9.235786437626905, 9.285786437626903, 9.335786437626904, 9.385786437626905, 9.435786437626904, 9.485786437626905, 9.535786437626903, 9.585786437626904, 9.635786437626905, 9.685786437626904, 9.735786437626905, 9.785786437626903, 9.835786437626904, 9.885786437626905, 9.935786437626904, 9.985786437626905, 10.035786437626903, 10.085786437626904, 10.135786437626905, 10.185786437626904, 10.235786437626905, 10.285786437626903, 10.335786437626904, 10.385786437626905, 10.435786437626904, 10.485786437626905, 10.535786437626903, 10.585786437626904, 10.635786437626905, 10.685786437626904, 10.735786437626905, 10.785786437626903, 10.835786437626904, 10.885786437626905, 10.935786437626904, 10.985786437626905, 11.035786437626903, 11.085786437626904, 11.135786437626905, 11.185786437626904, 11.235786437626905, 11.285786437626903, 11.335786437626904], "phase": [-0.07071067811865477, -0.060710678118654764, -0.05071067811865476, -0.04071067811865477, -0.030710678118654765, -0.020710678118654763, -0.010710678118654768, -0.0007106781186547589, 0.009289321881345236, 0.01928932188134523, 0.02928932188134524, 0.039289321881345235, 0.04928932188134523, 0.05928932188134524, 0.06928932188134525, 0.07928932188134523, 0.08928932188134524, 0.09928932188134525, 0.10928932188134523, 0.11928932188134524, 0.12928932188134523, 0.13928932188134524, 0.14928932188134525, 0.15928932188134526, 0.1692893218813452, 0.17928932188134522, 0.18928932188134523, 0.19928932188134524, 0.20928932188134525, 0.2192893218813452, 0.2292893218813452, 0.23928932188134522, 0.24928932188134523, 0.25928932188134524, 0.26928932188134524, 0.27928932188134525, 0.2892893218813452, 0.2992893218813452, 0.3092893218813452, 0.31928932188134523, 0.32928932188134524, 0.33928932188134525, 0.3492893218813452, 0.3592893218813452, 0.3692893218813452, 0.37928932188134523, 0.38928932188134524, 0.39928932188134525, 0.4092893218813452, 0.4192893218813452, 0.4292893218813452, 0.43928932188134523, 0.44928932188134524, 0.45928932188134525, 0.46928932188134526, 0.47928932188134526]}, {"amplitude": [8.348536148643015, 8.398536148643016, 8.448536148643015, 8.498536148643016, 8.548536148643015, 8.598536148643015, 8.648536148643016, 8.698536148643015, 8.748536148643016, 8.798536148643015, 8.848536148643015, 8.898536148643016, 8.948536148643015, 8.998536148643016, 9.048536148643015, 9.098536148643015, 9.148536148643016, 9.198536148643015, 9.248536148643016, 9.298536148643015, 9.348536148643015, 9.398536148643016, 9.448536148643015, 9.498536148643016, 9.548536148643015, 9.598536148643015, 9.648536148643016, 9.698536148643015, 9.748536148643016, 9.798536148643015, 9.848536148643015, 9.898536148643016, 9.948536148643015, 9.998536148643016, 10.048536148643015, 10.098536148643015, 10.148536148643016, 10.198536148643015, 10.248536148643016, 10.298536148643015, 10.348536148643015, 10.398536148643016, 10.448536148643015, 10.498536148643016, 10.548536148643015, 10.598536148643015, 10.648536148643016, 10.698536148643015, 10.748536148643016, 10.798536148643015, 10.848536148643015, 10.898536148643016, 10.948536148643015, 10.998536148643016, 11.048536148643015, 11.098536148643015], "phase": [-0.07705132427757902, -0.06705132427757902, -0.057051324277579016, -0.04705132427757902, -0.03705132427757902, -0.027051324277579017, -0.017051324277579022, -0.007051324277579013, 0.002948675722420982, 0.012948675722420977, 0.022948675722420986, 0.03294867572242098, 0.042948675722420976, 0.052948675722420985, 0.062948675722421, 0.07294867572242097, 0.08294867572242098, 0.09294867572242099, 0.10294867572242097, 0.11294867572242098, 0.12294867572242099, 0.13294867572242097, 0.14294867572242098, 0.152948675722421, 0.16294867572242097, 0.17294867572242098, 0.182948675722421, 0.192948675722421, 0.202948675722421, 0.21294867572242096, 0.22294867572242097, 0.23294867572242098, 0.242948675722421, 0.25294867572242097, 0.262948675722421, 0.272948675722421, 0.282948675722421, 0.292948675722421, 0.302948675722421, 0.312948675722421, 0.32294867572242103, 0.33294867572242104, 0.34294867572242094, 0.35294867572242095, 0.36294867572242095, 0.37294867572242096, 0.382948675722421, 0.392948675722421, 0.402948675722421, 0.412948675722421, 0.422948675722421, 0.432948675722421, 0.442948675722421, 0.45294867572242103, 0.46294867572242104, 0.47294867572242105]}, {"amplitude": [8.140474719672271, 8.190474719672272, 8.240474719672271, 8.290474719672272, 8.34047471967227, 8.390474719672271, 8.440474719672272, 8.490474719672271, 8.540474719672272, 8.59047471967227, 8.640474719672271, 8.690474719672272, 8.740474719672271, 8.790474719672272, 8.84047471967227, 8.890474719672271, 8.940474719672272, 8.990474719672271, 9.040474719672272, 9.09047471967227, 9.140474719672271, 9.190474719672272, 9.240474719672271, 9.290474719672272, 9.34047471967227, 9.390474719672271, 9.440474719672272, 9.490474719672271, 9.540474719672272, 9.59047471967227, 9.640474719672271, 9.690474719672272, 9.740474719672271, 9.790474719672272, 9.84047471967227, 9.890474719672271, 9.940474719672272, 9.990474719672271, 10.040474719672272, 10.09047471967227, 10.140474719672271, 10.190474719672272, 10.240474719672271, 10.290474719672272, 10.34047471967227, 10.390474719672271, 10.440474719672272, 10.490474719672271, 10.540474719672272, 10.59047471967227, 10.640474719672271, 10.690474719672272, 10.740474719672271, 10.790474719672272, 10.84047471967227, 10.890474719672271], "phase": [-0.08270805742745614, -0.07270805742745615, -0.06270805742745614, -0.05270805742745614, -0.04270805742745614, -0.03270805742745614, -0.022708057427456144, -0.012708057427456135, -0.0027080574274561398, 0.007291942572543855, 0.017291942572543864, 0.02729194257254386, 0.037291942572543854, 0.04729194257254386, 0.05729194257254387, 0.06729194257254385, 0.07729194257254386, 0.08729194257254387, 0.09729194257254385, 0.10729194257254386, 0.11729194257254387, 0.12729194257254384, 0.13729194257254385, 0.14729194257254385, 0.15729194257254386, 0.16729194257254387, 0.17729194257254388, 0.1872919425725439, 0.1972919425725439, 0.20729194257254385, 0.21729194257254386, 0.22729194257254387, 0.23729194257254388, 0.2472919425725439, 0.2572919425725439, 0.2672919425725439, 0.27729194257254386, 0.28729194257254387, 0.2972919425725439, 0.3072919425725439, 0.3172919425725439, 0.3272919425725439, 0.33729194257254386, 0.34729194257254387, 0.3572919425725439, 0.3672919425725439, 0.3772919425725439, 0.3872919425725439, 0.39729194257254385, 0.40729194257254386, 0.4172919425725439, 0.4272919425725439, 0.4372919425725439, 0.4472919425725439, 0.4572919425725439, 0.4672919425725439]}, {"amplitude": [7.975938524172467, 8.025938524172467, 8.075938524172466, 8.125938524172467, 8.175938524172466, 8.225938524172467, 8.275938524172467, 8.325938524172466, 8.375938524172467, 8.425938524172466, 8.475938524172467, 8.525938524172467, 8.575938524172466, 8.625938524172467, 8.675938524172466, 8.725938524172467, 8.775938524172467, 8.825938524172466, 8.875938524172467, 8.925938524172466, 8.975938524172467, 9.025938524172467, 9.075938524172466, 9.125938524172467, 9.175938524172466, 9.225938524172467, 9.275938524172467, 9.325938524172466, 9.375938524172467, 9.425938524172466, 9.475938524172467, 9.525938524172467, 9.575938524172466, 9.625938524172467, 9.675938524172466, 9.725938524172467, 9.775938524172467, 9.825938524172466, 9.875938524172467, 9.925938524172466, 9.975938524172467, 10.025938524172467, 10.075938524172466, 10.125938524172467, 10.175938524172466, 10.225938524172467, 10.275938524172467, 10.325938524172466, 10.375938524172467, 10.425938524172466, 10.475938524172467, 10.525938524172467, 10.575938524172466, 10.625938524172467, 10.675938524172466, 10.725938524172467], "phase": [-0.08763066800438639, -0.0776306680043864, -0.06763066800438639, -0.05763066800438639, -0.04763066800438639, -0.037630668004386386, -0.02763066800438639, -0.017630668004386382, -0.007630668004386387, 0.0023693319956136077, 0.012369331995613617, 0.02236933199561361, 0.03236933199561361, 0.042369331995613616, 0.052369331995613624, 0.062369331995613606, 0.07236933199561361, 0.08236933199561362, 0.0923693319956136, 0.10236933199561361, 0.11236933199561362, 0.1223693319956136, 0.13236933199561363, 0.14236933199561363, 0.1523693319956136, 0.1623693319956136, 0.1723693319956136, 0.18236933199561361, 0.19236933199561362, 0.20236933199561358, 0.21236933199561359, 0.2223693319956136, 0.2323693319956136, 0.2423693319956136, 0.2523693319956136, 0.26236933199561363, 0.2723693319956136, 0.2823693319956136, 0.2923693319956136, 0.3023693319956136, 0.3123693319956136, 0.32236933199561363, 0.3323693319956136, 0.3423693319956136, 0.3523693319956136, 0.3623693319956136, 0.3723693319956136, 0.3823693319956136, 0.3923693319956136, 0.4023693319956136, 0.4123693319956136, 0.4223693319956136, 0.4323693319956136, 0.4423693319956136, 0.45236933199561363, 0.46236933199561364]}, {"amplitude": [7.865082730103557, 7.915082730103558, 7.965082730103557, 8.015082730103558, 8.065082730103557, 8.115082730103557, 8.165082730103558, 8.215082730103557, 8.265082730103558, 8.315082730103557, 8.365082730103557, 8.415082730103558, 8.465082730103557, 8.515082730103558, 8.565082730103557, 8.615082730103557, 8.665082730103558, 8.715082730103557, 8.765082730103558, 8.815082730103557, 8.865082730103557, 8.915082730103558, 8.965082730103557, 9.015082730103558, 9.065082730103557, 9.115082730103557, 9.165082730103558, 9.215082730103557, 9.265082730103558, 9.315082730103557, 9.365082730103557, 9.415082730103558, 9.465082730103557, 9.515082730103558, 9.565082730103557, 9.615082730103557, 9.665082730103558, 9.715082730103557, 9.765082730103558, 9.815082730103557, 9.865082730103557, 9.915082730103558, 9.965082730103557, 10.015082730103558, 10.065082730103557, 10.115082730103557, 10.165082730103558, 10.215082730103557, 10.265082730103558, 10.315082730103557, 10.365082730103557, 10.415082730103558, 10.465082730103557, 10.515082730103558, 10.565082730103557, 10.615082730103557], "phase": [-0.09177546256839804, -0.08177546256839804, -0.07177546256839804, -0.06177546256839804, -0.05177546256839804, -0.041775462568398036, -0.03177546256839804, -0.021775462568398032, -0.011775462568398037, -0.0017754625683980424, 0.008224537431601966, 0.01822453743160196, 0.028224537431601956, 0.038224537431601965, 0.048224537431601974, 0.058224537431601955, 0.06822453743160196, 0.07822453743160197, 0.08822453743160195, 0.09822453743160196, 0.10822453743160197, 0.11822453743160195, 0.12822453743160195, 0.13822453743160196, 0.14822453743160197, 0.15822453743160197, 0.16822453743160198, 0.178224537431602, 0.188224537431602, 0.19822453743160195, 0.20822453743160196, 0.21822453743160197, 0.22822453743160198, 0.238224537431602, 0.248224537431602, 0.258224537431602, 0.26822453743160196, 0.27822453743160197, 0.288224537431602, 0.298224537431602, 0.308224537431602, 0.318224537431602, 0.32822453743160196, 0.33822453743160197, 0.348224537431602, 0.358224537431602, 0.368224537431602, 0.378224537431602, 0.38822453743160196, 0.39822453743160197, 0.408224537431602, 0.418224537431602, 0.428224537431602, 0.438224537431602, 0.448224537431602, 0.458224537431602]}, {"amplitude": [7.812570012521147, 7.8625700125211475, 7.9125700125211464, 7.962570012521147, 8.012570012521145, 8.062570012521146, 8.112570012521147, 8.162570012521146, 8.212570012521146, 8.262570012521145, 8.312570012521146, 8.362570012521147, 8.412570012521146, 8.462570012521146, 8.512570012521145, 8.562570012521146, 8.612570012521147, 8.662570012521146, 8.712570012521146, 8.762570012521145, 8.812570012521146, 8.862570012521147, 8.912570012521146, 8.962570012521146, 9.012570012521145, 9.062570012521146, 9.112570012521147, 9.162570012521146, 9.212570012521146, 9.262570012521145, 9.312570012521146, 9.362570012521147, 9.412570012521146, 9.462570012521146, 9.512570012521145, 9.562570012521146, 9.612570012521147, 9.662570012521146, 9.712570012521146, 9.762570012521145, 9.812570012521146, 9.862570012521147, 9.912570012521146, 9.962570012521146, 10.012570012521145, 10.062570012521146, 10.112570012521147, 10.162570012521146, 10.212570012521146, 10.262570012521145, 10.312570012521146, 10.362570012521147, 10.412570012521146, 10.462570012521146, 10.512570012521145, 10.562570012521146], "phase": [-0.09510565162951534, -0.08510565162951535, -0.07510565162951534, -0.06510565162951534, -0.05510565162951534, -0.04510565162951534, -0.035105651629515344, -0.025105651629515335, -0.01510565162951534, -0.005105651629515345, 0.0048943483704846635, 0.014894348370484659, 0.024894348370484654, 0.03489434837048466, 0.04489434837048467, 0.05489434837048465, 0.06489434837048466, 0.07489434837048467, 0.08489434837048465, 0.09489434837048466, 0.10489434837048467, 0.11489434837048465, 0.12489434837048466, 0.13489434837048467, 0.14489434837048465, 0.15489434837048466, 0.16489434837048467, 0.17489434837048468, 0.18489434837048468, 0.19489434837048464, 0.20489434837048465, 0.21489434837048466, 0.22489434837048466, 0.23489434837048467, 0.24489434837048468, 0.2548943483704847, 0.26489434837048464, 0.27489434837048465, 0.28489434837048466, 0.29489434837048467, 0.3048943483704847, 0.3148943483704847, 0.32489434837048464, 0.33489434837048465, 0.34489434837048466, 0.35489434837048467, 0.3648943483704847, 0.3748943483704847, 0.38489434837048464, 0.39489434837048465, 0.40489434837048466, 0.41489434837048467, 0.4248943483704847, 0.4348943483704847, 0.4448943483704847, 0.4548943483704847]}, {"amplitude": [7.817012503289769, 7.86701250328977, 7.917012503289769, 7.967012503289769, 8.017012503289768, 8.067012503289769, 8.11701250328977, 8.167012503289769, 8.21701250328977, 8.267012503289768, 8.317012503289769, 8.36701250328977, 8.417012503289769, 8.46701250328977, 8.517012503289768, 8.567012503289769, 8.61701250328977, 8.667012503289769, 8.71701250328977, 8.767012503289768, 8.817012503289769, 8.86701250328977, 8.917012503289769, 8.96701250328977, 9.017012503289768, 9.067012503289769, 9.11701250328977, 9.167012503289769, 9.21701250328977, 9.267012503289768, 9.317012503289769, 9.36701250328977, 9.417012503289769, 9.46701250328977, 9.517012503289768, 9.567012503289769, 9.61701250328977, 9.667012503289769, 9.71701250328977, 9.767012503289768, 9.817012503289769, 9.86701250328977, 9.917012503289769, 9.96701250328977, 10.017012503289768, 10.067012503289769, 10.11701250328977, 10.167012503289769, 10.21701250328977, 10.267012503289768, 10.317012503289769, 10.36701250328977, 10.417012503289769, 10.46701250328977, 10.517012503289768, 10.567012503289769], "phase": [-0.09759167619387477, -0.08759167619387477, -0.07759167619387476, -0.06759167619387477, -0.057591676193874765, -0.04759167619387476, -0.03759167619387477, -0.02759167619387476, -0.017591676193874764, -0.007591676193874769, 0.00240832380612524, 0.012408323806125235, 0.02240832380612523, 0.03240832380612524, 0.04240832380612525, 0.05240832380612523, 0.06240832380612524, 0.07240832380612525, 0.08240832380612523, 0.09240832380612524, 0.10240832380612525, 0.11240832380612523, 0.12240832380612524, 0.13240832380612524, 0.14240832380612523, 0.15240832380612523, 0.16240832380612524, 0.17240832380612525, 0.18240832380612526, 0.19240832380612521, 0.20240832380612522, 0.21240832380612523, 0.22240832380612524, 0.23240832380612525, 0.24240832380612526, 0.25240832380612527, 0.2624083238061252, 0.27240832380612523, 0.28240832380612524, 0.29240832380612525, 0.30240832380612526, 0.31240832380612527, 0.3224083238061252, 0.3324083238061252, 0.34240832380612524, 0.35240832380612525, 0.36240832380612525, 0.37240832380612526, 0.3824083238061252, 0.3924083238061252, 0.40240832380612523, 0.41240832380612524, 0.42240832380612525, 0.43240832380612526, 0.44240832380612527, 0.4524083238061253]}, {"amplitude": [7.8712444951405285, 7.921244495140529, 7.971244495140528, 8.021244495140529, 8.071244495140528, 8.121244495140528, 8.17124449514053, 8.221244495140528, 8.271244495140529, 8.321244495140528, 8.371244495140528, 8.42124449514053, 8.471244495140528, 8.521244495140529, 8.571244495140528, 8.621244495140528, 8.67124449514053, 8.721244495140528, 8.771244495140529, 8.821244495140528, 8.871244495140528, 8.92124449514053, 8.971244495140528, 9.021244495140529, 9.071244495140528, 9.121244495140528, 9.17124449514053, 9.221244495140528, 9.271244495140529, 9.321244495140528, 9.371244495140528, 9.42124449514053, 9.471244495140528, 9.521244495140529, 9.571244495140528, 9.621244495140528, 9.67124449514053, 9.721244495140528, 9.771244495140529, 9.821244495140528, 9.871244495140528, 9.92124449514053, 9.971244495140528, 10.021244495140529, 10.071244495140528, 10.121244495140528, 10.17124449514053, 10.221244495140528, 10.271244495140529, 10.321244495140528, 10.371244495140528, 10.42124449514053, 10.471244495140528, 10.521244495140529, 10.571244495140528, 10.621244495140528], "phase": [-0.09921147013144777, -0.08921147013144777, -0.07921147013144776, -0.06921147013144777, -0.059211470131447765, -0.04921147013144776, -0.03921147013144777, -0.02921147013144776, -0.019211470131447764, -0.009211470131447769, 0.0007885298685522402, 0.010788529868552235, 0.02078852986855223, 0.03078852986855224, 0.04078852986855225, 0.05078852986855223, 0.06078852986855224, 0.07078852986855225, 0.08078852986855223, 0.09078852986855224, 0.10078852986855225, 0.11078852986855223, 0.12078852986855224, 0.13078852986855224, 0.14078852986855223, 0.15078852986855223, 0.16078852986855224, 0.17078852986855225, 0.18078852986855226, 0.19078852986855221, 0.20078852986855222, 0.21078852986855223, 0.22078852986855224, 0.23078852986855225, 0.24078852986855226, 0.25078852986855227, 0.2607885298685522, 0.27078852986855223, 0.28078852986855224, 0.29078852986855225, 0.30078852986855226, 0.31078852986855227, 0.3207885298685522, 0.33078852986855223, 0.34078852986855224, 0.35078852986855225, 0.36078852986855225, 0.37078852986855226, 0.3807885298685522, 0.3907885298685522, 0.40078852986855223, 0.41078852986855224, 0.42078852986855225, 0.43078852986855226, 0.44078852986855227, 0.4507885298685523]}, {"amplitude": [7.963386909199245, 8.013386909199244, 8.063386909199243, 8.113386909199244, 8.163386909199243, 8.213386909199244, 8.263386909199244, 8.313386909199243, 8.363386909199244, 8.413386909199243, 8.463386909199244, 8.513386909199244, 8.563386909199243, 8.613386909199244, 8.663386909199243, 8.713386909199244, 8.763386909199244, 8.813386909199243, 8.863386909199244, 8.913386909199243, 8.963386909199244, 9.013386909199244, 9.063386909199243, 9.113386909199244, 9.163386909199243, 9.213386909199244, 9.263386909199244, 9.313386909199243, 9.363386909199244, 9.413386909199243, 9.463386909199244, 9.513386909199244, 9.563386909199243, 9.613386909199244, 9.663386909199243, 9.713386909199244, 9.763386909199244, 9.813386909199243, 9.863386909199244, 9.913386909199243, 9.963386909199244, 10.013386909199244, 10.063386909199243, 10.113386909199244, 10.163386909199243, 10.213386909199244, 10.263386909199244, 10.313386909199243, 10.363386909199244, 10.413386909199243, 10.463386909199244, 10.513386909199244, 10.563386909199243, 10.613386909199244, 10.663386909199243, 10.713386909199244], "phase": [-0.09995065603657316, -0.08995065603657316, -0.07995065603657316, -0.06995065603657316, -0.05995065603657316, -0.04995065603657316, -0.03995065603657316, -0.029950656036573153, -0.01995065603657316, -0.009950656036573163, 4.934396342684555e-05, 0.01004934396342684, 0.020049343963426836, 0.030049343963426844, 0.04004934396342685, 0.050049343963426834, 0.06004934396342684, 0.07004934396342685, 0.08004934396342683, 0.09004934396342684, 0.10004934396342685, 0.11004934396342683, 0.12004934396342684, 0.13004934396342685, 0.14004934396342683, 0.15004934396342684, 0.16004934396342685, 0.17004934396342686, 0.18004934396342687, 0.19004934396342682, 0.20004934396342683, 0.21004934396342684, 0.22004934396342685, 0.23004934396342686, 0.24004934396342686, 0.2500493439634269, 0.2600493439634268, 0.27004934396342684, 0.28004934396342684, 0.29004934396342685, 0.30004934396342686, 0.31004934396342687, 0.3200493439634268, 0.33004934396342683, 0.34004934396342684, 0.35004934396342685, 0.36004934396342686, 0.37004934396342687, 0.3800493439634268, 0.39004934396342683, 0.40004934396342684, 0.41004934396342685, 0.42004934396342686, 0.43004934396342687, 0.4400493439634269, 0.4500493439634269]}, {"amplitude": [8.07855350929291, 8.12855350929291, 8.17855350929291, 8.22855350929291, 8.278553509292909, 8.32855350929291, 8.37855350929291, 8.42855350929291, 8.47855350929291, 8.528553509292909, 8.57855350929291, 8.62855350929291, 8.67855350929291, 8.72855350929291, 8.778553509292909, 8.82855350929291, 8.87855350929291, 8.92855350929291, 8.97855350929291, 9.028553509292909, 9.07855350929291, 9.12855350929291, 9.17855350929291, 9.22855350929291, 9.278553509292909, 9.32855350929291, 9.37855350929291, 9.42855350929291, 9.47855350929291, 9.528553509292909, 9.57855350929291, 9.62855350929291, 9.67855350929291, 9.72855350929291, 9.778553509292909, 9.82855350929291, 9.87855350929291, 9.92855350929291, 9.97855350929291, 10.028553509292909, 10.07855350929291, 10.12855350929291, 10.17855350929291, 10.22855350929291, 10.278553509292909, 10.32855350929291, 10.37855350929291, 10.42855350929291, 10.47855350929291, 10.528553509292909, 10.57855350929291, 10.62855350929291, 10.67855350929291, 10.72855350929291, 10.778553509292909, 10.82855350929291], "phase": [-0.09980267284282718, -0.08980267284282718, -0.07980267284282717, -0.06980267284282718, -0.05980267284282718, -0.049802672842827175, -0.03980267284282718, -0.02980267284282717, -0.019802672842827176, -0.009802672842827181, 0.00019732715717282745, 0.010197327157172822, 0.020197327157172817, 0.030197327157172826, 0.040197327157172835, 0.050197327157172816, 0.060197327157172825, 0.07019732715717283, 0.08019732715717282, 0.09019732715717282, 0.10019732715717283, 0.11019732715717281, 0.12019732715717282, 0.13019732715717283, 0.1401973271571728, 0.15019732715717282, 0.16019732715717283, 0.17019732715717284, 0.18019732715717285, 0.1901973271571728, 0.2001973271571728, 0.21019732715717282, 0.22019732715717283, 0.23019732715717284, 0.24019732715717285, 0.25019732715717286, 0.2601973271571728, 0.2701973271571728, 0.2801973271571728, 0.29019732715717284, 0.30019732715717284, 0.31019732715717285, 0.3201973271571728, 0.3301973271571728, 0.3401973271571728, 0.35019732715717283, 0.36019732715717284, 0.37019732715717285, 0.3801973271571728, 0.3901973271571728, 0.4001973271571728, 0.41019732715717283, 0.42019732715717284, 0.43019732715717285, 0.44019732715717286, 0.45019732715717287]}, {"amplitude": [8.200958894497465, 8.250958894497465, 8.300958894497464, 8.350958894497465, 8.400958894497464, 8.450958894497465, 8.500958894497465, 8.550958894497464, 8.600958894497465, 8.650958894497464, 8.700958894497465, 8.750958894497465, 8.800958894497464, 8.850958894497465, 8.900958894497464, 8.950958894497465, 9.000958894497465, 9.050958894497464, 9.100958894497465, 9.150958894497464, 9.200958894497465, 9.250958894497465, 9.300958894497464, 9.350958894497465, 9.400958894497464, 9.450958894497465, 9.500958894497465, 9.550958894497464, 9.600958894497465, 9.650958894497464, 9.700958894497465, 9.750958894497465, 9.800958894497464, 9.850958894497465, 9.900958894497464, 9.950958894497465, 10.000958894497465, 10.050958894497464, 10.100958894497465, 10.150958894497464, 10.200958894497465, 10.250958894497465, 10.300958894497464, 10.350958894497465, 10.400958894497464, 10.450958894497465, 10.500958894497465, 10.550958894497464, 10.600958894497465, 10.650958894497464, 10.700958894497465, 10.750958894497465, 10.800958894497464, 10.850958894497465, 10.900958894497464, 10.950958894497465], "phase": [-0.09876883405951381, -0.08876883405951382, -0.0787688340595138, -0.06876883405951381, -0.05876883405951381, -0.04876883405951381, -0.03876883405951381, -0.028768834059513804, -0.01876883405951381, -0.008768834059513814, 0.0012311659404861952, 0.01123116594048619, 0.021231165940486185, 0.031231165940486194, 0.0412311659404862, 0.051231165940486184, 0.06123116594048619, 0.0712311659404862, 0.08123116594048618, 0.09123116594048619, 0.1012311659404862, 0.11123116594048618, 0.12123116594048619, 0.1312311659404862, 0.14123116594048618, 0.1512311659404862, 0.1612311659404862, 0.1712311659404862, 0.18123116594048622, 0.19123116594048617, 0.20123116594048618, 0.2112311659404862, 0.2212311659404862, 0.2312311659404862, 0.24123116594048621, 0.2512311659404862, 0.2612311659404862, 0.2712311659404862, 0.2812311659404862, 0.2912311659404862, 0.3012311659404862, 0.3112311659404862, 0.3212311659404862, 0.3312311659404862, 0.3412311659404862, 0.3512311659404862, 0.3612311659404862, 0.3712311659404862, 0.38123116594048617, 0.3912311659404862, 0.4012311659404862, 0.4112311659404862, 0.4212311659404862, 0.4312311659404862, 0.4412311659404862, 0.45123116594048623]}, {"amplitude": [8.316132055393343, 8.366132055393344, 8.416132055393343, 8.466132055393343, 8.516132055393342, 8.566132055393343, 8.616132055393344, 8.666132055393343, 8.716132055393343, 8.766132055393342, 8.816132055393343, 8.866132055393344, 8.916132055393343, 8.966132055393343, 9.016132055393342, 9.066132055393343, 9.116132055393344, 9.166132055393343, 9.216132055393343, 9.266132055393342, 9.316132055393343, 9.366132055393344, 9.416132055393343, 9.466132055393343, 9.516132055393342, 9.566132055393343, 9.616132055393344, 9.666132055393343, 9.716132055393343, 9.766132055393342, 9.816132055393343, 9.866132055393344, 9.916132055393343, 9.966132055393343, 10.016132055393342, 10.066132055393343, 10.116132055393344, 10.166132055393343, 10.216132055393343, 10.266132055393342, 10.316132055393343, 10.366132055393344, 10.416132055393343, 10.466132055393343, 10.516132055393342, 10.566132055393343, 10.616132055393344, 10.666132055393343, 10.716132055393343, 10.766132055393342, 10.816132055393343, 10.866132055393344, 10.916132055393343, 10.966132055393343, 11.016132055393342, 11.066132055393343], "phase": [-0.09685831611286312, -0.08685831611286313, -0.07685831611286312, -0.06685831611286312, -0.05685831611286312, -0.04685831611286312, -0.036858316112863124, -0.026858316112863115, -0.01685831611286312, -0.006858316112863125, 0.003141683887136884, 0.013141683887136879, 0.023141683887136874, 0.03314168388713688, 0.04314168388713689, 0.05314168388713687, 0.06314168388713688, 0.07314168388713689, 0.08314168388713687, 0.09314168388713688, 0.10314168388713689, 0.11314168388713687, 0.12314168388713688, 0.13314168388713687, 0.14314168388713688, 0.1531416838871369, 0.1631416838871369, 0.1731416838871369, 0.18314168388713692, 0.19314168388713687, 0.20314168388713688, 0.2131416838871369, 0.2231416838871369, 0.2331416838871369, 0.24314168388713692, 0.2531416838871369, 0.2631416838871369, 0.2731416838871369, 0.2831416838871369, 0.2931416838871369, 0.3031416838871369, 0.3131416838871369, 0.3231416838871369, 0.3331416838871369, 0.3431416838871369, 0.3531416838871369, 0.3631416838871369, 0.3731416838871369, 0.3831416838871369, 0.3931416838871369, 0.4031416838871369, 0.4131416838871369, 0.4231416838871369, 0.4331416838871369, 0.44314168388713693, 0.45314168388713694]}, {"amplitude": [8.412924637310153, 8.462924637310154, 8.512924637310153, 8.562924637310154, 8.612924637310153, 8.662924637310153, 8.712924637310154, 8.762924637310153, 8.812924637310154, 8.862924637310153, 8.912924637310153, 8.962924637310154, 9.012924637310153, 9.062924637310154, 9.112924637310153, 9.162924637310153, 9.212924637310154, 9.262924637310153, 9.312924637310154, 9.362924637310153, 9.412924637310153, 9.462924637310154, 9.512924637310153, 9.562924637310154, 9.612924637310153, 9.662924637310153, 9.712924637310154, 9.762924637310153, 9.812924637310154, 9.862924637310153, 9.912924637310153, 9.962924637310154, 10.012924637310153, 10.062924637310154, 10.112924637310153, 10.162924637310153, 10.212924637310154, 10.262924637310153, 10.312924637310154, 10.362924637310153, 10.412924637310153, 10.462924637310154, 10.512924637310153, 10.562924637310154, 10.612924637310153, 10.662924637310153, 10.712924637310154, 10.762924637310153, 10.812924637310154, 10.862924637310153, 10.912924637310153, 10.962924637310154, 11.012924637310153, 11.062924637310154, 11.112924637310153, 11.162924637310153], "phase": [-0.09408807689542265, -0.08408807689542265, -0.07408807689542264, -0.06408807689542265, -0.054088076895422645, -0.04408807689542264, -0.03408807689542265, -0.02408807689542264, -0.014088076895422644, -0.004088076895422649, 0.00591192310457736, 0.015911923104577355, 0.02591192310457735, 0.03591192310457736, 0.04591192310457737, 0.05591192310457735, 0.06591192310457736, 0.07591192310457737, 0.08591192310457735, 0.09591192310457736, 0.10591192310457737, 0.11591192310457735, 0.12591192310457736, 0.13591192310457736, 0.14591192310457735, 0.15591192310457735, 0.16591192310457736, 0.17591192310457737, 0.18591192310457738, 0.19591192310457733, 0.20591192310457734, 0.21591192310457735, 0.22591192310457736, 0.23591192310457737, 0.24591192310457738, 0.2559119231045774, 0.26591192310457734, 0.27591192310457735, 0.28591192310457736, 0.29591192310457737, 0.3059119231045774, 0.3159119231045774, 0.32591192310457734, 0.33591192310457735, 0.34591192310457736, 0.35591192310457737, 0.3659119231045774, 0.3759119231045774, 0.38591192310457734, 0.39591192310457735, 0.40591192310457735, 0.41591192310457736, 0.4259119231045774, 0.4359119231045774, 0.4459119231045774, 0.4559119231045774]}, {"amplitude": [8.485032070286566, 8.535032070286567, 8.585032070286566, 8.635032070286567, 8.685032070286566, 8.735032070286566, 8.785032070286567, 8.835032070286566, 8.885032070286567, 8.935032070286566, 8.985032070286566, 9.035032070286567, 9.085032070286566, 9.135032070286567, 9.185032070286566, 9.235032070286566, 9.285032070286567, 9.335032070286566, 9.385032070286567, 9.435032070286566, 9.485032070286566, 9.535032070286567, 9.585032070286566, 9.635032070286567, 9.685032070286566, 9.735032070286566, 9.785032070286567, 9.835032070286566, 9.885032070286567, 9.935032070286566, 9.985032070286566, 10.035032070286567, 10.085032070286566, 10.135032070286567, 10.185032070286566, 10.235032070286566, 10.285032070286567, 10.335032070286566, 10.385032070286567, 10.435032070286566, 10.485032070286566, 10.535032070286567, 10.585032070286566, 10.635032070286567, 10.685032070286566, 10.735032070286566, 10.785032070286567, 10.835032070286566, 10.885032070286567, 10.935032070286566, 10.985032070286566, 11.035032070286567, 11.085032070286566, 11.135032070286567, 11.185032070286566, 11.235032070286566], "phase": [-0.09048270524660201, -0.08048270524660202, -0.07048270524660201, -0.060482705246602014, -0.05048270524660201, -0.04048270524660201, -0.030482705246602015, -0.020482705246602007, -0.010482705246602012, -0.0004827052466020165, 0.009517294753397992, 0.019517294753397987, 0.029517294753397982, 0.03951729475339799, 0.049517294753398, 0.05951729475339798, 0.06951729475339799, 0.079517294753398, 0.08951729475339798, 0.09951729475339799, 0.109517294753398, 0.11951729475339798, 0.129517294753398, 0.139517294753398, 0.14951729475339798, 0.159517294753398, 0.169517294753398, 0.179517294753398, 0.189517294753398, 0.19951729475339797, 0.20951729475339798, 0.21951729475339798, 0.229517294753398, 0.239517294753398, 0.249517294753398, 0.259517294753398, 0.269517294753398, 0.279517294753398, 0.289517294753398, 0.299517294753398, 0.309517294753398, 0.319517294753398, 0.32951729475339797, 0.339517294753398, 0.349517294753398, 0.359517294753398, 0.369517294753398, 0.379517294753398, 0.38951729475339797, 0.399517294753398, 0.409517294753398, 0.419517294753398, 0.429517294753398, 0.439517294753398, 0.449517294753398, 0.45951729475339803]}, {"amplitude": [8.531814323642715, 8.581814323642716, 8.631814323642715, 8.681814323642715, 8.731814323642714, 8.781814323642715, 8.831814323642716, 8.881814323642715, 8.931814323642715, 8.981814323642714, 9.031814323642715, 9.081814323642716, 9.131814323642715, 9.181814323642715, 9.231814323642714, 9.281814323642715, 9.331814323642716, 9.381814323642715, 9.431814323642715, 9.481814323642714, 9.531814323642715, 9.581814323642716, 9.631814323642715, 9.681814323642715, 9.731814323642714, 9.781814323642715, 9.831814323642716, 9.881814323642715, 9.931814323642715, 9.981814323642714, 10.031814323642715, 10.081814323642716, 10.131814323642715, 10.181814323642715, 10.231814323642714, 10.281814323642715, 10.331814323642716, 10.381814323642715, 10.431814323642715, 10.481814323642714, 10.531814323642715, 10.581814323642716, 10.631814323642715, 10.681814323642715, 10.731814323642714, 10.781814323642715, 10.831814323642716, 10.881814323642715, 10.931814323642715, 10.981814323642714, 11.031814323642715, 11.081814323642716, 11.131814323642715, 11.181814323642715, 11.231814323642714, 11.281814323642715], "phase": [-0.08607420270039456, -0.07607420270039457, -0.06607420270039456, -0.056074202700394565, -0.04607420270039456, -0.03607420270039456, -0.026074202700394566, -0.016074202700394558, -0.0060742027003945626, 0.0039257972996054324, 0.013925797299605441, 0.023925797299605436, 0.03392579729960543, 0.04392579729960544, 0.05392579729960545, 0.06392579729960543, 0.07392579729960544, 0.08392579729960545, 0.09392579729960543, 0.10392579729960544, 0.11392579729960545, 0.12392579729960543, 0.13392579729960544, 0.14392579729960545, 0.15392579729960543, 0.16392579729960544, 0.17392579729960544, 0.18392579729960545, 0.19392579729960546, 0.20392579729960542, 0.21392579729960542, 0.22392579729960543, 0.23392579729960544, 0.24392579729960545, 0.25392579729960546, 0.26392579729960547, 0.2739257972996054, 0.28392579729960543, 0.29392579729960544, 0.30392579729960545, 0.31392579729960546, 0.32392579729960547, 0.3339257972996054, 0.34392579729960543, 0.35392579729960544, 0.36392579729960545, 0.37392579729960546, 0.38392579729960546, 0.3939257972996054, 0.4039257972996054, 0.41392579729960544, 0.42392579729960544, 0.43392579729960545, 0.44392579729960546, 0.45392579729960547, 0.4639257972996055]}, {"amplitude": [8.558301586937848, 8.608301586937849, 8.658301586937847, 8.708301586937848, 8.758301586937847, 8.808301586937848, 8.858301586937849, 8.908301586937847, 8.958301586937848, 9.008301586937847, 9.058301586937848, 9.108301586937849, 9.158301586937847, 9.208301586937848, 9.258301586937847, 9.308301586937848, 9.358301586937849, 9.408301586937847, 9.458301586937848, 9.508301586937847, 9.558301586937848, 9.608301586937849, 9.658301586937847, 9.708301586937848, 9.758301586937847, 9.808301586937848, 9.858301586937849, 9.908301586937847, 9.958301586937848, 10.008301586937847, 10.058301586937848, 10.108301586937849, 10.158301586937847, 10.208301586937848, 10.258301586937847, 10.308301586937848, 10.358301586937849, 10.408301586937847, 10.458301586937848, 10.508301586937847, 10.558301586937848, 10.608301586937849, 10.658301586937847, 10.708301586937848, 10.758301586937847, 10.808301586937848, 10.858301586937849, 10.908301586937847, 10.958301586937848, 11.008301586937847, 11.058301586937848, 11.108301586937849, 11.158301586937847, 11.208301586937848, 11.258301586937847, 11.308301586937848], "phase": [-0.08090169943749469, -0.07090169943749469, -0.06090169943749468, -0.05090169943749469, -0.040901699437494686, -0.030901699437494684, -0.02090169943749469, -0.01090169943749468, -0.0009016994374946852, 0.00909830056250531, 0.01909830056250532, 0.029098300562505314, 0.03909830056250531, 0.04909830056250532, 0.059098300562505326, 0.06909830056250531, 0.07909830056250532, 0.08909830056250533, 0.0990983005625053, 0.10909830056250532, 0.11909830056250532, 0.12909830056250532, 0.13909830056250533, 0.14909830056250534, 0.1590983005625053, 0.1690983005625053, 0.1790983005625053, 0.18909830056250532, 0.19909830056250533, 0.20909830056250528, 0.2190983005625053, 0.2290983005625053, 0.2390983005625053, 0.24909830056250531, 0.2590983005625053, 0.26909830056250533, 0.2790983005625053, 0.2890983005625053, 0.2990983005625053, 0.3090983005625053, 0.3190983005625053, 0.32909830056250533, 0.3390983005625053, 0.3490983005625053, 0.3590983005625053, 0.3690983005625053, 0.3790983005625053, 0.38909830056250533, 0.3990983005625053, 0.4090983005625053, 0.4190983005625053, 0.4290983005625053, 0.4390983005625053, 0.4490983005625053, 0.45909830056250533, 0.46909830056250534]}, {"amplitude": [8.574384826888537, 8.624384826888537, 8.674384826888536, 8.724384826888537, 8.774384826888536, 8.824384826888537, 8.874384826888537, 8.924384826888536, 8.974384826888537, 9.024384826888536, 9.074384826888537, 9.124384826888537, 9.174384826888536, 9.224384826888537, 9.274384826888536, 9.324384826888537, 9.374384826888537, 9.424384826888536, 9.474384826888537, 9.524384826888536, 9.574384826888537, 9.624384826888537, 9.674384826888536, 9.724384826888537, 9.774384826888536, 9.824384826888537, 9.874384826888537, 9.924384826888536, 9.974384826888537, 10.024384826888536, 10.074384826888537, 10.124384826888537, 10.174384826888536, 10.224384826888537, 10.274384826888536, 10.324384826888537, 10.374384826888537, 10.424384826888536, 10.474384826888537, 10.524384826888536, 10.574384826888537, 10.624384826888537, 10.674384826888536, 10.724384826888537, 10.774384826888536, 10.824384826888537, 10.874384826888537, 10.924384826888536, 10.974384826888537, 11.024384826888536, 11.074384826888537, 11.124384826888537, 11.174384826888536, 11.224384826888537, 11.274384826888536, 11.324384826888537], "phase": [-0.0750111069630458, -0.06501110696304581, -0.0550111069630458, -0.045011106963045805, -0.0350111069630458, -0.0250111069630458, -0.015011106963045806, -0.005011106963045797, 0.004988893036954198, 0.014988893036954193, 0.0249888930369542, 0.0349888930369542, 0.04498889303695419, 0.0549888930369542, 0.06498889303695421, 0.07498889303695419, 0.0849888930369542, 0.09498889303695421, 0.10498889303695419, 0.1149888930369542, 0.12498889303695421, 0.1349888930369542, 0.1449888930369542, 0.1549888930369542, 0.1649888930369542, 0.1749888930369542, 0.1849888930369542, 0.19498889303695421, 0.20498889303695422, 0.21498889303695418, 0.22498889303695419, 0.2349888930369542, 0.2449888930369542, 0.2549888930369542, 0.2649888930369542, 0.27498889303695423, 0.2849888930369542, 0.2949888930369542, 0.3049888930369542, 0.3149888930369542, 0.3249888930369542, 0.3349888930369542, 0.3449888930369542, 0.3549888930369542, 0.3649888930369542, 0.3749888930369542, 0.3849888930369542, 0.3949888930369542, 0.4049888930369542, 0.4149888930369542, 0.4249888930369542, 0.4349888930369542, 0.4449888930369542, 0.4549888930369542, 0.46498889303695423, 0.47498889303695424]}, {"amplitude": [8.593305818073333, 8.643305818073333, 8.693305818073332, 8.743305818073333, 8.793305818073332, 8.843305818073333, 8.893305818073333, 8.943305818073332, 8.993305818073333, 9.043305818073332, 9.093305818073333, 9.143305818073333, 9.193305818073332, 9.243305818073333, 9.293305818073332, 9.343305818073333, 9.393305818073333, 9.443305818073332, 9.493305818073333, 9.543305818073332, 9.593305818073333, 9.643305818073333, 9.693305818073332, 9.743305818073333, 9.793305818073332, 9.843305818073333, 9.893305818073333, 9.943305818073332, 9.993305818073333, 10.043305818073332, 10.093305818073333, 10.143305818073333, 10.193305818073332, 10.243305818073333, 10.293305818073332, 10.343305818073333, 10.393305818073333, 10.443305818073332, 10.493305818073333, 10.543305818073332, 10.593305818073333, 10.643305818073333, 10.693305818073332, 10.743305818073333, 10.793305818073332, 10.843305818073333, 10.893305818073333, 10.943305818073332, 10.993305818073333, 11.043305818073332, 11.093305818073333, 11.143305818073333, 11.193305818073332, 11.243305818073333, 11.293305818073332, 11.343305818073333], "phase": [-0.06845471059286887, -0.058454710592868865, -0.04845471059286886, -0.03845471059286887, -0.028454710592868866, -0.018454710592868864, -0.00845471059286887, 0.0015452894071311396, 0.011545289407131135, 0.02154528940713113, 0.03154528940713114, 0.041545289407131133, 0.05154528940713113, 0.06154528940713114, 0.07154528940713115, 0.08154528940713113, 0.09154528940713114, 0.10154528940713115, 0.11154528940713113, 0.12154528940713114, 0.13154528940713114, 0.14154528940713113, 0.15154528940713113, 0.16154528940713114, 0.17154528940713112, 0.18154528940713113, 0.19154528940713114, 0.20154528940713115, 0.21154528940713116, 0.2215452894071311, 0.23154528940713112, 0.24154528940713113, 0.25154528940713117, 0.2615452894071312, 0.2715452894071312, 0.2815452894071312, 0.2915452894071311, 0.3015452894071311, 0.3115452894071311, 0.3215452894071311, 0.3315452894071311, 0.34154528940713114, 0.35154528940713115, 0.36154528940713115, 0.37154528940713116, 0.38154528940713117, 0.3915452894071312, 0.4015452894071312, 0.4115452894071311, 0.4215452894071311, 0.4315452894071311, 0.4415452894071311, 0.4515452894071311, 0.46154528940713113, 0.47154528940713114, 0.48154528940713115]}, {"amplitude": [8.629659790463533, 8.679659790463534, 8.729659790463533, 8.779659790463533, 8.829659790463532, 8.879659790463533, 8.929659790463534, 8.979659790463533, 9.029659790463533, 9.079659790463532, 9.129659790463533, 9.179659790463534, 9.229659790463533, 9.279659790463533, 9.329659790463532, 9.379659790463533, 9.429659790463534, 9.479659790463533, 9.529659790463533, 9.579659790463532, 9.629659790463533, 9.679659790463534, 9.729659790463533, 9.779659790463533, 9.829659790463532, 9.879659790463533, 9.929659790463534, 9.979659790463533, 10.029659790463533, 10.079659790463532, 10.129659790463533, 10.179659790463534, 10.229659790463533, 10.279659790463533, 10.329659790463532, 10.379659790463533, 10.429659790463534, 10.479659790463533, 10.529659790463533, 10.579659790463532, 10.629659790463533, 10.679659790463534, 10.729659790463533, 10.779659790463533, 10.829659790463532, 10.879659790463533, 10.929659790463534, 10.979659790463533, 11.029659790463533, 11.079659790463532, 11.129659790463533, 11.179659790463534, 11.229659790463533, 11.279659790463533, 11.329659790463532, 11.379659790463533], "phase": [-0.06129070536529755, -0.05129070536529755, -0.04129070536529755, -0.03129070536529755, -0.02129070536529755, -0.011290705365297547, -0.0012907053652975523, 0.008709294634702457, 0.01870929463470245, 0.028709294634702447, 0.038709294634702456, 0.04870929463470245, 0.058709294634702446, 0.06870929463470246, 0.07870929463470247, 0.08870929463470245, 0.09870929463470246, 0.10870929463470247, 0.11870929463470245, 0.12870929463470246, 0.13870929463470247, 0.14870929463470245, 0.15870929463470246, 0.16870929463470247, 0.17870929463470245, 0.18870929463470246, 0.19870929463470247, 0.20870929463470247, 0.21870929463470248, 0.22870929463470244, 0.23870929463470245, 0.24870929463470245, 0.25870929463470244, 0.26870929463470244, 0.27870929463470245, 0.28870929463470246, 0.2987092946347024, 0.3087092946347024, 0.31870929463470243, 0.32870929463470244, 0.33870929463470245, 0.34870929463470246, 0.3587092946347024, 0.3687092946347024, 0.37870929463470243, 0.38870929463470244, 0.39870929463470245, 0.40870929463470246, 0.4187092946347024, 0.4287092946347024, 0.43870929463470243, 0.44870929463470244, 0.45870929463470245, 0.46870929463470246, 0.47870929463470246, 0.4887092946347025]}, {"amplitude": [8.697192437209269, 8.74719243720927, 8.797192437209269, 8.84719243720927, 8.897192437209268, 8.947192437209269, 8.99719243720927, 9.047192437209269, 9.09719243720927, 9.147192437209268, 9.197192437209269, 9.24719243720927, 9.297192437209269, 9.34719243720927, 9.397192437209268, 9.447192437209269, 9.49719243720927, 9.547192437209269, 9.59719243720927, 9.647192437209268, 9.697192437209269, 9.74719243720927, 9.797192437209269, 9.84719243720927, 9.897192437209268, 9.947192437209269, 9.99719243720927, 10.047192437209269, 10.09719243720927, 10.147192437209268, 10.197192437209269, 10.24719243720927, 10.297192437209269, 10.34719243720927, 10.397192437209268, 10.447192437209269, 10.49719243720927, 10.547192437209269, 10.59719243720927, 10.647192437209268, 10.697192437209269, 10.74719243720927, 10.797192437209269, 10.84719243720927, 10.897192437209268, 10.947192437209269, 10.99719243720927, 11.047192437209269, 11.09719243720927, 11.147192437209268, 11.197192437209269, 11.24719243720927, 11.297192437209269, 11.34719243720927, 11.397192437209268, 11.447192437209269], "phase": [-0.05358267949789976, -0.043582679497899755, -0.03358267949789975, -0.02358267949789976, -0.013582679497899756, -0.0035826794978997545, 0.0064173205021002405, 0.01641732050210025, 0.026417320502100244, 0.03641732050210024, 0.04641732050210025, 0.05641732050210024, 0.06641732050210024, 0.07641732050210025, 0.08641732050210026, 0.09641732050210024, 0.10641732050210025, 0.11641732050210025, 0.12641732050210025, 0.13641732050210026, 0.14641732050210027, 0.15641732050210022, 0.16641732050210023, 0.17641732050210024, 0.18641732050210025, 0.19641732050210026, 0.20641732050210027, 0.21641732050210027, 0.22641732050210028, 0.23641732050210024, 0.24641732050210025, 0.25641732050210025, 0.26641732050210026, 0.27641732050210027, 0.2864173205021003, 0.2964173205021003, 0.30641732050210024, 0.31641732050210025, 0.32641732050210026, 0.33641732050210027, 0.3464173205021003, 0.3564173205021003, 0.36641732050210024, 0.37641732050210025, 0.38641732050210026, 0.39641732050210027, 0.4064173205021003, 0.4164173205021003, 0.42641732050210024, 0.43641732050210025, 0.44641732050210026, 0.45641732050210027, 0.4664173205021003, 0.4764173205021003, 0.4864173205021003, 0.4964173205021003]}, {"amplitude": [8.80670204563236, 8.85670204563236, 8.90670204563236, 8.95670204563236, 9.006702045632359, 9.05670204563236, 9.10670204563236, 9.15670204563236, 9.20670204563236, 9.256702045632359, 9.30670204563236, 9.35670204563236, 9.40670204563236, 9.45670204563236, 9.506702045632359, 9.55670204563236, 9.60670204563236, 9.65670204563236, 9.70670204563236, 9.756702045632359, 9.80670204563236, 9.85670204563236, 9.90670204563236, 9.95670204563236, 10.006702045632359, 10.05670204563236, 10.10670204563236, 10.15670204563236, 10.20670204563236, 10.256702045632359, 10.30670204563236, 10.35670204563236, 10.40670204563236, 10.45670204563236, 10.506702045632359, 10.55670204563236, 10.60670204563236, 10.65670204563236, 10.70670204563236, 10.756702045632359, 10.80670204563236, 10.85670204563236, 10.90670204563236, 10.95670204563236, 11.006702045632359, 11.05670204563236, 11.10670204563236, 11.15670204563236, 11.20670204563236, 11.256702045632359, 11.30670204563236, 11.35670204563236, 11.40670204563236, 11.45670204563236, 11.506702045632359, 11.55670204563236], "phase": [-0.045399049973954664, -0.03539904997395466, -0.025399049973954663, -0.015399049973954665, -0.005399049973954663, 0.004600950026045339, 0.014600950026045334, 0.024600950026045343, 0.03460095002604534, 0.04460095002604533, 0.05460095002604534, 0.06460095002604534, 0.07460095002604533, 0.08460095002604534, 0.09460095002604535, 0.10460095002604533, 0.11460095002604534, 0.12460095002604535, 0.13460095002604533, 0.14460095002604534, 0.15460095002604535, 0.16460095002604533, 0.17460095002604534, 0.18460095002604535, 0.19460095002604533, 0.20460095002604534, 0.21460095002604535, 0.22460095002604535, 0.23460095002604536, 0.24460095002604532, 0.2546009500260453, 0.26460095002604533, 0.27460095002604534, 0.28460095002604535, 0.29460095002604536, 0.30460095002604537, 0.3146009500260453, 0.32460095002604533, 0.33460095002604534, 0.34460095002604535, 0.35460095002604536, 0.36460095002604537, 0.3746009500260453, 0.38460095002604533, 0.39460095002604534, 0.40460095002604535, 0.41460095002604536, 0.42460095002604537, 0.4346009500260453, 0.4446009500260453, 0.45460095002604534, 0.46460095002604535, 0.47460095002604535, 0.48460095002604536, 0.49460095002604537, 0.5046009500260453]}, {"amplitude": [8.964342876102165, 9.014342876102166, 9.064342876102165, 9.114342876102166, 9.164342876102165, 9.214342876102165, 9.264342876102166, 9.314342876102165, 9.364342876102166, 9.414342876102165, 9.464342876102165, 9.514342876102166, 9.564342876102165, 9.614342876102166, 9.664342876102165, 9.714342876102165, 9.764342876102166, 9.814342876102165, 9.864342876102166, 9.914342876102165, 9.964342876102165, 10.014342876102166, 10.064342876102165, 10.114342876102166, 10.164342876102165, 10.214342876102165, 10.264342876102166, 10.314342876102165, 10.364342876102166, 10.414342876102165, 10.464342876102165, 10.514342876102166, 10.564342876102165, 10.614342876102166, 10.664342876102165, 10.714342876102165, 10.764342876102166, 10.814342876102165, 10.864342876102166, 10.914342876102165, 10.964342876102165, 11.014342876102166, 11.064342876102165, 11.114342876102166, 11.164342876102165, 11.214342876102165, 11.264342876102166, 11.314342876102165, 11.364342876102166, 11.414342876102165, 11.464342876102165, 11.514342876102166, 11.564342876102165, 11.614342876102166, 11.664342876102165, 11.714342876102165], "phase": [-0.036812455268467666, -0.026812455268467664, -0.016812455268467665, -0.006812455268467667, 0.003187544731532335, 0.013187544731532337, 0.023187544731532332, 0.03318754473153234, 0.043187544731532336, 0.05318754473153233, 0.06318754473153235, 0.07318754473153233, 0.08318754473153234, 0.09318754473153235, 0.10318754473153235, 0.11318754473153234, 0.12318754473153234, 0.13318754473153235, 0.14318754473153233, 0.15318754473153234, 0.16318754473153235, 0.17318754473153233, 0.18318754473153234, 0.19318754473153235, 0.20318754473153233, 0.21318754473153234, 0.22318754473153235, 0.23318754473153236, 0.24318754473153237, 0.2531875447315323, 0.26318754473153233, 0.27318754473153234, 0.28318754473153235, 0.29318754473153236, 0.30318754473153237, 0.3131875447315324, 0.32318754473153233, 0.33318754473153234, 0.34318754473153235, 0.35318754473153235, 0.36318754473153236, 0.3731875447315324, 0.3831875447315323, 0.39318754473153233, 0.40318754473153234, 0.41318754473153235, 0.42318754473153236, 0.43318754473153237, 0.4431875447315323, 0.45318754473153233, 0.46318754473153234, 0.47318754473153235, 0.48318754473153236, 0.49318754473153237, 0.5031875447315324, 0.5131875447315324]}, {"amplitude": [9.170569672181733, 9.220569672181734, 9.270569672181733, 9.320569672181733, 9.370569672181732, 9.420569672181733, 9.470569672181734, 9.520569672181733, 9.570569672181733, 9.620569672181732, 9.670569672181733, 9.720569672181734, 9.770569672181733, 9.820569672181733, 9.870569672181732, 9.920569672181733, 9.970569672181734, 10.020569672181733, 10.070569672181733, 10.120569672181732, 10.170569672181733, 10.220569672181734, 10.270569672181733, 10.320569672181733, 10.370569672181732, 10.420569672181733, 10.470569672181734, 10.520569672181733, 10.570569672181733, 10.620569672181732, 10.670569672181733, 10.720569672181734, 10.770569672181733, 10.820569672181733, 10.870569672181732, 10.920569672181733, 10.970569672181734, 11.020569672181733, 11.070569672181733, 11.120569672181732, 11.170569672181733, 11.220569672181734, 11.270569672181733, 11.320569672181733, 11.370569672181732, 11.420569672181733, 11.470569672181734, 11.520569672181733, 11.570569672181733, 11.620569672181732, 11.670569672181733, 11.720569672181734, 11.770569672181733, 11.820569672181733, 11.870569672181732, 11.920569672181733], "phase": [-0.027899110603923014, -0.01789911060392301, -0.007899110603923013, 0.0021008893960769853, 0.012100889396076987, 0.02210088939607699, 0.032100889396076984, 0.04210088939607699, 0.05210088939607699, 0.06210088939607698, 0.07210088939607699, 0.08210088939607699, 0.09210088939607698, 0.10210088939607699, 0.112100889396077, 0.12210088939607698, 0.132100889396077, 0.142100889396077, 0.15210088939607697, 0.16210088939607697, 0.17210088939607698, 0.182100889396077, 0.192100889396077, 0.202100889396077, 0.21210088939607696, 0.22210088939607697, 0.23210088939607698, 0.242100889396077, 0.252100889396077, 0.26210088939607695, 0.27210088939607696, 0.28210088939607697, 0.292100889396077, 0.302100889396077, 0.312100889396077, 0.322100889396077, 0.33210088939607696, 0.34210088939607697, 0.352100889396077, 0.362100889396077, 0.372100889396077, 0.382100889396077, 0.39210088939607696, 0.40210088939607697, 0.412100889396077, 0.422100889396077, 0.432100889396077, 0.442100889396077, 0.45210088939607695, 0.46210088939607696, 0.472100889396077, 0.482100889396077, 0.492100889396077, 0.502100889396077, 0.512100889396077, 0.522100889396077]}, {"amplitude": [9.419873239049945, 9.469873239049946, 9.519873239049945, 9.569873239049945, 9.619873239049944, 9.669873239049945, 9.719873239049946, 9.769873239049945, 9.819873239049945, 9.869873239049944, 9.919873239049945, 9.969873239049946, 10.019873239049945, 10.069873239049945, 10.119873239049944, 10.169873239049945, 10.219873239049946, 10.269873239049945, 10.319873239049945, 10.369873239049944, 10.419873239049945, 10.469873239049946, 10.519873239049945, 10.569873239049945, 10.619873239049944, 10.669873239049945, 10.719873239049946, 10.769873239049945, 10.819873239049945, 10.869873239049944, 10.919873239049945, 10.969873239049946, 11.019873239049945, 11.069873239049945, 11.119873239049944, 11.169873239049945, 11.219873239049946, 11.269873239049945, 11.319873239049945, 11.369873239049944, 11.419873239049945, 11.469873239049946, 11.519873239049945, 11.569873239049945, 11.619873239049944, 11.669873239049945, 11.719873239049946, 11.769873239049945, 11.819873239049945, 11.869873239049944, 11.919873239049945, 11.969873239049946, 12.019873239049945, 12.069873239049945, 12.119873239049944, 12.169873239049945], "phase": [-0.01873813145857243, -0.008738131458572431, 0.0012618685414275688, 0.011261868541427567, 0.02126186854142757, 0.03126186854142757, 0.04126186854142756, 0.05126186854142757, 0.06126186854142757, 0.07126186854142756, 0.08126186854142757, 0.09126186854142757, 0.10126186854142756, 0.11126186854142757, 0.12126186854142758, 0.13126186854142757, 0.14126186854142758, 0.1512618685414276, 0.16126186854142757, 0.17126186854142758, 0.1812618685414276, 0.19126186854142757, 0.20126186854142758, 0.2112618685414276, 0.22126186854142757, 0.23126186854142758, 0.2412618685414276, 0.25126186854142757, 0.2612618685414276, 0.27126186854142753, 0.28126186854142754, 0.29126186854142755, 0.30126186854142756, 0.31126186854142757, 0.3212618685414276, 0.3312618685414276, 0.34126186854142754, 0.35126186854142755, 0.36126186854142756, 0.37126186854142756, 0.3812618685414276, 0.3912618685414276, 0.40126186854142754, 0.41126186854142754, 0.42126186854142755, 0.43126186854142756, 0.44126186854142757, 0.4512618685414276, 0.46126186854142753, 0.47126186854142754, 0.48126186854142755, 0.49126186854142756, 0.5012618685414276, 0.5112618685414276, 0.5212618685414276, 0.5312618685414277]}, {"amplitude": [9.701346007557563, 9.751346007557563, 9.801346007557562, 9.851346007557563, 9.901346007557562, 9.951346007557563, 10.001346007557563, 10.051346007557562, 10.101346007557563, 10.151346007557562, 10.201346007557563, 10.251346007557563, 10.301346007557562, 10.351346007557563, 10.401346007557562, 10.451346007557563, 10.501346007557563, 10.551346007557562, 10.601346007557563, 10.651346007557562, 10.701346007557563, 10.751346007557563, 10.801346007557562, 10.851346007557563, 10.901346007557562, 10.951346007557563, 11.001346007557563, 11.051346007557562, 11.101346007557563, 11.151346007557562, 11.201346007557563, 11.251346007557563, 11.301346007557562, 11.351346007557563, 11.401346007557562, 11.451346007557563, 11.501346007557563, 11.551346007557562, 11.601346007557563, 11.651346007557562, 11.701346007557563, 11.751346007557563, 11.801346007557562, 11.851346007557563, 11.901346007557562, 11.951346007557563, 12.001346007557563, 12.051346007557562, 12.101346007557563, 12.151346007557562, 12.201346007557563, 12.251346007557563, 12.301346007557562, 12.351346007557563, 12.401346007557562, 12.451346007557563], "phase": [-0.00941083133185163, 0.000589168668148371, 0.010589168668148371, 0.020589168668148368, 0.03058916866814837, 0.04058916866814837, 0.05058916866814837, 0.060589168668148376, 0.07058916866814838, 0.08058916866814837, 0.09058916866814838, 0.10058916866814838, 0.11058916866814837, 0.12058916866814838, 0.13058916866814838, 0.14058916866814836, 0.15058916866814837, 0.16058916866814837, 0.17058916866814836, 0.18058916866814836, 0.19058916866814837, 0.20058916866814835, 0.21058916866814836, 0.22058916866814837, 0.23058916866814835, 0.24058916866814836, 0.2505891686681484, 0.2605891686681484, 0.2705891686681484, 0.28058916866814837, 0.2905891686681484, 0.3005891686681484, 0.3105891686681484, 0.3205891686681484, 0.3305891686681484, 0.3405891686681484, 0.3505891686681484, 0.3605891686681484, 0.3705891686681484, 0.3805891686681484, 0.3905891686681484, 0.4005891686681484, 0.4105891686681484, 0.4205891686681484, 0.4305891686681484, 0.4405891686681484, 0.4505891686681484, 0.4605891686681484, 0.47058916866814837, 0.4805891686681484, 0.4905891686681484, 0.5005891686681484, 0.5105891686681484, 0.5205891686681484, 0.5305891686681484, 0.5405891686681484]}, {"amplitude": [9.999999999999998, 10.049999999999999, 10.099999999999998, 10.149999999999999, 10.199999999999998, 10.249999999999998, 10.299999999999999, 10.349999999999998, 10.399999999999999, 10.449999999999998, 10.499999999999998, 10.549999999999999, 10.599999999999998, 10.649999999999999, 10.699999999999998, 10.749999999999998, 10.799999999999999, 10.849999999999998, 10.899999999999999, 10.949999999999998, 10.999999999999998, 11.049999999999999, 11.099999999999998, 11.149999999999999, 11.199999999999998, 11.249999999999998, 11.299999999999999, 11.349999999999998, 11.399999999999999, 11.449999999999998, 11.499999999999998, 11.549999999999999, 11.599999999999998, 11.649999999999999, 11.699999999999998, 11.749999999999998, 11.799999999999999, 11.849999999999998, 11.899999999999999, 11.949999999999998, 11.999999999999998, 12.049999999999999, 12.099999999999998, 12.149999999999999, 12.199999999999998, 12.249999999999998, 12.299999999999999, 12.349999999999998, 12.399999999999999, 12.449999999999998, 12.499999999999998, 12.549999999999999, 12.599999999999998, 12.649999999999999, 12.699999999999998, 12.749999999999998], "phase": [-7.347880794884119e-17, 0.009999999999999927, 0.019999999999999928, 0.029999999999999926, 0.039999999999999925, 0.049999999999999926, 0.05999999999999992, 0.06999999999999994, 0.07999999999999993, 0.08999999999999993, 0.09999999999999994, 0.10999999999999993, 0.11999999999999993, 0.12999999999999992, 0.13999999999999993, 0.1499999999999999, 0.15999999999999992, 0.16999999999999993, 0.1799999999999999, 0.18999999999999992, 0.19999999999999993, 0.2099999999999999, 0.21999999999999992, 0.22999999999999993, 0.2399999999999999, 0.24999999999999992, 0.25999999999999995, 0.26999999999999996, 0.27999999999999997, 0.2899999999999999, 0.29999999999999993, 0.30999999999999994, 0.31999999999999995, 0.32999999999999996, 0.33999999999999997, 0.35, 0.35999999999999993, 0.36999999999999994, 0.37999999999999995, 0.38999999999999996, 0.39999999999999997, 0.41, 0.41999999999999993, 0.42999999999999994, 0.43999999999999995, 0.44999999999999996, 0.45999999999999996, 0.47, 0.4799999999999999, 0.48999999999999994, 0.49999999999999994, 0.5099999999999999, 0.5199999999999999, 0.5299999999999999, 0.5399999999999999, 0.5499999999999999]}, {"amplitude": [10.298653992442434, 10.348653992442435, 10.398653992442433, 10.448653992442434, 10.498653992442433, 10.548653992442434, 10.598653992442435, 10.648653992442433, 10.698653992442434, 10.748653992442433, 10.798653992442434, 10.848653992442435, 10.898653992442433, 10.948653992442434, 10.998653992442433, 11.048653992442434, 11.098653992442435, 11.148653992442433, 11.198653992442434, 11.248653992442433, 11.298653992442434, 11.348653992442435, 11.398653992442433, 11.448653992442434, 11.498653992442433, 11.548653992442434, 11.598653992442435, 11.648653992442433, 11.698653992442434, 11.748653992442433, 11.798653992442434, 11.848653992442435, 11.898653992442433, 11.948653992442434, 11.998653992442433, 12.048653992442434, 12.098653992442435, 12.148653992442433, 12.198653992442434, 12.248653992442433, 12.298653992442434, 12.348653992442435, 12.398653992442433, 12.448653992442434, 12.498653992442433, 12.548653992442434, 12.598653992442435, 12.648653992442433, 12.698653992442434, 12.748653992442433, 12.798653992442434, 12.848653992442435, 12.898653992442433, 12.948653992442434, 12.998653992442433, 13.048653992442434], "phase": [0.009410831331851484, 0.019410831331851484, 0.029410831331851482, 0.039410831331851484, 0.049410831331851486, 0.05941083133185149, 0.06941083133185148, 0.07941083133185149, 0.08941083133185149, 0.09941083133185148, 0.10941083133185149, 0.11941083133185149, 0.12941083133185147, 0.13941083133185148, 0.14941083133185148, 0.15941083133185147, 0.16941083133185147, 0.17941083133185148, 0.18941083133185146, 0.19941083133185147, 0.20941083133185148, 0.21941083133185146, 0.22941083133185147, 0.23941083133185148, 0.24941083133185146, 0.2594108313318515, 0.2694108313318515, 0.2794108313318515, 0.2894108313318515, 0.2994108313318515, 0.3094108313318515, 0.3194108313318515, 0.3294108313318515, 0.3394108313318515, 0.3494108313318515, 0.35941083133185153, 0.3694108313318515, 0.3794108313318515, 0.3894108313318515, 0.3994108313318515, 0.4094108313318515, 0.41941083133185153, 0.4294108313318515, 0.4394108313318515, 0.4494108313318515, 0.4594108313318515, 0.4694108313318515, 0.47941083133185153, 0.4894108313318515, 0.4994108313318515, 0.5094108313318515, 0.5194108313318515, 0.5294108313318515, 0.5394108313318515, 0.5494108313318515, 0.5594108313318515]}, {"amplitude": [10.580126760950051, 10.630126760950052, 10.680126760950051, 10.730126760950052, 10.78012676095005, 10.830126760950051, 10.880126760950052, 10.930126760950051, 10.980126760950052, 11.03012676095005, 11.080126760950051, 11.130126760950052, 11.180126760950051, 11.230126760950052, 11.28012676095005, 11.330126760950051, 11.380126760950052, 11.430126760950051, 11.480126760950052, 11.53012676095005, 11.580126760950051, 11.630126760950052, 11.680126760950051, 11.730126760950052, 11.78012676095005, 11.830126760950051, 11.880126760950052, 11.930126760950051, 11.980126760950052, 12.03012676095005, 12.080126760950051, 12.130126760950052, 12.180126760950051, 12.230126760950052, 12.28012676095005, 12.330126760950051, 12.380126760950052, 12.430126760950051, 12.480126760950052, 12.53012676095005, 12.580126760950051, 12.630126760950052, 12.680126760950051, 12.730126760950052, 12.78012676095005, 12.830126760950051, 12.880126760950052, 12.930126760950051, 12.980126760950052, 13.03012676095005, 13.080126760950051, 13.130126760950052, 13.180126760950051, 13.230126760950052, 13.28012676095005, 13.330126760950051], "phase": [0.018738131458572286, 0.028738131458572284, 0.038738131458572286, 0.04873813145857228, 0.05873813145857229, 0.06873813145857229, 0.07873813145857228, 0.08873813145857229, 0.09873813145857228, 0.10873813145857228, 0.11873813145857229, 0.1287381314585723, 0.13873813145857228, 0.1487381314585723, 0.1587381314585723, 0.16873813145857228, 0.17873813145857229, 0.1887381314585723, 0.19873813145857228, 0.20873813145857228, 0.2187381314585723, 0.22873813145857227, 0.23873813145857228, 0.2487381314585723, 0.2587381314585723, 0.2687381314585723, 0.2787381314585723, 0.2887381314585723, 0.2987381314585723, 0.30873813145857226, 0.31873813145857227, 0.3287381314585723, 0.3387381314585723, 0.3487381314585723, 0.3587381314585723, 0.3687381314585723, 0.37873813145857227, 0.3887381314585723, 0.3987381314585723, 0.4087381314585723, 0.4187381314585723, 0.4287381314585723, 0.43873813145857227, 0.4487381314585723, 0.4587381314585723, 0.4687381314585723, 0.4787381314585723, 0.4887381314585723, 0.49873813145857226, 0.5087381314585723, 0.5187381314585723, 0.5287381314585723, 0.5387381314585723, 0.5487381314585723, 0.5587381314585723, 0.5687381314585723]}, {"amplitude": [10.829430327818262, 10.879430327818262, 10.929430327818261, 10.979430327818262, 11.029430327818261, 11.079430327818262, 11.129430327818262, 11.179430327818261, 11.229430327818262, 11.279430327818261, 11.329430327818262, 11.379430327818262, 11.429430327818261, 11.479430327818262, 11.529430327818261, 11.579430327818262, 11.629430327818262, 11.679430327818261, 11.729430327818262, 11.779430327818261, 11.829430327818262, 11.879430327818262, 11.929430327818261, 11.979430327818262, 12.029430327818261, 12.079430327818262, 12.129430327818262, 12.179430327818261, 12.229430327818262, 12.279430327818261, 12.329430327818262, 12.379430327818262, 12.429430327818261, 12.479430327818262, 12.529430327818261, 12.579430327818262, 12.629430327818262, 12.679430327818261, 12.729430327818262, 12.779430327818261, 12.829430327818262, 12.879430327818262, 12.929430327818261, 12.979430327818262, 13.029430327818261, 13.079430327818262, 13.129430327818262, 13.179430327818261, 13.229430327818262, 13.279430327818261, 13.329430327818262, 13.379430327818262, 13.429430327818261, 13.479430327818262, 13.529430327818261, 13.579430327818262], "phase": [0.027899110603922875, 0.03789911060392288, 0.04789911060392288, 0.057899110603922874, 0.06789911060392287, 0.07789911060392288, 0.08789911060392287, 0.09789911060392288, 0.10789911060392288, 0.11789911060392287, 0.1278991106039229, 0.13789911060392288, 0.14789911060392286, 0.15789911060392287, 0.16789911060392287, 0.17789911060392288, 0.1878991106039229, 0.1978991106039229, 0.20789911060392285, 0.21789911060392286, 0.22789911060392287, 0.23789911060392288, 0.2478991106039229, 0.2578991106039229, 0.26789911060392285, 0.27789911060392286, 0.28789911060392287, 0.2978991106039229, 0.3078991106039229, 0.31789911060392284, 0.32789911060392285, 0.33789911060392286, 0.34789911060392287, 0.3578991106039229, 0.3678991106039229, 0.3778991106039229, 0.38789911060392285, 0.39789911060392286, 0.40789911060392287, 0.4178991106039229, 0.4278991106039229, 0.4378991106039229, 0.44789911060392285, 0.45789911060392285, 0.46789911060392286, 0.47789911060392287, 0.4878991106039229, 0.4978991106039229, 0.5078991106039229, 0.5178991106039229, 0.5278991106039229, 0.5378991106039229, 0.5478991106039229, 0.5578991106039229, 0.567899110603923, 0.577899110603923]}, {"amplitude": [11.035657123897831, 11.085657123897832, 11.135657123897833, 11.185657123897833, 11.23565712389783, 11.285657123897831, 11.335657123897832, 11.385657123897833, 11.435657123897833, 11.48565712389783, 11.535657123897831, 11.585657123897832, 11.635657123897833, 11.685657123897833, 11.73565712389783, 11.785657123897831, 11.835657123897832, 11.885657123897833, 11.935657123897833, 11.98565712389783, 12.035657123897831, 12.085657123897832, 12.135657123897833, 12.185657123897833, 12.23565712389783, 12.285657123897831, 12.335657123897832, 12.385657123897833, 12.435657123897833, 12.48565712389783, 12.535657123897831, 12.585657123897832, 12.635657123897833, 12.685657123897833, 12.73565712389783, 12.785657123897831, 12.835657123897832, 12.885657123897833, 12.935657123897833, 12.98565712389783, 13.035657123897831, 13.085657123897832, 13.135657123897833, 13.185657123897833, 13.23565712389783, 13.285657123897831, 13.335657123897832, 13.385657123897833, 13.435657123897833, 13.48565712389783, 13.535657123897831, 13.585657123897832, 13.635657123897833, 13.685657123897833, 13.73565712389783, 13.785657123897831], "phase": [0.03681245526846753, 0.04681245526846753, 0.056812455268467524, 0.06681245526846752, 0.07681245526846753, 0.08681245526846754, 0.09681245526846752, 0.10681245526846753, 0.11681245526846754, 0.12681245526846752, 0.13681245526846753, 0.14681245526846753, 0.15681245526846752, 0.16681245526846752, 0.17681245526846753, 0.18681245526846751, 0.19681245526846752, 0.20681245526846753, 0.2168124552684675, 0.22681245526846752, 0.23681245526846753, 0.2468124552684675, 0.2568124552684675, 0.26681245526846753, 0.27681245526846754, 0.28681245526846755, 0.29681245526846756, 0.30681245526846757, 0.3168124552684676, 0.3268124552684675, 0.33681245526846754, 0.34681245526846755, 0.35681245526846755, 0.36681245526846756, 0.37681245526846757, 0.3868124552684676, 0.39681245526846753, 0.40681245526846754, 0.41681245526846755, 0.42681245526846756, 0.43681245526846757, 0.4468124552684676, 0.45681245526846753, 0.46681245526846754, 0.47681245526846755, 0.48681245526846756, 0.49681245526846757, 0.5068124552684675, 0.5168124552684675, 0.5268124552684675, 0.5368124552684675, 0.5468124552684676, 0.5568124552684676, 0.5668124552684676, 0.5768124552684676, 0.5868124552684676]}, {"amplitude": [11.193297954367637, 11.243297954367637, 11.293297954367636, 11.343297954367637, 11.393297954367636, 11.443297954367637, 11.493297954367637, 11.543297954367636, 11.593297954367637, 11.643297954367636, 11.693297954367637, 11.743297954367637, 11.793297954367636, 11.843297954367637, 11.893297954367636, 11.943297954367637, 11.993297954367637, 12.043297954367636, 12.093297954367637, 12.143297954367636, 12.193297954367637, 12.243297954367637, 12.293297954367636, 12.343297954367637, 12.393297954367636, 12.443297954367637, 12.493297954367637, 12.543297954367636, 12.593297954367637, 12.643297954367636, 12.693297954367637, 12.743297954367637, 12.793297954367636, 12.843297954367637, 12.893297954367636, 12.943297954367637, 12.993297954367637, 13.043297954367636, 13.093297954367637, 13.143297954367636, 13.193297954367637, 13.243297954367637, 13.293297954367636, 13.343297954367637, 13.393297954367636, 13.443297954367637, 13.493297954367637, 13.543297954367636, 13.593297954367637, 13.643297954367636, 13.693297954367637, 13.743297954367637, 13.793297954367636, 13.843297954367637, 13.893297954367636, 13.943297954367637], "phase": [0.04539904997395453, 0.055399049973954534, 0.06539904997395453, 0.07539904997395452, 0.08539904997395453, 0.09539904997395454, 0.10539904997395452, 0.11539904997395453, 0.12539904997395454, 0.13539904997395452, 0.14539904997395453, 0.15539904997395454, 0.16539904997395452, 0.17539904997395453, 0.18539904997395454, 0.19539904997395452, 0.20539904997395453, 0.21539904997395454, 0.22539904997395452, 0.23539904997395453, 0.24539904997395454, 0.2553990499739545, 0.2653990499739545, 0.27539904997395454, 0.28539904997395454, 0.29539904997395455, 0.30539904997395456, 0.31539904997395457, 0.3253990499739546, 0.33539904997395453, 0.34539904997395454, 0.35539904997395455, 0.36539904997395456, 0.37539904997395457, 0.3853990499739546, 0.3953990499739546, 0.40539904997395454, 0.41539904997395455, 0.42539904997395456, 0.43539904997395457, 0.4453990499739546, 0.4553990499739546, 0.46539904997395454, 0.47539904997395455, 0.48539904997395455, 0.49539904997395456, 0.5053990499739546, 0.5153990499739546, 0.5253990499739545, 0.5353990499739545, 0.5453990499739545, 0.5553990499739545, 0.5653990499739545, 0.5753990499739545, 0.5853990499739545, 0.5953990499739545]}, {"amplitude": [11.302807562790731, 11.352807562790732, 11.40280756279073, 11.452807562790731, 11.50280756279073, 11.552807562790731, 11.602807562790732, 11.65280756279073, 11.702807562790731, 11.75280756279073, 11.802807562790731, 11.852807562790732, 11.90280756279073, 11.952807562790731, 12.00280756279073, 12.052807562790731, 12.102807562790732, 12.15280756279073, 12.202807562790731, 12.25280756279073, 12.302807562790731, 12.352807562790732, 12.40280756279073, 12.452807562790731, 12.50280756279073, 12.552807562790731, 12.602807562790732, 12.65280756279073, 12.702807562790731, 12.75280756279073, 12.802807562790731, 12.852807562790732, 12.90280756279073, 12.952807562790731, 13.00280756279073, 13.052807562790731, 13.102807562790732, 13.15280756279073, 13.202807562790731, 13.25280756279073, 13.302807562790731, 13.352807562790732, 13.40280756279073, 13.452807562790731, 13.50280756279073, 13.552807562790731, 13.602807562790732, 13.65280756279073, 13.702807562790731, 13.75280756279073, 13.802807562790731, 13.852807562790732, 13.90280756279073, 13.952807562790731, 14.00280756279073, 14.052807562790731], "phase": [0.05358267949789963, 0.06358267949789963, 0.07358267949789964, 0.08358267949789963, 0.09358267949789964, 0.10358267949789964, 0.11358267949789963, 0.12358267949789964, 0.13358267949789965, 0.14358267949789963, 0.15358267949789964, 0.16358267949789962, 0.17358267949789963, 0.18358267949789964, 0.19358267949789965, 0.20358267949789963, 0.21358267949789964, 0.22358267949789964, 0.23358267949789963, 0.24358267949789963, 0.25358267949789964, 0.2635826794978996, 0.2735826794978996, 0.2835826794978996, 0.2935826794978996, 0.30358267949789963, 0.31358267949789964, 0.32358267949789965, 0.33358267949789966, 0.3435826794978996, 0.3535826794978996, 0.36358267949789963, 0.37358267949789964, 0.38358267949789965, 0.39358267949789966, 0.40358267949789967, 0.4135826794978996, 0.42358267949789963, 0.43358267949789964, 0.44358267949789965, 0.45358267949789965, 0.46358267949789966, 0.4735826794978996, 0.4835826794978996, 0.49358267949789963, 0.5035826794978997, 0.5135826794978997, 0.5235826794978997, 0.5335826794978996, 0.5435826794978996, 0.5535826794978996, 0.5635826794978996, 0.5735826794978997, 0.5835826794978997, 0.5935826794978997, 0.6035826794978997]}, {"amplitude": [11.370340209536467, 11.420340209536468, 11.470340209536467, 11.520340209536467, 11.570340209536466, 11.620340209536467, 11.670340209536468, 11.720340209536467, 11.770340209536467, 11.820340209536466, 11.870340209536467, 11.920340209536468, 11.970340209536467, 12.020340209536467, 12.070340209536466, 12.120340209536467, 12.170340209536468, 12.220340209536467, 12.270340209536467, 12.320340209536466, 12.370340209536467, 12.420340209536468, 12.470340209536467, 12.520340209536467, 12.570340209536466, 12.620340209536467, 12.670340209536468, 12.720340209536467, 12.770340209536467, 12.820340209536466, 12.870340209536467, 12.920340209536468, 12.970340209536467, 13.020340209536467, 13.070340209536466, 13.120340209536467, 13.170340209536468, 13.220340209536467, 13.270340209536467, 13.320340209536466, 13.370340209536467, 13.420340209536468, 13.470340209536467, 13.520340209536467, 13.570340209536466, 13.620340209536467, 13.670340209536468, 13.720340209536467, 13.770340209536467, 13.820340209536466, 13.870340209536467, 13.920340209536468, 13.970340209536467, 14.020340209536467, 14.070340209536466, 14.120340209536467], "phase": [0.06129070536529744, 0.07129070536529744, 0.08129070536529744, 0.09129070536529743, 0.10129070536529744, 0.11129070536529745, 0.12129070536529743, 0.13129070536529744, 0.14129070536529745, 0.15129070536529743, 0.16129070536529744, 0.17129070536529745, 0.18129070536529743, 0.19129070536529744, 0.20129070536529745, 0.21129070536529743, 0.22129070536529744, 0.23129070536529744, 0.24129070536529743, 0.25129070536529746, 0.26129070536529747, 0.2712907053652974, 0.28129070536529743, 0.29129070536529744, 0.30129070536529745, 0.31129070536529746, 0.32129070536529747, 0.3312907053652975, 0.3412907053652975, 0.35129070536529744, 0.36129070536529745, 0.37129070536529746, 0.38129070536529747, 0.3912907053652975, 0.4012907053652975, 0.4112907053652975, 0.42129070536529745, 0.43129070536529746, 0.44129070536529746, 0.4512907053652975, 0.4612907053652975, 0.4712907053652975, 0.48129070536529744, 0.49129070536529745, 0.5012907053652974, 0.5112907053652974, 0.5212907053652974, 0.5312907053652974, 0.5412907053652974, 0.5512907053652975, 0.5612907053652975, 0.5712907053652975, 0.5812907053652975, 0.5912907053652975, 0.6012907053652975, 0.6112907053652975]}, {"amplitude": [11.406694181926667, 11.456694181926668, 11.506694181926667, 11.556694181926668, 11.606694181926667, 11.656694181926667, 11.706694181926668, 11.756694181926667, 11.806694181926668, 11.856694181926667, 11.906694181926667, 11.956694181926668, 12.006694181926667, 12.056694181926668, 12.106694181926667, 12.156694181926667, 12.206694181926668, 12.256694181926667, 12.306694181926668, 12.356694181926667, 12.406694181926667, 12.456694181926668, 12.506694181926667, 12.556694181926668, 12.606694181926667, 12.656694181926667, 12.706694181926668, 12.756694181926667, 12.806694181926668, 12.856694181926667, 12.906694181926667, 12.956694181926668, 13.006694181926667, 13.056694181926668, 13.106694181926667, 13.156694181926667, 13.206694181926668, 13.256694181926667, 13.306694181926668, 13.356694181926667, 13.406694181926667, 13.456694181926668, 13.506694181926667, 13.556694181926668, 13.606694181926667, 13.656694181926667, 13.706694181926668, 13.756694181926667, 13.806694181926668, 13.856694181926667, 13.906694181926667, 13.956694181926668, 14.006694181926667, 14.056694181926668, 14.106694181926667, 14.156694181926667], "phase": [0.06845471059286877, 0.07845471059286876, 0.08845471059286877, 0.09845471059286877, 0.10845471059286876, 0.11845471059286877, 0.12845471059286878, 0.1384547105928688, 0.14845471059286877, 0.15845471059286875, 0.16845471059286876, 0.17845471059286877, 0.18845471059286878, 0.1984547105928688, 0.2084547105928688, 0.21845471059286875, 0.22845471059286876, 0.23845471059286877, 0.24845471059286878, 0.2584547105928688, 0.2684547105928688, 0.27845471059286875, 0.28845471059286876, 0.29845471059286877, 0.3084547105928688, 0.3184547105928688, 0.3284547105928688, 0.3384547105928688, 0.3484547105928688, 0.35845471059286876, 0.3684547105928688, 0.3784547105928688, 0.3884547105928688, 0.3984547105928688, 0.4084547105928688, 0.4184547105928688, 0.42845471059286877, 0.4384547105928688, 0.4484547105928688, 0.4584547105928688, 0.4684547105928688, 0.4784547105928688, 0.48845471059286877, 0.4984547105928688, 0.5084547105928687, 0.5184547105928687, 0.5284547105928687, 0.5384547105928688, 0.5484547105928688, 0.5584547105928688, 0.5684547105928688, 0.5784547105928688, 0.5884547105928688, 0.5984547105928688, 0.6084547105928688, 0.6184547105928688]}, {"amplitude": [11.425615173111463, 11.475615173111464, 11.525615173111463, 11.575615173111464, 11.625615173111463, 11.675615173111463, 11.725615173111464, 11.775615173111463, 11.825615173111464, 11.875615173111463, 11.925615173111463, 11.975615173111464, 12.025615173111463, 12.075615173111464, 12.125615173111463, 12.175615173111463, 12.225615173111464, 12.275615173111463, 12.325615173111464, 12.375615173111463, 12.425615173111463, 12.475615173111464, 12.525615173111463, 12.575615173111464, 12.625615173111463, 12.675615173111463, 12.725615173111464, 12.775615173111463, 12.825615173111464, 12.875615173111463, 12.925615173111463, 12.975615173111464, 13.025615173111463, 13.075615173111464, 13.125615173111463, 13.175615173111463, 13.225615173111464, 13.275615173111463, 13.325615173111464, 13.375615173111463, 13.425615173111463, 13.475615173111464, 13.525615173111463, 13.575615173111464, 13.625615173111463, 13.675615173111463, 13.725615173111464, 13.775615173111463, 13.825615173111464, 13.875615173111463, 13.925615173111463, 13.975615173111464, 14.025615173111463, 14.075615173111464, 14.125615173111463, 14.175615173111463], "phase": [0.0750111069630457, 0.0850111069630457, 0.09501110696304571, 0.1050111069630457, 0.1150111069630457, 0.1250111069630457, 0.1350111069630457, 0.1450111069630457, 0.1550111069630457, 0.16501110696304572, 0.17501110696304573, 0.1850111069630457, 0.1950111069630457, 0.2050111069630457, 0.2150111069630457, 0.22501110696304572, 0.23501110696304572, 0.24501110696304573, 0.2550111069630457, 0.2650111069630457, 0.2750111069630457, 0.2850111069630457, 0.2950111069630457, 0.30501110696304573, 0.3150111069630457, 0.3250111069630457, 0.3350111069630457, 0.3450111069630457, 0.3550111069630457, 0.3650111069630457, 0.3750111069630457, 0.3850111069630457, 0.3950111069630457, 0.4050111069630457, 0.4150111069630457, 0.4250111069630457, 0.4350111069630457, 0.4450111069630457, 0.4550111069630457, 0.4650111069630457, 0.4750111069630457, 0.4850111069630457, 0.4950111069630457, 0.5050111069630457, 0.5150111069630458, 0.5250111069630458, 0.5350111069630458, 0.5450111069630458, 0.5550111069630457, 0.5650111069630457, 0.5750111069630457, 0.5850111069630457, 0.5950111069630457, 0.6050111069630457, 0.6150111069630457, 0.6250111069630457]}, {"amplitude": [11.441698413062152, 11.491698413062153, 11.541698413062152, 11.591698413062153, 11.641698413062151, 11.691698413062152, 11.741698413062153, 11.791698413062152, 11.841698413062153, 11.891698413062151, 11.941698413062152, 11.991698413062153, 12.041698413062152, 12.091698413062153, 12.141698413062151, 12.191698413062152, 12.241698413062153, 12.291698413062152, 12.341698413062153, 12.391698413062151, 12.441698413062152, 12.491698413062153, 12.541698413062152, 12.591698413062153, 12.641698413062151, 12.691698413062152, 12.741698413062153, 12.791698413062152, 12.841698413062153, 12.891698413062151, 12.941698413062152, 12.991698413062153, 13.041698413062152, 13.091698413062153, 13.141698413062151, 13.191698413062152, 13.241698413062153, 13.291698413062152, 13.341698413062153, 13.391698413062151, 13.441698413062152, 13.491698413062153, 13.541698413062152, 13.591698413062153, 13.641698413062151, 13.691698413062152, 13.741698413062153, 13.791698413062152, 13.841698413062153, 13.891698413062151, 13.941698413062152, 13.991698413062153, 14.041698413062152, 14.091698413062153, 14.141698413062151, 14.191698413062152], "phase": [0.08090169943749459, 0.09090169943749458, 0.1009016994374946, 0.11090169943749459, 0.1209016994374946, 0.13090169943749458, 0.1409016994374946, 0.1509016994374946, 0.1609016994374946, 0.1709016994374946, 0.1809016994374946, 0.19090169943749458, 0.20090169943749459, 0.2109016994374946, 0.2209016994374946, 0.23090169943749458, 0.2409016994374946, 0.25090169943749463, 0.2609016994374946, 0.2709016994374946, 0.2809016994374946, 0.29090169943749455, 0.30090169943749456, 0.31090169943749457, 0.3209016994374946, 0.3309016994374946, 0.3409016994374946, 0.3509016994374946, 0.3609016994374946, 0.37090169943749457, 0.3809016994374946, 0.3909016994374946, 0.4009016994374946, 0.4109016994374946, 0.4209016994374946, 0.4309016994374946, 0.4409016994374946, 0.4509016994374946, 0.4609016994374946, 0.4709016994374946, 0.4809016994374946, 0.4909016994374946, 0.5009016994374946, 0.5109016994374946, 0.5209016994374946, 0.5309016994374947, 0.5409016994374947, 0.5509016994374947, 0.5609016994374946, 0.5709016994374946, 0.5809016994374946, 0.5909016994374946, 0.6009016994374946, 0.6109016994374946, 0.6209016994374946, 0.6309016994374946]}, {"amplitude": [11.468185676357283, 11.518185676357284, 11.568185676357285, 11.618185676357285, 11.668185676357282, 11.718185676357283, 11.768185676357284, 11.818185676357285, 11.868185676357285, 11.918185676357282, 11.968185676357283, 12.018185676357284, 12.068185676357285, 12.118185676357285, 12.168185676357282, 12.218185676357283, 12.268185676357284, 12.318185676357285, 12.368185676357285, 12.418185676357282, 12.468185676357283, 12.518185676357284, 12.568185676357285, 12.618185676357285, 12.668185676357282, 12.718185676357283, 12.768185676357284, 12.818185676357285, 12.868185676357285, 12.918185676357282, 12.968185676357283, 13.018185676357284, 13.068185676357285, 13.118185676357285, 13.168185676357282, 13.218185676357283, 13.268185676357284, 13.318185676357285, 13.368185676357285, 13.418185676357282, 13.468185676357283, 13.518185676357284, 13.568185676357285, 13.618185676357285, 13.668185676357282, 13.718185676357283, 13.768185676357284, 13.818185676357285, 13.868185676357285, 13.918185676357282, 13.968185676357283, 14.018185676357284, 14.068185676357285, 14.118185676357285, 14.168185676357282, 14.218185676357283], "phase": [0.08607420270039448, 0.09607420270039448, 0.10607420270039448, 0.11607420270039448, 0.1260742027003945, 0.1360742027003945, 0.14607420270039448, 0.1560742027003945, 0.16607420270039447, 0.17607420270039448, 0.1860742027003945, 0.1960742027003945, 0.20607420270039448, 0.21607420270039449, 0.2260742027003945, 0.23607420270039448, 0.24607420270039448, 0.2560742027003945, 0.2660742027003945, 0.2760742027003945, 0.2860742027003945, 0.2960742027003945, 0.3060742027003945, 0.3160742027003945, 0.32607420270039444, 0.33607420270039445, 0.34607420270039446, 0.35607420270039447, 0.3660742027003945, 0.3760742027003945, 0.3860742027003945, 0.3960742027003945, 0.4060742027003945, 0.4160742027003945, 0.42607420270039453, 0.43607420270039454, 0.44607420270039444, 0.45607420270039445, 0.46607420270039446, 0.47607420270039447, 0.4860742027003945, 0.4960742027003945, 0.5060742027003945, 0.5160742027003945, 0.5260742027003945, 0.5360742027003945, 0.5460742027003945, 0.5560742027003945, 0.5660742027003944, 0.5760742027003944, 0.5860742027003945, 0.5960742027003945, 0.6060742027003945, 0.6160742027003945, 0.6260742027003945, 0.6360742027003945]}, {"amplitude": [11.514967929713432, 11.564967929713433, 11.614967929713432, 11.664967929713432, 11.714967929713431, 11.764967929713432, 11.814967929713433, 11.864967929713432, 11.914967929713432, 11.964967929713431, 12.014967929713432, 12.064967929713433, 12.114967929713432, 12.164967929713432, 12.214967929713431, 12.264967929713432, 12.314967929713433, 12.364967929713432, 12.414967929713432, 12.464967929713431, 12.514967929713432, 12.564967929713433, 12.614967929713432, 12.664967929713432, 12.714967929713431, 12.764967929713432, 12.814967929713433, 12.864967929713432, 12.914967929713432, 12.964967929713431, 13.014967929713432, 13.064967929713433, 13.114967929713432, 13.164967929713432, 13.214967929713431, 13.264967929713432, 13.314967929713433, 13.364967929713432, 13.414967929713432, 13.464967929713431, 13.514967929713432, 13.564967929713433, 13.614967929713432, 13.664967929713432, 13.714967929713431, 13.764967929713432, 13.814967929713433, 13.864967929713432, 13.914967929713432, 13.964967929713431, 14.014967929713432, 14.064967929713433, 14.114967929713432, 14.164967929713432, 14.214967929713431, 14.264967929713432], "phase": [0.09048270524660196, 0.10048270524660195, 0.11048270524660196, 0.12048270524660196, 0.13048270524660197, 0.14048270524660195, 0.15048270524660196, 0.16048270524660196, 0.17048270524660197, 0.18048270524660195, 0.19048270524660196, 0.20048270524660194, 0.21048270524660195, 0.22048270524660196, 0.23048270524660197, 0.24048270524660195, 0.250482705246602, 0.260482705246602, 0.27048270524660195, 0.28048270524660196, 0.29048270524660197, 0.3004827052466019, 0.31048270524660193, 0.32048270524660194, 0.33048270524660195, 0.34048270524660196, 0.35048270524660197, 0.360482705246602, 0.370482705246602, 0.38048270524660194, 0.39048270524660195, 0.40048270524660196, 0.41048270524660196, 0.420482705246602, 0.430482705246602, 0.440482705246602, 0.45048270524660194, 0.46048270524660195, 0.47048270524660196, 0.48048270524660197, 0.490482705246602, 0.500482705246602, 0.5104827052466019, 0.5204827052466019, 0.5304827052466019, 0.5404827052466019, 0.5504827052466019, 0.5604827052466019, 0.5704827052466019, 0.580482705246602, 0.590482705246602, 0.600482705246602, 0.610482705246602, 0.620482705246602, 0.630482705246602, 0.640482705246602]}, {"amplitude": [11.587075362689845, 11.637075362689846, 11.687075362689844, 11.737075362689845, 11.787075362689844, 11.837075362689845, 11.887075362689846, 11.937075362689844, 11.987075362689845, 12.037075362689844, 12.087075362689845, 12.137075362689846, 12.187075362689844, 12.237075362689845, 12.287075362689844, 12.337075362689845, 12.387075362689846, 12.437075362689844, 12.487075362689845, 12.537075362689844, 12.587075362689845, 12.637075362689846, 12.687075362689844, 12.737075362689845, 12.787075362689844, 12.837075362689845, 12.887075362689846, 12.937075362689844, 12.987075362689845, 13.037075362689844, 13.087075362689845, 13.137075362689846, 13.187075362689844, 13.237075362689845, 13.287075362689844, 13.337075362689845, 13.387075362689846, 13.437075362689844, 13.487075362689845, 13.537075362689844, 13.587075362689845, 13.637075362689846, 13.687075362689844, 13.737075362689845, 13.787075362689844, 13.837075362689845, 13.887075362689846, 13.937075362689844, 13.987075362689845, 14.037075362689844, 14.087075362689845, 14.137075362689846, 14.187075362689844, 14.237075362689845, 14.287075362689844, 14.337075362689845], "phase": [0.09408807689542259, 0.10408807689542258, 0.1140880768954226, 0.12408807689542259, 0.1340880768954226, 0.14408807689542258, 0.1540880768954226, 0.1640880768954226, 0.1740880768954226, 0.1840880768954226, 0.1940880768954226, 0.20408807689542258, 0.21408807689542259, 0.2240880768954226, 0.2340880768954226, 0.24408807689542258, 0.25408807689542257, 0.2640880768954226, 0.2740880768954226, 0.2840880768954226, 0.2940880768954226, 0.3040880768954226, 0.3140880768954226, 0.3240880768954226, 0.3340880768954226, 0.3440880768954226, 0.3540880768954226, 0.3640880768954226, 0.3740880768954226, 0.38408807689542257, 0.3940880768954226, 0.4040880768954226, 0.4140880768954226, 0.4240880768954226, 0.4340880768954226, 0.4440880768954226, 0.4540880768954226, 0.4640880768954226, 0.4740880768954226, 0.4840880768954226, 0.4940880768954226, 0.5040880768954226, 0.5140880768954226, 0.5240880768954226, 0.5340880768954226, 0.5440880768954226, 0.5540880768954226, 0.5640880768954226, 0.5740880768954226, 0.5840880768954226, 0.5940880768954226, 0.6040880768954227, 0.6140880768954227, 0.6240880768954227, 0.6340880768954227, 0.6440880768954227]}, {"amplitude": [11.683867944606657, 11.733867944606658, 11.783867944606657, 11.833867944606657, 11.883867944606656, 11.933867944606657, 11.983867944606658, 12.033867944606657, 12.083867944606657, 12.133867944606656, 12.183867944606657, 12.233867944606658, 12.283867944606657, 12.333867944606657, 12.383867944606656, 12.433867944606657, 12.483867944606658, 12.533867944606657, 12.583867944606657, 12.633867944606656, 12.683867944606657, 12.733867944606658, 12.783867944606657, 12.833867944606657, 12.883867944606656, 12.933867944606657, 12.983867944606658, 13.033867944606657, 13.083867944606657, 13.133867944606656, 13.183867944606657, 13.233867944606658, 13.283867944606657, 13.333867944606657, 13.383867944606656, 13.433867944606657, 13.483867944606658, 13.533867944606657, 13.583867944606657, 13.633867944606656, 13.683867944606657, 13.733867944606658, 13.783867944606657, 13.833867944606657, 13.883867944606656, 13.933867944606657, 13.983867944606658, 14.033867944606657, 14.083867944606657, 14.133867944606656, 14.183867944606657, 14.233867944606658, 14.283867944606657, 14.333867944606657, 14.383867944606656, 14.433867944606657], "phase": [0.0968583161128631, 0.10685831611286309, 0.1168583161128631, 0.12685831611286308, 0.1368583161128631, 0.1468583161128631, 0.1568583161128631, 0.16685831611286311, 0.1768583161128631, 0.18685831611286308, 0.19685831611286309, 0.2068583161128631, 0.2168583161128631, 0.2268583161128631, 0.23685831611286312, 0.24685831611286307, 0.2568583161128631, 0.2668583161128631, 0.2768583161128631, 0.2868583161128631, 0.2968583161128631, 0.30685831611286307, 0.3168583161128631, 0.3268583161128631, 0.3368583161128631, 0.3468583161128631, 0.3568583161128631, 0.3668583161128631, 0.37685831611286313, 0.3868583161128631, 0.3968583161128631, 0.4068583161128631, 0.4168583161128631, 0.4268583161128631, 0.43685831611286313, 0.44685831611286314, 0.4568583161128631, 0.4668583161128631, 0.4768583161128631, 0.4868583161128631, 0.49685831611286313, 0.5068583161128631, 0.516858316112863, 0.526858316112863, 0.536858316112863, 0.5468583161128631, 0.5568583161128631, 0.5668583161128631, 0.5768583161128631, 0.5868583161128631, 0.5968583161128631, 0.6068583161128631, 0.6168583161128631, 0.6268583161128631, 0.6368583161128631, 0.6468583161128632]}, {"amplitude": [11.799041105502535, 11.849041105502536, 11.899041105502533, 11.949041105502534, 11.999041105502535, 12.049041105502535, 12.099041105502536, 12.149041105502533, 12.199041105502534, 12.249041105502535, 12.299041105502535, 12.349041105502536, 12.399041105502533, 12.449041105502534, 12.499041105502535, 12.549041105502535, 12.599041105502536, 12.649041105502533, 12.699041105502534, 12.749041105502535, 12.799041105502535, 12.849041105502536, 12.899041105502533, 12.949041105502534, 12.999041105502535, 13.049041105502535, 13.099041105502536, 13.149041105502533, 13.199041105502534, 13.249041105502535, 13.299041105502535, 13.349041105502536, 13.399041105502533, 13.449041105502534, 13.499041105502535, 13.549041105502535, 13.599041105502536, 13.649041105502533, 13.699041105502534, 13.749041105502535, 13.799041105502535, 13.849041105502536, 13.899041105502533, 13.949041105502534, 13.999041105502535, 14.049041105502535, 14.099041105502536, 14.149041105502533, 14.199041105502534, 14.249041105502535, 14.299041105502535, 14.349041105502536, 14.399041105502533, 14.449041105502534, 14.499041105502535, 14.549041105502535], "phase": [0.09876883405951378, 0.10876883405951378, 0.11876883405951379, 0.12876883405951378, 0.1387688340595138, 0.1487688340595138, 0.15876883405951378, 0.1687688340595138, 0.17876883405951377, 0.18876883405951378, 0.1987688340595138, 0.2087688340595138, 0.21876883405951378, 0.2287688340595138, 0.2387688340595138, 0.24876883405951378, 0.2587688340595138, 0.2687688340595138, 0.2787688340595138, 0.2887688340595138, 0.2987688340595138, 0.3087688340595138, 0.3187688340595138, 0.3287688340595138, 0.33876883405951375, 0.34876883405951375, 0.35876883405951376, 0.3687688340595138, 0.3787688340595138, 0.3887688340595138, 0.3987688340595138, 0.4087688340595138, 0.4187688340595138, 0.4287688340595138, 0.43876883405951383, 0.44876883405951384, 0.45876883405951374, 0.46876883405951375, 0.47876883405951376, 0.48876883405951377, 0.4987688340595138, 0.5087688340595138, 0.5187688340595138, 0.5287688340595138, 0.5387688340595138, 0.5487688340595138, 0.5587688340595138, 0.5687688340595138, 0.5787688340595137, 0.5887688340595137, 0.5987688340595138, 0.6087688340595138, 0.6187688340595138, 0.6287688340595138, 0.6387688340595138, 0.6487688340595138]}, {"amplitude": [11.921446490707089, 11.97144649070709, 12.021446490707088, 12.071446490707089, 12.121446490707088, 12.171446490707089, 12.22144649070709, 12.271446490707088, 12.321446490707089, 12.371446490707088, 12.421446490707089, 12.47144649070709, 12.521446490707088, 12.571446490707089, 12.621446490707088, 12.671446490707089, 12.72144649070709, 12.771446490707088, 12.821446490707089, 12.871446490707088, 12.921446490707089, 12.97144649070709, 13.021446490707088, 13.071446490707089, 13.121446490707088, 13.171446490707089, 13.22144649070709, 13.271446490707088, 13.321446490707089, 13.371446490707088, 13.421446490707089, 13.47144649070709, 13.521446490707088, 13.571446490707089, 13.621446490707088, 13.671446490707089, 13.72144649070709, 13.771446490707088, 13.821446490707089, 13.871446490707088, 13.921446490707089, 13.97144649070709, 14.021446490707088, 14.071446490707089, 14.121446490707088, 14.171446490707089, 14.22144649070709, 14.271446490707088, 14.321446490707089, 14.371446490707088, 14.421446490707089, 14.47144649070709, 14.521446490707088, 14.571446490707089, 14.621446490707088, 14.671446490707089], "phase": [0.09980267284282718, 0.10980267284282717, 0.11980267284282718, 0.12980267284282718, 0.13980267284282719, 0.14980267284282717, 0.15980267284282718, 0.16980267284282718, 0.1798026728428272, 0.18980267284282717, 0.19980267284282718, 0.20980267284282716, 0.21980267284282717, 0.22980267284282718, 0.2398026728428272, 0.24980267284282717, 0.2598026728428272, 0.2698026728428272, 0.27980267284282717, 0.2898026728428272, 0.2998026728428272, 0.30980267284282714, 0.31980267284282715, 0.32980267284282716, 0.33980267284282717, 0.3498026728428272, 0.3598026728428272, 0.3698026728428272, 0.3798026728428272, 0.38980267284282716, 0.39980267284282717, 0.4098026728428272, 0.4198026728428272, 0.4298026728428272, 0.4398026728428272, 0.4498026728428272, 0.45980267284282716, 0.4698026728428272, 0.4798026728428272, 0.4898026728428272, 0.4998026728428272, 0.5098026728428272, 0.5198026728428271, 0.5298026728428271, 0.5398026728428271, 0.5498026728428271, 0.5598026728428271, 0.5698026728428272, 0.5798026728428272, 0.5898026728428272, 0.5998026728428272, 0.6098026728428272, 0.6198026728428272, 0.6298026728428272, 0.6398026728428272, 0.6498026728428272]}, {"amplitude": [12.036613090800754, 12.086613090800755, 12.136613090800754, 12.186613090800755, 12.236613090800754, 12.286613090800754, 12.336613090800755, 12.386613090800754, 12.436613090800755, 12.486613090800754, 12.536613090800754, 12.586613090800755, 12.636613090800754, 12.686613090800755, 12.736613090800754, 12.786613090800754, 12.836613090800755, 12.886613090800754, 12.936613090800755, 12.986613090800754, 13.036613090800754, 13.086613090800755, 13.136613090800754, 13.186613090800755, 13.236613090800754, 13.286613090800754, 13.336613090800755, 13.386613090800754, 13.436613090800755, 13.486613090800754, 13.536613090800754, 13.586613090800755, 13.636613090800754, 13.686613090800755, 13.736613090800754, 13.786613090800754, 13.836613090800755, 13.886613090800754, 13.936613090800755, 13.986613090800754, 14.036613090800754, 14.086613090800755, 14.136613090800754, 14.186613090800755, 14.236613090800754, 14.286613090800754, 14.336613090800755, 14.386613090800754, 14.436613090800755, 14.486613090800754, 14.536613090800754, 14.586613090800755, 14.636613090800754, 14.686613090800755, 14.736613090800754, 14.786613090800754], "phase": [0.09995065603657316, 0.10995065603657316, 0.11995065603657316, 0.12995065603657316, 0.13995065603657317, 0.14995065603657315, 0.15995065603657316, 0.16995065603657317, 0.17995065603657318, 0.18995065603657316, 0.19995065603657317, 0.20995065603657315, 0.21995065603657316, 0.22995065603657316, 0.23995065603657317, 0.24995065603657315, 0.2599506560365732, 0.2699506560365732, 0.27995065603657315, 0.28995065603657316, 0.29995065603657317, 0.3099506560365731, 0.31995065603657313, 0.32995065603657314, 0.33995065603657315, 0.34995065603657316, 0.35995065603657317, 0.3699506560365732, 0.3799506560365732, 0.38995065603657314, 0.39995065603657315, 0.40995065603657316, 0.41995065603657317, 0.4299506560365732, 0.4399506560365732, 0.4499506560365732, 0.45995065603657315, 0.46995065603657316, 0.47995065603657316, 0.4899506560365732, 0.4999506560365732, 0.5099506560365732, 0.5199506560365732, 0.5299506560365732, 0.5399506560365732, 0.5499506560365732, 0.5599506560365732, 0.5699506560365732, 0.5799506560365731, 0.5899506560365732, 0.5999506560365732, 0.6099506560365732, 0.6199506560365732, 0.6299506560365732, 0.6399506560365732, 0.6499506560365732]}, {"amplitude": [12.12875550485947, 12.17875550485947, 12.22875550485947, 12.27875550485947, 12.328755504859469, 12.37875550485947, 12.42875550485947, 12.47875550485947, 12.52875550485947, 12.578755504859469, 12.62875550485947, 12.67875550485947, 12.72875550485947, 12.77875550485947, 12.828755504859469, 12.87875550485947, 12.92875550485947, 12.97875550485947, 13.02875550485947, 13.078755504859469, 13.12875550485947, 13.17875550485947, 13.22875550485947, 13.27875550485947, 13.328755504859469, 13.37875550485947, 13.42875550485947, 13.47875550485947, 13.52875550485947, 13.578755504859469, 13.62875550485947, 13.67875550485947, 13.72875550485947, 13.77875550485947, 13.828755504859469, 13.87875550485947, 13.92875550485947, 13.97875550485947, 14.02875550485947, 14.078755504859469, 14.12875550485947, 14.17875550485947, 14.22875550485947, 14.27875550485947, 14.328755504859469, 14.37875550485947, 14.42875550485947, 14.47875550485947, 14.52875550485947, 14.578755504859469, 14.62875550485947, 14.67875550485947, 14.72875550485947, 14.77875550485947, 14.828755504859469, 14.87875550485947], "phase": [0.09921147013144778, 0.10921147013144777, 0.11921147013144778, 0.1292114701314478, 0.13921147013144777, 0.14921147013144778, 0.15921147013144776, 0.16921147013144777, 0.17921147013144778, 0.1892114701314478, 0.1992114701314478, 0.20921147013144778, 0.21921147013144776, 0.22921147013144777, 0.23921147013144778, 0.2492114701314478, 0.2592114701314478, 0.2692114701314478, 0.27921147013144776, 0.28921147013144777, 0.2992114701314478, 0.3092114701314478, 0.3192114701314478, 0.3292114701314478, 0.33921147013144776, 0.34921147013144777, 0.3592114701314478, 0.3692114701314478, 0.3792114701314478, 0.38921147013144775, 0.39921147013144775, 0.40921147013144776, 0.41921147013144777, 0.4292114701314478, 0.4392114701314478, 0.4492114701314478, 0.45921147013144775, 0.46921147013144776, 0.47921147013144777, 0.4892114701314478, 0.4992114701314478, 0.5092114701314479, 0.5192114701314477, 0.5292114701314478, 0.5392114701314478, 0.5492114701314478, 0.5592114701314478, 0.5692114701314478, 0.5792114701314478, 0.5892114701314478, 0.5992114701314478, 0.6092114701314478, 0.6192114701314478, 0.6292114701314478, 0.6392114701314479, 0.6492114701314479]}, {"amplitude": [12.182987496710233, 12.232987496710233, 12.28298749671023, 12.332987496710231, 12.382987496710232, 12.432987496710233, 12.482987496710233, 12.53298749671023, 12.582987496710231, 12.632987496710232, 12.682987496710233, 12.732987496710233, 12.78298749671023, 12.832987496710231, 12.882987496710232, 12.932987496710233, 12.982987496710233, 13.03298749671023, 13.082987496710231, 13.132987496710232, 13.182987496710233, 13.232987496710233, 13.28298749671023, 13.332987496710231, 13.382987496710232, 13.432987496710233, 13.482987496710233, 13.53298749671023, 13.582987496710231, 13.632987496710232, 13.682987496710233, 13.732987496710233, 13.78298749671023, 13.832987496710231, 13.882987496710232, 13.932987496710233, 13.982987496710233, 14.03298749671023, 14.082987496710231, 14.132987496710232, 14.182987496710233, 14.232987496710233, 14.28298749671023, 14.332987496710231, 14.382987496710232, 14.432987496710233, 14.482987496710233, 14.53298749671023, 14.582987496710231, 14.632987496710232, 14.682987496710233, 14.732987496710233, 14.78298749671023, 14.832987496710231, 14.882987496710232, 14.932987496710233], "phase": [0.0975916761938748, 0.10759167619387479, 0.1175916761938748, 0.1275916761938748, 0.1375916761938748, 0.1475916761938748, 0.1575916761938748, 0.1675916761938748, 0.17759167619387478, 0.1875916761938748, 0.1975916761938748, 0.2075916761938748, 0.2175916761938748, 0.2275916761938748, 0.2375916761938748, 0.2475916761938748, 0.2575916761938748, 0.2675916761938748, 0.2775916761938748, 0.2875916761938748, 0.29759167619387483, 0.3075916761938748, 0.3175916761938748, 0.3275916761938748, 0.33759167619387476, 0.34759167619387477, 0.3575916761938748, 0.3675916761938748, 0.3775916761938748, 0.3875916761938748, 0.3975916761938748, 0.4075916761938748, 0.41759167619387483, 0.42759167619387484, 0.43759167619387485, 0.44759167619387485, 0.45759167619387475, 0.46759167619387476, 0.47759167619387477, 0.4875916761938748, 0.4975916761938748, 0.5075916761938748, 0.5175916761938748, 0.5275916761938748, 0.5375916761938748, 0.5475916761938748, 0.5575916761938748, 0.5675916761938749, 0.5775916761938747, 0.5875916761938748, 0.5975916761938748, 0.6075916761938748, 0.6175916761938748, 0.6275916761938748, 0.6375916761938748, 0.6475916761938748]}, {"amplitude": [12.187429987478852, 12.237429987478853, 12.287429987478852, 12.337429987478853, 12.387429987478852, 12.437429987478852, 12.487429987478853, 12.537429987478852, 12.587429987478853, 12.637429987478852, 12.687429987478852, 12.737429987478853, 12.787429987478852, 12.837429987478853, 12.887429987478852, 12.937429987478852, 12.987429987478853, 13.037429987478852, 13.087429987478853, 13.137429987478852, 13.187429987478852, 13.237429987478853, 13.287429987478852, 13.337429987478853, 13.387429987478852, 13.437429987478852, 13.487429987478853, 13.537429987478852, 13.587429987478853, 13.637429987478852, 13.687429987478852, 13.737429987478853, 13.787429987478852, 13.837429987478853, 13.887429987478852, 13.937429987478852, 13.987429987478853, 14.037429987478852, 14.087429987478853, 14.137429987478852, 14.187429987478852, 14.237429987478853, 14.287429987478852, 14.337429987478853, 14.387429987478852, 14.437429987478852, 14.487429987478853, 14.537429987478852, 14.587429987478853, 14.637429987478852, 14.687429987478852, 14.737429987478853, 14.787429987478852, 14.837429987478853, 14.887429987478852, 14.937429987478852], "phase": [0.0951056516295154, 0.10510565162951539, 0.1151056516295154, 0.1251056516295154, 0.1351056516295154, 0.1451056516295154, 0.1551056516295154, 0.1651056516295154, 0.1751056516295154, 0.1851056516295154, 0.1951056516295154, 0.20510565162951538, 0.2151056516295154, 0.2251056516295154, 0.2351056516295154, 0.2451056516295154, 0.2551056516295154, 0.2651056516295154, 0.2751056516295154, 0.2851056516295154, 0.2951056516295154, 0.3051056516295154, 0.3151056516295154, 0.32510565162951544, 0.3351056516295154, 0.3451056516295154, 0.3551056516295154, 0.3651056516295154, 0.3751056516295154, 0.3851056516295154, 0.3951056516295154, 0.4051056516295154, 0.4151056516295154, 0.4251056516295154, 0.4351056516295154, 0.44510565162951543, 0.4551056516295154, 0.4651056516295154, 0.4751056516295154, 0.4851056516295154, 0.4951056516295154, 0.5051056516295154, 0.5151056516295154, 0.5251056516295154, 0.5351056516295154, 0.5451056516295154, 0.5551056516295154, 0.5651056516295154, 0.5751056516295154, 0.5851056516295154, 0.5951056516295155, 0.6051056516295155, 0.6151056516295155, 0.6251056516295155, 0.6351056516295155, 0.6451056516295155]}, {"amplitude": [12.134917269896443, 12.184917269896443, 12.234917269896442, 12.284917269896443, 12.334917269896442, 12.384917269896443, 12.434917269896443, 12.484917269896442, 12.534917269896443, 12.584917269896442, 12.634917269896443, 12.684917269896443, 12.734917269896442, 12.784917269896443, 12.834917269896442, 12.884917269896443, 12.934917269896443, 12.984917269896442, 13.034917269896443, 13.084917269896442, 13.134917269896443, 13.184917269896443, 13.234917269896442, 13.284917269896443, 13.334917269896442, 13.384917269896443, 13.434917269896443, 13.484917269896442, 13.534917269896443, 13.584917269896442, 13.634917269896443, 13.684917269896443, 13.734917269896442, 13.784917269896443, 13.834917269896442, 13.884917269896443, 13.934917269896443, 13.984917269896442, 14.034917269896443, 14.084917269896442, 14.134917269896443, 14.184917269896443, 14.234917269896442, 14.284917269896443, 14.334917269896442, 14.384917269896443, 14.434917269896443, 14.484917269896442, 14.534917269896443, 14.584917269896442, 14.634917269896443, 14.684917269896443, 14.734917269896442, 14.784917269896443, 14.834917269896442, 14.884917269896443], "phase": [0.0917754625683981, 0.10177546256839809, 0.1117754625683981, 0.1217754625683981, 0.1317754625683981, 0.1417754625683981, 0.15177546256839808, 0.1617754625683981, 0.1717754625683981, 0.1817754625683981, 0.19177546256839811, 0.2017754625683981, 0.21177546256839808, 0.22177546256839809, 0.2317754625683981, 0.2417754625683981, 0.2517754625683981, 0.2617754625683981, 0.2717754625683981, 0.2817754625683981, 0.2917754625683981, 0.3017754625683981, 0.3117754625683981, 0.3217754625683981, 0.33177546256839807, 0.3417754625683981, 0.3517754625683981, 0.3617754625683981, 0.3717754625683981, 0.38177546256839806, 0.39177546256839807, 0.4017754625683981, 0.4117754625683981, 0.4217754625683981, 0.4317754625683981, 0.4417754625683981, 0.45177546256839807, 0.4617754625683981, 0.4717754625683981, 0.4817754625683981, 0.4917754625683981, 0.5017754625683981, 0.5117754625683981, 0.5217754625683981, 0.5317754625683981, 0.5417754625683981, 0.5517754625683982, 0.5617754625683982, 0.5717754625683981, 0.5817754625683981, 0.5917754625683981, 0.6017754625683981, 0.6117754625683981, 0.6217754625683981, 0.6317754625683981, 0.6417754625683981]}, {"amplitude": [12.024061475827535, 12.074061475827536, 12.124061475827535, 12.174061475827536, 12.224061475827535, 12.274061475827535, 12.324061475827536, 12.374061475827535, 12.424061475827536, 12.474061475827535, 12.524061475827535, 12.574061475827536, 12.624061475827535, 12.674061475827536, 12.724061475827535, 12.774061475827535, 12.824061475827536, 12.874061475827535, 12.924061475827536, 12.974061475827535, 13.024061475827535, 13.074061475827536, 13.124061475827535, 13.174061475827536, 13.224061475827535, 13.274061475827535, 13.324061475827536, 13.374061475827535, 13.424061475827536, 13.474061475827535, 13.524061475827535, 13.574061475827536, 13.624061475827535, 13.674061475827536, 13.724061475827535, 13.774061475827535, 13.824061475827536, 13.874061475827535, 13.924061475827536, 13.974061475827535, 14.024061475827535, 14.074061475827536, 14.124061475827535, 14.174061475827536, 14.224061475827535, 14.274061475827535, 14.324061475827536, 14.374061475827535, 14.424061475827536, 14.474061475827535, 14.524061475827535, 14.574061475827536, 14.624061475827535, 14.674061475827536, 14.724061475827535, 14.774061475827535], "phase": [0.08763066800438646, 0.09763066800438645, 0.10763066800438646, 0.11763066800438646, 0.12763066800438647, 0.13763066800438645, 0.14763066800438646, 0.15763066800438646, 0.16763066800438647, 0.17763066800438645, 0.18763066800438646, 0.19763066800438644, 0.20763066800438645, 0.21763066800438646, 0.22763066800438647, 0.23763066800438645, 0.24763066800438646, 0.2576306680043865, 0.26763066800438645, 0.27763066800438646, 0.28763066800438647, 0.2976306680043864, 0.30763066800438643, 0.31763066800438644, 0.32763066800438645, 0.33763066800438646, 0.34763066800438647, 0.3576306680043865, 0.3676306680043865, 0.37763066800438644, 0.38763066800438645, 0.39763066800438646, 0.40763066800438646, 0.4176306680043865, 0.4276306680043865, 0.4376306680043865, 0.44763066800438644, 0.45763066800438645, 0.46763066800438646, 0.47763066800438647, 0.4876306680043865, 0.4976306680043865, 0.5076306680043865, 0.5176306680043865, 0.5276306680043865, 0.5376306680043865, 0.5476306680043865, 0.5576306680043865, 0.5676306680043864, 0.5776306680043864, 0.5876306680043865, 0.5976306680043865, 0.6076306680043865, 0.6176306680043865, 0.6276306680043865, 0.6376306680043865]}, {"amplitude": [11.859525280327732, 11.909525280327733, 11.95952528032773, 12.00952528032773, 12.059525280327732, 12.109525280327732, 12.159525280327733, 12.20952528032773, 12.25952528032773, 12.309525280327732, 12.359525280327732, 12.409525280327733, 12.45952528032773, 12.50952528032773, 12.559525280327732, 12.609525280327732, 12.659525280327733, 12.70952528032773, 12.75952528032773, 12.809525280327732, 12.859525280327732, 12.909525280327733, 12.95952528032773, 13.00952528032773, 13.059525280327732, 13.109525280327732, 13.159525280327733, 13.20952528032773, 13.25952528032773, 13.309525280327732, 13.359525280327732, 13.409525280327733, 13.45952528032773, 13.50952528032773, 13.559525280327732, 13.609525280327732, 13.659525280327733, 13.70952528032773, 13.75952528032773, 13.809525280327732, 13.859525280327732, 13.909525280327733, 13.95952528032773, 14.00952528032773, 14.059525280327732, 14.109525280327732, 14.159525280327733, 14.20952528032773, 14.25952528032773, 14.309525280327732, 14.359525280327732, 14.409525280327733, 14.45952528032773, 14.50952528032773, 14.559525280327732, 14.609525280327732], "phase": [0.08270805742745622, 0.09270805742745622, 0.10270805742745623, 0.11270805742745622, 0.12270805742745622, 0.13270805742745623, 0.14270805742745624, 0.15270805742745625, 0.16270805742745623, 0.1727080574274562, 0.18270805742745622, 0.19270805742745623, 0.20270805742745623, 0.21270805742745624, 0.22270805742745625, 0.2327080574274562, 0.24270805742745621, 0.2527080574274562, 0.26270805742745623, 0.27270805742745624, 0.28270805742745625, 0.2927080574274562, 0.3027080574274562, 0.3127080574274562, 0.32270805742745623, 0.33270805742745624, 0.34270805742745625, 0.35270805742745626, 0.36270805742745627, 0.3727080574274562, 0.3827080574274562, 0.39270805742745624, 0.40270805742745625, 0.41270805742745625, 0.42270805742745626, 0.43270805742745627, 0.4427080574274562, 0.45270805742745623, 0.46270805742745624, 0.47270805742745625, 0.48270805742745626, 0.49270805742745627, 0.5027080574274562, 0.5127080574274562, 0.5227080574274562, 0.5327080574274562, 0.5427080574274562, 0.5527080574274562, 0.5627080574274562, 0.5727080574274562, 0.5827080574274562, 0.5927080574274562, 0.6027080574274563, 0.6127080574274563, 0.6227080574274563, 0.6327080574274563]}, {"amplitude": [11.651463851356988, 11.701463851356989, 11.751463851356988, 11.801463851356988, 11.851463851356987, 11.901463851356988, 11.951463851356989, 12.001463851356988, 12.051463851356988, 12.101463851356987, 12.151463851356988, 12.201463851356989, 12.251463851356988, 12.301463851356988, 12.351463851356987, 12.401463851356988, 12.451463851356989, 12.501463851356988, 12.551463851356988, 12.601463851356987, 12.651463851356988, 12.701463851356989, 12.751463851356988, 12.801463851356988, 12.851463851356987, 12.901463851356988, 12.951463851356989, 13.001463851356988, 13.051463851356988, 13.101463851356987, 13.151463851356988, 13.201463851356989, 13.251463851356988, 13.301463851356988, 13.351463851356987, 13.401463851356988, 13.451463851356989, 13.501463851356988, 13.551463851356988, 13.601463851356987, 13.651463851356988, 13.701463851356989, 13.751463851356988, 13.801463851356988, 13.851463851356987, 13.901463851356988, 13.951463851356989, 14.001463851356988, 14.051463851356988, 14.101463851356987, 14.151463851356988, 14.201463851356989, 14.251463851356988, 14.301463851356988, 14.351463851356987, 14.401463851356988], "phase": [0.07705132427757912, 0.08705132427757911, 0.09705132427757912, 0.10705132427757912, 0.11705132427757911, 0.12705132427757912, 0.1370513242775791, 0.1470513242775791, 0.15705132427757912, 0.16705132427757913, 0.17705132427757914, 0.18705132427757912, 0.1970513242775791, 0.2070513242775791, 0.21705132427757912, 0.22705132427757913, 0.23705132427757913, 0.24705132427757914, 0.2570513242775791, 0.2670513242775791, 0.2770513242775791, 0.2870513242775791, 0.29705132427757913, 0.30705132427757914, 0.3170513242775791, 0.3270513242775791, 0.3370513242775791, 0.3470513242775791, 0.35705132427757913, 0.3670513242775791, 0.3770513242775791, 0.3870513242775791, 0.3970513242775791, 0.4070513242775791, 0.4170513242775791, 0.42705132427757914, 0.4370513242775791, 0.4470513242775791, 0.4570513242775791, 0.4670513242775791, 0.4770513242775791, 0.48705132427757913, 0.4970513242775791, 0.5070513242775792, 0.5170513242775792, 0.5270513242775792, 0.5370513242775792, 0.5470513242775792, 0.5570513242775791, 0.5670513242775791, 0.5770513242775791, 0.5870513242775791, 0.5970513242775791, 0.6070513242775791, 0.6170513242775791, 0.6270513242775791]}, {"amplitude": [11.4142135623731, 11.4642135623731, 11.514213562373099, 11.5642135623731, 11.614213562373099, 11.6642135623731, 11.7142135623731, 11.764213562373099, 11.8142135623731, 11.864213562373099, 11.9142135623731, 11.9642135623731, 12.014213562373099, 12.0642135623731, 12.114213562373099, 12.1642135623731, 12.2142135623731, 12.264213562373099, 12.3142135623731, 12.364213562373099, 12.4142135623731, 12.4642135623731, 12.514213562373099, 12.5642135623731, 12.614213562373099, 12.6642135623731, 12.7142135623731, 12.764213562373099, 12.8142135623731, 12.864213562373099, 12.9142135623731, 12.9642135623731, 13.014213562373099, 13.0642135623731, 13.114213562373099, 13.1642135623731, 13.2142135623731, 13.264213562373099, 13.3142135623731, 13.364213562373099, 13.4142135623731, 13.4642135623731, 13.514213562373099, 13.5642135623731, 13.614213562373099, 13.6642135623731, 13.7142135623731, 13.764213562373099, 13.8142135623731, 13.864213562373099, 13.9142135623731, 13.9642135623731, 14.014213562373099, 14.0642135623731, 14.114213562373099, 14.1642135623731], "phase": [0.07071067811865488, 0.08071067811865487, 0.09071067811865488, 0.10071067811865488, 0.11071067811865487, 0.12071067811865488, 0.1307106781186549, 0.1407106781186549, 0.15071067811865488, 0.16071067811865486, 0.17071067811865487, 0.18071067811865488, 0.19071067811865489, 0.2007106781186549, 0.2107106781186549, 0.22071067811865486, 0.23071067811865487, 0.24071067811865487, 0.2507106781186549, 0.2607106781186549, 0.2707106781186549, 0.28071067811865485, 0.29071067811865486, 0.3007106781186549, 0.3107106781186549, 0.3207106781186549, 0.3307106781186549, 0.3407106781186549, 0.3507106781186549, 0.36071067811865487, 0.3707106781186549, 0.3807106781186549, 0.3907106781186549, 0.4007106781186549, 0.4107106781186549, 0.4207106781186549, 0.4307106781186549, 0.4407106781186549, 0.4507106781186549, 0.4607106781186549, 0.4707106781186549, 0.4807106781186549, 0.4907106781186549, 0.5007106781186549, 0.5107106781186549, 0.5207106781186549, 0.5307106781186549, 0.5407106781186549, 0.5507106781186548, 0.5607106781186548, 0.5707106781186548, 0.5807106781186548, 0.5907106781186549, 0.6007106781186549, 0.6107106781186549, 0.6207106781186549]}, {"amplitude": [11.164410613691977, 11.214410613691978, 11.264410613691977, 11.314410613691978, 11.364410613691977, 11.414410613691977, 11.464410613691978, 11.514410613691977, 11.564410613691978, 11.614410613691977, 11.664410613691977, 11.714410613691978, 11.764410613691977, 11.814410613691978, 11.864410613691977, 11.914410613691977, 11.964410613691978, 12.014410613691977, 12.064410613691978, 12.114410613691977, 12.164410613691977, 12.214410613691978, 12.264410613691977, 12.314410613691978, 12.364410613691977, 12.414410613691977, 12.464410613691978, 12.514410613691977, 12.564410613691978, 12.614410613691977, 12.664410613691977, 12.714410613691978, 12.764410613691977, 12.814410613691978, 12.864410613691977, 12.914410613691977, 12.964410613691978, 13.014410613691977, 13.064410613691978, 13.114410613691977, 13.164410613691977, 13.214410613691978, 13.264410613691977, 13.314410613691978, 13.364410613691977, 13.414410613691977, 13.464410613691978, 13.514410613691977, 13.564410613691978, 13.614410613691977, 13.664410613691977, 13.714410613691978, 13.764410613691977, 13.814410613691978, 13.864410613691977, 13.914410613691977], "phase": [0.06374239897486901, 0.073742398974869, 0.08374239897486901, 0.09374239897486901, 0.103742398974869, 0.11374239897486901, 0.12374239897486901, 0.133742398974869, 0.143742398974869, 0.15374239897486902, 0.16374239897486903, 0.173742398974869, 0.183742398974869, 0.193742398974869, 0.203742398974869, 0.21374239897486902, 0.22374239897486903, 0.23374239897486904, 0.243742398974869, 0.253742398974869, 0.263742398974869, 0.273742398974869, 0.283742398974869, 0.29374239897486903, 0.303742398974869, 0.313742398974869, 0.323742398974869, 0.333742398974869, 0.343742398974869, 0.353742398974869, 0.363742398974869, 0.373742398974869, 0.383742398974869, 0.393742398974869, 0.403742398974869, 0.41374239897486903, 0.423742398974869, 0.433742398974869, 0.443742398974869, 0.453742398974869, 0.463742398974869, 0.47374239897486903, 0.483742398974869, 0.493742398974869, 0.503742398974869, 0.5137423989748691, 0.5237423989748691, 0.5337423989748691, 0.543742398974869, 0.553742398974869, 0.563742398974869, 0.573742398974869, 0.583742398974869, 0.593742398974869, 0.603742398974869, 0.613742398974869]}, {"amplitude": [10.918802623925663, 10.968802623925663, 11.018802623925662, 11.068802623925663, 11.118802623925662, 11.168802623925663, 11.218802623925663, 11.268802623925662, 11.318802623925663, 11.368802623925662, 11.418802623925663, 11.468802623925663, 11.518802623925662, 11.568802623925663, 11.618802623925662, 11.668802623925663, 11.718802623925663, 11.768802623925662, 11.818802623925663, 11.868802623925662, 11.918802623925663, 11.968802623925663, 12.018802623925662, 12.068802623925663, 12.118802623925662, 12.168802623925663, 12.218802623925663, 12.268802623925662, 12.318802623925663, 12.368802623925662, 12.418802623925663, 12.468802623925663, 12.518802623925662, 12.568802623925663, 12.618802623925662, 12.668802623925663, 12.718802623925663, 12.768802623925662, 12.818802623925663, 12.868802623925662, 12.918802623925663, 12.968802623925663, 13.018802623925662, 13.068802623925663, 13.118802623925662, 13.168802623925663, 13.218802623925663, 13.268802623925662, 13.318802623925663, 13.368802623925662, 13.418802623925663, 13.468802623925663, 13.518802623925662, 13.568802623925663, 13.618802623925662, 13.668802623925663], "phase": [0.056208337785213294, 0.06620833778521329, 0.0762083377852133, 0.0862083377852133, 0.09620833778521329, 0.1062083377852133, 0.11620833778521329, 0.1262083377852133, 0.1362083377852133, 0.1462083377852133, 0.1562083377852133, 0.1662083377852133, 0.17620833778521328, 0.18620833778521328, 0.1962083377852133, 0.2062083377852133, 0.2162083377852133, 0.22620833778521332, 0.23620833778521327, 0.24620833778521328, 0.2562083377852133, 0.2662083377852133, 0.2762083377852133, 0.2862083377852133, 0.29620833778521327, 0.3062083377852133, 0.3162083377852133, 0.3262083377852133, 0.3362083377852133, 0.34620833778521326, 0.35620833778521327, 0.3662083377852133, 0.3762083377852133, 0.3862083377852133, 0.3962083377852133, 0.4062083377852133, 0.41620833778521327, 0.4262083377852133, 0.4362083377852133, 0.4462083377852133, 0.4562083377852133, 0.4662083377852133, 0.47620833778521326, 0.4862083377852133, 0.4962083377852133, 0.5062083377852133, 0.5162083377852134, 0.5262083377852134, 0.5362083377852133, 0.5462083377852133, 0.5562083377852133, 0.5662083377852133, 0.5762083377852133, 0.5862083377852133, 0.5962083377852133, 0.6062083377852133]}, {"amplitude": [10.69205923246363, 10.74205923246363, 10.792059232463629, 10.84205923246363, 10.892059232463629, 10.94205923246363, 10.99205923246363, 11.042059232463629, 11.09205923246363, 11.142059232463629, 11.19205923246363, 11.24205923246363, 11.292059232463629, 11.34205923246363, 11.392059232463629, 11.44205923246363, 11.49205923246363, 11.542059232463629, 11.59205923246363, 11.642059232463629, 11.69205923246363, 11.74205923246363, 11.792059232463629, 11.84205923246363, 11.892059232463629, 11.94205923246363, 11.99205923246363, 12.042059232463629, 12.09205923246363, 12.142059232463629, 12.19205923246363, 12.24205923246363, 12.292059232463629, 12.34205923246363, 12.392059232463629, 12.44205923246363, 12.49205923246363, 12.542059232463629, 12.59205923246363, 12.642059232463629, 12.69205923246363, 12.74205923246363, 12.792059232463629, 12.84205923246363, 12.892059232463629, 12.94205923246363, 12.99205923246363, 13.042059232463629, 13.09205923246363, 13.142059232463629, 13.19205923246363, 13.24205923246363, 13.292059232463629, 13.34205923246363, 13.392059232463629, 13.44205923246363], "phase": [0.04817536741017167, 0.05817536741017167, 0.06817536741017168, 0.07817536741017167, 0.08817536741017168, 0.09817536741017167, 0.10817536741017167, 0.11817536741017168, 0.12817536741017166, 0.13817536741017167, 0.14817536741017168, 0.15817536741017169, 0.16817536741017167, 0.17817536741017168, 0.18817536741017168, 0.19817536741017167, 0.20817536741017167, 0.21817536741017168, 0.22817536741017166, 0.23817536741017167, 0.24817536741017168, 0.25817536741017166, 0.26817536741017167, 0.2781753674101717, 0.2881753674101717, 0.2981753674101717, 0.3081753674101717, 0.3181753674101717, 0.3281753674101717, 0.3381753674101716, 0.34817536741017163, 0.35817536741017164, 0.36817536741017165, 0.37817536741017166, 0.38817536741017167, 0.3981753674101717, 0.4081753674101717, 0.4181753674101717, 0.4281753674101717, 0.4381753674101717, 0.4481753674101717, 0.45817536741017173, 0.46817536741017163, 0.47817536741017164, 0.48817536741017165, 0.49817536741017165, 0.5081753674101717, 0.5181753674101717, 0.5281753674101717, 0.5381753674101717, 0.5481753674101717, 0.5581753674101717, 0.5681753674101717, 0.5781753674101717, 0.5881753674101717, 0.5981753674101717]}, {"amplitude": [10.494887762741087, 10.544887762741087, 10.594887762741086, 10.644887762741087, 10.694887762741086, 10.744887762741087, 10.794887762741087, 10.844887762741086, 10.894887762741087, 10.944887762741086, 10.994887762741087, 11.044887762741087, 11.094887762741086, 11.144887762741087, 11.194887762741086, 11.244887762741087, 11.294887762741087, 11.344887762741086, 11.394887762741087, 11.444887762741086, 11.494887762741087, 11.544887762741087, 11.594887762741086, 11.644887762741087, 11.694887762741086, 11.744887762741087, 11.794887762741087, 11.844887762741086, 11.894887762741087, 11.944887762741086, 11.994887762741087, 12.044887762741087, 12.094887762741086, 12.144887762741087, 12.194887762741086, 12.244887762741087, 12.294887762741087, 12.344887762741086, 12.394887762741087, 12.444887762741086, 12.494887762741087, 12.544887762741087, 12.594887762741086, 12.644887762741087, 12.694887762741086, 12.744887762741087, 12.794887762741087, 12.844887762741086, 12.894887762741087, 12.944887762741086, 12.994887762741087, 13.044887762741087, 13.094887762741086, 13.144887762741087, 13.194887762741086, 13.244887762741087], "phase": [0.03971478906347842, 0.04971478906347842, 0.05971478906347842, 0.06971478906347842, 0.07971478906347843, 0.08971478906347842, 0.09971478906347842, 0.10971478906347842, 0.11971478906347842, 0.12971478906347841, 0.13971478906347842, 0.1497147890634784, 0.1597147890634784, 0.16971478906347842, 0.17971478906347843, 0.1897147890634784, 0.19971478906347842, 0.20971478906347843, 0.2197147890634784, 0.22971478906347842, 0.23971478906347843, 0.2497147890634784, 0.25971478906347845, 0.26971478906347846, 0.2797147890634784, 0.2897147890634784, 0.2997147890634784, 0.30971478906347844, 0.31971478906347844, 0.3297147890634784, 0.3397147890634784, 0.3497147890634784, 0.3597147890634784, 0.36971478906347843, 0.37971478906347844, 0.38971478906347845, 0.3997147890634784, 0.4097147890634784, 0.4197147890634784, 0.42971478906347843, 0.43971478906347844, 0.44971478906347845, 0.4597147890634784, 0.4697147890634784, 0.4797147890634784, 0.48971478906347843, 0.49971478906347844, 0.5097147890634784, 0.5197147890634783, 0.5297147890634784, 0.5397147890634784, 0.5497147890634784, 0.5597147890634784, 0.5697147890634784, 0.5797147890634784, 0.5897147890634784]}, {"amplitude": [10.332717033861348, 10.382717033861349, 10.432717033861348, 10.482717033861348, 10.532717033861347, 10.582717033861348, 10.632717033861349, 10.682717033861348, 10.732717033861348, 10.782717033861347, 10.832717033861348, 10.882717033861349, 10.932717033861348, 10.982717033861348, 11.032717033861347, 11.082717033861348, 11.132717033861349, 11.182717033861348, 11.232717033861348, 11.282717033861347, 11.332717033861348, 11.382717033861349, 11.432717033861348, 11.482717033861348, 11.532717033861347, 11.582717033861348, 11.632717033861349, 11.682717033861348, 11.732717033861348, 11.782717033861347, 11.832717033861348, 11.882717033861349, 11.932717033861348, 11.982717033861348, 12.032717033861347, 12.082717033861348, 12.132717033861349, 12.182717033861348, 12.232717033861348, 12.282717033861347, 12.332717033861348, 12.382717033861349, 12.432717033861348, 12.482717033861348, 12.532717033861347, 12.582717033861348, 12.632717033861349, 12.682717033861348, 12.732717033861348, 12.782717033861347, 12.832717033861348, 12.882717033861349, 12.932717033861348, 12.982717033861348, 13.032717033861347, 13.082717033861348], "phase": [0.030901699437494656, 0.04090169943749466, 0.05090169943749466, 0.060901699437494655, 0.07090169943749466, 0.08090169943749466, 0.09090169943749465, 0.10090169943749466, 0.11090169943749466, 0.12090169943749465, 0.13090169943749466, 0.14090169943749464, 0.15090169943749465, 0.16090169943749466, 0.17090169943749467, 0.18090169943749465, 0.19090169943749466, 0.20090169943749467, 0.21090169943749465, 0.22090169943749466, 0.23090169943749467, 0.24090169943749465, 0.25090169943749463, 0.26090169943749464, 0.27090169943749465, 0.28090169943749466, 0.29090169943749467, 0.3009016994374947, 0.3109016994374947, 0.32090169943749464, 0.33090169943749465, 0.34090169943749465, 0.35090169943749466, 0.36090169943749467, 0.3709016994374947, 0.3809016994374947, 0.39090169943749464, 0.40090169943749465, 0.41090169943749466, 0.42090169943749467, 0.4309016994374947, 0.4409016994374947, 0.45090169943749464, 0.46090169943749465, 0.47090169943749466, 0.48090169943749467, 0.4909016994374947, 0.5009016994374946, 0.5109016994374946, 0.5209016994374946, 0.5309016994374947, 0.5409016994374947, 0.5509016994374947, 0.5609016994374947, 0.5709016994374947, 0.5809016994374947]}, {"amplitude": [10.205132509960347, 10.255132509960347, 10.305132509960346, 10.355132509960347, 10.405132509960346, 10.455132509960347, 10.505132509960347, 10.555132509960346, 10.605132509960347, 10.655132509960346, 10.705132509960347, 10.755132509960347, 10.805132509960346, 10.855132509960347, 10.905132509960346, 10.955132509960347, 11.005132509960347, 11.055132509960346, 11.105132509960347, 11.155132509960346, 11.205132509960347, 11.255132509960347, 11.305132509960346, 11.355132509960347, 11.405132509960346, 11.455132509960347, 11.505132509960347, 11.555132509960346, 11.605132509960347, 11.655132509960346, 11.705132509960347, 11.755132509960347, 11.805132509960346, 11.855132509960347, 11.905132509960346, 11.955132509960347, 12.005132509960347, 12.055132509960346, 12.105132509960347, 12.155132509960346, 12.205132509960347, 12.255132509960347, 12.305132509960346, 12.355132509960347, 12.405132509960346, 12.455132509960347, 12.505132509960347, 12.555132509960346, 12.605132509960347, 12.655132509960346, 12.705132509960347, 12.755132509960347, 12.805132509960346, 12.855132509960347, 12.905132509960346, 12.955132509960347], "phase": [0.021814324139654045, 0.03181432413965404, 0.041814324139654045, 0.05181432413965405, 0.06181432413965404, 0.07181432413965405, 0.08181432413965405, 0.09181432413965405, 0.10181432413965405, 0.11181432413965404, 0.12181432413965405, 0.13181432413965405, 0.14181432413965403, 0.15181432413965404, 0.16181432413965405, 0.17181432413965403, 0.18181432413965404, 0.19181432413965405, 0.20181432413965403, 0.21181432413965404, 0.22181432413965405, 0.23181432413965403, 0.24181432413965404, 0.25181432413965404, 0.26181432413965405, 0.27181432413965406, 0.28181432413965407, 0.2918143241396541, 0.3018143241396541, 0.31181432413965404, 0.32181432413965405, 0.33181432413965406, 0.34181432413965407, 0.3518143241396541, 0.3618143241396541, 0.3718143241396541, 0.38181432413965405, 0.39181432413965406, 0.40181432413965407, 0.4118143241396541, 0.4218143241396541, 0.4318143241396541, 0.44181432413965405, 0.45181432413965406, 0.46181432413965406, 0.4718143241396541, 0.4818143241396541, 0.4918143241396541, 0.501814324139654, 0.511814324139654, 0.521814324139654, 0.531814324139654, 0.541814324139654, 0.551814324139654, 0.561814324139654, 0.571814324139654]}, {"amplitude": [10.106140364898094, 10.156140364898095, 10.206140364898094, 10.256140364898094, 10.306140364898093, 10.356140364898094, 10.406140364898095, 10.456140364898094, 10.506140364898094, 10.556140364898093, 10.606140364898094, 10.656140364898095, 10.706140364898094, 10.756140364898094, 10.806140364898093, 10.856140364898094, 10.906140364898095, 10.956140364898094, 11.006140364898094, 11.056140364898093, 11.106140364898094, 11.156140364898095, 11.206140364898094, 11.256140364898094, 11.306140364898093, 11.356140364898094, 11.406140364898095, 11.456140364898094, 11.506140364898094, 11.556140364898093, 11.606140364898094, 11.656140364898095, 11.706140364898094, 11.756140364898094, 11.806140364898093, 11.856140364898094, 11.906140364898095, 11.956140364898094, 12.006140364898094, 12.056140364898093, 12.106140364898094, 12.156140364898095, 12.206140364898094, 12.256140364898094, 12.306140364898093, 12.356140364898094, 12.406140364898095, 12.456140364898094, 12.506140364898094, 12.556140364898093, 12.606140364898094, 12.656140364898095, 12.706140364898094, 12.756140364898094, 12.806140364898093, 12.856140364898094], "phase": [0.01253332335643044, 0.02253332335643044, 0.032533323356430444, 0.04253332335643044, 0.05253332335643044, 0.06253332335643044, 0.07253332335643044, 0.08253332335643045, 0.09253332335643044, 0.10253332335643044, 0.11253332335643045, 0.12253332335643044, 0.13253332335643042, 0.14253332335643043, 0.15253332335643044, 0.16253332335643045, 0.17253332335643046, 0.18253332335643047, 0.19253332335643042, 0.20253332335643043, 0.21253332335643044, 0.22253332335643045, 0.23253332335643045, 0.24253332335643046, 0.2525333233564304, 0.2625333233564304, 0.27253332335643043, 0.28253332335643044, 0.29253332335643045, 0.3025333233564304, 0.3125333233564304, 0.3225333233564304, 0.33253332335643043, 0.34253332335643044, 0.35253332335643045, 0.36253332335643046, 0.3725333233564304, 0.3825333233564304, 0.39253332335643043, 0.40253332335643044, 0.41253332335643045, 0.42253332335643046, 0.4325333233564304, 0.4425333233564304, 0.45253332335643043, 0.46253332335643044, 0.47253332335643045, 0.48253332335643045, 0.4925333233564304, 0.5025333233564304, 0.5125333233564304, 0.5225333233564304, 0.5325333233564304, 0.5425333233564305, 0.5525333233564305, 0.5625333233564305]}, {"amplitude": [10.025221548086964, 10.075221548086965, 10.125221548086964, 10.175221548086965, 10.225221548086964, 10.275221548086964, 10.325221548086965, 10.375221548086964, 10.425221548086965, 10.475221548086964, 10.525221548086964, 10.575221548086965, 10.625221548086964, 10.675221548086965, 10.725221548086964, 10.775221548086964, 10.825221548086965, 10.875221548086964, 10.925221548086965, 10.975221548086964, 11.025221548086964, 11.075221548086965, 11.125221548086964, 11.175221548086965, 11.225221548086964, 11.275221548086964, 11.325221548086965, 11.375221548086964, 11.425221548086965, 11.475221548086964, 11.525221548086964, 11.575221548086965, 11.625221548086964, 11.675221548086965, 11.725221548086964, 11.775221548086964, 11.825221548086965, 11.875221548086964, 11.925221548086965, 11.975221548086964, 12.025221548086964, 12.075221548086965, 12.125221548086964, 12.175221548086965, 12.225221548086964, 12.275221548086964, 12.325221548086965, 12.375221548086964, 12.425221548086965, 12.475221548086964, 12.525221548086964, 12.575221548086965, 12.625221548086964, 12.675221548086965, 12.725221548086964, 12.775221548086964], "phase": [0.0031410759078127196, 0.01314107590781272, 0.02314107590781272, 0.03314107590781272, 0.04314107590781272, 0.053141075907812724, 0.06314107590781272, 0.07314107590781273, 0.08314107590781272, 0.09314107590781272, 0.10314107590781273, 0.11314107590781272, 0.12314107590781272, 0.1331410759078127, 0.14314107590781272, 0.1531410759078127, 0.1631410759078127, 0.17314107590781272, 0.1831410759078127, 0.1931410759078127, 0.20314107590781272, 0.2131410759078127, 0.2231410759078127, 0.23314107590781272, 0.2431410759078127, 0.2531410759078127, 0.2631410759078127, 0.2731410759078127, 0.28314107590781273, 0.2931410759078127, 0.3031410759078127, 0.3131410759078127, 0.3231410759078127, 0.3331410759078127, 0.34314107590781273, 0.35314107590781274, 0.3631410759078127, 0.3731410759078127, 0.3831410759078127, 0.3931410759078127, 0.40314107590781273, 0.41314107590781274, 0.4231410759078127, 0.4331410759078127, 0.4431410759078127, 0.4531410759078127, 0.4631410759078127, 0.47314107590781274, 0.4831410759078127, 0.4931410759078127, 0.5031410759078128, 0.5131410759078128, 0.5231410759078128, 0.5331410759078128, 0.5431410759078128, 0.5531410759078128]}, {"amplitude": [9.94902592709083, 9.99902592709083, 10.04902592709083, 10.09902592709083, 10.149025927090829, 10.19902592709083, 10.24902592709083, 10.29902592709083, 10.34902592709083, 10.399025927090829, 10.44902592709083, 10.49902592709083, 10.54902592709083, 10.59902592709083, 10.649025927090829, 10.69902592709083, 10.74902592709083, 10.79902592709083, 10.84902592709083, 10.899025927090829, 10.94902592709083, 10.99902592709083, 11.04902592709083, 11.09902592709083, 11.149025927090829, 11.19902592709083, 11.24902592709083, 11.29902592709083, 11.34902592709083, 11.399025927090829, 11.44902592709083, 11.49902592709083, 11.54902592709083, 11.59902592709083, 11.649025927090829, 11.69902592709083, 11.74902592709083, 11.79902592709083, 11.84902592709083, 11.899025927090829, 11.94902592709083, 11.99902592709083, 12.04902592709083, 12.09902592709083, 12.149025927090829, 12.19902592709083, 12.24902592709083, 12.29902592709083, 12.34902592709083, 12.399025927090829, 12.44902592709083, 12.49902592709083, 12.54902592709083, 12.59902592709083, 12.649025927090829, 12.69902592709083], "phase": [-0.006279051952931217, 0.003720948047068783, 0.013720948047068783, 0.02372094804706878, 0.03372094804706878, 0.04372094804706879, 0.053720948047068784, 0.06372094804706879, 0.07372094804706879, 0.08372094804706878, 0.09372094804706879, 0.10372094804706879, 0.11372094804706878, 0.12372094804706879, 0.1337209480470688, 0.14372094804706878, 0.1537209480470688, 0.1637209480470688, 0.17372094804706878, 0.1837209480470688, 0.1937209480470688, 0.20372094804706878, 0.2137209480470688, 0.2237209480470688, 0.23372094804706878, 0.2437209480470688, 0.2537209480470688, 0.2637209480470688, 0.2737209480470688, 0.28372094804706877, 0.2937209480470688, 0.3037209480470688, 0.3137209480470688, 0.3237209480470688, 0.3337209480470688, 0.3437209480470688, 0.3537209480470688, 0.3637209480470688, 0.3737209480470688, 0.3837209480470688, 0.3937209480470688, 0.4037209480470688, 0.41372094804706877, 0.4237209480470688, 0.4337209480470688, 0.4437209480470688, 0.4537209480470688, 0.4637209480470688, 0.47372094804706877, 0.4837209480470688, 0.4937209480470688, 0.5037209480470688, 0.5137209480470688, 0.5237209480470688, 0.5337209480470688, 0.5437209480470688]}, {"amplitude": [9.86346664560728, 9.913466645607281, 9.96346664560728, 10.01346664560728, 10.06346664560728, 10.11346664560728, 10.163466645607281, 10.21346664560728, 10.26346664560728, 10.31346664560728, 10.36346664560728, 10.413466645607281, 10.46346664560728, 10.51346664560728, 10.56346664560728, 10.61346664560728, 10.663466645607281, 10.71346664560728, 10.76346664560728, 10.81346664560728, 10.86346664560728, 10.913466645607281, 10.96346664560728, 11.01346664560728, 11.06346664560728, 11.11346664560728, 11.163466645607281, 11.21346664560728, 11.26346664560728, 11.31346664560728, 11.36346664560728, 11.413466645607281, 11.46346664560728, 11.51346664560728, 11.56346664560728, 11.61346664560728, 11.663466645607281, 11.71346664560728, 11.76346664560728, 11.81346664560728, 11.86346664560728, 11.913466645607281, 11.96346664560728, 12.01346664560728, 12.06346664560728, 12.11346664560728, 12.163466645607281, 12.21346664560728, 12.26346664560728, 12.31346664560728, 12.36346664560728, 12.413466645607281, 12.46346664560728, 12.51346664560728, 12.56346664560728, 12.61346664560728], "phase": [-0.01564344650402309, -0.005643446504023089, 0.0043565534959769114, 0.01435655349597691, 0.024356553495976912, 0.03435655349597691, 0.044356553495976905, 0.054356553495976914, 0.06435655349597691, 0.0743565534959769, 0.08435655349597691, 0.09435655349597691, 0.1043565534959769, 0.11435655349597691, 0.12435655349597692, 0.13435655349597692, 0.14435655349597692, 0.15435655349597693, 0.16435655349597691, 0.17435655349597692, 0.18435655349597693, 0.1943565534959769, 0.20435655349597692, 0.21435655349597693, 0.2243565534959769, 0.23435655349597692, 0.24435655349597693, 0.2543565534959769, 0.2643565534959769, 0.2743565534959769, 0.2843565534959769, 0.2943565534959769, 0.3043565534959769, 0.3143565534959769, 0.3243565534959769, 0.3343565534959769, 0.3443565534959769, 0.3543565534959769, 0.3643565534959769, 0.3743565534959769, 0.3843565534959769, 0.3943565534959769, 0.4043565534959769, 0.4143565534959769, 0.4243565534959769, 0.4343565534959769, 0.4443565534959769, 0.4543565534959769, 0.4643565534959769, 0.4743565534959769, 0.4843565534959769, 0.4943565534959769, 0.504356553495977, 0.514356553495977, 0.524356553495977, 0.534356553495977]}, {"amplitude": [9.755918603320893, 9.805918603320894, 9.855918603320893, 9.905918603320893, 9.955918603320892, 10.005918603320893, 10.055918603320894, 10.105918603320893, 10.155918603320893, 10.205918603320892, 10.255918603320893, 10.305918603320894, 10.355918603320893, 10.405918603320893, 10.455918603320892, 10.505918603320893, 10.555918603320894, 10.605918603320893, 10.655918603320893, 10.705918603320892, 10.755918603320893, 10.805918603320894, 10.855918603320893, 10.905918603320893, 10.955918603320892, 11.005918603320893, 11.055918603320894, 11.105918603320893, 11.155918603320893, 11.205918603320892, 11.255918603320893, 11.305918603320894, 11.355918603320893, 11.405918603320893, 11.455918603320892, 11.505918603320893, 11.555918603320894, 11.605918603320893, 11.655918603320893, 11.705918603320892, 11.755918603320893, 11.805918603320894, 11.855918603320893, 11.905918603320893, 11.955918603320892, 12.005918603320893, 12.055918603320894, 12.105918603320893, 12.155918603320893, 12.205918603320892, 12.255918603320893, 12.305918603320894, 12.355918603320893, 12.405918603320893, 12.455918603320892, 12.505918603320893], "phase": [-0.0248689887164856, -0.014868988716485601, -0.004868988716485601, 0.005131011283514397, 0.0151310112835144, 0.0251310112835144, 0.035131011283514396, 0.045131011283514405, 0.0551310112835144, 0.0651310112835144, 0.0751310112835144, 0.0851310112835144, 0.0951310112835144, 0.1051310112835144, 0.11513101128351441, 0.1251310112835144, 0.1351310112835144, 0.1451310112835144, 0.1551310112835144, 0.1651310112835144, 0.1751310112835144, 0.1851310112835144, 0.1951310112835144, 0.2051310112835144, 0.2151310112835144, 0.2251310112835144, 0.2351310112835144, 0.24513101128351442, 0.25513101128351445, 0.26513101128351435, 0.27513101128351436, 0.28513101128351437, 0.2951310112835144, 0.3051310112835144, 0.3151310112835144, 0.3251310112835144, 0.3351310112835144, 0.3451310112835144, 0.35513101128351443, 0.36513101128351444, 0.37513101128351445, 0.38513101128351446, 0.39513101128351436, 0.40513101128351436, 0.4151310112835144, 0.4251310112835144, 0.4351310112835144, 0.4451310112835144, 0.4551310112835144, 0.4651310112835144, 0.4751310112835144, 0.48513101128351444, 0.49513101128351444, 0.5051310112835145, 0.5151310112835145, 0.5251310112835145]}, {"amplitude": [9.617210334728025, 9.667210334728026, 9.717210334728025, 9.767210334728025, 9.817210334728024, 9.867210334728025, 9.917210334728026, 9.967210334728025, 10.017210334728025, 10.067210334728024, 10.117210334728025, 10.167210334728026, 10.217210334728025, 10.267210334728025, 10.317210334728024, 10.367210334728025, 10.417210334728026, 10.467210334728025, 10.517210334728025, 10.567210334728024, 10.617210334728025, 10.667210334728026, 10.717210334728025, 10.767210334728025, 10.817210334728024, 10.867210334728025, 10.917210334728026, 10.967210334728025, 11.017210334728025, 11.067210334728024, 11.117210334728025, 11.167210334728026, 11.217210334728025, 11.267210334728025, 11.317210334728024, 11.367210334728025, 11.417210334728026, 11.467210334728025, 11.517210334728025, 11.567210334728024, 11.617210334728025, 11.667210334728026, 11.717210334728025, 11.767210334728025, 11.817210334728024, 11.867210334728025, 11.917210334728026, 11.967210334728025, 12.017210334728025, 12.067210334728024, 12.117210334728025, 12.167210334728026, 12.217210334728025, 12.267210334728025, 12.317210334728024, 12.367210334728025], "phase": [-0.03387379202452904, -0.023873792024529036, -0.013873792024529038, -0.0038737920245290394, 0.0061262079754709625, 0.016126207975470964, 0.02612620797547096, 0.03612620797547097, 0.04612620797547096, 0.05612620797547096, 0.06612620797547097, 0.07612620797547096, 0.08612620797547096, 0.09612620797547097, 0.10612620797547098, 0.11612620797547096, 0.12612620797547097, 0.13612620797547098, 0.14612620797547096, 0.15612620797547097, 0.16612620797547098, 0.17612620797547096, 0.18612620797547097, 0.19612620797547098, 0.20612620797547096, 0.21612620797547097, 0.22612620797547098, 0.236126207975471, 0.246126207975471, 0.2561262079754709, 0.26612620797547093, 0.27612620797547094, 0.28612620797547095, 0.29612620797547096, 0.30612620797547097, 0.316126207975471, 0.3261262079754709, 0.33612620797547094, 0.34612620797547095, 0.35612620797547095, 0.36612620797547096, 0.37612620797547097, 0.3861262079754709, 0.39612620797547093, 0.40612620797547094, 0.41612620797547095, 0.42612620797547096, 0.43612620797547097, 0.4461262079754709, 0.45612620797547093, 0.46612620797547094, 0.47612620797547095, 0.48612620797547096, 0.49612620797547097, 0.506126207975471, 0.516126207975471]}, {"amplitude": [9.44312759208846, 9.493127592088461, 9.54312759208846, 9.59312759208846, 9.64312759208846, 9.69312759208846, 9.743127592088461, 9.79312759208846, 9.84312759208846, 9.89312759208846, 9.94312759208846, 9.993127592088461, 10.04312759208846, 10.09312759208846, 10.14312759208846, 10.19312759208846, 10.243127592088461, 10.29312759208846, 10.34312759208846, 10.39312759208846, 10.44312759208846, 10.493127592088461, 10.54312759208846, 10.59312759208846, 10.64312759208846, 10.69312759208846, 10.743127592088461, 10.79312759208846, 10.84312759208846, 10.89312759208846, 10.94312759208846, 10.993127592088461, 11.04312759208846, 11.09312759208846, 11.14312759208846, 11.19312759208846, 11.243127592088461, 11.29312759208846, 11.34312759208846, 11.39312759208846, 11.44312759208846, 11.493127592088461, 11.54312759208846, 11.59312759208846, 11.64312759208846, 11.69312759208846, 11.743127592088461, 11.79312759208846, 11.84312759208846, 11.89312759208846, 11.94312759208846, 11.993127592088461, 12.04312759208846, 12.09312759208846, 12.14312759208846, 12.19312759208846], "phase": [-0.04257792915650729, -0.032577929156507285, -0.022577929156507286, -0.012577929156507288, -0.002577929156507286, 0.007422070843492716, 0.01742207084349271, 0.02742207084349272, 0.037422070843492715, 0.04742207084349271, 0.05742207084349272, 0.06742207084349272, 0.0774220708434927, 0.08742207084349271, 0.09742207084349272, 0.1074220708434927, 0.11742207084349271, 0.12742207084349272, 0.1374220708434927, 0.1474220708434927, 0.15742207084349272, 0.1674220708434927, 0.1774220708434927, 0.18742207084349272, 0.1974220708434927, 0.2074220708434927, 0.21742207084349272, 0.22742207084349272, 0.23742207084349273, 0.2474220708434927, 0.2574220708434927, 0.26742207084349273, 0.27742207084349274, 0.28742207084349275, 0.29742207084349276, 0.30742207084349277, 0.3174220708434927, 0.32742207084349273, 0.33742207084349274, 0.34742207084349275, 0.35742207084349276, 0.36742207084349277, 0.3774220708434927, 0.3874220708434927, 0.39742207084349274, 0.40742207084349275, 0.41742207084349275, 0.42742207084349276, 0.4374220708434927, 0.4474220708434927, 0.45742207084349273, 0.46742207084349274, 0.47742207084349275, 0.48742207084349276, 0.49742207084349277, 0.5074220708434928]}, {"amplitude": [9.235215546149867, 9.285215546149868, 9.335215546149866, 9.385215546149867, 9.435215546149866, 9.485215546149867, 9.535215546149868, 9.585215546149866, 9.635215546149867, 9.685215546149866, 9.735215546149867, 9.785215546149868, 9.835215546149866, 9.885215546149867, 9.935215546149866, 9.985215546149867, 10.035215546149868, 10.085215546149866, 10.135215546149867, 10.185215546149866, 10.235215546149867, 10.285215546149868, 10.335215546149866, 10.385215546149867, 10.435215546149866, 10.485215546149867, 10.535215546149868, 10.585215546149866, 10.635215546149867, 10.685215546149866, 10.735215546149867, 10.785215546149868, 10.835215546149866, 10.885215546149867, 10.935215546149866, 10.985215546149867, 11.035215546149868, 11.085215546149866, 11.135215546149867, 11.185215546149866, 11.235215546149867, 11.285215546149868, 11.335215546149866, 11.385215546149867, 11.435215546149866, 11.485215546149867, 11.535215546149868, 11.585215546149866, 11.635215546149867, 11.685215546149866, 11.735215546149867, 11.785215546149868, 11.835215546149866, 11.885215546149867, 11.935215546149866, 11.985215546149867], "phase": [-0.05090414157503695, -0.04090414157503695, -0.030904141575036948, -0.02090414157503695, -0.010904141575036948, -0.0009041415750369458, 0.00909585842496305, 0.019095858424963058, 0.029095858424963053, 0.03909585842496305, 0.04909585842496306, 0.05909585842496305, 0.06909585842496305, 0.07909585842496306, 0.08909585842496306, 0.09909585842496305, 0.10909585842496305, 0.11909585842496306, 0.12909585842496304, 0.13909585842496305, 0.14909585842496306, 0.15909585842496304, 0.16909585842496305, 0.17909585842496306, 0.18909585842496304, 0.19909585842496305, 0.20909585842496306, 0.21909585842496307, 0.22909585842496308, 0.23909585842496303, 0.24909585842496304, 0.2590958584249631, 0.2690958584249631, 0.2790958584249631, 0.2890958584249631, 0.2990958584249631, 0.309095858424963, 0.319095858424963, 0.32909585842496303, 0.33909585842496304, 0.34909585842496305, 0.35909585842496305, 0.36909585842496306, 0.3790958584249631, 0.3890958584249631, 0.3990958584249631, 0.4090958584249631, 0.4190958584249631, 0.429095858424963, 0.439095858424963, 0.449095858424963, 0.45909585842496303, 0.46909585842496304, 0.47909585842496305, 0.48909585842496306, 0.49909585842496307]}, {"amplitude": [9.000765071102798, 9.050765071102798, 9.100765071102797, 9.150765071102798, 9.200765071102797, 9.250765071102798, 9.300765071102798, 9.350765071102797, 9.400765071102798, 9.450765071102797, 9.500765071102798, 9.550765071102798, 9.600765071102797, 9.650765071102798, 9.700765071102797, 9.750765071102798, 9.800765071102798, 9.850765071102797, 9.900765071102798, 9.950765071102797, 10.000765071102798, 10.050765071102798, 10.100765071102797, 10.150765071102798, 10.200765071102797, 10.250765071102798, 10.300765071102798, 10.350765071102797, 10.400765071102798, 10.450765071102797, 10.500765071102798, 10.550765071102798, 10.600765071102797, 10.650765071102798, 10.700765071102797, 10.750765071102798, 10.800765071102798, 10.850765071102797, 10.900765071102798, 10.950765071102797, 11.000765071102798, 11.050765071102798, 11.100765071102797, 11.150765071102798, 11.200765071102797, 11.250765071102798, 11.300765071102798, 11.350765071102797, 11.400765071102798, 11.450765071102797, 11.500765071102798, 11.550765071102798, 11.600765071102797, 11.650765071102798, 11.700765071102797, 11.750765071102798], "phase": [-0.05877852522924725, -0.04877852522924725, -0.038778525229247254, -0.028778525229247252, -0.01877852522924725, -0.008778525229247248, 0.0012214747707527465, 0.011221474770752755, 0.02122147477075275, 0.031221474770752745, 0.041221474770752754, 0.05122147477075275, 0.061221474770752744, 0.07122147477075275, 0.08122147477075276, 0.09122147477075274, 0.10122147477075275, 0.11122147477075275, 0.12122147477075274, 0.13122147477075274, 0.14122147477075275, 0.15122147477075273, 0.16122147477075274, 0.17122147477075275, 0.18122147477075273, 0.19122147477075274, 0.20122147477075275, 0.21122147477075276, 0.22122147477075277, 0.23122147477075272, 0.24122147477075273, 0.25122147477075274, 0.26122147477075275, 0.27122147477075276, 0.28122147477075277, 0.2912214747707528, 0.30122147477075273, 0.31122147477075274, 0.32122147477075275, 0.33122147477075276, 0.34122147477075276, 0.3512214747707528, 0.3612214747707527, 0.37122147477075274, 0.38122147477075274, 0.39122147477075275, 0.40122147477075276, 0.41122147477075277, 0.4212214747707527, 0.43122147477075273, 0.44122147477075274, 0.45122147477075275, 0.46122147477075276, 0.47122147477075277, 0.4812214747707528, 0.4912214747707528]}, {"amplitude": [8.751983235502152, 8.801983235502153, 8.851983235502152, 8.901983235502152, 8.951983235502151, 9.001983235502152, 9.051983235502153, 9.101983235502152, 9.151983235502152, 9.201983235502151, 9.251983235502152, 9.301983235502153, 9.351983235502152, 9.401983235502152, 9.451983235502151, 9.501983235502152, 9.551983235502153, 9.601983235502152, 9.651983235502152, 9.701983235502151, 9.751983235502152, 9.801983235502153, 9.851983235502152, 9.901983235502152, 9.951983235502151, 10.001983235502152, 10.051983235502153, 10.101983235502152, 10.151983235502152, 10.201983235502151, 10.251983235502152, 10.301983235502153, 10.351983235502152, 10.401983235502152, 10.451983235502151, 10.501983235502152, 10.551983235502153, 10.601983235502152, 10.651983235502152, 10.701983235502151, 10.751983235502152, 10.801983235502153, 10.851983235502152, 10.901983235502152, 10.951983235502151, 11.001983235502152, 11.051983235502153, 11.101983235502152, 11.151983235502152, 11.201983235502151, 11.251983235502152, 11.301983235502153, 11.351983235502152, 11.401983235502152, 11.451983235502151, 11.501983235502152], "phase": [-0.06613118653236522, -0.056131186532365214, -0.04613118653236521, -0.03613118653236522, -0.026131186532365215, -0.016131186532365213, -0.006131186532365218, 0.0038688134676347907, 0.013868813467634786, 0.02386881346763478, 0.03386881346763479, 0.043868813467634785, 0.05386881346763478, 0.06386881346763479, 0.0738688134676348, 0.08386881346763478, 0.09386881346763479, 0.1038688134676348, 0.11386881346763478, 0.12386881346763479, 0.1338688134676348, 0.14386881346763478, 0.15386881346763479, 0.1638688134676348, 0.17386881346763478, 0.18386881346763478, 0.1938688134676348, 0.2038688134676348, 0.2138688134676348, 0.22386881346763476, 0.23386881346763477, 0.24386881346763478, 0.2538688134676348, 0.2638688134676348, 0.2738688134676348, 0.2838688134676348, 0.29386881346763477, 0.3038688134676348, 0.3138688134676348, 0.3238688134676348, 0.3338688134676348, 0.3438688134676348, 0.35386881346763477, 0.3638688134676348, 0.3738688134676348, 0.3838688134676348, 0.3938688134676348, 0.4038688134676348, 0.41386881346763477, 0.4238688134676348, 0.4338688134676348, 0.4438688134676348, 0.4538688134676348, 0.4638688134676348, 0.4738688134676348, 0.48386881346763483]}, {"amplitude": [8.504462775087891, 8.554462775087892, 8.60446277508789, 8.654462775087891, 8.70446277508789, 8.754462775087891, 8.804462775087892, 8.85446277508789, 8.904462775087891, 8.95446277508789, 9.004462775087891, 9.054462775087892, 9.10446277508789, 9.154462775087891, 9.20446277508789, 9.254462775087891, 9.304462775087892, 9.35446277508789, 9.404462775087891, 9.45446277508789, 9.504462775087891, 9.554462775087892, 9.60446277508789, 9.654462775087891, 9.70446277508789, 9.754462775087891, 9.804462775087892, 9.85446277508789, 9.904462775087891, 9.95446277508789, 10.004462775087891, 10.054462775087892, 10.10446277508789, 10.154462775087891, 10.20446277508789, 10.254462775087891, 10.304462775087892, 10.35446277508789, 10.404462775087891, 10.45446277508789, 10.504462775087891, 10.554462775087892, 10.60446277508789, 10.654462775087891, 10.70446277508789, 10.754462775087891, 10.804462775087892, 10.85446277508789, 10.904462775087891, 10.95446277508789, 11.004462775087891, 11.054462775087892, 11.10446277508789, 11.154462775087891, 11.20446277508789, 11.254462775087891], "phase": [-0.07289686274214102, -0.06289686274214103, -0.05289686274214102, -0.04289686274214102, -0.03289686274214102, -0.02289686274214102, -0.012896862742141024, -0.0028968627421410154, 0.00710313725785898, 0.017103137257858975, 0.027103137257858984, 0.03710313725785898, 0.047103137257858974, 0.05710313725785898, 0.06710313725785899, 0.07710313725785897, 0.08710313725785898, 0.09710313725785899, 0.10710313725785897, 0.11710313725785898, 0.127103137257859, 0.13710313725785897, 0.14710313725785898, 0.157103137257859, 0.16710313725785897, 0.17710313725785898, 0.187103137257859, 0.197103137257859, 0.207103137257859, 0.21710313725785896, 0.22710313725785897, 0.23710313725785898, 0.24710313725785898, 0.257103137257859, 0.267103137257859, 0.277103137257859, 0.28710313725785896, 0.297103137257859, 0.307103137257859, 0.317103137257859, 0.327103137257859, 0.337103137257859, 0.34710313725785896, 0.35710313725785897, 0.367103137257859, 0.377103137257859, 0.387103137257859, 0.397103137257859, 0.40710313725785896, 0.41710313725785897, 0.427103137257859, 0.437103137257859, 0.447103137257859, 0.457103137257859, 0.467103137257859, 0.477103137257859]}, {"amplitude": [8.275163873018105, 8.325163873018106, 8.375163873018105, 8.425163873018105, 8.475163873018104, 8.525163873018105, 8.575163873018106, 8.625163873018105, 8.675163873018105, 8.725163873018104, 8.775163873018105, 8.825163873018106, 8.875163873018105, 8.925163873018105, 8.975163873018104, 9.025163873018105, 9.075163873018106, 9.125163873018105, 9.175163873018105, 9.225163873018104, 9.275163873018105, 9.325163873018106, 9.375163873018105, 9.425163873018105, 9.475163873018104, 9.525163873018105, 9.575163873018106, 9.625163873018105, 9.675163873018105, 9.725163873018104, 9.775163873018105, 9.825163873018106, 9.875163873018105, 9.925163873018105, 9.975163873018104, 10.025163873018105, 10.075163873018106, 10.125163873018105, 10.175163873018105, 10.225163873018104, 10.275163873018105, 10.325163873018106, 10.375163873018105, 10.425163873018105, 10.475163873018104, 10.525163873018105, 10.575163873018106, 10.625163873018105, 10.675163873018105, 10.725163873018104, 10.775163873018105, 10.825163873018106, 10.875163873018105, 10.925163873018105, 10.975163873018104, 11.025163873018105], "phase": [-0.07901550123756901, -0.06901550123756901, -0.059015501237569004, -0.04901550123756901, -0.03901550123756901, -0.029015501237569005, -0.01901550123756901, -0.009015501237569001, 0.0009844987624309937, 0.010984498762430989, 0.020984498762430998, 0.030984498762430993, 0.04098449876243099, 0.050984498762430996, 0.060984498762431005, 0.07098449876243099, 0.080984498762431, 0.090984498762431, 0.10098449876243099, 0.110984498762431, 0.120984498762431, 0.13098449876243098, 0.140984498762431, 0.150984498762431, 0.16098449876243098, 0.170984498762431, 0.180984498762431, 0.190984498762431, 0.20098449876243102, 0.21098449876243097, 0.22098449876243098, 0.230984498762431, 0.240984498762431, 0.250984498762431, 0.260984498762431, 0.270984498762431, 0.280984498762431, 0.290984498762431, 0.300984498762431, 0.310984498762431, 0.320984498762431, 0.330984498762431, 0.340984498762431, 0.350984498762431, 0.360984498762431, 0.370984498762431, 0.380984498762431, 0.390984498762431, 0.400984498762431, 0.410984498762431, 0.420984498762431, 0.430984498762431, 0.440984498762431, 0.450984498762431, 0.460984498762431, 0.47098449876243104]}, {"amplitude": [8.080190176163239, 8.13019017616324, 8.180190176163238, 8.230190176163239, 8.280190176163238, 8.330190176163239, 8.38019017616324, 8.430190176163238, 8.480190176163239, 8.530190176163238, 8.580190176163239, 8.63019017616324, 8.680190176163238, 8.730190176163239, 8.780190176163238, 8.830190176163239, 8.88019017616324, 8.930190176163238, 8.980190176163239, 9.030190176163238, 9.080190176163239, 9.13019017616324, 9.180190176163238, 9.230190176163239, 9.280190176163238, 9.330190176163239, 9.38019017616324, 9.430190176163238, 9.480190176163239, 9.530190176163238, 9.580190176163239, 9.63019017616324, 9.680190176163238, 9.730190176163239, 9.780190176163238, 9.830190176163239, 9.88019017616324, 9.930190176163238, 9.980190176163239, 10.030190176163238, 10.080190176163239, 10.13019017616324, 10.180190176163238, 10.230190176163239, 10.280190176163238, 10.330190176163239, 10.38019017616324, 10.430190176163238, 10.480190176163239, 10.530190176163238, 10.580190176163239, 10.63019017616324, 10.680190176163238, 10.730190176163239, 10.780190176163238, 10.830190176163239], "phase": [-0.08443279255020135, -0.07443279255020135, -0.06443279255020135, -0.05443279255020135, -0.04443279255020135, -0.03443279255020135, -0.02443279255020135, -0.014432792550201343, -0.004432792550201348, 0.005567207449798647, 0.015567207449798656, 0.02556720744979865, 0.035567207449798646, 0.045567207449798655, 0.055567207449798664, 0.06556720744979865, 0.07556720744979865, 0.08556720744979866, 0.09556720744979864, 0.10556720744979865, 0.11556720744979866, 0.12556720744979866, 0.13556720744979867, 0.14556720744979867, 0.15556720744979863, 0.16556720744979864, 0.17556720744979865, 0.18556720744979865, 0.19556720744979866, 0.20556720744979862, 0.21556720744979863, 0.22556720744979863, 0.23556720744979864, 0.24556720744979865, 0.25556720744979866, 0.26556720744979867, 0.2755672074497986, 0.28556720744979863, 0.29556720744979864, 0.30556720744979865, 0.31556720744979866, 0.32556720744979867, 0.3355672074497986, 0.34556720744979863, 0.35556720744979864, 0.36556720744979865, 0.37556720744979866, 0.38556720744979867, 0.3955672074497986, 0.40556720744979863, 0.41556720744979864, 0.42556720744979865, 0.43556720744979865, 0.44556720744979866, 0.4555672074497987, 0.4655672074497987]}, {"amplitude": [7.93266999673472, 7.982669996734721, 8.03266999673472, 8.08266999673472, 8.13266999673472, 8.18266999673472, 8.232669996734721, 8.28266999673472, 8.33266999673472, 8.38266999673472, 8.43266999673472, 8.482669996734721, 8.53266999673472, 8.58266999673472, 8.63266999673472, 8.68266999673472, 8.732669996734721, 8.78266999673472, 8.83266999673472, 8.88266999673472, 8.93266999673472, 8.982669996734721, 9.03266999673472, 9.08266999673472, 9.13266999673472, 9.18266999673472, 9.232669996734721, 9.28266999673472, 9.33266999673472, 9.38266999673472, 9.43266999673472, 9.482669996734721, 9.53266999673472, 9.58266999673472, 9.63266999673472, 9.68266999673472, 9.732669996734721, 9.78266999673472, 9.83266999673472, 9.88266999673472, 9.93266999673472, 9.982669996734721, 10.03266999673472, 10.08266999673472, 10.13266999673472, 10.18266999673472, 10.232669996734721, 10.28266999673472, 10.33266999673472, 10.38266999673472, 10.43266999673472, 10.482669996734721, 10.53266999673472, 10.58266999673472, 10.63266999673472, 10.68266999673472], "phase": [-0.0891006524188367, -0.07910065241883671, -0.0691006524188367, -0.059100652418836705, -0.0491006524188367, -0.0391006524188367, -0.029100652418836706, -0.019100652418836697, -0.009100652418836702, 0.0008993475811632928, 0.010899347581163302, 0.020899347581163297, 0.03089934758116329, 0.0408993475811633, 0.05089934758116331, 0.06089934758116329, 0.0708993475811633, 0.08089934758116331, 0.09089934758116329, 0.1008993475811633, 0.11089934758116331, 0.12089934758116329, 0.13089934758116328, 0.1408993475811633, 0.1508993475811633, 0.1608993475811633, 0.17089934758116332, 0.18089934758116333, 0.19089934758116334, 0.2008993475811633, 0.2108993475811633, 0.2208993475811633, 0.23089934758116332, 0.24089934758116333, 0.25089934758116333, 0.26089934758116334, 0.2708993475811633, 0.2808993475811633, 0.2908993475811633, 0.3008993475811633, 0.31089934758116333, 0.32089934758116334, 0.3308993475811633, 0.3408993475811633, 0.3508993475811633, 0.3608993475811633, 0.37089934758116333, 0.38089934758116334, 0.3908993475811633, 0.4008993475811633, 0.4108993475811633, 0.4208993475811633, 0.43089934758116333, 0.44089934758116334, 0.45089934758116335, 0.46089934758116335]}, {"amplitude": [7.841039009695017, 7.891039009695017, 7.941039009695016, 7.991039009695017, 8.041039009695016, 8.091039009695017, 8.141039009695017, 8.191039009695016, 8.241039009695017, 8.291039009695016, 8.341039009695017, 8.391039009695017, 8.441039009695016, 8.491039009695017, 8.541039009695016, 8.591039009695017, 8.641039009695017, 8.691039009695016, 8.741039009695017, 8.791039009695016, 8.841039009695017, 8.891039009695017, 8.941039009695016, 8.991039009695017, 9.041039009695016, 9.091039009695017, 9.141039009695017, 9.191039009695016, 9.241039009695017, 9.291039009695016, 9.341039009695017, 9.391039009695017, 9.441039009695016, 9.491039009695017, 9.541039009695016, 9.591039009695017, 9.641039009695017, 9.691039009695016, 9.741039009695017, 9.791039009695016, 9.841039009695017, 9.891039009695017, 9.941039009695016, 9.991039009695017, 10.041039009695016, 10.091039009695017, 10.141039009695017, 10.191039009695016, 10.241039009695017, 10.291039009695016, 10.341039009695017, 10.391039009695017, 10.441039009695016, 10.491039009695017, 10.541039009695016, 10.591039009695017], "phase": [-0.09297764858882512, -0.08297764858882513, -0.07297764858882512, -0.06297764858882512, -0.05297764858882512, -0.04297764858882512, -0.032977648588825126, -0.022977648588825117, -0.012977648588825122, -0.002977648588825127, 0.007022351411174882, 0.017022351411174877, 0.027022351411174872, 0.03702235141117488, 0.04702235141117489, 0.05702235141117487, 0.06702235141117488, 0.07702235141117489, 0.08702235141117487, 0.09702235141117488, 0.10702235141117489, 0.11702235141117487, 0.12702235141117488, 0.1370223514111749, 0.14702235141117487, 0.15702235141117488, 0.16702235141117489, 0.1770223514111749, 0.1870223514111749, 0.19702235141117486, 0.20702235141117487, 0.21702235141117487, 0.22702235141117488, 0.2370223514111749, 0.2470223514111749, 0.2570223514111749, 0.26702235141117486, 0.27702235141117487, 0.2870223514111749, 0.2970223514111749, 0.3070223514111749, 0.3170223514111749, 0.32702235141117486, 0.33702235141117487, 0.3470223514111749, 0.3570223514111749, 0.3670223514111749, 0.3770223514111749, 0.38702235141117486, 0.39702235141117487, 0.4070223514111749, 0.4170223514111749, 0.4270223514111749, 0.4370223514111749, 0.4470223514111749, 0.4570223514111749]}, {"amplitude": [7.807964512906309, 7.857964512906309, 7.907964512906308, 7.957964512906309, 8.007964512906309, 8.05796451290631, 8.10796451290631, 8.15796451290631, 8.20796451290631, 8.257964512906309, 8.30796451290631, 8.35796451290631, 8.40796451290631, 8.45796451290631, 8.507964512906309, 8.55796451290631, 8.60796451290631, 8.65796451290631, 8.70796451290631, 8.757964512906309, 8.80796451290631, 8.85796451290631, 8.90796451290631, 8.95796451290631, 9.007964512906309, 9.05796451290631, 9.10796451290631, 9.15796451290631, 9.20796451290631, 9.257964512906309, 9.30796451290631, 9.35796451290631, 9.40796451290631, 9.45796451290631, 9.507964512906309, 9.55796451290631, 9.60796451290631, 9.65796451290631, 9.70796451290631, 9.757964512906309, 9.80796451290631, 9.85796451290631, 9.90796451290631, 9.95796451290631, 10.007964512906309, 10.05796451290631, 10.10796451290631, 10.15796451290631, 10.20796451290631, 10.257964512906309, 10.30796451290631, 10.35796451290631, 10.40796451290631, 10.45796451290631, 10.507964512906309, 10.55796451290631], "phase": [-0.09602936856769423, -0.08602936856769423, -0.07602936856769422, -0.06602936856769423, -0.05602936856769423, -0.046029368567694226, -0.03602936856769423, -0.026029368567694222, -0.016029368567694227, -0.006029368567694232, 0.003970631432305777, 0.013970631432305772, 0.023970631432305767, 0.033970631432305776, 0.043970631432305785, 0.053970631432305766, 0.06397063143230577, 0.07397063143230578, 0.08397063143230576, 0.09397063143230577, 0.10397063143230578, 0.11397063143230576, 0.12397063143230577, 0.13397063143230578, 0.14397063143230576, 0.15397063143230577, 0.16397063143230578, 0.1739706314323058, 0.1839706314323058, 0.19397063143230575, 0.20397063143230576, 0.21397063143230577, 0.22397063143230578, 0.2339706314323058, 0.2439706314323058, 0.2539706314323058, 0.26397063143230576, 0.27397063143230577, 0.2839706314323058, 0.2939706314323058, 0.3039706314323058, 0.3139706314323058, 0.32397063143230576, 0.33397063143230576, 0.3439706314323058, 0.3539706314323058, 0.3639706314323058, 0.3739706314323058, 0.38397063143230575, 0.39397063143230576, 0.40397063143230577, 0.4139706314323058, 0.4239706314323058, 0.4339706314323058, 0.4439706314323058, 0.4539706314323058]}, {"amplitude": [7.830061366764014, 7.880061366764015, 7.930061366764016, 7.980061366764017, 8.030061366764013, 8.080061366764014, 8.130061366764014, 8.180061366764015, 8.230061366764016, 8.280061366764013, 8.330061366764014, 8.380061366764014, 8.430061366764015, 8.480061366764016, 8.530061366764013, 8.580061366764014, 8.630061366764014, 8.680061366764015, 8.730061366764016, 8.780061366764013, 8.830061366764014, 8.880061366764014, 8.930061366764015, 8.980061366764016, 9.030061366764013, 9.080061366764014, 9.130061366764014, 9.180061366764015, 9.230061366764016, 9.280061366764013, 9.330061366764014, 9.380061366764014, 9.430061366764015, 9.480061366764016, 9.530061366764013, 9.580061366764014, 9.630061366764014, 9.680061366764015, 9.730061366764016, 9.780061366764013, 9.830061366764014, 9.880061366764014, 9.930061366764015, 9.980061366764016, 10.030061366764013, 10.080061366764014, 10.130061366764014, 10.180061366764015, 10.230061366764016, 10.280061366764013, 10.330061366764014, 10.380061366764014, 10.430061366764015, 10.480061366764016, 10.530061366764013, 10.580061366764014], "phase": [-0.09822872507286884, -0.08822872507286884, -0.07822872507286883, -0.06822872507286884, -0.05822872507286884, -0.048228725072868836, -0.03822872507286884, -0.028228725072868832, -0.018228725072868837, -0.008228725072868842, 0.0017712749271311667, 0.011771274927131162, 0.021771274927131157, 0.031771274927131166, 0.041771274927131175, 0.051771274927131156, 0.061771274927131165, 0.07177127492713117, 0.08177127492713115, 0.09177127492713116, 0.10177127492713117, 0.11177127492713115, 0.12177127492713116, 0.13177127492713117, 0.14177127492713115, 0.15177127492713116, 0.16177127492713117, 0.17177127492713118, 0.1817712749271312, 0.19177127492713114, 0.20177127492713115, 0.21177127492713116, 0.22177127492713117, 0.23177127492713118, 0.24177127492713119, 0.2517712749271312, 0.26177127492713115, 0.27177127492713116, 0.28177127492713117, 0.2917712749271312, 0.3017712749271312, 0.3117712749271312, 0.32177127492713115, 0.33177127492713115, 0.34177127492713116, 0.3517712749271312, 0.3617712749271312, 0.3717712749271312, 0.38177127492713114, 0.39177127492713115, 0.40177127492713116, 0.41177127492713117, 0.4217712749271312, 0.4317712749271312, 0.4417712749271312, 0.4517712749271312]}, {"amplitude": [7.8984387049884335, 7.948438704988434, 7.998438704988433, 8.048438704988433, 8.098438704988432, 8.148438704988433, 8.198438704988433, 8.248438704988432, 8.298438704988433, 8.348438704988432, 8.398438704988433, 8.448438704988433, 8.498438704988432, 8.548438704988433, 8.598438704988432, 8.648438704988433, 8.698438704988433, 8.748438704988432, 8.798438704988433, 8.848438704988432, 8.898438704988433, 8.948438704988433, 8.998438704988432, 9.048438704988433, 9.098438704988432, 9.148438704988433, 9.198438704988433, 9.248438704988432, 9.298438704988433, 9.348438704988432, 9.398438704988433, 9.448438704988433, 9.498438704988432, 9.548438704988433, 9.598438704988432, 9.648438704988433, 9.698438704988433, 9.748438704988432, 9.798438704988433, 9.848438704988432, 9.898438704988433, 9.948438704988433, 9.998438704988432, 10.048438704988433, 10.098438704988432, 10.148438704988433, 10.198438704988433, 10.248438704988432, 10.298438704988433, 10.348438704988432, 10.398438704988433, 10.448438704988433, 10.498438704988432, 10.548438704988433, 10.598438704988432, 10.648438704988433], "phase": [-0.09955619646030797, -0.08955619646030798, -0.07955619646030797, -0.06955619646030797, -0.05955619646030797, -0.04955619646030797, -0.039556196460307974, -0.029556196460307965, -0.01955619646030797, -0.009556196460307975, 0.0004438035396920337, 0.010443803539692029, 0.020443803539692024, 0.030443803539692033, 0.04044380353969204, 0.05044380353969202, 0.06044380353969203, 0.07044380353969204, 0.08044380353969202, 0.09044380353969203, 0.10044380353969204, 0.11044380353969202, 0.12044380353969203, 0.13044380353969204, 0.14044380353969202, 0.15044380353969203, 0.16044380353969204, 0.17044380353969205, 0.18044380353969205, 0.190443803539692, 0.20044380353969202, 0.21044380353969203, 0.22044380353969203, 0.23044380353969204, 0.24044380353969205, 0.2504438035396921, 0.260443803539692, 0.270443803539692, 0.280443803539692, 0.290443803539692, 0.300443803539692, 0.31044380353969203, 0.32044380353969204, 0.33044380353969205, 0.34044380353969206, 0.35044380353969207, 0.3604438035396921, 0.3704438035396921, 0.380443803539692, 0.390443803539692, 0.400443803539692, 0.410443803539692, 0.420443803539692, 0.430443803539692, 0.44044380353969204, 0.45044380353969204]}, {"amplitude": [7.9999999999999964, 8.049999999999997, 8.099999999999996, 8.149999999999997, 8.199999999999996, 8.249999999999996, 8.299999999999997, 8.349999999999996, 8.399999999999997, 8.449999999999996, 8.499999999999996, 8.549999999999997, 8.599999999999996, 8.649999999999997, 8.699999999999996, 8.749999999999996, 8.799999999999997, 8.849999999999996, 8.899999999999997, 8.949999999999996, 8.999999999999996, 9.049999999999997, 9.099999999999996, 9.149999999999997, 9.199999999999996, 9.249999999999996, 9.299999999999997, 9.349999999999996, 9.399999999999997, 9.449999999999996, 9.499999999999996, 9.549999999999997, 9.599999999999996, 9.649999999999997, 9.699999999999996, 9.749999999999996, 9.799999999999997, 9.849999999999996, 9.899999999999997, 9.949999999999996, 9.999999999999996, 10.049999999999997, 10.099999999999996, 10.149999999999997, 10.199999999999996, 10.249999999999996, 10.299999999999997, 10.349999999999996, 10.399999999999997, 10.449999999999996, 10.499999999999996, 10.549999999999997, 10.599999999999996, 10.649999999999997, 10.699999999999996, 10.749999999999996], "phase": [-0.1, -0.09000000000000001, -0.08, -0.07, -0.060000000000000005, -0.05, -0.04000000000000001, -0.03, -0.020000000000000004, -0.010000000000000009, 0.0, 0.009999999999999995, 0.01999999999999999, 0.03, 0.04000000000000001, 0.04999999999999999, 0.06, 0.07, 0.07999999999999999, 0.09, 0.1, 0.10999999999999999, 0.12, 0.13, 0.13999999999999999, 0.15, 0.16, 0.17, 0.18000000000000002, 0.18999999999999997, 0.19999999999999998, 0.21, 0.22, 0.23, 0.24000000000000002, 0.25, 0.26, 0.27, 0.28, 0.29000000000000004, 0.30000000000000004, 0.31000000000000005, 0.31999999999999995, 0.32999999999999996, 0.33999999999999997, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41000000000000003, 0.42000000000000004, 0.43000000000000005, 0.44000000000000006, 0.45000000000000007]}, {"amplitude": [8.119313436599247, 8.169313436599248, 8.219313436599247, 8.269313436599248, 8.319313436599247, 8.369313436599247, 8.419313436599248, 8.469313436599247, 8.519313436599248, 8.569313436599247, 8.619313436599247, 8.669313436599248, 8.719313436599247, 8.769313436599248, 8.819313436599247, 8.869313436599247, 8.919313436599248, 8.969313436599247, 9.019313436599248, 9.069313436599247, 9.119313436599247, 9.169313436599248, 9.219313436599247, 9.269313436599248, 9.319313436599247, 9.369313436599247, 9.419313436599248, 9.469313436599247, 9.519313436599248, 9.569313436599247, 9.619313436599247, 9.669313436599248, 9.719313436599247, 9.769313436599248, 9.819313436599247, 9.869313436599247, 9.919313436599248, 9.969313436599247, 10.019313436599248, 10.069313436599247, 10.119313436599247, 10.169313436599248, 10.219313436599247, 10.269313436599248, 10.319313436599247, 10.369313436599247, 10.419313436599248, 10.469313436599247, 10.519313436599248, 10.569313436599247, 10.619313436599247, 10.669313436599248, 10.719313436599247, 10.769313436599248, 10.819313436599247, 10.869313436599247], "phase": [-0.09955619646030799, -0.08955619646030799, -0.07955619646030798, -0.06955619646030799, -0.059556196460307985, -0.04955619646030798, -0.03955619646030799, -0.02955619646030798, -0.019556196460307984, -0.009556196460307989, 0.0004438035396920198, 0.010443803539692015, 0.02044380353969201, 0.03044380353969202, 0.04044380353969203, 0.05044380353969201, 0.06044380353969202, 0.07044380353969203, 0.08044380353969201, 0.09044380353969202, 0.10044380353969203, 0.110443803539692, 0.12044380353969202, 0.13044380353969204, 0.140443803539692, 0.150443803539692, 0.160443803539692, 0.17044380353969202, 0.18044380353969203, 0.19044380353969198, 0.200443803539692, 0.210443803539692, 0.220443803539692, 0.23044380353969202, 0.24044380353969202, 0.25044380353969203, 0.260443803539692, 0.270443803539692, 0.280443803539692, 0.290443803539692, 0.300443803539692, 0.31044380353969203, 0.320443803539692, 0.330443803539692, 0.340443803539692, 0.350443803539692, 0.360443803539692, 0.37044380353969203, 0.380443803539692, 0.390443803539692, 0.400443803539692, 0.410443803539692, 0.420443803539692, 0.430443803539692, 0.44044380353969204, 0.45044380353969204]}, {"amplitude": [8.24078963032123, 8.29078963032123, 8.340789630321229, 8.39078963032123, 8.440789630321229, 8.49078963032123, 8.54078963032123, 8.590789630321229, 8.64078963032123, 8.690789630321229, 8.74078963032123, 8.79078963032123, 8.840789630321229, 8.89078963032123, 8.940789630321229, 8.99078963032123, 9.04078963032123, 9.090789630321229, 9.14078963032123, 9.190789630321229, 9.24078963032123, 9.29078963032123, 9.340789630321229, 9.39078963032123, 9.440789630321229, 9.49078963032123, 9.54078963032123, 9.590789630321229, 9.64078963032123, 9.690789630321229, 9.74078963032123, 9.79078963032123, 9.840789630321229, 9.89078963032123, 9.940789630321229, 9.99078963032123, 10.04078963032123, 10.090789630321229, 10.14078963032123, 10.190789630321229, 10.24078963032123, 10.29078963032123, 10.340789630321229, 10.39078963032123, 10.440789630321229, 10.49078963032123, 10.54078963032123, 10.590789630321229, 10.64078963032123, 10.690789630321229, 10.74078963032123, 10.79078963032123, 10.840789630321229, 10.89078963032123, 10.940789630321229, 10.99078963032123], "phase": [-0.09822872507286888, -0.08822872507286889, -0.07822872507286888, -0.06822872507286888, -0.05822872507286888, -0.04822872507286888, -0.03822872507286888, -0.028228725072868874, -0.01822872507286888, -0.008228725072868884, 0.0017712749271311251, 0.01177127492713112, 0.021771274927131115, 0.031771274927131124, 0.04177127492713113, 0.051771274927131114, 0.06177127492713112, 0.07177127492713113, 0.08177127492713111, 0.09177127492713112, 0.10177127492713113, 0.11177127492713111, 0.12177127492713112, 0.13177127492713114, 0.1417712749271311, 0.1517712749271311, 0.16177127492713111, 0.17177127492713112, 0.18177127492713113, 0.19177127492713109, 0.2017712749271311, 0.2117712749271311, 0.2217712749271311, 0.23177127492713112, 0.24177127492713113, 0.25177127492713114, 0.2617712749271311, 0.2717712749271311, 0.2817712749271311, 0.2917712749271311, 0.30177127492713113, 0.31177127492713114, 0.3217712749271311, 0.3317712749271311, 0.3417712749271311, 0.3517712749271311, 0.3617712749271311, 0.37177127492713113, 0.3817712749271311, 0.3917712749271311, 0.4017712749271311, 0.4117712749271311, 0.4217712749271311, 0.43177127492713113, 0.44177127492713114, 0.45177127492713115]}, {"amplitude": [8.35086074438592, 8.400860744385922, 8.45086074438592, 8.500860744385921, 8.55086074438592, 8.60086074438592, 8.650860744385922, 8.70086074438592, 8.750860744385921, 8.80086074438592, 8.85086074438592, 8.900860744385922, 8.95086074438592, 9.000860744385921, 9.05086074438592, 9.10086074438592, 9.150860744385922, 9.20086074438592, 9.250860744385921, 9.30086074438592, 9.35086074438592, 9.400860744385922, 9.45086074438592, 9.500860744385921, 9.55086074438592, 9.60086074438592, 9.650860744385922, 9.70086074438592, 9.750860744385921, 9.80086074438592, 9.85086074438592, 9.900860744385922, 9.95086074438592, 10.000860744385921, 10.05086074438592, 10.10086074438592, 10.150860744385922, 10.20086074438592, 10.250860744385921, 10.30086074438592, 10.35086074438592, 10.400860744385922, 10.45086074438592, 10.500860744385921, 10.55086074438592, 10.60086074438592, 10.650860744385922, 10.70086074438592, 10.750860744385921, 10.80086074438592, 10.85086074438592, 10.900860744385922, 10.95086074438592, 11.000860744385921, 11.05086074438592, 11.10086074438592], "phase": [-0.09602936856769428, -0.08602936856769429, -0.07602936856769428, -0.06602936856769429, -0.056029368567694283, -0.04602936856769428, -0.036029368567694287, -0.026029368567694278, -0.016029368567694283, -0.006029368567694288, 0.003970631432305721, 0.013970631432305716, 0.02397063143230571, 0.03397063143230572, 0.04397063143230573, 0.05397063143230571, 0.06397063143230572, 0.07397063143230573, 0.08397063143230571, 0.09397063143230572, 0.10397063143230573, 0.11397063143230571, 0.12397063143230572, 0.13397063143230573, 0.1439706314323057, 0.15397063143230572, 0.16397063143230572, 0.17397063143230573, 0.18397063143230574, 0.1939706314323057, 0.2039706314323057, 0.2139706314323057, 0.22397063143230572, 0.23397063143230573, 0.24397063143230574, 0.25397063143230575, 0.2639706314323057, 0.2739706314323057, 0.2839706314323057, 0.29397063143230573, 0.30397063143230574, 0.31397063143230575, 0.3239706314323057, 0.3339706314323057, 0.3439706314323057, 0.3539706314323057, 0.36397063143230574, 0.37397063143230574, 0.3839706314323057, 0.3939706314323057, 0.4039706314323057, 0.4139706314323057, 0.42397063143230573, 0.43397063143230574, 0.44397063143230575, 0.45397063143230576]}, {"amplitude": [8.439855046751978, 8.489855046751979, 8.539855046751978, 8.589855046751978, 8.639855046751977, 8.689855046751978, 8.739855046751979, 8.789855046751978, 8.839855046751978, 8.889855046751977, 8.939855046751978, 8.989855046751979, 9.039855046751978, 9.089855046751978, 9.139855046751977, 9.189855046751978, 9.239855046751979, 9.289855046751978, 9.339855046751978, 9.389855046751977, 9.439855046751978, 9.489855046751979, 9.539855046751978, 9.589855046751978, 9.639855046751977, 9.689855046751978, 9.739855046751979, 9.789855046751978, 9.839855046751978, 9.889855046751977, 9.939855046751978, 9.989855046751979, 10.039855046751978, 10.089855046751978, 10.139855046751977, 10.189855046751978, 10.239855046751979, 10.289855046751978, 10.339855046751978, 10.389855046751977, 10.439855046751978, 10.489855046751979, 10.539855046751978, 10.589855046751978, 10.639855046751977, 10.689855046751978, 10.739855046751979, 10.789855046751978, 10.839855046751978, 10.889855046751977, 10.939855046751978, 10.989855046751979, 11.039855046751978, 11.089855046751978, 11.139855046751977, 11.189855046751978], "phase": [-0.09297764858882519, -0.0829776485888252, -0.07297764858882519, -0.0629776485888252, -0.05297764858882519, -0.04297764858882519, -0.032977648588825195, -0.022977648588825186, -0.012977648588825191, -0.0029776485888251963, 0.0070223514111748125, 0.017022351411174808, 0.027022351411174803, 0.03702235141117481, 0.04702235141117482, 0.0570223514111748, 0.06702235141117481, 0.07702235141117482, 0.0870223514111748, 0.09702235141117481, 0.10702235141117482, 0.1170223514111748, 0.1270223514111748, 0.1370223514111748, 0.1470223514111748, 0.15702235141117482, 0.16702235141117483, 0.17702235141117484, 0.18702235141117485, 0.1970223514111748, 0.2070223514111748, 0.21702235141117482, 0.22702235141117483, 0.23702235141117484, 0.24702235141117485, 0.25702235141117485, 0.2670223514111748, 0.2770223514111748, 0.2870223514111748, 0.29702235141117483, 0.30702235141117484, 0.31702235141117485, 0.3270223514111748, 0.3370223514111748, 0.3470223514111748, 0.35702235141117483, 0.36702235141117484, 0.37702235141117485, 0.3870223514111748, 0.3970223514111748, 0.4070223514111748, 0.41702235141117483, 0.42702235141117484, 0.43702235141117485, 0.44702235141117486, 0.45702235141117487]}, {"amplitude": [8.50330390651181, 8.553303906511811, 8.60330390651181, 8.65330390651181, 8.70330390651181, 8.75330390651181, 8.803303906511811, 8.85330390651181, 8.90330390651181, 8.95330390651181, 9.00330390651181, 9.053303906511811, 9.10330390651181, 9.15330390651181, 9.20330390651181, 9.25330390651181, 9.303303906511811, 9.35330390651181, 9.40330390651181, 9.45330390651181, 9.50330390651181, 9.553303906511811, 9.60330390651181, 9.65330390651181, 9.70330390651181, 9.75330390651181, 9.803303906511811, 9.85330390651181, 9.90330390651181, 9.95330390651181, 10.00330390651181, 10.053303906511811, 10.10330390651181, 10.15330390651181, 10.20330390651181, 10.25330390651181, 10.303303906511811, 10.35330390651181, 10.40330390651181, 10.45330390651181, 10.50330390651181, 10.553303906511811, 10.60330390651181, 10.65330390651181, 10.70330390651181, 10.75330390651181, 10.803303906511811, 10.85330390651181, 10.90330390651181, 10.95330390651181, 11.00330390651181, 11.053303906511811, 11.10330390651181, 11.15330390651181, 11.20330390651181, 11.25330390651181], "phase": [-0.0891006524188368, -0.0791006524188368, -0.0691006524188368, -0.0591006524188368, -0.0491006524188368, -0.0391006524188368, -0.029100652418836803, -0.019100652418836794, -0.0091006524188368, 0.0008993475811631957, 0.010899347581163205, 0.0208993475811632, 0.030899347581163195, 0.0408993475811632, 0.05089934758116321, 0.06089934758116319, 0.0708993475811632, 0.08089934758116321, 0.09089934758116319, 0.1008993475811632, 0.11089934758116321, 0.12089934758116319, 0.1308993475811632, 0.1408993475811632, 0.1508993475811632, 0.1608993475811632, 0.1708993475811632, 0.18089934758116322, 0.19089934758116323, 0.20089934758116318, 0.2108993475811632, 0.2208993475811632, 0.2308993475811632, 0.24089934758116321, 0.2508993475811632, 0.26089934758116323, 0.2708993475811632, 0.2808993475811632, 0.2908993475811632, 0.3008993475811632, 0.3108993475811632, 0.32089934758116323, 0.3308993475811632, 0.3408993475811632, 0.3508993475811632, 0.3608993475811632, 0.3708993475811632, 0.38089934758116323, 0.3908993475811632, 0.4008993475811632, 0.4108993475811632, 0.4208993475811632, 0.4308993475811632, 0.4408993475811632, 0.45089934758116323, 0.46089934758116324]}], "sample_rate_hz": 20.0}
\ No newline at end of file
diff --git a/python/tests/golden/mat_result.sha256 b/python/tests/golden/mat_result.sha256
new file mode 100644
index 00000000..4c482e26
--- /dev/null
+++ b/python/tests/golden/mat_result.sha256
@@ -0,0 +1 @@
+ae46351e28c01161c3c20f1a3134d8e32fbbef0cda2fdb9c3a27984da0ce026d
\ No newline at end of file
diff --git a/python/tests/golden/meridian_input.json b/python/tests/golden/meridian_input.json
new file mode 100644
index 00000000..33f7cd78
--- /dev/null
+++ b/python/tests/golden/meridian_input.json
@@ -0,0 +1 @@
+{"esp32_amplitude": [0.51171875, 0.5390625, 0.56640625, 0.59375, 0.62109375, 0.6484375, 0.67578125, 0.703125, 0.73046875, 0.7578125, 0.78515625, 0.8125, 0.83984375, 0.8671875, 0.89453125, 0.921875, 0.94921875, 0.9765625, 1.00390625, 1.03125, 1.05859375, 1.0859375, 1.11328125, 1.140625, 1.16796875, 1.1953125, 1.22265625, 1.25, 1.27734375, 1.3046875, 1.33203125, 1.359375, 1.38671875, 1.4140625, 1.44140625, 1.46875, 1.49609375, 0.5234375, 0.55078125, 0.578125, 0.60546875, 0.6328125, 0.66015625, 0.6875, 0.71484375, 0.7421875, 0.76953125, 0.796875, 0.82421875, 0.8515625, 0.87890625, 0.90625, 0.93359375, 0.9609375, 0.98828125, 1.015625, 1.04296875, 1.0703125, 1.09765625, 1.125, 1.15234375, 1.1796875, 1.20703125, 1.234375], "esp32_phase": [-0.45703125, -0.4375, -0.41796875, -0.3984375, -0.37890625, -0.359375, -0.33984375, -0.3203125, -0.30078125, -0.28125, -0.26171875, -0.2421875, -0.22265625, -0.203125, -0.18359375, -0.1640625, -0.14453125, -0.125, -0.10546875, -0.0859375, -0.06640625, -0.046875, -0.02734375, -0.0078125, 0.01171875, 0.03125, 0.05078125, 0.0703125, 0.08984375, 0.109375, 0.12890625, 0.1484375, 0.16796875, 0.1875, 0.20703125, 0.2265625, 0.24609375, 0.265625, 0.28515625, 0.3046875, 0.32421875, 0.34375, 0.36328125, 0.3828125, 0.40234375, 0.421875, 0.44140625, 0.4609375, 0.48046875, -0.5, -0.48046875, -0.4609375, -0.44140625, -0.421875, -0.40234375, -0.3828125, -0.36328125, -0.34375, -0.32421875, -0.3046875, -0.28515625, -0.265625, -0.24609375, -0.2265625], "intel_amplitude": [0.50390625, 0.546875, 0.58984375, 0.6328125, 0.67578125, 0.71875, 0.76171875, 0.8046875, 0.84765625, 0.890625, 0.93359375, 0.9765625, 1.01953125, 1.0625, 1.10546875, 1.1484375, 1.19140625, 1.234375, 1.27734375, 1.3203125, 1.36328125, 1.40625, 1.44921875, 1.4921875, 0.53515625, 0.578125, 0.62109375, 0.6640625, 0.70703125, 0.75], "intel_phase": [-0.47265625, -0.4609375, -0.44921875, -0.4375, -0.42578125, -0.4140625, -0.40234375, -0.390625, -0.37890625, -0.3671875, -0.35546875, -0.34375, -0.33203125, -0.3203125, -0.30859375, -0.296875, -0.28515625, -0.2734375, -0.26171875, -0.25, -0.23828125, -0.2265625, -0.21484375, -0.203125, -0.19140625, -0.1796875, -0.16796875, -0.15625, -0.14453125, -0.1328125], "ap_positions": [[0.25, 0.5, 0.75], [1.0, 1.25, 1.5], [2.0, 0.0, -0.5]], "rapid_frames": [[0.0, 0.01953125, 0.0390625, 0.05859375, 0.078125, 0.09765625, 0.1171875, 0.13671875, 0.15625, 0.17578125, 0.1953125, 0.21484375, 0.234375, 0.25390625, 0.2734375, 0.29296875], [0.05078125, 0.0703125, 0.08984375, 0.109375, 0.12890625, 0.1484375, 0.16796875, 0.1875, 0.20703125, 0.2265625, 0.24609375, 0.265625, 0.28515625, 0.3046875, 0.32421875, 0.34375], [0.1015625, 0.12109375, 0.140625, 0.16015625, 0.1796875, 0.19921875, 0.21875, 0.23828125, 0.2578125, 0.27734375, 0.296875, 0.31640625, 0.3359375, 0.35546875, 0.375, 0.39453125], [0.15234375, 0.171875, 0.19140625, 0.2109375, 0.23046875, 0.25, 0.26953125, 0.2890625, 0.30859375, 0.328125, 0.34765625, 0.3671875, 0.38671875, 0.40625, 0.42578125, 0.4453125], [0.203125, 0.22265625, 0.2421875, 0.26171875, 0.28125, 0.30078125, 0.3203125, 0.33984375, 0.359375, 0.37890625, 0.3984375, 0.41796875, 0.4375, 0.45703125, 0.4765625, 0.49609375], [0.25390625, 0.2734375, 0.29296875, 0.3125, 0.33203125, 0.3515625, 0.37109375, 0.390625, 0.41015625, 0.4296875, 0.44921875, 0.46875, 0.48828125, 0.5078125, 0.52734375, 0.546875], [0.3046875, 0.32421875, 0.34375, 0.36328125, 0.3828125, 0.40234375, 0.421875, 0.44140625, 0.4609375, 0.48046875, 0.5, 0.51953125, 0.5390625, 0.55859375, 0.578125, 0.59765625], [0.35546875, 0.375, 0.39453125, 0.4140625, 0.43359375, 0.453125, 0.47265625, 0.4921875, 0.51171875, 0.53125, 0.55078125, 0.5703125, 0.58984375, 0.609375, 0.62890625, 0.6484375], [0.40625, 0.42578125, 0.4453125, 0.46484375, 0.484375, 0.50390625, 0.5234375, 0.54296875, 0.5625, 0.58203125, 0.6015625, 0.62109375, 0.640625, 0.66015625, 0.6796875, 0.69921875], [0.45703125, 0.4765625, 0.49609375, 0.515625, 0.53515625, 0.5546875, 0.57421875, 0.59375, 0.61328125, 0.6328125, 0.65234375, 0.671875, 0.69140625, 0.7109375, 0.73046875, 0.75], [0.5078125, 0.52734375, 0.546875, 0.56640625, 0.5859375, 0.60546875, 0.625, 0.64453125, 0.6640625, 0.68359375, 0.703125, 0.72265625, 0.7421875, 0.76171875, 0.78125, 0.80078125], [0.55859375, 0.578125, 0.59765625, 0.6171875, 0.63671875, 0.65625, 0.67578125, 0.6953125, 0.71484375, 0.734375, 0.75390625, 0.7734375, 0.79296875, 0.8125, 0.83203125, 0.8515625]]}
\ No newline at end of file
diff --git a/python/tests/golden/meridian_output.sha256 b/python/tests/golden/meridian_output.sha256
new file mode 100644
index 00000000..b6d414ca
--- /dev/null
+++ b/python/tests/golden/meridian_output.sha256
@@ -0,0 +1 @@
+0486402d5a860f459a319cd779ca44a112d8543442ae9ce9eb7b1a01780aee4b
\ No newline at end of file
diff --git a/python/tests/mat_parity.rs b/python/tests/mat_parity.rs
new file mode 100644
index 00000000..0116d945
--- /dev/null
+++ b/python/tests/mat_parity.rs
@@ -0,0 +1,126 @@
+//! ADR-185 §4.1 — MAT bit-for-bit parity: native-Rust reference half.
+//!
+//! Drives the canonical `wifi-densepose-mat` `DisasterResponse` pipeline
+//! DIRECTLY (no PyO3) over the committed `tests/golden/mat_input.json` CSI
+//! stream and locks the SHA-256 of a canonical result string
+//! (`count=;triage_priorities=`) into
+//! `tests/golden/mat_result.sha256`.
+//!
+//! Only the survivor **count** and **triage classes** are hashed — survivor
+//! UUIDs and event timestamps are non-deterministic and deliberately
+//! excluded, so the hash captures exactly the "identical triage +
+//! survivor count for a fixed CSI stream" invariant of ADR-185 §4.1.
+//!
+//! Honesty note: the fixture is a synthetic breathing-modulated stream, so
+//! this proves the Python binding drives the real pipeline byte-identically
+//! to native Rust — it is NOT a detection-accuracy claim on real rubble.
+//!
+//! Regenerate (only on an intentional Rust change): delete the .sha256 and
+//! re-run `cargo test --features mat --test mat_parity`.
+#![cfg(feature = "mat")]
+
+use std::fs;
+use std::path::PathBuf;
+
+use serde_json::Value;
+use sha2::{Digest, Sha256};
+use wifi_densepose_mat::{DisasterConfig, DisasterResponse, DisasterType, ScanZone, ZoneBounds};
+
+fn golden_dir() -> PathBuf {
+ PathBuf::from(env!("CARGO_MANIFEST_DIR"))
+ .join("tests")
+ .join("golden")
+}
+
+fn fixture() -> Value {
+ let raw = fs::read_to_string(golden_dir().join("mat_input.json"))
+ .expect("read mat_input.json fixture");
+ serde_json::from_str(&raw).expect("parse mat_input.json")
+}
+
+/// Build the response identically to the Python binding's default
+/// construction and run one scan over the fixture CSI stream. Returns the
+/// canonical `count=;triage_priorities=` string.
+fn mat_canonical_result(fx: &Value) -> String {
+ let config = DisasterConfig::builder()
+ .disaster_type(DisasterType::Earthquake)
+ .sensitivity(0.9)
+ .confidence_threshold(0.1)
+ .max_depth(5.0)
+ .continuous_monitoring(false)
+ .build();
+ let mut resp = DisasterResponse::new(config);
+ resp.initialize_event(geo::Point::new(0.0, 0.0), "parity-fixture")
+ .expect("initialize_event");
+ resp.add_zone(ScanZone::new(
+ "Zone A",
+ ZoneBounds::rectangle(0.0, 0.0, 50.0, 30.0),
+ ))
+ .expect("add_zone");
+
+ for frame in fx["stream"].as_array().unwrap() {
+ let amp: Vec = frame["amplitude"]
+ .as_array()
+ .unwrap()
+ .iter()
+ .map(|x| x.as_f64().unwrap())
+ .collect();
+ let ph: Vec = frame["phase"]
+ .as_array()
+ .unwrap()
+ .iter()
+ .map(|x| x.as_f64().unwrap())
+ .collect();
+ resp.push_csi_data(&, &ph).expect("push_csi_data");
+ }
+
+ let rt = tokio::runtime::Builder::new_current_thread()
+ .enable_time()
+ .build()
+ .unwrap();
+ rt.block_on(resp.start_scanning()).expect("scan");
+
+ let survivors = resp.survivors();
+ let mut priorities: Vec = survivors
+ .iter()
+ .map(|s| s.triage_status().priority())
+ .collect();
+ priorities.sort_unstable();
+ format!("count={};triage_priorities={:?}", survivors.len(), priorities)
+}
+
+fn sha256_hex(s: &str) -> String {
+ let mut hasher = Sha256::new();
+ hasher.update(s.as_bytes());
+ hasher
+ .finalize()
+ .iter()
+ .map(|b| format!("{b:02x}"))
+ .collect()
+}
+
+#[test]
+fn native_mat_result_is_deterministic() {
+ let fx = fixture();
+ // Two independent runs must agree (survivor count + triage classes are
+ // deterministic; UUIDs/timestamps are excluded from the canonical form).
+ assert_eq!(mat_canonical_result(&fx), mat_canonical_result(&fx));
+}
+
+#[test]
+fn native_mat_matches_committed_golden() {
+ let canon = mat_canonical_result(&fixture());
+ let got = sha256_hex(&canon);
+ let path = golden_dir().join("mat_result.sha256");
+ match fs::read_to_string(&path) {
+ Ok(expected) => assert_eq!(
+ got,
+ expected.trim(),
+ "native MAT result drifted from committed golden (canonical form: {canon})"
+ ),
+ Err(_) => {
+ fs::write(&path, &got).expect("write golden sha256");
+ panic!("no committed golden found; wrote {got} for [{canon}]. Re-run to verify.");
+ }
+ }
+}
diff --git a/python/tests/meridian_parity.rs b/python/tests/meridian_parity.rs
new file mode 100644
index 00000000..a5565618
--- /dev/null
+++ b/python/tests/meridian_parity.rs
@@ -0,0 +1,178 @@
+//! ADR-185 §4.1 — MERIDIAN bit-for-bit parity: native-Rust reference half.
+//!
+//! Calls the canonical `wifi-densepose-signal::hardware_norm` +
+//! `wifi-densepose-train::{geometry,rapid_adapt}` code DIRECTLY (no PyO3)
+//! on the committed `tests/golden/meridian_input.json` fixture and locks
+//! the SHA-256 of the concatenated f32 outputs into
+//! `tests/golden/meridian_output.sha256`.
+//!
+//! Concatenation order (identical in the pytest half, tests/test_meridian.py):
+//! 1. esp32 canonical amplitude (56) 2. esp32 canonical phase (56)
+//! 3. intel5300 canonical amplitude 4. intel5300 canonical phase
+//! 5. geometry.encode(ap_positions) 6. rapid_adapt lora_weights
+//!
+//! Regenerate (only on an intentional Rust change): delete the .sha256 and
+//! re-run `cargo test --features meridian --test meridian_parity`.
+#![cfg(feature = "meridian")]
+
+use std::fs;
+use std::path::PathBuf;
+
+use serde_json::Value;
+use sha2::{Digest, Sha256};
+use wifi_densepose_signal::hardware_norm::{HardwareNormalizer, HardwareType};
+use wifi_densepose_train::geometry::{GeometryEncoder, MeridianGeometryConfig};
+use wifi_densepose_train::rapid_adapt::{AdaptationLoss, RapidAdaptation};
+
+fn golden_dir() -> PathBuf {
+ PathBuf::from(env!("CARGO_MANIFEST_DIR"))
+ .join("tests")
+ .join("golden")
+}
+
+fn fixture() -> Value {
+ let raw = fs::read_to_string(golden_dir().join("meridian_input.json"))
+ .expect("read meridian_input.json fixture");
+ serde_json::from_str(&raw).expect("parse meridian_input.json")
+}
+
+fn f64_vec(v: &Value, key: &str) -> Vec {
+ v[key]
+ .as_array()
+ .unwrap()
+ .iter()
+ .map(|x| x.as_f64().unwrap())
+ .collect()
+}
+
+fn f32_frames(v: &Value, key: &str) -> Vec> {
+ v[key]
+ .as_array()
+ .unwrap()
+ .iter()
+ .map(|row| {
+ row.as_array()
+ .unwrap()
+ .iter()
+ .map(|x| x.as_f64().unwrap() as f32)
+ .collect()
+ })
+ .collect()
+}
+
+/// Compute the full concatenated MERIDIAN output vector, mirroring the
+/// Python binding's default construction exactly.
+fn meridian_output(fx: &Value) -> Vec {
+ let mut out: Vec = Vec::new();
+
+ // 1–4: hardware normalization (default normalizer, canonical 56).
+ let norm = HardwareNormalizer::new();
+ let esp = norm
+ .normalize(
+ &f64_vec(fx, "esp32_amplitude"),
+ &f64_vec(fx, "esp32_phase"),
+ HardwareType::Esp32S3,
+ )
+ .unwrap();
+ out.extend_from_slice(&esp.amplitude);
+ out.extend_from_slice(&esp.phase);
+ let intel = norm
+ .normalize(
+ &f64_vec(fx, "intel_amplitude"),
+ &f64_vec(fx, "intel_phase"),
+ HardwareType::Intel5300,
+ )
+ .unwrap();
+ out.extend_from_slice(&intel.amplitude);
+ out.extend_from_slice(&intel.phase);
+
+ // 5: geometry encoding (default config → 64-dim).
+ let enc = GeometryEncoder::new(&MeridianGeometryConfig::default());
+ let aps: Vec<[f32; 3]> = fx["ap_positions"]
+ .as_array()
+ .unwrap()
+ .iter()
+ .map(|p| {
+ let a = p.as_array().unwrap();
+ [
+ a[0].as_f64().unwrap() as f32,
+ a[1].as_f64().unwrap() as f32,
+ a[2].as_f64().unwrap() as f32,
+ ]
+ })
+ .collect();
+ out.extend_from_slice(&enc.encode(&aps));
+
+ // 6: rapid adaptation lora weights (Combined, epochs 5, lr 1e-3, λ 0.5).
+ let mut ra = RapidAdaptation::new(
+ 10,
+ 4,
+ AdaptationLoss::Combined {
+ epochs: 5,
+ lr: 0.001,
+ lambda_ent: 0.5,
+ },
+ );
+ for frame in f32_frames(fx, "rapid_frames") {
+ ra.push_frame(&frame);
+ }
+ out.extend_from_slice(&ra.adapt().unwrap().lora_weights);
+
+ out
+}
+
+fn sha256_le(vals: &[f32]) -> String {
+ let mut hasher = Sha256::new();
+ for &x in vals {
+ hasher.update(x.to_le_bytes());
+ }
+ hasher
+ .finalize()
+ .iter()
+ .map(|b| format!("{b:02x}"))
+ .collect()
+}
+
+#[test]
+fn native_canonical_frames_are_56_wide() {
+ let fx = fixture();
+ let norm = HardwareNormalizer::new();
+ let esp = norm
+ .normalize(
+ &f64_vec(&fx, "esp32_amplitude"),
+ &f64_vec(&fx, "esp32_phase"),
+ HardwareType::Esp32S3,
+ )
+ .unwrap();
+ assert_eq!(esp.amplitude.len(), 56);
+ assert_eq!(esp.phase.len(), 56);
+ let intel = norm
+ .normalize(
+ &f64_vec(&fx, "intel_amplitude"),
+ &f64_vec(&fx, "intel_phase"),
+ HardwareType::Intel5300,
+ )
+ .unwrap();
+ assert_eq!(intel.amplitude.len(), 56);
+ // 64-dim geometry vector.
+ let enc = GeometryEncoder::new(&MeridianGeometryConfig::default());
+ assert_eq!(enc.encode(&[[0.25, 0.5, 0.75]]).len(), 64);
+}
+
+#[test]
+fn native_meridian_matches_committed_golden() {
+ let got = sha256_le(&meridian_output(&fixture()));
+ let path = golden_dir().join("meridian_output.sha256");
+ match fs::read_to_string(&path) {
+ Ok(expected) => assert_eq!(
+ got,
+ expected.trim(),
+ "native MERIDIAN hash drifted from committed golden \
+ (intentional? delete the .sha256 and regenerate)"
+ ),
+ Err(_) => {
+ fs::write(&path, &got).expect("write golden sha256");
+ panic!("no committed golden found; wrote {got}. Re-run to verify parity.");
+ }
+ }
+}
diff --git a/python/tests/test_aether.py b/python/tests/test_aether.py
new file mode 100644
index 00000000..74ae5952
--- /dev/null
+++ b/python/tests/test_aether.py
@@ -0,0 +1,278 @@
+"""ADR-185 P1 — AETHER binding tests, incl. the §4.1 bit-for-bit parity gate.
+
+The parity test compares the binding's embedding to a committed golden VECTOR
+produced by the native-Rust reference (`tests/aether_parity.rs`), within a
+numerical tolerance. It is NOT a byte-hash: the embedding is f32 with
+transcendental ops, so exact bytes are not reproducible across the CPU
+architectures this project ships wheels for. A mismatch beyond tolerance is a
+release blocker, not a warning.
+"""
+
+from __future__ import annotations
+
+import json
+import math
+import struct
+import tempfile
+from pathlib import Path
+
+import pytest
+
+from wifi_densepose import aether
+
+GOLDEN = Path(__file__).parent / "golden"
+
+# Cross-architecture f32 parity tolerance. The AETHER embedding is pure f32 with
+# transcendental ops that differ in the last bits across CPUs/libm, so exact
+# byte equality is not portable across the wheels this project builds. 1e-4 is
+# ~100x the observed cross-arch drift on unit-normed values and ~100x smaller
+# than any real algorithm change. Combined atol+rtol so both small and larger
+# components are bounded. (ADR-185 §4.1.)
+PARITY_ATOL = 1e-4
+PARITY_RTOL = 1e-4
+
+
+def load_input() -> list[list[float]]:
+ return json.loads((GOLDEN / "aether_input.json").read_text())
+
+
+def assert_embedding_matches_golden(embedding: list[float], golden_name: str) -> None:
+ """Assert `embedding` matches the committed golden vector.
+
+ Two independent checks, because a per-element tolerance alone is not enough:
+ - **Per element**, within atol+rtol — catches a single component drifting.
+ - **Whole-vector cosine** ≥ 1 - 1e-6 — catches a *coherent* shift that stays
+ inside the per-element bound on every component yet moves the vector as a
+ whole (the failure mode a loose element tolerance would hide).
+
+ NaN/inf are rejected explicitly: `abs(nan - b) > tol` is False, so a bare
+ tolerance check would silently PASS an all-NaN embedding. Every value must be
+ finite first.
+ """
+ golden = json.loads((GOLDEN / golden_name).read_text())
+ assert len(embedding) == len(golden), (
+ f"{golden_name}: length {len(embedding)} != golden {len(golden)}"
+ )
+ for i, x in enumerate(embedding):
+ assert math.isfinite(x), f"{golden_name}: element {i} is not finite ({x})"
+
+ for i, (a, b) in enumerate(zip(embedding, golden)):
+ tol = PARITY_ATOL + PARITY_RTOL * abs(b)
+ assert abs(a - b) <= tol, (
+ f"{golden_name}: element {i} diverged from native golden beyond "
+ f"tolerance (got {a}, golden {b}, |Δ|={abs(a - b):.3e}) — "
+ "a real regression, not cross-arch f32 drift."
+ )
+
+ dot = sum(a * b for a, b in zip(embedding, golden))
+ na = math.sqrt(sum(a * a for a in embedding))
+ nb = math.sqrt(sum(b * b for b in golden))
+ cosine = dot / (na * nb) if na > 0 and nb > 0 else 0.0
+ assert cosine >= 1.0 - 1e-6, (
+ f"{golden_name}: whole-vector cosine similarity to the golden is "
+ f"{cosine:.9f} (< 1 - 1e-6) — a coherent shift the per-element "
+ "tolerance did not catch."
+ )
+
+
+def build_extractor() -> aether.EmbeddingExtractor:
+ # Must match the native-Rust reference construction exactly.
+ cfg = aether.AetherConfig(d_model=64, d_proj=128, temperature=0.07, normalize=True)
+ return aether.EmbeddingExtractor(n_subcarriers=56, config=cfg)
+
+
+def _formula_weights(n: int) -> list[float]:
+ # Byte-identical to aether_weights_parity.rs (k/65536 is exact in f32+f64).
+ return [((i * 1103515245 + 12345) % 65536) / 65536.0 - 0.5 for i in range(n)]
+
+
+def _write_weight_file(path: Path, weights: list[float]) -> None:
+ # AETHER weight format: b"AETHERW1" + u32 count + LE f32 payload.
+ with open(path, "wb") as f:
+ f.write(b"AETHERW1")
+ f.write(struct.pack(" None:
+ cfg = aether.AetherConfig(d_model=64, d_proj=128, temperature=0.07, normalize=True)
+ assert cfg.d_model == 64
+ assert cfg.d_proj == 128
+ assert abs(cfg.temperature - 0.07) < 1e-6
+ assert cfg.normalize is True
+
+
+# ─── Constructor input validation (raise ValueError, never panic) ─────────
+# Bad dimensions used to reach Rust and either panic (surfacing as an opaque
+# PanicException) or allocate multi-gigabyte matrices that abort the interpreter.
+
+@pytest.mark.parametrize("kwargs", [
+ {"d_model": 0, "d_proj": 128},
+ {"d_model": 64, "d_proj": 0},
+ {"d_model": 100_000, "d_proj": 128}, # unbounded allocation guard
+ {"d_model": 64, "d_proj": 100_000},
+])
+def test_aether_config_rejects_bad_dims(kwargs: dict) -> None:
+ with pytest.raises(ValueError):
+ aether.AetherConfig(**kwargs)
+
+
+def test_extractor_rejects_zero_heads_instead_of_panicking() -> None:
+ # THE crash codex flagged: n_heads=0 -> `d_model % n_heads` -> panic.
+ cfg = aether.AetherConfig(d_model=64, d_proj=128)
+ with pytest.raises(ValueError):
+ aether.EmbeddingExtractor(n_subcarriers=56, config=cfg, n_heads=0)
+
+
+def test_extractor_rejects_indivisible_head_count() -> None:
+ # 64 % 5 != 0 trips the native assert; must be a clean ValueError.
+ cfg = aether.AetherConfig(d_model=64, d_proj=128)
+ with pytest.raises(ValueError):
+ aether.EmbeddingExtractor(n_subcarriers=56, config=cfg, n_heads=5)
+
+
+@pytest.mark.parametrize("kwargs", [
+ {"n_subcarriers": 0},
+ {"n_subcarriers": 100_000},
+ {"n_keypoints": 0},
+])
+def test_extractor_rejects_bad_shape(kwargs: dict) -> None:
+ cfg = aether.AetherConfig(d_model=64, d_proj=128)
+ base = {"n_subcarriers": 56, "config": cfg}
+ base.update(kwargs)
+ with pytest.raises(ValueError):
+ aether.EmbeddingExtractor(**base)
+
+
+def test_valid_extractor_still_constructs() -> None:
+ # The negatives above must not pass by making the constructor reject
+ # everything: a valid config still builds and embeds.
+ cfg = aether.AetherConfig(d_model=64, d_proj=128)
+ ext = aether.EmbeddingExtractor(n_subcarriers=56, config=cfg, n_heads=4)
+ assert len(ext.embed(load_input())) == 128
+
+
+def test_embedding_shape_and_unit_norm() -> None:
+ emb = build_extractor().embed(load_input())
+ assert len(emb) == 128
+ norm = math.sqrt(sum(x * x for x in emb))
+ assert abs(norm - 1.0) < 1e-4, f"expected unit-norm embedding, got {norm}"
+
+
+def test_binding_matches_native_golden_within_tolerance() -> None:
+ """The release-blocking §4.1 gate: binding output == native Rust reference.
+
+ Compares to a committed golden VECTOR within a numerical tolerance, not a
+ SHA-256 of the raw f32 bytes. The embedding is pure f32 and uses
+ transcendental ops (ln/sqrt/cos in the Gaussian init), which are NOT
+ bit-reproducible across CPU architectures or libm implementations. A
+ byte-hash therefore only ever matched the one arch that generated it, and
+ failed on every other wheel this project builds (aarch64, macOS-arm). The
+ tolerance below (1e-4) is orders of magnitude larger than cross-arch f32
+ drift yet far tighter than any real algorithm change, which moves
+ unit-normed elements by ~1e-2 or more. See ADR-185 §4.1.
+ """
+ emb = build_extractor().embed(load_input())
+ assert_embedding_matches_golden(emb, "aether_embedding.json")
+
+
+def test_embedding_is_deterministic() -> None:
+ ext = build_extractor()
+ inp = load_input()
+ assert ext.embed(inp) == ext.embed(inp)
+
+
+def test_cosine_similarity_self_is_one() -> None:
+ v = [0.1 * i - 0.5 for i in range(32)]
+ assert abs(aether.cosine_similarity(v, v) - 1.0) < 1e-5
+
+
+def test_cosine_similarity_orthogonal_is_zero() -> None:
+ a = [1.0, 0.0, 0.0, 0.0]
+ b = [0.0, 1.0, 0.0, 0.0]
+ assert abs(aether.cosine_similarity(a, b)) < 1e-6
+
+
+def test_info_nce_loss_identical_batch_is_log_n() -> None:
+ # Identical embeddings → all similarities equal → loss == ln(N).
+ emb = [[1.0, 0.0, 0.0]] * 4
+ loss = aether.info_nce_loss(emb, emb, 0.07)
+ assert abs(loss - math.log(4)) < 0.1
+
+
+def test_augment_pair_preserves_shape_and_differs() -> None:
+ window = load_input()
+ view_a, view_b = aether.CsiAugmenter().augment_pair(window, seed=42)
+ assert len(view_a) == len(window)
+ assert len(view_b) == len(window)
+ assert len(view_a[0]) == len(window[0])
+ differs = any(
+ abs(x - y) > 1e-6
+ for ra, rb in zip(view_a, view_b)
+ for x, y in zip(ra, rb)
+ )
+ assert differs, "augment_pair should return two distinct views"
+
+
+def test_missing_feature_message_names_the_real_fix() -> None:
+ # The guard fires only on a from-source build without the feature. Its
+ # message must name the real fix — rebuild with the feature — and must NOT
+ # tell users to `pip install [aether]`, which is an empty extra that cannot
+ # add compiled code to a built wheel.
+ src = (Path(aether.__file__)).read_text()
+ assert "--features aether" in src
+ assert "pip install wifi-densepose[aether]" not in src
+
+
+# ─── Weight loading (ADR-185 §13.a) ──────────────────────────────────
+
+def test_load_weights_is_used_and_matches_native_golden() -> None:
+ ext = build_extractor()
+ baseline = ext.embed(load_input()) # random Xavier init
+
+ weights = _formula_weights(ext.param_count)
+ with tempfile.TemporaryDirectory() as d:
+ wpath = Path(d) / "weights.bin"
+ _write_weight_file(wpath, weights)
+ ext.load_weights(str(wpath))
+
+ loaded = ext.embed(load_input())
+
+ # (1) The loaded weights actually take effect (not a silent no-op).
+ assert any(abs(a - b) > 1e-6 for a, b in zip(baseline, loaded)), (
+ "load_weights had no effect — embedding still equals the random-init baseline"
+ )
+ # (2) Matches the native-Rust reference that loaded the same weights, within
+ # tolerance. See test_binding_matches_native_golden_within_tolerance for
+ # why this is a tolerance compare and not a byte-hash.
+ assert_embedding_matches_golden(loaded, "aether_loaded_embedding.json")
+
+
+def test_save_then_load_weights_round_trips() -> None:
+ ext = build_extractor()
+ inp = load_input()
+ with tempfile.TemporaryDirectory() as d:
+ wpath = Path(d) / "roundtrip.bin"
+ ext.save_weights(str(wpath)) # serialize current (random) weights
+ emb_before = ext.embed(inp)
+ ext2 = build_extractor()
+ ext2.load_weights(str(wpath)) # load them into a fresh extractor
+ assert ext2.embed(inp) == emb_before
+
+
+def test_load_weights_rejects_bad_magic() -> None:
+ ext = build_extractor()
+ with tempfile.TemporaryDirectory() as d:
+ wpath = Path(d) / "bad.bin"
+ wpath.write_bytes(b"NOTAETHER" + b"\x00" * 8)
+ with pytest.raises(ValueError):
+ ext.load_weights(str(wpath))
+
+
+def test_load_weights_rejects_wrong_param_count() -> None:
+ ext = build_extractor()
+ with tempfile.TemporaryDirectory() as d:
+ wpath = Path(d) / "short.bin"
+ _write_weight_file(wpath, [0.1, 0.2, 0.3]) # far too few params
+ with pytest.raises(ValueError):
+ ext.load_weights(str(wpath))
diff --git a/python/tests/test_client_ws.py b/python/tests/test_client_ws.py
index b6c2ad16..828cc830 100644
--- a/python/tests/test_client_ws.py
+++ b/python/tests/test_client_ws.py
@@ -65,7 +65,29 @@ _FIXTURE_MESSAGES = [
]
+#: Upgrade-request headers captured by the in-process server, so tests
+#: can assert what the client actually put on the handshake.
+_CAPTURED_UPGRADE_HEADERS: dict[str, str] = {}
+
+
+def _upgrade_headers(websocket: Any) -> Any:
+ """Read the handshake request headers across websockets versions
+ (`websocket.request.headers` >= 14, `websocket.request_headers` <= 13)."""
+ req = getattr(websocket, "request", None)
+ if req is not None and getattr(req, "headers", None) is not None:
+ return req.headers
+ return getattr(websocket, "request_headers", {})
+
+
async def _handler(websocket: Any) -> None:
+ _CAPTURED_UPGRADE_HEADERS.clear()
+ try:
+ headers = _upgrade_headers(websocket)
+ auth = headers.get("Authorization") if hasattr(headers, "get") else None
+ if auth is not None:
+ _CAPTURED_UPGRADE_HEADERS["Authorization"] = auth
+ except Exception:
+ pass
for msg in _FIXTURE_MESSAGES:
await websocket.send(json.dumps(msg))
# Send one malformed frame to assert the client logs+drops it
@@ -174,6 +196,160 @@ def test_sensing_client_decoder_directly() -> None:
assert msg.rssi is None
+# ─── Auth: bearer token on the WS upgrade (issue #1395) ──────────────
+
+
+def _auth_header_from_kwargs(kwargs: dict) -> Any:
+ """Pull the Authorization value out of whichever header kwarg the
+ installed `websockets` uses (`additional_headers` >= 14,
+ `extra_headers` <= 13). Returns None if no header kwarg was passed."""
+ for key in ("additional_headers", "extra_headers"):
+ if key in kwargs:
+ return dict(kwargs[key]).get("Authorization")
+ return None
+
+
+class _DummyWS:
+ async def close(self) -> None:
+ pass
+
+
+class _CapturingConnect:
+ """Stand-in for `websockets.connect` that records the kwargs it was
+ called with and returns an awaitable yielding a dummy connection."""
+
+ def __init__(self) -> None:
+ self.calls: list[tuple[str, dict]] = []
+
+ def __call__(self, url: str, **kwargs: Any) -> Any:
+ self.calls.append((url, kwargs))
+
+ async def _coro() -> _DummyWS:
+ return _DummyWS()
+
+ return _coro()
+
+ @property
+ def last_kwargs(self) -> dict:
+ return self.calls[-1][1]
+
+
+async def test_token_from_constructor_sets_auth_header(monkeypatch: Any) -> None:
+ from wifi_densepose.client import ws as ws_mod
+
+ fake = _CapturingConnect()
+ monkeypatch.setattr(ws_mod.websockets, "connect", fake)
+
+ async with SensingClient("ws://x/ws/sensing", token="tok-abc"):
+ pass
+
+ assert _auth_header_from_kwargs(fake.last_kwargs) == "Bearer tok-abc"
+
+
+async def test_token_from_env_sets_auth_header(monkeypatch: Any) -> None:
+ from wifi_densepose.client import ws as ws_mod
+
+ fake = _CapturingConnect()
+ monkeypatch.setattr(ws_mod.websockets, "connect", fake)
+ monkeypatch.setenv("RUVIEW_API_TOKEN", "env-tok-123")
+
+ async with SensingClient("ws://x/ws/sensing"):
+ pass
+
+ assert _auth_header_from_kwargs(fake.last_kwargs) == "Bearer env-tok-123"
+
+
+async def test_constructor_token_overrides_env(monkeypatch: Any) -> None:
+ from wifi_densepose.client import ws as ws_mod
+
+ fake = _CapturingConnect()
+ monkeypatch.setattr(ws_mod.websockets, "connect", fake)
+ monkeypatch.setenv("RUVIEW_API_TOKEN", "env-tok")
+
+ async with SensingClient("ws://x/ws/sensing", token="ctor-tok"):
+ pass
+
+ assert _auth_header_from_kwargs(fake.last_kwargs) == "Bearer ctor-tok"
+
+
+async def test_no_token_sends_no_auth_header(monkeypatch: Any) -> None:
+ from wifi_densepose.client import ws as ws_mod
+
+ fake = _CapturingConnect()
+ monkeypatch.setattr(ws_mod.websockets, "connect", fake)
+ monkeypatch.delenv("RUVIEW_API_TOKEN", raising=False)
+
+ async with SensingClient("ws://x/ws/sensing"):
+ pass
+
+ assert _auth_header_from_kwargs(fake.last_kwargs) is None
+ # Auth-disabled path must not smuggle either header kwarg in.
+ assert "additional_headers" not in fake.last_kwargs
+ assert "extra_headers" not in fake.last_kwargs
+
+
+async def test_empty_token_sends_no_auth_header(monkeypatch: Any) -> None:
+ """An explicitly empty token (or empty env var) means 'no auth'."""
+ from wifi_densepose.client import ws as ws_mod
+
+ fake = _CapturingConnect()
+ monkeypatch.setattr(ws_mod.websockets, "connect", fake)
+ monkeypatch.setenv("RUVIEW_API_TOKEN", "")
+
+ async with SensingClient("ws://x/ws/sensing"):
+ pass
+
+ assert _auth_header_from_kwargs(fake.last_kwargs) is None
+
+
+@pytest.mark.parametrize(
+ "header_param,expected",
+ [
+ ("additional_headers", "additional_headers"), # websockets >= 14
+ ("extra_headers", "extra_headers"), # websockets <= 13
+ ],
+)
+def test_select_header_kwarg_across_websockets_versions(
+ header_param: str, expected: str
+) -> None:
+ """Version-compat: the kwarg is chosen by inspecting the installed
+ `connect` signature, so both the pre-14 (`extra_headers`) and
+ post-14 (`additional_headers`) conventions resolve correctly without
+ two websockets installs."""
+ from wifi_densepose.client.ws import _select_header_kwarg
+
+ # Build a fake `connect` whose signature carries only the one kwarg
+ # the emulated websockets version would expose.
+ ns: dict = {}
+ exec(
+ f"def fake_connect(uri, *, {header_param}=None, ping_interval=None): ...",
+ ns,
+ )
+ assert _select_header_kwarg(ns["fake_connect"]) == expected
+
+
+def test_select_header_kwarg_matches_installed_websockets() -> None:
+ """On whatever `websockets` is actually installed, the chosen kwarg
+ must be a real parameter of `websockets.connect`."""
+ import inspect
+
+ import websockets
+
+ from wifi_densepose.client.ws import _select_header_kwarg
+
+ chosen = _select_header_kwarg(websockets.connect)
+ assert chosen in inspect.signature(websockets.connect).parameters
+
+
+async def test_auth_header_reaches_server_end_to_end(ws_server: str) -> None:
+ """Real in-process server: assert the bearer actually arrives on the
+ upgrade request (proves the header is wired to the live handshake,
+ not just the connect kwargs)."""
+ async with SensingClient(ws_server, token="e2e-token") as client:
+ await client.recv_one(timeout=2.0)
+ assert _CAPTURED_UPGRADE_HEADERS.get("Authorization") == "Bearer e2e-token"
+
+
def test_sensing_client_decoder_handles_None_subfields() -> None:
"""When the sensing-server explicitly emits null for HR/BR (no
measurement yet), the client should propagate None, not crash."""
diff --git a/python/tests/test_mat.py b/python/tests/test_mat.py
new file mode 100644
index 00000000..701b5824
--- /dev/null
+++ b/python/tests/test_mat.py
@@ -0,0 +1,109 @@
+"""ADR-185 P3 — MAT binding tests, incl. the §4.1 bit-for-bit parity gate.
+
+The parity test drives the same committed CSI stream through the binding's
+DisasterResponse pipeline and asserts the survivor count + triage classes
+(as a SHA-256 of a canonical string) match the native-Rust golden. A
+mismatch is a release blocker.
+"""
+
+from __future__ import annotations
+
+import hashlib
+import json
+from pathlib import Path
+
+import pytest
+
+from wifi_densepose import mat
+
+GOLDEN = Path(__file__).parent / "golden"
+
+
+def fixture() -> dict:
+ return json.loads((GOLDEN / "mat_input.json").read_text())
+
+
+def build_response() -> mat.DisasterResponse:
+ cfg = mat.DisasterConfig(
+ mat.DisasterType.Earthquake,
+ sensitivity=0.9,
+ confidence_threshold=0.1,
+ max_depth=5.0,
+ )
+ resp = mat.DisasterResponse(cfg)
+ resp.initialize_event(0.0, 0.0, "parity-fixture")
+ resp.add_zone(mat.ScanZone.rectangle("Zone A", 0.0, 0.0, 50.0, 30.0))
+ return resp
+
+
+def run_scan(resp: mat.DisasterResponse) -> None:
+ for frame in fixture()["stream"]:
+ resp.push_csi_data(frame["amplitude"], frame["phase"])
+ resp.scan_once()
+
+
+# ─── enums / config ──────────────────────────────────────────────────
+
+def test_triage_priority_order() -> None:
+ assert mat.TriageStatus.Immediate.priority == 1
+ assert mat.TriageStatus.Delayed.priority == 2
+ assert mat.TriageStatus.Unknown.priority == 5
+
+
+def test_disaster_config_fields() -> None:
+ cfg = mat.DisasterConfig(mat.DisasterType.Flood, sensitivity=1.5, confidence_threshold=0.3)
+ assert cfg.sensitivity == 1.0 # clamped to [0, 1]
+ assert abs(cfg.confidence_threshold - 0.3) < 1e-9
+
+
+# ─── pipeline behaviour ──────────────────────────────────────────────
+
+def test_scan_requires_event() -> None:
+ resp = mat.DisasterResponse(mat.DisasterConfig(mat.DisasterType.Unknown))
+ # No initialize_event / add_zone -> scan_cycle errors "No active event".
+ with pytest.raises(ValueError):
+ resp.scan_once()
+
+
+def test_push_csi_rejects_mismatched_lengths() -> None:
+ resp = build_response()
+ with pytest.raises(ValueError):
+ resp.push_csi_data([1.0, 2.0], [1.0])
+
+
+def test_scan_detects_survivor_from_breathing_stream() -> None:
+ resp = build_response()
+ run_scan(resp)
+ survivors = resp.survivors()
+ # The synthetic breathing-modulated stream trips one detection (matches
+ # the native-Rust reference).
+ assert len(survivors) == 1
+ s = survivors[0]
+ assert isinstance(s.id, str) and len(s.id) > 0
+ assert s.triage_status == mat.TriageStatus.Delayed
+ assert 0.0 <= s.confidence <= 1.0
+ # survivors_by_triage is consistent with the survivor's own class.
+ assert len(resp.survivors_by_triage(mat.TriageStatus.Delayed)) == 1
+ assert len(resp.survivors_by_triage(mat.TriageStatus.Immediate)) == 0
+
+
+# ─── §4.1 bit-for-bit parity gate (release-blocking) ─────────────────
+
+def test_bit_for_bit_parity_with_native_rust() -> None:
+ resp = build_response()
+ run_scan(resp)
+ survivors = resp.survivors()
+ priorities = sorted(s.triage_status.priority for s in survivors)
+ canon = f"count={len(survivors)};triage_priorities={priorities}"
+ got = hashlib.sha256(canon.encode()).hexdigest()
+ expected = (GOLDEN / "mat_result.sha256").read_text().strip()
+ assert got == expected, (
+ f"Python MAT result diverged from native-Rust golden "
+ f"(canonical form: {canon}; {got} != {expected})"
+ )
+
+
+def test_base_wheel_import_error_message() -> None:
+ src = Path(mat.__file__).read_text()
+ assert "--features mat" in src
+ assert "pip install wifi-densepose[mat]" not in src
diff --git a/python/tests/test_meridian.py b/python/tests/test_meridian.py
new file mode 100644
index 00000000..41bbe2b1
--- /dev/null
+++ b/python/tests/test_meridian.py
@@ -0,0 +1,161 @@
+"""ADR-185 P2 — MERIDIAN binding tests, incl. the §4.1 bit-for-bit parity gate.
+
+The parity test packs the binding's concatenated outputs (2× canonical
+frame, geometry vector, rapid-adapt LoRA weights) to little-endian f32
+bytes and asserts SHA-256 equality with the golden produced by the
+native-Rust reference (`tests/meridian_parity.rs`). A mismatch is a
+release blocker.
+"""
+
+from __future__ import annotations
+
+import hashlib
+import json
+import struct
+from pathlib import Path
+
+import pytest
+
+from wifi_densepose import meridian as mer
+
+GOLDEN = Path(__file__).parent / "golden"
+
+
+def fixture() -> dict:
+ return json.loads((GOLDEN / "meridian_input.json").read_text())
+
+
+# ─── HardwareType / HardwareNormalizer / CanonicalCsiFrame ───────────
+
+def test_hardware_type_detect() -> None:
+ assert mer.HardwareType.detect(64) == mer.HardwareType.Esp32S3
+ assert mer.HardwareType.detect(30) == mer.HardwareType.Intel5300
+ assert mer.HardwareType.detect(56) == mer.HardwareType.Atheros
+ assert mer.HardwareType.detect(128) == mer.HardwareType.Generic
+
+
+def test_hardware_type_properties() -> None:
+ assert mer.HardwareType.Esp32S3.subcarrier_count == 64
+ assert mer.HardwareType.Esp32S3.mimo_streams == 1
+ assert mer.HardwareType.Intel5300.mimo_streams == 3
+
+
+def test_normalize_shapes_and_hardware() -> None:
+ fx = fixture()
+ norm = mer.HardwareNormalizer()
+ assert norm.canonical_subcarriers == 56
+ frame = norm.normalize(fx["esp32_amplitude"], fx["esp32_phase"], mer.HardwareType.Esp32S3)
+ assert len(frame.amplitude) == 56
+ assert len(frame.phase) == 56
+ assert frame.hardware_type == mer.HardwareType.Esp32S3
+
+
+def test_normalize_rejects_mismatched_lengths() -> None:
+ norm = mer.HardwareNormalizer()
+ with pytest.raises(ValueError):
+ norm.normalize([1.0, 2.0], [1.0], mer.HardwareType.Generic)
+
+
+# ─── GeometryEncoder ─────────────────────────────────────────────────
+
+def test_geometry_encode_dim_and_permutation_invariance() -> None:
+ enc = mer.GeometryEncoder(mer.MeridianGeometryConfig())
+ aps = [[0.25, 0.5, 0.75], [1.0, 1.25, 1.5], [2.0, 0.0, -0.5]]
+ v = enc.encode(aps)
+ assert len(v) == 64
+ # DeepSets mean-pool is permutation-invariant.
+ v_perm = enc.encode([aps[2], aps[0], aps[1]])
+ assert max(abs(a - b) for a, b in zip(v, v_perm)) < 1e-5
+
+
+def test_geometry_encode_rejects_empty_and_bad_shape() -> None:
+ enc = mer.GeometryEncoder()
+ with pytest.raises(ValueError):
+ enc.encode([])
+ with pytest.raises(ValueError):
+ enc.encode([[0.0, 1.0]]) # not 3 coords
+
+
+# ─── RapidAdaptation ─────────────────────────────────────────────────
+
+def test_rapid_adaptation_adapt() -> None:
+ fx = fixture()
+ ra = mer.RapidAdaptation(
+ min_calibration_frames=10, lora_rank=4, loss_kind="combined",
+ epochs=5, lr=0.001, lambda_ent=0.5,
+ )
+ for frame in fx["rapid_frames"]:
+ ra.push_frame(frame)
+ assert ra.is_ready()
+ assert ra.buffer_len == 12
+ res = ra.adapt()
+ assert res.frames_used == 12
+ assert res.adaptation_epochs == 5
+ assert len(res.lora_weights) == 2 * 16 * 4 # 2 * fdim * rank
+
+
+def test_rapid_adaptation_rejects_bad_loss_kind() -> None:
+ with pytest.raises(ValueError):
+ mer.RapidAdaptation(10, 4, loss_kind="nonsense")
+
+
+def test_rapid_adaptation_empty_buffer_raises() -> None:
+ ra = mer.RapidAdaptation(1, 4)
+ with pytest.raises(ValueError):
+ ra.adapt()
+
+
+# ─── CrossDomainEvaluator ────────────────────────────────────────────
+
+def test_cross_domain_evaluator_gap_ratio() -> None:
+ ev = mer.CrossDomainEvaluator(1)
+ preds = [
+ ([0.0, 0.0, 0.0], [1.0, 0.0, 0.0]), # domain 0, err 1
+ ([0.0, 0.0, 0.0], [2.0, 0.0, 0.0]), # domain 1, err 2
+ ]
+ m = ev.evaluate(preds, [0, 1])
+ assert abs(m["in_domain_mpjpe"] - 1.0) < 1e-6
+ assert abs(m["cross_domain_mpjpe"] - 2.0) < 1e-6
+ assert abs(m["domain_gap_ratio"] - 2.0) < 1e-6
+
+
+def test_mpjpe_module_fn() -> None:
+ assert abs(mer.mpjpe([0.0, 0.0, 0.0], [3.0, 4.0, 0.0], 1) - 5.0) < 1e-6
+
+
+# ─── §4.1 bit-for-bit parity gate (release-blocking) ─────────────────
+
+def test_bit_for_bit_parity_with_native_rust() -> None:
+ fx = fixture()
+ out: list[float] = []
+
+ norm = mer.HardwareNormalizer()
+ esp = norm.normalize(fx["esp32_amplitude"], fx["esp32_phase"], mer.HardwareType.Esp32S3)
+ out += list(esp.amplitude) + list(esp.phase)
+ intel = norm.normalize(fx["intel_amplitude"], fx["intel_phase"], mer.HardwareType.Intel5300)
+ out += list(intel.amplitude) + list(intel.phase)
+
+ enc = mer.GeometryEncoder(mer.MeridianGeometryConfig())
+ out += list(enc.encode(fx["ap_positions"]))
+
+ ra = mer.RapidAdaptation(
+ min_calibration_frames=10, lora_rank=4, loss_kind="combined",
+ epochs=5, lr=0.001, lambda_ent=0.5,
+ )
+ for frame in fx["rapid_frames"]:
+ ra.push_frame(frame)
+ out += list(ra.adapt().lora_weights)
+
+ packed = b"".join(struct.pack(" None:
+ src = Path(mer.__file__).read_text()
+ assert "--features meridian" in src
+ assert "pip install wifi-densepose[meridian]" not in src
diff --git a/python/wifi_densepose/__init__.py b/python/wifi_densepose/__init__.py
index f468f2b1..874d44ca 100644
--- a/python/wifi_densepose/__init__.py
+++ b/python/wifi_densepose/__init__.py
@@ -28,7 +28,7 @@ from __future__ import annotations
# Public Python version follows the wheel version, NOT the Rust core
# version. The Rust core version is surfaced separately as
# `__rust_version__` for diagnostics.
-__version__ = "2.0.0a1"
+__version__ = "2.0.0"
# Re-export the compiled module's surface. The leading underscore on
# `_native` is intentional — it marks the binding module as internal.
diff --git a/python/wifi_densepose/aether.py b/python/wifi_densepose/aether.py
new file mode 100644
index 00000000..40238224
--- /dev/null
+++ b/python/wifi_densepose/aether.py
@@ -0,0 +1,49 @@
+"""AETHER — contrastive CSI embeddings & re-identification (ADR-024, ADR-185 P1).
+
+Self-supervised 128-dim L2-normalized embeddings for WiFi CSI: room
+fingerprinting, person re-identification, and anomaly scoring, computed
+entirely offline by the Rust core (no server, no network).
+
+Not in the binary wheels yet (see ruvnet/RuView#1412 — the P6 SOTA
+bindings are shipped source-build-only for now to keep the base wheel
+small). Build from source with ``maturin ... --features aether`` (or
+``--features sota`` for all three P6 subsystems).
+
+Quick start::
+
+ from wifi_densepose.aether import AetherConfig, EmbeddingExtractor, cosine_similarity
+
+ ext = EmbeddingExtractor(n_subcarriers=56, config=AetherConfig())
+ a = ext.embed(window_a) # list[float], length == config.d_proj (128)
+ b = ext.embed(window_b)
+ score = cosine_similarity(a, b) # re-ID similarity in [-1, 1]
+"""
+
+from __future__ import annotations
+
+from wifi_densepose import _native
+
+# The AETHER symbols are compiled into `_native` only under the Rust `aether`
+# feature. The binary wheels do NOT enable it yet (ruvnet/RuView#1412);
+# it is available from a source build with the feature. Name that fix, not
+# a pip extra, which cannot add compiled code to a built wheel.
+if not hasattr(_native, "AetherConfig"):
+ raise ImportError(
+ "wifi_densepose.aether is not in the binary wheels yet "
+ "(see ruvnet/RuView#1412). Build from source with "
+ "`maturin ... --features aether` (or `--features sota`)."
+ )
+
+AetherConfig = _native.AetherConfig
+CsiAugmenter = _native.CsiAugmenter
+EmbeddingExtractor = _native.EmbeddingExtractor
+info_nce_loss = _native.info_nce_loss
+cosine_similarity = _native.cosine_similarity
+
+__all__ = [
+ "AetherConfig",
+ "CsiAugmenter",
+ "EmbeddingExtractor",
+ "info_nce_loss",
+ "cosine_similarity",
+]
diff --git a/python/wifi_densepose/aether.pyi b/python/wifi_densepose/aether.pyi
new file mode 100644
index 00000000..9d4be719
--- /dev/null
+++ b/python/wifi_densepose/aether.pyi
@@ -0,0 +1,58 @@
+"""Type stubs for the AETHER bindings (ADR-185 P1).
+
+Present only when the wheel is built with the ``[aether]`` extra. The
+top-level ``wifi_densepose`` package does not re-export these names, so
+``mypy --strict`` sees them only via ``from wifi_densepose.aether import ...``.
+"""
+
+from __future__ import annotations
+
+class AetherConfig:
+ def __init__(
+ self,
+ d_model: int = ...,
+ d_proj: int = ...,
+ temperature: float = ...,
+ normalize: bool = ...,
+ ) -> None: ...
+ @property
+ def d_model(self) -> int: ...
+ @property
+ def d_proj(self) -> int: ...
+ @property
+ def temperature(self) -> float: ...
+ @property
+ def normalize(self) -> bool: ...
+ def __repr__(self) -> str: ...
+
+class CsiAugmenter:
+ def __init__(self) -> None: ...
+ def augment_pair(
+ self, window: list[list[float]], seed: int
+ ) -> tuple[list[list[float]], list[list[float]]]: ...
+ def __repr__(self) -> str: ...
+
+class EmbeddingExtractor:
+ def __init__(
+ self,
+ n_subcarriers: int,
+ config: AetherConfig,
+ n_keypoints: int = ...,
+ n_heads: int = ...,
+ n_gnn_layers: int = ...,
+ ) -> None: ...
+ def embed(self, csi_features: list[list[float]]) -> list[float]: ...
+ @property
+ def embedding_dim(self) -> int: ...
+ @property
+ def param_count(self) -> int: ...
+ def load_weights(self, path: str) -> None: ...
+ def save_weights(self, path: str) -> None: ...
+ def __repr__(self) -> str: ...
+
+def info_nce_loss(
+ embeddings_a: list[list[float]],
+ embeddings_b: list[list[float]],
+ temperature: float = ...,
+) -> float: ...
+def cosine_similarity(a: list[float], b: list[float]) -> float: ...
diff --git a/python/wifi_densepose/client/ws.py b/python/wifi_densepose/client/ws.py
index 385ff7f0..d9a712cd 100644
--- a/python/wifi_densepose/client/ws.py
+++ b/python/wifi_densepose/client/ws.py
@@ -31,8 +31,10 @@ asyncio.run(main())
from __future__ import annotations
import asyncio
+import inspect
import json
import logging
+import os
from dataclasses import dataclass, field
from typing import Any, AsyncIterator, Optional
@@ -48,6 +50,33 @@ except ImportError: # pragma: no cover
log = logging.getLogger(__name__)
+#: Environment variable the sensing-server bearer token is read from by
+#: default. Mirrors the TypeScript MCP client (tools/ruview-mcp).
+TOKEN_ENV_VAR = "RUVIEW_API_TOKEN"
+
+
+def _select_header_kwarg(connect_fn: Any) -> str:
+ """Return the ``websockets.connect`` keyword for extra request headers.
+
+ The keyword was renamed inside the ``websockets>=12`` range this
+ package supports: ``<= 13`` accepts ``extra_headers``, ``>= 14``
+ accepts ``additional_headers``. We inspect the actual signature of
+ the installed ``connect`` rather than guessing from ``__version__``,
+ so a version bump that renames the kwarg again is handled by
+ detection instead of raising ``TypeError`` at connect time.
+ """
+ try:
+ params = inspect.signature(connect_fn).parameters
+ except (TypeError, ValueError): # pragma: no cover — no introspectable sig
+ return "additional_headers"
+ if "additional_headers" in params:
+ return "additional_headers"
+ if "extra_headers" in params:
+ return "extra_headers"
+ # Neither present (unexpected) — prefer the newer convention.
+ return "additional_headers"
+
+
# ─── Typed messages ──────────────────────────────────────────────────
@@ -172,12 +201,18 @@ class SensingClient:
the ``async with`` in your own retry loop. Auto-reconnect logic is
application-specific (e.g., "retry forever" for a long-running
automation vs "fail fast" for a CLI tool that should exit).
+
+ Auth: pass ``token=`` to send ``Authorization: Bearer `` on
+ the WS upgrade, for sensing-servers started with ``RUVIEW_API_TOKEN``
+ set. If ``token`` is omitted it defaults to the ``RUVIEW_API_TOKEN``
+ environment variable; when neither is set, no header is sent.
"""
def __init__(
self,
url: str,
*,
+ token: Optional[str] = None,
ping_interval: float = 20.0,
ping_timeout: float = 20.0,
max_size: int = 16 * 1024 * 1024,
@@ -188,18 +223,28 @@ class SensingClient:
"`pip install \"wifi-densepose[client]\"` to enable the client extras."
)
self.url = url
+ # Bearer token for auth-enabled sensing-servers. Explicit
+ # constructor argument wins; otherwise fall back to the
+ # RUVIEW_API_TOKEN environment variable. An empty value (unset
+ # env, or "") means "no auth" — no Authorization header is sent.
+ self._token = token if token is not None else os.environ.get(TOKEN_ENV_VAR)
self._ping_interval = ping_interval
self._ping_timeout = ping_timeout
self._max_size = max_size
self._ws: Any = None # websockets.WebSocketClientProtocol — typed Any to avoid import cost
async def __aenter__(self) -> "SensingClient":
- self._ws = await websockets.connect(
- self.url,
+ connect_kwargs: dict[str, Any] = dict(
ping_interval=self._ping_interval,
ping_timeout=self._ping_timeout,
max_size=self._max_size,
)
+ if self._token:
+ # Python (unlike the browser UI) can set Authorization
+ # directly on the WS upgrade — no ticket workaround needed.
+ header_kwarg = _select_header_kwarg(websockets.connect)
+ connect_kwargs[header_kwarg] = {"Authorization": f"Bearer {self._token}"}
+ self._ws = await websockets.connect(self.url, **connect_kwargs)
return self
async def __aexit__(self, exc_type: Any, exc: Any, tb: Any) -> None:
diff --git a/python/wifi_densepose/mat.py b/python/wifi_densepose/mat.py
new file mode 100644
index 00000000..b9dbb90d
--- /dev/null
+++ b/python/wifi_densepose/mat.py
@@ -0,0 +1,61 @@
+"""MAT — Mass Casualty Assessment Tool (ADR-024 crate, ADR-185 P3).
+
+WiFi-based disaster-survivor detection and START-protocol triage from CSI:
+ingest CSI frames, run a scan cycle, and query detected survivors by triage.
+
+Not in the binary wheels yet (see ruvnet/RuView#1412 — the P6 SOTA
+bindings are shipped source-build-only for now to keep the base wheel
+small). Build from source with ``maturin ... --features mat`` (or
+``--features sota`` for all three P6 subsystems).
+
+Quick start::
+
+ from wifi_densepose.mat import DisasterConfig, DisasterResponse, DisasterType, ScanZone
+
+ cfg = DisasterConfig(DisasterType.Earthquake, sensitivity=0.9, confidence_threshold=0.1)
+ resp = DisasterResponse(cfg)
+ resp.initialize_event(0.0, 0.0, "Building A") # required before scanning
+ resp.add_zone(ScanZone.rectangle("North Wing", 0.0, 0.0, 50.0, 30.0))
+ for amp, phase in csi_stream:
+ resp.push_csi_data(amp, phase)
+ resp.scan_once() # one detection cycle
+ for s in resp.survivors():
+ print(s.id, s.triage_status, s.confidence, s.location)
+
+Honest scope (ADR-185 §3.4): the ADR's Rust-side `scan_once()` wrapper was
+unnecessary — this binding drives one cycle of the public async
+`start_scanning()` (with `continuous_monitoring` forced off) on an internal
+runtime. `initialize_event` + `add_zone` are required before `scan_once`.
+`Survivor.latest_vitals` returns the latest reading (the Rust accessor is a
+history). The detection pipeline is real but unvalidated on live rubble.
+"""
+
+from __future__ import annotations
+
+from wifi_densepose import _native
+
+# MAT symbols are compiled into `_native` only under the Rust `mat` feature.
+if not hasattr(_native, "DisasterResponse"):
+ raise ImportError(
+ "wifi_densepose.mat is not in the binary wheels yet "
+ "(see ruvnet/RuView#1412). Build from source with "
+ "`maturin ... --features mat` (or `--features sota`)."
+ )
+
+DisasterType = _native.DisasterType
+TriageStatus = _native.TriageStatus
+DisasterConfig = _native.DisasterConfig
+DisasterResponse = _native.DisasterResponse
+ScanZone = _native.ScanZone
+Survivor = _native.Survivor
+VitalSignsReading = _native.VitalSignsReading
+
+__all__ = [
+ "DisasterType",
+ "TriageStatus",
+ "DisasterConfig",
+ "DisasterResponse",
+ "ScanZone",
+ "Survivor",
+ "VitalSignsReading",
+]
diff --git a/python/wifi_densepose/mat.pyi b/python/wifi_densepose/mat.pyi
new file mode 100644
index 00000000..f5723d53
--- /dev/null
+++ b/python/wifi_densepose/mat.pyi
@@ -0,0 +1,92 @@
+"""Type stubs for the MAT bindings (ADR-185 P3).
+
+Present only when the wheel is built with the ``[mat]`` extra.
+"""
+
+from __future__ import annotations
+
+import enum
+
+class DisasterType(enum.Enum):
+ BuildingCollapse = 0
+ Earthquake = 1
+ Landslide = 2
+ Avalanche = 3
+ Flood = 4
+ MineCollapse = 5
+ Industrial = 6
+ TunnelCollapse = 7
+ Unknown = 8
+ def __repr__(self) -> str: ...
+
+class TriageStatus(enum.Enum):
+ Immediate = 0
+ Delayed = 1
+ Minor = 2
+ Deceased = 3
+ Unknown = 4
+ @property
+ def priority(self) -> int: ...
+ def __repr__(self) -> str: ...
+
+class VitalSignsReading:
+ @property
+ def breathing_rate_bpm(self) -> float | None: ...
+ @property
+ def heartbeat_rate_bpm(self) -> float | None: ...
+ @property
+ def movement_intensity(self) -> float: ...
+ @property
+ def confidence(self) -> float: ...
+ def __repr__(self) -> str: ...
+
+class Survivor:
+ @property
+ def id(self) -> str: ...
+ @property
+ def triage_status(self) -> TriageStatus: ...
+ @property
+ def confidence(self) -> float: ...
+ @property
+ def location(self) -> tuple[float, float, float] | None: ...
+ @property
+ def latest_vitals(self) -> VitalSignsReading | None: ...
+ def __repr__(self) -> str: ...
+
+class DisasterConfig:
+ def __init__(
+ self,
+ disaster_type: DisasterType,
+ sensitivity: float = ...,
+ confidence_threshold: float = ...,
+ max_depth: float = ...,
+ scan_interval_ms: int = ...,
+ ) -> None: ...
+ @property
+ def sensitivity(self) -> float: ...
+ @property
+ def confidence_threshold(self) -> float: ...
+ @property
+ def max_depth(self) -> float: ...
+ def __repr__(self) -> str: ...
+
+class ScanZone:
+ @staticmethod
+ def rectangle(
+ name: str, min_x: float, min_y: float, max_x: float, max_y: float
+ ) -> ScanZone: ...
+ @staticmethod
+ def circle(name: str, center_x: float, center_y: float, radius: float) -> ScanZone: ...
+ @property
+ def name(self) -> str: ...
+ def __repr__(self) -> str: ...
+
+class DisasterResponse:
+ def __init__(self, config: DisasterConfig) -> None: ...
+ def initialize_event(self, x: float, y: float, description: str) -> None: ...
+ def add_zone(self, zone: ScanZone) -> None: ...
+ def push_csi_data(self, amplitudes: list[float], phases: list[float]) -> None: ...
+ def scan_once(self) -> None: ...
+ def survivors(self) -> list[Survivor]: ...
+ def survivors_by_triage(self, status: TriageStatus) -> list[Survivor]: ...
+ def __repr__(self) -> str: ...
diff --git a/python/wifi_densepose/meridian.py b/python/wifi_densepose/meridian.py
new file mode 100644
index 00000000..6c98e76b
--- /dev/null
+++ b/python/wifi_densepose/meridian.py
@@ -0,0 +1,62 @@
+"""MERIDIAN — cross-environment domain generalization (ADR-027, ADR-185 P2).
+
+Hardware-invariant CSI normalization, geometry-conditioned deployment,
+few-shot room adaptation, and cross-domain evaluation — the tch-free
+inference/adaptation path of Project MERIDIAN, computed by the Rust core.
+
+Not in the binary wheels yet (see ruvnet/RuView#1412 — the P6 SOTA
+bindings are shipped source-build-only for now to keep the base wheel
+small). Build from source with ``maturin ... --features meridian`` (or
+``--features sota`` for all three P6 subsystems).
+
+Quick start::
+
+ from wifi_densepose.meridian import HardwareNormalizer, HardwareType
+
+ norm = HardwareNormalizer() # canonical 56 subcarriers
+ hw = HardwareType.detect(64) # -> HardwareType.Esp32S3
+ frame = norm.normalize(amplitude, phase, hw) # -> CanonicalCsiFrame
+ print(len(frame.amplitude), frame.hardware_type)
+
+Note (honest scope, ADR-185 §3.3): the ADR's ``RapidAdaptation.calibrate``
+/ ``AdaptationResult.converged`` do not exist in the Rust core — use
+``push_frame(...)`` then ``adapt()``; the result exposes ``final_loss``,
+``frames_used``, ``adaptation_epochs``. Training-time types
+(DomainFactorizer, GradientReversalLayer, VirtualDomainAugmentor) are
+out of scope for P6 (they need the deferred libtorch training tier).
+"""
+
+from __future__ import annotations
+
+from wifi_densepose import _native
+
+# MERIDIAN symbols are compiled into `_native` only under the Rust
+# `meridian` feature; absent in a base wheel (ADR-185 §6 acceptance).
+if not hasattr(_native, "HardwareNormalizer"):
+ raise ImportError(
+ "wifi_densepose.meridian is not in the binary wheels yet "
+ "(see ruvnet/RuView#1412). Build from source with "
+ "`maturin ... --features meridian` (or `--features sota`)."
+ )
+
+HardwareType = _native.HardwareType
+CanonicalCsiFrame = _native.CanonicalCsiFrame
+HardwareNormalizer = _native.HardwareNormalizer
+MeridianGeometryConfig = _native.MeridianGeometryConfig
+GeometryEncoder = _native.GeometryEncoder
+RapidAdaptation = _native.RapidAdaptation
+AdaptationResult = _native.AdaptationResult
+CrossDomainEvaluator = _native.CrossDomainEvaluator
+mpjpe = _native.mpjpe
+
+__all__ = [
+ "HardwareType",
+ "CanonicalCsiFrame",
+ "HardwareNormalizer",
+ "MeridianGeometryConfig",
+ "GeometryEncoder",
+ "RapidAdaptation",
+ "AdaptationResult",
+ "CrossDomainEvaluator",
+ "mpjpe",
+]
diff --git a/python/wifi_densepose/meridian.pyi b/python/wifi_densepose/meridian.pyi
new file mode 100644
index 00000000..f3473404
--- /dev/null
+++ b/python/wifi_densepose/meridian.pyi
@@ -0,0 +1,105 @@
+"""Type stubs for the MERIDIAN bindings (ADR-185 P2).
+
+Present only when the wheel is built with the ``[meridian]`` extra.
+"""
+
+from __future__ import annotations
+
+import enum
+
+class HardwareType(enum.Enum):
+ Esp32S3 = 0
+ Intel5300 = 1
+ Atheros = 2
+ Generic = 3
+ @staticmethod
+ def detect(subcarrier_count: int) -> HardwareType: ...
+ @property
+ def subcarrier_count(self) -> int: ...
+ @property
+ def mimo_streams(self) -> int: ...
+ def __repr__(self) -> str: ...
+
+class CanonicalCsiFrame:
+ @property
+ def amplitude(self) -> list[float]: ...
+ @property
+ def phase(self) -> list[float]: ...
+ @property
+ def hardware_type(self) -> HardwareType: ...
+ def __repr__(self) -> str: ...
+
+class HardwareNormalizer:
+ def __init__(self, canonical_subcarriers: int = ...) -> None: ...
+ @staticmethod
+ def detect_hardware(subcarrier_count: int) -> HardwareType: ...
+ @property
+ def canonical_subcarriers(self) -> int: ...
+ def normalize(
+ self, amplitude: list[float], phase: list[float], hardware: HardwareType
+ ) -> CanonicalCsiFrame: ...
+ def __repr__(self) -> str: ...
+
+class MeridianGeometryConfig:
+ def __init__(
+ self,
+ n_frequencies: int = ...,
+ scale: float = ...,
+ geometry_dim: int = ...,
+ seed: int = ...,
+ ) -> None: ...
+ @property
+ def n_frequencies(self) -> int: ...
+ @property
+ def scale(self) -> float: ...
+ @property
+ def geometry_dim(self) -> int: ...
+ @property
+ def seed(self) -> int: ...
+ def __repr__(self) -> str: ...
+
+class GeometryEncoder:
+ def __init__(self, config: MeridianGeometryConfig | None = ...) -> None: ...
+ def encode(self, ap_positions: list[list[float]]) -> list[float]: ...
+ @property
+ def geometry_dim(self) -> int: ...
+ def __repr__(self) -> str: ...
+
+class AdaptationResult:
+ @property
+ def lora_weights(self) -> list[float]: ...
+ @property
+ def final_loss(self) -> float: ...
+ @property
+ def frames_used(self) -> int: ...
+ @property
+ def adaptation_epochs(self) -> int: ...
+ def __repr__(self) -> str: ...
+
+class RapidAdaptation:
+ def __init__(
+ self,
+ min_calibration_frames: int,
+ lora_rank: int,
+ loss_kind: str = ...,
+ epochs: int = ...,
+ lr: float = ...,
+ lambda_ent: float = ...,
+ ) -> None: ...
+ def push_frame(self, frame: list[float]) -> None: ...
+ def is_ready(self) -> bool: ...
+ @property
+ def buffer_len(self) -> int: ...
+ def adapt(self) -> AdaptationResult: ...
+ def __repr__(self) -> str: ...
+
+class CrossDomainEvaluator:
+ def __init__(self, n_joints: int) -> None: ...
+ def evaluate(
+ self,
+ predictions: list[tuple[list[float], list[float]]],
+ domain_labels: list[int],
+ ) -> dict[str, float]: ...
+ def __repr__(self) -> str: ...
+
+def mpjpe(pred: list[float], gt: list[float], n_joints: int) -> float: ...
diff --git a/scripts/fix-markers.json b/scripts/fix-markers.json
index e8375792..26c61217 100644
--- a/scripts/fix-markers.json
+++ b/scripts/fix-markers.json
@@ -273,6 +273,37 @@
],
"rationale": "ADR-117 §P5 — the project is registered with PyPI via API token, not OIDC Trusted Publisher. The token is sourced from GCP Secret Manager (see docs/integrations/pypi-release.md). Re-introducing the `id-token: write` permission would suggest a partial OIDC migration that won't actually work without registering the Trusted Publisher on pypi.org first — a silent regression that would 403 on the next publish.",
"ref": "https://github.com/ruvnet/RuView/pull/786"
+ },
+ {
+ "id": "RuView#1387-rvf-filename-collision",
+ "title": "training_api next_model_id(): microsecond timestamp + AtomicU64 counter keeps exported .rvf filenames collision-resistant",
+ "files": ["v2/crates/wifi-densepose-sensing-server/src/training_api.rs"],
+ "require": [
+ "static MODEL_ID_SEQ: AtomicU64",
+ "%Y%m%d_%H%M%S_%6f",
+ "MODEL_ID_SEQ.fetch_add(1, Ordering::Relaxed)",
+ "model_ids_are_unique_per_call"
+ ],
+ "forbid": [
+ "/%Y%m%d_%H%M%S(?!_%6f)/"
+ ],
+ "rationale": "next_model_id() builds the exported model path as trained-{type}-{ts}-{seq}. A second-resolution timestamp (%Y%m%d_%H%M%S) alone collided for two runs finishing in the same wall-clock second, silently overwriting each other's .rvf artifact and flaking the concurrent model-writing tests on CI (fixed on this branch in 8409f434c). Uniqueness now relies on BOTH microsecond resolution (%6f) AND a process-monotonic AtomicU64 counter appended to the id. Reverting to a bare %Y%m%d_%H%M%S with no sub-second/counter disambiguator reopens the silent-overwrite regression; the forbid uses a negative lookahead so it fires only on a second-resolution format that is NOT followed by _%6f. The model_ids_are_unique_per_call test (1000 back-to-back ids) locks it in.",
+ "ref": "https://github.com/ruvnet/RuView/pull/1387"
+ },
+ {
+ "id": "RuView#1387-default-wheel-budget-config",
+ "title": "python wheel: empty default Cargo features + optional SOTA crates + maturin strip keep the no-extras wheel under the ADR-117 §5.4 5 MB budget",
+ "files": ["python/Cargo.toml", "python/pyproject.toml"],
+ "require": [
+ "default = []",
+ "optional = true",
+ "strip = true"
+ ],
+ "forbid": [
+ "/default\\s*=\\s*\\[[^\\]]*\"(sota|aether|meridian|mat)\"/"
+ ],
+ "rationale": "The [aether]/[meridian]/[mat]/[sota] extras map to Cargo features that link heavy crates (mat -> ort/ONNX Runtime, train -> tokio+ruvector, etc.). The DEFAULT wheel must link none of them to stay under the ADR-117 §5.4 5 MB budget, which requires: (1) `default = []` in python/Cargo.toml [features], (2) every SOTA dep declared `optional = true` so it is pulled only by its own feature, and (3) `strip = true` in pyproject [tool.maturin] to drop debug symbols. Flipping default to include a SOTA feature, or making a SOTA dep non-optional, silently balloons the default wheel. NOTE: a fix-marker is a string guard and cannot measure bytes — it protects the CONFIG that keeps the wheel small. The actual numeric 5 MB ceiling is enforced by the `wheel-size-budget` job in .github/workflows/python-ci.yml, which builds the default (no-features) wheel and fails if it exceeds the budget.",
+ "ref": "https://github.com/ruvnet/RuView/pull/1387"
}
]
}
diff --git a/ui/components/TrainingPanel.js b/ui/components/TrainingPanel.js
index d3b8f6d5..986ff736 100644
--- a/ui/components/TrainingPanel.js
+++ b/ui/components/TrainingPanel.js
@@ -154,7 +154,14 @@ export default class TrainingPanel {
};
await trainingService[method](payload);
await this.refresh();
- } catch (e) { this._set({ loading: false, error: `Training failed: ${e.message}` }); }
+ } catch (e) {
+ // Start was rejected (e.g. server training disabled → HTTP 409). Tear down
+ // the progress socket we opened optimistically and refresh so the button
+ // reflects the real (possibly disabled) state instead of a silent no-op.
+ trainingService.disconnectProgressStream();
+ this._set({ loading: false, error: `Training failed: ${e.message}` });
+ this.refresh();
+ }
}
async _stopTraining() {
@@ -272,13 +279,29 @@ export default class TrainingPanel {
form.appendChild(ir('LoRA Profile (opt.)', 'text', this.config.lora_profile_name, v => { this.config.lora_profile_name = v; }));
s.appendChild(form);
+ // ADR-186 P5: if the server reports in-server training disabled
+ // (enabled:false), the Start buttons must be disabled with a CLI tooltip —
+ // never a silent no-op. Enablement is surfaced on the status payload.
+ const ts = this.state.trainingStatus;
+ const disabled = ts && ts.enabled === false;
+ const cli = (ts && ts.cli) || 'wifi-densepose train-room';
+ if (disabled) {
+ const note = this._el('div', 'tp-empty',
+ `In-server training is disabled on this build. Train from the CLI: ${cli}`);
+ s.appendChild(note);
+ }
+
const acts = this._el('div', 'tp-train-actions');
const btns = [
this._btn('Start Training', 'tp-btn tp-btn-success', () => this._launchTraining('startTraining', { patience: this.config.patience, base_model: this.config.base_model || undefined })),
this._btn('Pretrain', 'tp-btn tp-btn-secondary', () => this._launchTraining('startPretraining')),
this._btn('LoRA', 'tp-btn tp-btn-secondary', () => this._launchTraining('startLoraTraining', { base_model: this.config.base_model || undefined, profile_name: this.config.lora_profile_name || 'default' }))
];
- btns.forEach(b => { b.disabled = this.state.loading; acts.appendChild(b); });
+ btns.forEach(b => {
+ b.disabled = this.state.loading || disabled;
+ if (disabled) b.title = `In-server training disabled — use: ${cli}`;
+ acts.appendChild(b);
+ });
s.appendChild(acts);
return s;
}
diff --git a/v2/Cargo.lock b/v2/Cargo.lock
index 26927517..e4d23aa5 100644
--- a/v2/Cargo.lock
+++ b/v2/Cargo.lock
@@ -11017,6 +11017,13 @@ version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
+[[package]]
+name = "wifi-densepose-aether"
+version = "0.3.0"
+dependencies = [
+ "serde_json",
+]
+
[[package]]
name = "wifi-densepose-bfld"
version = "0.3.1"
@@ -11318,11 +11325,13 @@ dependencies = [
"tempfile",
"thiserror 1.0.69",
"tokio",
+ "tokio-tungstenite",
"tower 0.4.13",
"tower-http",
"tracing",
"tracing-subscriber",
"ureq 2.12.1",
+ "wifi-densepose-aether",
"wifi-densepose-bfld",
"wifi-densepose-engine",
"wifi-densepose-geo",
@@ -11394,7 +11403,6 @@ dependencies = [
"tracing",
"tracing-subscriber",
"walkdir",
- "wifi-densepose-nn",
"wifi-densepose-signal",
]
diff --git a/v2/Cargo.toml b/v2/Cargo.toml
index d89c6741..22b701d6 100644
--- a/v2/Cargo.toml
+++ b/v2/Cargo.toml
@@ -20,6 +20,7 @@ members = [
"crates/wifi-densepose-mat",
"crates/wifi-densepose-train",
"crates/wifi-densepose-sensing-server",
+ "crates/wifi-densepose-aether", # ADR-185 §13 — AETHER pure-compute leaf (std-only)
"crates/wifi-densepose-wifiscan",
"crates/wifi-densepose-vitals",
"crates/wifi-densepose-ruvector",
diff --git a/v2/crates/wifi-densepose-aether/Cargo.toml b/v2/crates/wifi-densepose-aether/Cargo.toml
new file mode 100644
index 00000000..bd88d67c
--- /dev/null
+++ b/v2/crates/wifi-densepose-aether/Cargo.toml
@@ -0,0 +1,26 @@
+[package]
+name = "wifi-densepose-aether"
+description = "AETHER pure-compute stack (ADR-024): contrastive CSI embedding, CSI-to-pose transformer, SONA drift/LoRA, and quantization — std-only, no async/server deps so the Python `[aether]` wheel stays lean (ADR-185 §3.2)"
+version = "0.3.0"
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+documentation.workspace = true
+keywords.workspace = true
+categories.workspace = true
+
+# Intentionally dependency-free: this crate is the leaf hoisted out of
+# `wifi-densepose-sensing-server` (ADR-185 §13) precisely so that binding it into
+# the `wifi_densepose[aether]` wheel does not pull the Axum/tokio/worldgraph/
+# ruvector server tree. Keep it std-only.
+[dependencies]
+
+# Test-only: parses the committed golden fixtures shared with the Python parity
+# tests. Never linked into the library or the wheel.
+[dev-dependencies]
+serde_json = "1"
+
+[lib]
+name = "wifi_densepose_aether"
+path = "src/lib.rs"
diff --git a/v2/crates/wifi-densepose-sensing-server/src/embedding.rs b/v2/crates/wifi-densepose-aether/src/embedding.rs
similarity index 89%
rename from v2/crates/wifi-densepose-sensing-server/src/embedding.rs
rename to v2/crates/wifi-densepose-aether/src/embedding.rs
index 2b2e43ae..5573b540 100644
--- a/v2/crates/wifi-densepose-sensing-server/src/embedding.rs
+++ b/v2/crates/wifi-densepose-aether/src/embedding.rs
@@ -822,8 +822,73 @@ impl EmbeddingExtractor {
self.projection = proj;
Ok(())
}
+
+ /// Serialize all weights (transformer + projection) to `path`.
+ ///
+ /// Format (little-endian, zero-dep so the std-only leaf crate stays
+ /// dependency-free): 8-byte magic `AETHERW1`, then a `u32` parameter
+ /// count, then that many `f32` values — exactly `flatten_weights()`.
+ ///
+ /// This is the counterpart of [`Self::load_weights`]. It enables loading a
+ /// *real trained* checkpoint once one exists (ADR-185 §13.a); it does not
+ /// itself make the default (random-init) extractor trained.
+ pub fn save_weights>(&self, path: P) -> std::io::Result<()> {
+ let weights = self.flatten_weights();
+ let mut buf = Vec::with_capacity(WEIGHT_HEADER_LEN + weights.len() * 4);
+ buf.extend_from_slice(WEIGHT_MAGIC);
+ buf.extend_from_slice(&(weights.len() as u32).to_le_bytes());
+ for v in &weights {
+ buf.extend_from_slice(&v.to_le_bytes());
+ }
+ std::fs::write(path, buf)
+ }
+
+ /// Load weights previously written by [`Self::save_weights`] (or any file in
+ /// that format) into this extractor, replacing the current (random-init or
+ /// prior) weights.
+ ///
+ /// Errors (never panics) on: unreadable file, a payload shorter than the
+ /// header, a wrong magic, a truncated/oversized payload, or a parameter
+ /// count that does not match this extractor's architecture (delegated to
+ /// [`Self::unflatten_weights`]).
+ pub fn load_weights>(&mut self, path: P) -> Result<(), String> {
+ let bytes = std::fs::read(path).map_err(|e| format!("failed to read weight file: {e}"))?;
+ if bytes.len() < WEIGHT_HEADER_LEN {
+ return Err(format!(
+ "weight file too short: {} bytes < {WEIGHT_HEADER_LEN}-byte header",
+ bytes.len()
+ ));
+ }
+ if &bytes[0..8] != WEIGHT_MAGIC {
+ return Err("bad magic: not an AETHER weight file (expected 'AETHERW1')".to_string());
+ }
+ let count = u32::from_le_bytes([bytes[8], bytes[9], bytes[10], bytes[11]]) as usize;
+ let expected_len = WEIGHT_HEADER_LEN + count * 4;
+ if bytes.len() != expected_len {
+ return Err(format!(
+ "weight payload size mismatch: header declares {count} params ({expected_len} bytes), file is {} bytes",
+ bytes.len()
+ ));
+ }
+ let mut weights = Vec::with_capacity(count);
+ for i in 0..count {
+ let o = WEIGHT_HEADER_LEN + i * 4;
+ weights.push(f32::from_le_bytes([
+ bytes[o],
+ bytes[o + 1],
+ bytes[o + 2],
+ bytes[o + 3],
+ ]));
+ }
+ self.unflatten_weights(&weights)
+ }
}
+/// Magic prefix for AETHER weight files (see [`EmbeddingExtractor::save_weights`]).
+const WEIGHT_MAGIC: &[u8; 8] = b"AETHERW1";
+/// 8-byte magic + 4-byte `u32` param count.
+const WEIGHT_HEADER_LEN: usize = 12;
+
// ── CSI feature statistics ─────────────────────────────────────────────────
/// Compute mean and variance of all values in a CSI feature matrix.
@@ -1219,6 +1284,84 @@ mod tests {
}
}
+ // ── Weight save/load (ADR-185 §13.a) ────────────────────────────────
+
+ /// Deterministic, non-random weight pattern. Values are `k/65536 - 0.5`
+ /// with `k ∈ [0, 65535]`, i.e. multiples of 2⁻¹⁶ — exactly representable
+ /// in both f32 and f64 so a cross-language (Rust ↔ Python) fixture using
+ /// the same formula produces byte-identical weights.
+ fn deterministic_weights(n: usize) -> Vec {
+ (0..n)
+ .map(|i| {
+ let k = (i as u32).wrapping_mul(1_103_515_245).wrapping_add(12_345) % 65_536;
+ k as f32 / 65_536.0 - 0.5
+ })
+ .collect()
+ }
+
+ #[test]
+ fn load_weights_actually_replaces_weights_and_round_trips() {
+ let mut ext = EmbeddingExtractor::new(small_config(), small_embed_config());
+ let csi = make_csi(4, 16, 42);
+ let baseline = ext.extract(&csi); // random Xavier init
+
+ // Build a source extractor with deterministic non-default weights and
+ // serialize it.
+ let det = deterministic_weights(ext.param_count());
+ let mut src = EmbeddingExtractor::new(small_config(), small_embed_config());
+ src.unflatten_weights(&det).unwrap();
+ let src_emb = src.extract(&csi);
+
+ let path = std::env::temp_dir()
+ .join(format!("aether_wtest_{}_{:p}.bin", std::process::id(), &ext));
+ src.save_weights(&path).unwrap();
+
+ // Load into the random-init extractor.
+ ext.load_weights(&path).unwrap();
+ let loaded_emb = ext.extract(&csi);
+
+ // (1) The loaded weights are ACTUALLY used — output moved away from the
+ // random-init baseline (proves load is not a silent no-op).
+ let differs = baseline
+ .iter()
+ .zip(&loaded_emb)
+ .any(|(a, b)| (a - b).abs() > 1e-6);
+ assert!(
+ differs,
+ "load_weights had no effect: embedding still equals the random-init baseline"
+ );
+
+ // (2) It matches the source extractor whose weights we saved (round-trip).
+ for (a, b) in src_emb.iter().zip(&loaded_emb) {
+ assert!((a - b).abs() < 1e-6, "loaded embedding != source: {a} vs {b}");
+ }
+
+ // (3) The weights are bit-identical after the file round-trip.
+ assert_eq!(ext.flatten_weights(), det);
+
+ std::fs::remove_file(&path).ok();
+ }
+
+ #[test]
+ fn load_weights_rejects_bad_magic_and_wrong_count() {
+ let mut ext = EmbeddingExtractor::new(small_config(), small_embed_config());
+ let base = std::env::temp_dir().join(format!("aether_wbad_{}.bin", std::process::id()));
+
+ // Bad magic.
+ std::fs::write(&base, b"NOPEMAGIC\x00\x00\x00").unwrap();
+ assert!(ext.load_weights(&base).is_err());
+
+ // Right magic, wrong param count for this architecture.
+ let mut bad = Vec::new();
+ bad.extend_from_slice(WEIGHT_MAGIC);
+ bad.extend_from_slice(&3u32.to_le_bytes());
+ bad.extend_from_slice(&[0u8; 12]); // 3 f32s — won't match param_count
+ std::fs::write(&base, &bad).unwrap();
+ assert!(ext.load_weights(&base).is_err());
+
+ std::fs::remove_file(&base).ok();
+ }
+
// ── FingerprintIndex tests ──────────────────────────────────────────
#[test]
diff --git a/v2/crates/wifi-densepose-sensing-server/src/graph_transformer.rs b/v2/crates/wifi-densepose-aether/src/graph_transformer.rs
similarity index 100%
rename from v2/crates/wifi-densepose-sensing-server/src/graph_transformer.rs
rename to v2/crates/wifi-densepose-aether/src/graph_transformer.rs
diff --git a/v2/crates/wifi-densepose-aether/src/lib.rs b/v2/crates/wifi-densepose-aether/src/lib.rs
new file mode 100644
index 00000000..ef1237ad
--- /dev/null
+++ b/v2/crates/wifi-densepose-aether/src/lib.rs
@@ -0,0 +1,28 @@
+//! AETHER pure-compute stack (ADR-024 / ADR-185 §3.2).
+//!
+//! This crate is the dependency-free leaf hoisted out of
+//! `wifi-densepose-sensing-server` so that the Python `wifi_densepose[aether]`
+//! wheel can bind the contrastive-embedding surface without linking the server's
+//! Axum / tokio / worldgraph / ruvector tree (which blew the ADR-117 §5.4 ≤5 MB
+//! wheel budget).
+//!
+//! Modules:
+//! - [`embedding`] — AETHER contrastive CSI embedding: `EmbeddingConfig`,
+//! `EmbeddingExtractor`, `ProjectionHead`, `CsiAugmenter`, `info_nce_loss`,
+//! fingerprint indices.
+//! - [`graph_transformer`] — CSI-to-pose transformer primitives
+//! (`CsiToPoseTransformer`, `TransformerConfig`, `Linear`).
+//! - [`sona`] — self-organizing drift detection + LoRA adaptation + EWC.
+//! - [`sparse_inference`] — quantization helpers used by the embedding path.
+//!
+//! `wifi-densepose-sensing-server` re-exports these modules so its own code and
+//! public API are unchanged.
+
+// `embedding` carries a couple of not-yet-read fields (e.g. `PoseEncoder.d_proj`);
+// this mirrors the `#[allow(dead_code)]` the module had at its previous home in
+// `wifi-densepose-sensing-server`.
+#[allow(dead_code)]
+pub mod embedding;
+pub mod graph_transformer;
+pub mod sona;
+pub mod sparse_inference;
diff --git a/v2/crates/wifi-densepose-sensing-server/src/sona.rs b/v2/crates/wifi-densepose-aether/src/sona.rs
similarity index 100%
rename from v2/crates/wifi-densepose-sensing-server/src/sona.rs
rename to v2/crates/wifi-densepose-aether/src/sona.rs
diff --git a/v2/crates/wifi-densepose-sensing-server/src/sparse_inference.rs b/v2/crates/wifi-densepose-aether/src/sparse_inference.rs
similarity index 100%
rename from v2/crates/wifi-densepose-sensing-server/src/sparse_inference.rs
rename to v2/crates/wifi-densepose-aether/src/sparse_inference.rs
diff --git a/v2/crates/wifi-densepose-aether/tests/golden_parity.rs b/v2/crates/wifi-densepose-aether/tests/golden_parity.rs
new file mode 100644
index 00000000..5458601a
--- /dev/null
+++ b/v2/crates/wifi-densepose-aether/tests/golden_parity.rs
@@ -0,0 +1,115 @@
+//! ADR-185 §4.1 — NATIVE half of the AETHER parity gate, and the half that runs
+//! in CI.
+//!
+//! The committed golden vectors live under `python/tests/golden/` and are
+//! shared with `python/tests/test_aether.py` (the binding half). That pytest
+//! runs in python-ci; the native reference tests in `python/tests/*.rs` link
+//! against the PyO3 crate and are NOT run by any workflow. This test closes that
+//! gap: it recomputes the embedding through THIS std-only crate — no PyO3, no
+//! marshalling — and asserts it matches the same golden within tolerance.
+//!
+//! Together with the pytest half: native≈golden AND binding≈golden ⇒
+//! binding≈native, portably. And because this side has no marshalling, a
+//! binding-specific defect baked into the golden would surface here as a native
+//! mismatch — which is the failure mode a binding-derived golden + pytest-only
+//! CI would otherwise hide.
+//!
+//! Runs under the repo's `cargo test --workspace` (this crate is a member).
+
+use std::path::PathBuf;
+
+use wifi_densepose_aether::embedding::{EmbeddingConfig, EmbeddingExtractor};
+use wifi_densepose_aether::graph_transformer::TransformerConfig;
+
+// Same tolerance as the Python and .rs parity tests. f32 + transcendentals are
+// not bit-reproducible across arch, so the golden (generated on one machine) is
+// compared within a bound, not by hash.
+const PARITY_ATOL: f32 = 1e-4;
+const PARITY_RTOL: f32 = 1e-4;
+
+fn golden_dir() -> PathBuf {
+ // This crate lives at v2/crates/wifi-densepose-aether; the shared golden
+ // fixtures are the single source of truth under python/tests/golden.
+ PathBuf::from(env!("CARGO_MANIFEST_DIR"))
+ .join("../../../python/tests/golden")
+}
+
+fn read_vec(name: &str) -> Vec {
+ let raw = std::fs::read_to_string(golden_dir().join(name))
+ .unwrap_or_else(|e| panic!("read {name}: {e}"));
+ serde_json::from_str(&raw).unwrap_or_else(|e| panic!("parse {name}: {e}"))
+}
+
+fn load_input() -> Vec> {
+ let raw = std::fs::read_to_string(golden_dir().join("aether_input.json"))
+ .expect("read aether_input.json");
+ let rows: Vec> = serde_json::from_str(&raw).expect("parse aether_input.json");
+ rows.into_iter()
+ .map(|r| r.into_iter().map(|x| x as f32).collect())
+ .collect()
+}
+
+fn extractor() -> EmbeddingExtractor {
+ let e = EmbeddingConfig { d_model: 64, d_proj: 128, temperature: 0.07, normalize: true };
+ let t = TransformerConfig {
+ n_subcarriers: 56,
+ n_keypoints: 17,
+ d_model: 64,
+ n_heads: 4,
+ n_gnn_layers: 2,
+ };
+ EmbeddingExtractor::new(t, e)
+}
+
+fn formula_weights(n: usize) -> Vec {
+ (0..n)
+ .map(|i| ((i as u64 * 1103515245 + 12345) % 65536) as f32 / 65536.0 - 0.5)
+ .collect()
+}
+
+fn assert_matches_golden(embedding: &[f32], name: &str) {
+ let golden = read_vec(name);
+ assert_eq!(embedding.len(), golden.len(), "{name}: length mismatch");
+ for (i, (&a, &b)) in embedding.iter().zip(&golden).enumerate() {
+ assert!(a.is_finite(), "{name}: element {i} is not finite ({a})");
+ let tol = PARITY_ATOL + PARITY_RTOL * b.abs();
+ assert!(
+ (a - b).abs() <= tol,
+ "{name}: element {i} diverged beyond tolerance \
+ (got {a}, golden {b}, |Δ|={}) — real regression, not arch drift",
+ (a - b).abs()
+ );
+ }
+}
+
+#[test]
+fn native_base_embedding_matches_committed_golden() {
+ let emb = extractor().extract(&load_input());
+ assert_matches_golden(&emb, "aether_embedding.json");
+}
+
+#[test]
+fn native_loaded_embedding_matches_committed_golden() {
+ let input = load_input();
+ let mut ext = extractor();
+ let baseline = ext.extract(&input);
+
+ let weights = formula_weights(ext.param_count());
+ let mut buf = Vec::new();
+ buf.extend_from_slice(b"AETHERW1");
+ buf.extend_from_slice(&(weights.len() as u32).to_le_bytes());
+ for w in &weights {
+ buf.extend_from_slice(&w.to_le_bytes());
+ }
+ let wpath = std::env::temp_dir().join(format!("aether_golden_parity_{}.bin", std::process::id()));
+ std::fs::write(&wpath, &buf).expect("write weights");
+ ext.load_weights(&wpath).expect("load_weights");
+ let _ = std::fs::remove_file(&wpath);
+
+ let loaded = ext.extract(&input);
+ assert!(
+ baseline.iter().zip(&loaded).any(|(a, b)| (a - b).abs() > 1e-6),
+ "load_weights had no effect vs the random-init baseline"
+ );
+ assert_matches_golden(&loaded, "aether_loaded_embedding.json");
+}
diff --git a/v2/crates/wifi-densepose-mat/Cargo.toml b/v2/crates/wifi-densepose-mat/Cargo.toml
index 937a3d77..e393371b 100644
--- a/v2/crates/wifi-densepose-mat/Cargo.toml
+++ b/v2/crates/wifi-densepose-mat/Cargo.toml
@@ -12,15 +12,25 @@ categories = ["science", "algorithms"]
readme = "README.md"
[features]
-default = ["std", "api", "ruvector"]
+default = ["std", "api", "ruvector", "ml"]
ruvector = ["dep:ruvector-solver", "dep:ruvector-temporal-tensor"]
std = []
+# ONNX-backed ML detection (debris + vital-signs classifiers). Pulls
+# `wifi-densepose-nn` (and, via its default `onnx` feature, the `ort`
+# ONNX Runtime + its download/reqwest stack) ONLY when enabled. The
+# survivor-detection/triage pipeline works without it (ML is an optional
+# enhancement, off unless `DetectionConfig::enable_ml`), so consumers that
+# don't need ONNX — e.g. the ADR-185 `wifi-densepose-py` `[mat]` wheel —
+# build `--no-default-features` and drop the entire ort/reqwest tree,
+# keeping the wheel within the ADR-117 §5.4 budget.
+ml = ["dep:wifi-densepose-nn"]
# REST/WebSocket surface. Pulls the web stack (axum, futures-util) only when
# enabled, and enables the `serde` FEATURE (not just `dep:serde`) so the
# `cfg_attr(feature = "serde", ...)` derives on domain types are actually
# active when the API is on (review finding 5: `api = ["dep:serde"]` enabled
# the dependency but left every `feature = "serde"` cfg dead).
-api = ["serde", "dep:axum", "dep:futures-util"]
+# The REST surface exposes ML status (`ml_ready`), so `api` implies `ml`.
+api = ["ml", "serde", "dep:axum", "dep:futures-util"]
# Real ESP32 serial CSI ingest. Pulls the native `serialport` crate (libudev on
# Linux) only when enabled, so the default/no-default appliance build stays free
# of native serial deps. With the feature OFF, the ESP32 serial *parser* still
@@ -36,14 +46,18 @@ serde = ["dep:serde", "chrono/serde", "geo/use-serde"]
# Workspace dependencies
wifi-densepose-core = { version = "0.3.0", path = "../wifi-densepose-core" }
wifi-densepose-signal = { version = "0.3.0", path = "../wifi-densepose-signal", default-features = false }
-wifi-densepose-nn = { version = "0.3.0", path = "../wifi-densepose-nn" }
+wifi-densepose-nn = { version = "0.3.0", path = "../wifi-densepose-nn", optional = true }
ruvector-solver = { workspace = true, optional = true }
ruvector-temporal-tensor = { workspace = true, optional = true }
# Async runtime — required by the core integration layer (UDP CSI receiver,
# hardware adapter, scan loop in `DisasterResponse::start_scanning`), not just
# the REST API, so it is deliberately NOT gated behind `api`.
-tokio = { version = "1.35", features = ["rt", "sync", "time"] }
+# `macros` is needed by `tokio::select!` in integration/hardware_adapter.rs.
+# It was previously satisfied only by feature-unification from the (now
+# optional) `wifi-densepose-nn` dep; declare it explicitly so a
+# `--no-default-features` build (the ADR-185 [mat] wheel) still compiles.
+tokio = { version = "1.35", features = ["rt", "sync", "time", "macros"] }
async-trait = "0.1"
# Web framework (REST API) — only compiled with the `api` feature.
diff --git a/v2/crates/wifi-densepose-mat/src/detection/pipeline.rs b/v2/crates/wifi-densepose-mat/src/detection/pipeline.rs
index 7229ece3..0402a5b5 100644
--- a/v2/crates/wifi-densepose-mat/src/detection/pipeline.rs
+++ b/v2/crates/wifi-densepose-mat/src/detection/pipeline.rs
@@ -8,6 +8,7 @@ use super::{
MovementClassifier, MovementClassifierConfig,
};
use crate::domain::{ScanZone, VitalSignsReading};
+#[cfg(feature = "ml")]
use crate::ml::{MlDetectionConfig, MlDetectionPipeline, MlDetectionResult};
use crate::{DisasterConfig, MatError};
@@ -26,9 +27,10 @@ pub struct DetectionConfig {
pub enable_heartbeat: bool,
/// Minimum overall confidence to report detection
pub min_confidence: f64,
- /// Enable ML-enhanced detection
+ /// Enable ML-enhanced detection (requires the `ml` feature to have any effect)
pub enable_ml: bool,
/// ML detection configuration (if enabled)
+ #[cfg(feature = "ml")]
pub ml_config: Option,
}
@@ -42,6 +44,7 @@ impl Default for DetectionConfig {
enable_heartbeat: false,
min_confidence: 0.3,
enable_ml: false,
+ #[cfg(feature = "ml")]
ml_config: None,
}
}
@@ -64,6 +67,7 @@ impl DetectionConfig {
}
/// Enable ML-enhanced detection with the given configuration
+ #[cfg(feature = "ml")]
pub fn with_ml(mut self, ml_config: MlDetectionConfig) -> Self {
self.enable_ml = true;
self.ml_config = Some(ml_config);
@@ -71,6 +75,7 @@ impl DetectionConfig {
}
/// Enable ML-enhanced detection with default configuration
+ #[cfg(feature = "ml")]
pub fn with_default_ml(mut self) -> Self {
self.enable_ml = true;
self.ml_config = Some(MlDetectionConfig::default());
@@ -147,12 +152,14 @@ pub struct DetectionPipeline {
movement_classifier: MovementClassifier,
data_buffer: parking_lot::RwLock,
/// Optional ML detection pipeline
+ #[cfg(feature = "ml")]
ml_pipeline: Option,
}
impl DetectionPipeline {
/// Create a new detection pipeline
pub fn new(config: DetectionConfig) -> Self {
+ #[cfg(feature = "ml")]
let ml_pipeline = if config.enable_ml {
config.ml_config.clone().map(MlDetectionPipeline::new)
} else {
@@ -164,12 +171,14 @@ impl DetectionPipeline {
heartbeat_detector: HeartbeatDetector::new(config.heartbeat.clone()),
movement_classifier: MovementClassifier::new(config.movement.clone()),
data_buffer: parking_lot::RwLock::new(CsiDataBuffer::new(config.sample_rate)),
+ #[cfg(feature = "ml")]
ml_pipeline,
config,
}
}
/// Initialize ML models asynchronously (if enabled)
+ #[cfg(feature = "ml")]
pub async fn initialize_ml(&mut self) -> Result<(), MatError> {
if let Some(ref mut ml) = self.ml_pipeline {
ml.initialize().await.map_err(MatError::from)?;
@@ -178,6 +187,7 @@ impl DetectionPipeline {
}
/// Check if ML pipeline is ready
+ #[cfg(feature = "ml")]
pub fn ml_ready(&self) -> bool {
self.ml_pipeline.as_ref().is_none_or(|ml| ml.is_ready())
}
@@ -210,13 +220,23 @@ impl DetectionPipeline {
// `buffer` guard dropped here
};
- // If ML is enabled and ready, enhance with ML predictions
- let enhanced_reading = if self.config.enable_ml && self.ml_ready() {
- // Snapshot the buffer under the lock, then drop the guard before await.
- let buffer_snapshot = { self.data_buffer.read().clone() };
- self.enhance_with_ml(reading, &buffer_snapshot).await?
- } else {
- reading
+ // If ML is enabled and ready, enhance with ML predictions (only
+ // compiled under the `ml` feature; the base build is signal-only).
+ let enhanced_reading = {
+ #[cfg(feature = "ml")]
+ {
+ if self.config.enable_ml && self.ml_ready() {
+ // Snapshot the buffer under the lock, then drop the guard before await.
+ let buffer_snapshot = { self.data_buffer.read().clone() };
+ self.enhance_with_ml(reading, &buffer_snapshot).await?
+ } else {
+ reading
+ }
+ }
+ #[cfg(not(feature = "ml"))]
+ {
+ reading
+ }
};
// Check minimum confidence
@@ -230,6 +250,7 @@ impl DetectionPipeline {
}
/// Enhance detection results with ML predictions
+ #[cfg(feature = "ml")]
async fn enhance_with_ml(
&self,
traditional_reading: Option,
@@ -262,6 +283,7 @@ impl DetectionPipeline {
}
/// Get the latest ML detection results (if ML is enabled)
+ #[cfg(feature = "ml")]
pub async fn get_ml_results(&self) -> Option {
let ml = match &self.ml_pipeline {
Some(ml) => ml,
@@ -346,6 +368,7 @@ impl DetectionPipeline {
self.movement_classifier = MovementClassifier::new(config.movement.clone());
// Update ML pipeline if configuration changed
+ #[cfg(feature = "ml")]
if config.enable_ml != self.config.enable_ml || config.ml_config != self.config.ml_config {
self.ml_pipeline = if config.enable_ml {
config.ml_config.clone().map(MlDetectionPipeline::new)
@@ -358,6 +381,7 @@ impl DetectionPipeline {
}
/// Get the ML pipeline (if enabled)
+ #[cfg(feature = "ml")]
pub fn ml_pipeline(&self) -> Option<&MlDetectionPipeline> {
self.ml_pipeline.as_ref()
}
diff --git a/v2/crates/wifi-densepose-mat/src/lib.rs b/v2/crates/wifi-densepose-mat/src/lib.rs
index afb21a72..6a49c10b 100644
--- a/v2/crates/wifi-densepose-mat/src/lib.rs
+++ b/v2/crates/wifi-densepose-mat/src/lib.rs
@@ -87,6 +87,10 @@ pub mod detection;
pub mod domain;
pub mod integration;
pub mod localization;
+/// ONNX-backed ML detection. Requires the `ml` feature (pulls
+/// `wifi-densepose-nn` + `ort`). The core survivor-detection/triage
+/// pipeline works without it.
+#[cfg(feature = "ml")]
pub mod ml;
pub mod tracking;
@@ -130,6 +134,7 @@ pub use integration::{
#[cfg_attr(docsrs, doc(cfg(feature = "api")))]
pub use api::{create_router, AppState};
+#[cfg(feature = "ml")]
pub use ml::{
AttenuationPrediction,
BreathingClassification,
@@ -207,6 +212,7 @@ pub enum MatError {
Io(#[from] std::io::Error),
/// Machine learning error
+ #[cfg(feature = "ml")]
#[error("ML error: {0}")]
Ml(#[from] ml::MlError),
}
@@ -592,8 +598,6 @@ pub mod prelude {
AssociationResult,
BreathingPattern,
Coordinates3D,
- DebrisClassification,
- DebrisModel,
DetectionEvent,
DetectionObservation,
// Detection
@@ -614,11 +618,6 @@ pub mod prelude {
// Localization
LocalizationService,
MatError,
- MaterialType,
- // ML types
- MlDetectionConfig,
- MlDetectionPipeline,
- MlDetectionResult,
Priority,
Result,
ScanZone,
@@ -631,12 +630,17 @@ pub mod prelude {
TrackerConfig,
TrackingEvent,
TriageStatus,
- UncertaintyEstimate,
- VitalSignsClassifier,
VitalSignsDetector,
VitalSignsReading,
ZoneBounds,
};
+
+ // ONNX-backed ML types — only when the `ml` feature is enabled.
+ #[cfg(feature = "ml")]
+ pub use crate::{
+ DebrisClassification, DebrisModel, MaterialType, MlDetectionConfig, MlDetectionPipeline,
+ MlDetectionResult, UncertaintyEstimate, VitalSignsClassifier,
+ };
}
#[cfg(test)]
diff --git a/v2/crates/wifi-densepose-sensing-server/Cargo.toml b/v2/crates/wifi-densepose-sensing-server/Cargo.toml
index 34347cde..62eb6fad 100644
--- a/v2/crates/wifi-densepose-sensing-server/Cargo.toml
+++ b/v2/crates/wifi-densepose-sensing-server/Cargo.toml
@@ -41,6 +41,12 @@ chrono = { version = "0.4", features = ["serde"] }
# CLI
clap = { workspace = true }
+# ADR-185 §3.2/§13: AETHER pure-compute stack (embedding / graph_transformer /
+# sona / sparse_inference), hoisted into a std-only leaf crate and re-exported
+# from `lib.rs` so the Python `[aether]` wheel can bind it without this server's
+# Axum/tokio/worldgraph/ruvector tree.
+wifi-densepose-aether = { version = "0.3.0", path = "../wifi-densepose-aether" }
+
# Multi-BSSID WiFi scanning pipeline (ADR-022 Phase 3)
wifi-densepose-wifiscan = { version = "0.3.0", path = "../wifi-densepose-wifiscan" }
@@ -120,6 +126,10 @@ matter = []
tempfile = "3.10"
# `tower::ServiceExt::oneshot` for in-process Router tests (bearer_auth).
tower = { workspace = true }
+# ADR-186 P6 — real-socket WebSocket client for the `/ws/train/progress`
+# 101-upgrade + live-progress-frame test. Pinned to the version already resolved
+# in the workspace lock (via homecore-api) so this adds no new lock entry.
+tokio-tungstenite = "0.24"
# ADR-115 P9 — micro-benchmarks for MQTT hot paths + semantic bus.
# Heavy dep tree (~80 transitive crates) so it's dev-only; benches live
# behind --features mqtt because they bench the mqtt module.
diff --git a/v2/crates/wifi-densepose-sensing-server/src/lib.rs b/v2/crates/wifi-densepose-sensing-server/src/lib.rs
index b0d802ea..7779f79a 100644
--- a/v2/crates/wifi-densepose-sensing-server/src/lib.rs
+++ b/v2/crates/wifi-densepose-sensing-server/src/lib.rs
@@ -14,10 +14,7 @@ pub mod ws_ticket;
pub mod cli;
pub mod dataset;
pub mod edge_registry;
-#[allow(dead_code)]
-pub mod embedding;
pub mod error_response;
-pub mod graph_transformer;
pub mod host_validation;
pub mod introspection;
pub mod matter;
@@ -31,8 +28,6 @@ pub mod semantic;
pub mod rufield_surface;
pub mod rvf_container;
pub mod rvf_pipeline;
-pub mod sona;
-pub mod sparse_inference;
#[allow(dead_code)]
pub mod trainer;
pub mod vital_signs;
@@ -44,3 +39,12 @@ pub mod vendor_origin_plume;
pub mod vendor_remaining;
/// ADR-270 provider registry and canonical event helpers.
pub mod vendor_rf;
+
+// ADR-185 §3.2/§13: the AETHER pure-compute stack (contrastive embedding,
+// CSI-to-pose transformer, SONA, quantization) was hoisted into the std-only
+// `wifi-densepose-aether` leaf crate so the Python `[aether]` wheel can bind it
+// without this crate's Axum/tokio/worldgraph/ruvector tree. Re-exported here so
+// this crate's own code (`crate::embedding`, `crate::graph_transformer`,
+// `crate::sona`) and public API (`wifi_densepose_sensing_server::embedding`, …)
+// are unchanged.
+pub use wifi_densepose_aether::{embedding, graph_transformer, sona, sparse_inference};
diff --git a/v2/crates/wifi-densepose-sensing-server/src/main.rs b/v2/crates/wifi-densepose-sensing-server/src/main.rs
index 0e6be4a2..e986b090 100644
--- a/v2/crates/wifi-densepose-sensing-server/src/main.rs
+++ b/v2/crates/wifi-densepose-sensing-server/src/main.rs
@@ -20,8 +20,14 @@ mod multistatic_bridge;
mod mediatek_csi;
mod qualcomm_csi;
mod realtek_radar;
+mod path_safety;
pub mod pose;
mod rvf_container;
+// ADR-186 (TRAIN-RECONNECT): the in-server training pipeline was written but
+// never declared as a module, so it was orphaned / uncompiled. Declaring it
+// here compiles it against the real `AppStateInner` and wires its `routes()`
+// (including `/ws/train/progress`) into the live router below.
+mod training_api;
mod rvf_pipeline;
mod tracker_bridge;
pub mod types;
@@ -1120,11 +1126,13 @@ struct AppStateInner {
recording_current_id: Option,
/// Shutdown signal for the recording writer task.
recording_stop_tx: Option>,
- // ── Training fields ─────────────────────────────────────────────────────
- /// Training status: "idle", "running", "completed", "failed".
- training_status: String,
- /// Training configuration, if any.
- training_config: Option,
+ // ── Training fields (ADR-186 TRAIN-RECONNECT) ────────────────────────────
+ /// Live training state (shared status snapshot + cooperative cancel flag +
+ /// background task handle) for the in-server trainer in `training_api`.
+ training_state: training_api::TrainingState,
+ /// Fan-out channel the background training job publishes progress JSON to;
+ /// the `/ws/train/progress` WebSocket handler subscribes to it.
+ training_progress_tx: broadcast::Sender,
// ── Adaptive classifier (environment-tuned) ──────────────────────────
/// Trained adaptive model (loaded from data/adaptive_model.json or trained at runtime).
adaptive_model: Option,
@@ -1248,6 +1256,87 @@ const FRAME_HISTORY_CAPACITY: usize = 100;
type SharedState = Arc>;
+#[cfg(test)]
+impl AppStateInner {
+ /// Minimal, dependency-free `AppStateInner` for in-process router tests
+ /// (ADR-186 P6). Uses the same field constructors as the real state seeding
+ /// in `main()` but with trivial values and no CLI/config inputs, so tests can
+ /// build the training router without the full server boot.
+ pub(crate) fn minimal() -> Self {
+ AppStateInner {
+ latest_update: None,
+ rssi_history: VecDeque::new(),
+ frame_history: VecDeque::new(),
+ tick: 0,
+ source: "test".to_string(),
+ last_esp32_frame: None,
+ latest_realtek_radar: None,
+ last_realtek_frame: None,
+ latest_mediatek_csi: None,
+ last_mediatek_frame: None,
+ latest_qualcomm_csi: None,
+ last_qualcomm_frame: None,
+ latest_vendor_rf: BTreeMap::new(),
+ tx: broadcast::channel::(16).0,
+ intro: wifi_densepose_sensing_server::introspection::IntrospectionState::new(),
+ intro_tx: broadcast::channel::(16).0,
+ total_detections: 0,
+ start_time: std::time::Instant::now(),
+ vital_detector: VitalSignDetector::new(10.0),
+ latest_vitals: VitalSigns::default(),
+ rvf_info: None,
+ save_rvf_path: None,
+ progressive_loader: None,
+ active_sona_profile: None,
+ model_loaded: false,
+ smoothed_person_score: 0.0,
+ prev_person_count: 0,
+ smoothed_motion: 0.0,
+ current_motion_level: "absent".to_string(),
+ debounce_counter: 0,
+ debounce_candidate: "absent".to_string(),
+ baseline_motion: 0.0,
+ baseline_frames: 0,
+ smoothed_hr: 0.0,
+ smoothed_br: 0.0,
+ smoothed_hr_conf: 0.0,
+ smoothed_br_conf: 0.0,
+ hr_buffer: VecDeque::with_capacity(8),
+ br_buffer: VecDeque::with_capacity(8),
+ edge_vitals: None,
+ latest_wasm_events: None,
+ discovered_models: Vec::new(),
+ active_model_id: None,
+ recordings: Vec::new(),
+ recording_active: false,
+ recording_start_time: None,
+ recording_current_id: None,
+ recording_stop_tx: None,
+ training_state: training_api::TrainingState::default(),
+ training_progress_tx: broadcast::channel::(256).0,
+ adaptive_model: None,
+ node_states: HashMap::new(),
+ pose_tracker: PoseTracker::new(),
+ last_tracker_instant: None,
+ multistatic_fuser: MultistaticFuser::new(),
+ engine_bridge: engine_bridge::EngineBridge::new(
+ wifi_densepose_bfld::PrivacyMode::PrivateHome,
+ 1,
+ "default",
+ "Default Room",
+ None,
+ ),
+ field_model: None,
+ p95_variance: RollingP95::new(600, 60),
+ p95_motion_band_power: RollingP95::new(600, 60),
+ p95_spectral_power: RollingP95::new(600, 60),
+ dedup_factor: 3.0,
+ data_dir: std::path::PathBuf::from("data"),
+ field_surface: Arc::new(RwLock::new(rufield_surface::FieldSurface::from_env())),
+ }
+ }
+}
+
// ── ESP32 Edge Vitals Packet (ADR-039, magic 0xC511_0002) ────────────────────
/// Decoded vitals packet from ESP32 edge processing pipeline.
@@ -4973,54 +5062,12 @@ fn scan_recording_files() -> Vec {
}
// ── Training Endpoints ──────────────────────────────────────────────────────
-
-/// GET /api/v1/train/status — get training status.
-async fn train_status(State(state): State) -> Json {
- let s = state.read().await;
- Json(serde_json::json!({
- "status": s.training_status,
- "config": s.training_config,
- }))
-}
-
-/// POST /api/v1/train/start — start a training run.
-async fn train_start(
- State(state): State,
- Json(body): Json,
-) -> Json {
- let mut s = state.write().await;
- if s.training_status == "running" {
- return Json(serde_json::json!({
- "error": "training already running",
- "success": false,
- }));
- }
- s.training_status = "running".to_string();
- s.training_config = Some(body.clone());
- info!("Training started with config: {}", body);
- Json(serde_json::json!({
- "success": true,
- "status": "running",
- "message": "Training pipeline started. Use GET /api/v1/train/status to monitor.",
- }))
-}
-
-/// POST /api/v1/train/stop — stop the current training run.
-async fn train_stop(State(state): State) -> Json {
- let mut s = state.write().await;
- if s.training_status != "running" {
- return Json(serde_json::json!({
- "error": "no training in progress",
- "success": false,
- }));
- }
- s.training_status = "idle".to_string();
- info!("Training stopped");
- Json(serde_json::json!({
- "success": true,
- "status": "idle",
- }))
-}
+//
+// ADR-186 (TRAIN-RECONNECT): the former stub handlers here flipped a status
+// string and logged one line without ever starting a job (issue #1233). They
+// are replaced by the real `training_api` router, merged into the app below,
+// which runs the pure-Rust trainer on a background task and streams live
+// progress over `/ws/train/progress`.
// ── Adaptive classifier endpoints ────────────────────────────────────────────
@@ -7826,9 +7873,9 @@ async fn main() {
recording_start_time: None,
recording_current_id: None,
recording_stop_tx: None,
- // Training
- training_status: "idle".to_string(),
- training_config: None,
+ // Training (ADR-186 TRAIN-RECONNECT)
+ training_state: training_api::TrainingState::default(),
+ training_progress_tx: broadcast::channel::(256).0,
adaptive_model:
adaptive_classifier::AdaptiveModel::load(&adaptive_classifier::model_path())
.ok()
@@ -8117,10 +8164,12 @@ async fn main() {
.route("/api/v1/recording/start", post(start_recording))
.route("/api/v1/recording/stop", post(stop_recording))
.route("/api/v1/recording/{id}", delete(delete_recording))
- // Training endpoints
- .route("/api/v1/train/status", get(train_status))
- .route("/api/v1/train/start", post(train_start))
- .route("/api/v1/train/stop", post(train_stop))
+ // Training endpoints (ADR-186 TRAIN-RECONNECT): the real in-server
+ // trainer + `/ws/train/progress` stream. Merged while the router is
+ // still `Router` (before `.with_state`) so these routes
+ // share `AppStateInner` and `/api/v1/train/*` sits under the bearer gate
+ // applied below (like the rest of `/api/v1/*`).
+ .merge(training_api::routes())
// Adaptive classifier endpoints
.route("/api/v1/adaptive/train", post(adaptive_train))
.route("/api/v1/adaptive/status", get(adaptive_status))
@@ -9369,3 +9418,256 @@ async fn oauth_status(
"scope": session.as_ref().map(|s| s.scope.clone()),
}))
}
+#[cfg(test)]
+mod adr186_http_tests {
+ //! ADR-186 P6: HTTP-level tests that build the real `training_api` router
+ //! and drive it in-process, guarding against the module being orphaned again
+ //! (`training_api::routes()` cannot compile unless the module is declared).
+ use super::*;
+ use axum::body::Body;
+ use axum::http::{Request, StatusCode};
+ use tower::ServiceExt;
+
+ /// Serializes tests that read/toggle the process-global
+ /// `RUVIEW_DISABLE_SERVER_TRAINING` env var, so the disabled-path test cannot
+ /// flip enablement while an enabled-path test is mid-request.
+ static TRAIN_ENV_LOCK: std::sync::Mutex<()> = std::sync::Mutex::new(());
+
+ fn test_state() -> SharedState {
+ Arc::new(RwLock::new(AppStateInner::minimal()))
+ }
+
+ /// The `/ws/train/progress` route is registered and reaches the WebSocket
+ /// handler (issue #1233 was a 404). Over `oneshot` there is no real socket to
+ /// upgrade, so axum returns 426 Upgrade Required — which still distinguishes a
+ /// wired WS endpoint (426) from an orphaned/absent route (404). The genuine
+ /// 101 handshake is asserted by `ws_train_progress_live_101_and_frame`.
+ #[tokio::test]
+ async fn ws_train_progress_route_is_wired_not_404() {
+ let app = training_api::routes().with_state(test_state());
+ let req = Request::builder()
+ .uri("/ws/train/progress")
+ .header("connection", "upgrade")
+ .header("upgrade", "websocket")
+ .header("sec-websocket-version", "13")
+ .header("sec-websocket-key", "dGhlIHNhbXBsZSBub25jZQ==")
+ .body(Body::empty())
+ .unwrap();
+ let resp = app.oneshot(req).await.unwrap();
+ assert_ne!(resp.status(), StatusCode::NOT_FOUND, "route must not 404");
+ assert_eq!(
+ resp.status(),
+ StatusCode::UPGRADE_REQUIRED,
+ "a wired WS route returns 426 under oneshot — got {}",
+ resp.status()
+ );
+ }
+
+ /// ADR-186 §7 acceptance: over a real socket, `/ws/train/progress` completes a
+ /// genuine 101 WebSocket handshake and, after a `POST /api/v1/train/start`,
+ /// delivers at least one real `progress` frame to the connected client.
+ #[tokio::test]
+ async fn ws_train_progress_live_101_and_frame() {
+ use futures_util::StreamExt;
+ use tokio::io::AsyncWriteExt;
+ use tokio_tungstenite::tungstenite::Message as TMsg;
+
+ let _env_lock = TRAIN_ENV_LOCK.lock().unwrap(); // enablement must stay ON
+ let shared = test_state();
+ {
+ let mut s = shared.write().await;
+ for i in 0..40 {
+ let sub: Vec = (0..56)
+ .map(|k| 10.0 + ((i as f64) * 0.3 + (k as f64) * 0.1).sin() * 2.0)
+ .collect();
+ s.frame_history.push_back(sub);
+ }
+ }
+
+ // Serve the training router on an ephemeral port.
+ let app = training_api::routes().with_state(shared.clone());
+ let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap();
+ let addr = listener.local_addr().unwrap();
+ tokio::spawn(async move {
+ let _ = axum::serve(listener, app).await;
+ });
+
+ // A successful `connect_async` IS the 101 handshake (it errors otherwise).
+ let (mut ws, resp) =
+ tokio_tungstenite::connect_async(format!("ws://{addr}/ws/train/progress"))
+ .await
+ .expect("WebSocket handshake should succeed (101)");
+ assert_eq!(resp.status().as_u16(), 101, "handshake must be 101");
+
+ // Drive training via a real HTTP POST over a fresh TCP connection.
+ let body = r#"{"dataset_ids":[],"config":{"epochs":3,"batch_size":8,"warmup_epochs":1,"early_stopping_patience":10}}"#;
+ let req = format!(
+ "POST /api/v1/train/start HTTP/1.1\r\nHost: {addr}\r\nContent-Type: application/json\r\nContent-Length: {}\r\nConnection: close\r\n\r\n{}",
+ body.len(),
+ body
+ );
+ let mut post = tokio::net::TcpStream::connect(addr).await.unwrap();
+ post.write_all(req.as_bytes()).await.unwrap();
+ post.flush().await.unwrap();
+
+ // Read WS frames until a `progress` frame arrives (or a 10s ceiling).
+ let mut got_progress = false;
+ let deadline = tokio::time::Instant::now() + std::time::Duration::from_secs(10);
+ while tokio::time::Instant::now() < deadline {
+ match tokio::time::timeout(std::time::Duration::from_secs(2), ws.next()).await {
+ Ok(Some(Ok(TMsg::Text(txt)))) => {
+ if let Ok(v) = serde_json::from_str::(&txt) {
+ if v.get("type").and_then(|t| t.as_str()) == Some("progress") {
+ got_progress = true;
+ break;
+ }
+ }
+ }
+ Ok(Some(Ok(_))) => {}
+ Ok(Some(Err(_))) | Ok(None) => break,
+ Err(_) => {}
+ }
+ }
+ assert!(
+ got_progress,
+ "should receive a real progress frame over the live WS after POST start"
+ );
+ // NOTE: deliberately no directory-diff cleanup here. `data/models` is
+ // gitignored, and deleting by dir-diff would race concurrent model-writing
+ // tests (it could remove a `.rvf` another test is asserting exists).
+ }
+
+ /// Full HTTP round-trip: POST /api/v1/train/start → poll /api/v1/train/status
+ /// until completion → a real `.rvf` model artifact exists on disk, and real
+ /// progress frames were streamed on the broadcast channel.
+ #[tokio::test]
+ async fn http_train_start_produces_model_and_streams() {
+ let _env_lock = TRAIN_ENV_LOCK.lock().unwrap(); // enablement must stay ON
+ let shared = test_state();
+ // Seed synthetic frames so training's fallback path has data (no files).
+ {
+ let mut s = shared.write().await;
+ for i in 0..40 {
+ let sub: Vec = (0..56)
+ .map(|k| 10.0 + ((i as f64) * 0.3 + (k as f64) * 0.1).sin() * 2.0)
+ .collect();
+ s.frame_history.push_back(sub);
+ }
+ }
+ let mut progress_rx = {
+ let s = shared.read().await;
+ s.training_progress_tx.subscribe()
+ };
+
+ let models_dir = std::path::PathBuf::from(training_api::MODELS_DIR);
+ let before: std::collections::HashSet = std::fs::read_dir(&models_dir)
+ .into_iter()
+ .flatten()
+ .flatten()
+ .map(|e| e.path())
+ .collect();
+
+ let app = training_api::routes().with_state(shared.clone());
+
+ // POST start.
+ let body = serde_json::json!({
+ "dataset_ids": [],
+ "config": {"epochs": 3, "batch_size": 8, "warmup_epochs": 1, "early_stopping_patience": 10}
+ });
+ let req = Request::builder()
+ .method("POST")
+ .uri("/api/v1/train/start")
+ .header("content-type", "application/json")
+ .body(Body::from(body.to_string()))
+ .unwrap();
+ let resp = app.clone().oneshot(req).await.unwrap();
+ assert_eq!(resp.status(), StatusCode::OK, "start should be accepted");
+
+ // Poll status until the job reports completion.
+ let mut completed = false;
+ for _ in 0..250 {
+ let req = Request::builder()
+ .uri("/api/v1/train/status")
+ .body(Body::empty())
+ .unwrap();
+ let resp = app.clone().oneshot(req).await.unwrap();
+ let bytes = axum::body::to_bytes(resp.into_body(), 65536).await.unwrap();
+ let v: serde_json::Value = serde_json::from_slice(&bytes).unwrap();
+ // Status also carries the P5 enablement flag.
+ assert_eq!(v.get("enabled"), Some(&serde_json::Value::Bool(true)));
+ if v.get("active") == Some(&serde_json::Value::Bool(false))
+ && v.get("phase").and_then(|p| p.as_str()) == Some("completed")
+ {
+ completed = true;
+ break;
+ }
+ tokio::time::sleep(std::time::Duration::from_millis(20)).await;
+ }
+ assert!(completed, "training should reach the completed phase");
+
+ // Real progress frames were streamed.
+ let mut saw_progress = false;
+ while progress_rx.try_recv().is_ok() {
+ saw_progress = true;
+ }
+ assert!(saw_progress, "expected streamed progress frames over the WS channel");
+
+ // A new .rvf artifact was written by the run.
+ let after: std::collections::HashSet = std::fs::read_dir(&models_dir)
+ .into_iter()
+ .flatten()
+ .flatten()
+ .map(|e| e.path())
+ .collect();
+ let new_models: Vec<_> = after
+ .difference(&before)
+ .filter(|p| p.extension().and_then(|e| e.to_str()) == Some("rvf"))
+ .cloned()
+ .collect();
+ assert!(
+ !new_models.is_empty(),
+ "training should write a new .rvf model artifact under {}",
+ models_dir.display()
+ );
+ // No deletion here: removing by dir-diff would race concurrent
+ // model-writing tests. `data/models` is gitignored.
+ }
+
+ /// P5 fallback guarantee: with server training disabled, POST start returns a
+ /// structured `{enabled:false, cli:...}` 409 — never a silent success.
+ #[tokio::test]
+ async fn http_train_start_disabled_returns_structured_409() {
+ // Serialize against the enabled-path tests so our env toggle can't race
+ // their in-flight requests.
+ let _env_lock = TRAIN_ENV_LOCK.lock().unwrap();
+ std::env::set_var("RUVIEW_DISABLE_SERVER_TRAINING", "1");
+
+ let app = training_api::routes().with_state(test_state());
+ let body = serde_json::json!({"dataset_ids": [], "config": {"epochs": 1}});
+ let req = Request::builder()
+ .method("POST")
+ .uri("/api/v1/train/start")
+ .header("content-type", "application/json")
+ .body(Body::from(body.to_string()))
+ .unwrap();
+ let resp = app.oneshot(req).await.unwrap();
+ let status = resp.status();
+ let bytes = axum::body::to_bytes(resp.into_body(), 65536).await.unwrap();
+ let v: serde_json::Value = serde_json::from_slice(&bytes).unwrap();
+
+ std::env::remove_var("RUVIEW_DISABLE_SERVER_TRAINING");
+
+ assert_eq!(status, StatusCode::CONFLICT, "disabled start must be 4xx/409");
+ assert_eq!(v.get("enabled"), Some(&serde_json::Value::Bool(false)));
+ assert_eq!(
+ v.get("cli").and_then(|c| c.as_str()),
+ Some("wifi-densepose train-room"),
+ "must point at the CLI fallback, never a silent success"
+ );
+ assert_ne!(
+ v.get("success"),
+ Some(&serde_json::Value::Bool(true)),
+ "must never claim success:true when disabled"
+ );
+ }
+}
diff --git a/v2/crates/wifi-densepose-sensing-server/src/training_api.rs b/v2/crates/wifi-densepose-sensing-server/src/training_api.rs
index fb708a28..07766702 100644
--- a/v2/crates/wifi-densepose-sensing-server/src/training_api.rs
+++ b/v2/crates/wifi-densepose-sensing-server/src/training_api.rs
@@ -26,22 +26,23 @@
use std::collections::VecDeque;
use std::path::PathBuf;
-use std::sync::Arc;
+use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
+use std::sync::{Arc, Mutex};
use axum::{
extract::{
ws::{Message, WebSocket, WebSocketUpgrade},
State,
},
- response::{IntoResponse, Json},
+ http::StatusCode,
+ response::{IntoResponse, Json, Response},
routing::{get, post},
Router,
};
use serde::{Deserialize, Serialize};
-use tokio::sync::{broadcast, RwLock};
+use tokio::sync::broadcast;
use tracing::{error, info, warn};
-use crate::recording::{RecordedFrame, RECORDINGS_DIR};
use crate::rvf_container::RvfBuilder;
// ── Constants ────────────────────────────────────────────────────────────────
@@ -49,6 +50,28 @@ use crate::rvf_container::RvfBuilder;
/// Directory for trained model output.
pub const MODELS_DIR: &str = "data/models";
+/// Directory the training loop reads recorded CSI datasets from. Each
+/// `dataset_id` maps to `{RECORDINGS_DIR}/{dataset_id}.csi.jsonl`.
+pub const RECORDINGS_DIR: &str = "data/recordings";
+
+/// Monotonic per-process counter appended to exported model filenames so two
+/// runs that complete in the same wall-clock microsecond still get distinct
+/// paths (prevents silent overwrite; keeps concurrent runs from colliding).
+static MODEL_ID_SEQ: AtomicU64 = AtomicU64::new(0);
+
+/// Build a process-unique model id `trained-{type}-{ts_micros}-{seq}`. A
+/// second-resolution timestamp alone collided for runs finishing in the same
+/// second (silent overwrite); microseconds + the monotonic counter guarantee
+/// uniqueness even for same-microsecond concurrent completions.
+fn next_model_id(training_type: &str) -> String {
+ format!(
+ "trained-{}-{}-{}",
+ training_type,
+ chrono::Utc::now().format("%Y%m%d_%H%M%S_%6f"),
+ MODEL_ID_SEQ.fetch_add(1, Ordering::Relaxed)
+ )
+}
+
/// Number of COCO keypoints.
const N_KEYPOINTS: usize = 17;
/// Dimensions per keypoint in the target vector (x, y, z).
@@ -67,6 +90,25 @@ const N_GLOBAL_FEATURES: usize = 3;
// ── Types ────────────────────────────────────────────────────────────────────
+/// A single recorded CSI frame line, as stored in the `.csi.jsonl` datasets the
+/// training loop consumes.
+///
+/// This mirrors the on-disk JSONL schema and is intentionally self-contained so
+/// the trainer does not couple to the (separate, orphaned) `recording.rs`
+/// module. Only the fields the feature extractor needs are read; `rssi` /
+/// `noise_floor` / `features` are carried for schema fidelity.
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct RecordedFrame {
+ pub timestamp: f64,
+ pub subcarriers: Vec,
+ #[serde(default)]
+ pub rssi: f64,
+ #[serde(default)]
+ pub noise_floor: f64,
+ #[serde(default)]
+ pub features: serde_json::Value,
+}
+
/// Training configuration submitted with a start request.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrainingConfig {
@@ -229,24 +271,45 @@ pub struct TrainingProgress {
}
/// Runtime training state stored in `AppStateInner`.
+///
+/// `status` and `cancel` are shared handles (not owned snapshots) so the
+/// background training job can update progress and observe stop requests
+/// **without holding a reference to the full `AppStateInner`**. That decoupling
+/// is what makes the training core ([`run_training_job`]) unit-testable in
+/// isolation from the ~60-field server state.
pub struct TrainingState {
- /// Current status snapshot.
- pub status: TrainingStatus,
- /// Handle to the background training task (for cancellation).
+ /// Live status snapshot, shared with the running training job.
+ pub status: Arc>,
+ /// Cooperative stop flag; `stop_training` sets it and the job loop observes it.
+ pub cancel: Arc,
+ /// Handle to the background training task.
pub task_handle: Option>,
}
impl Default for TrainingState {
fn default() -> Self {
Self {
- status: TrainingStatus::default(),
+ status: Arc::new(Mutex::new(TrainingStatus::default())),
+ cancel: Arc::new(AtomicBool::new(false)),
task_handle: None,
}
}
}
+impl TrainingState {
+ /// Clone of the current status snapshot.
+ pub fn snapshot(&self) -> TrainingStatus {
+ self.status.lock().unwrap().clone()
+ }
+
+ /// Whether a training job is currently active.
+ pub fn is_active(&self) -> bool {
+ self.status.lock().unwrap().active
+ }
+}
+
/// Shared application state type.
-pub type AppState = Arc>;
+pub type AppState = Arc>;
/// Feature normalization statistics computed from the training set.
/// Stored alongside the model weights inside the .rvf container so that
@@ -317,11 +380,11 @@ async fn load_recording_frames(dataset_ids: &[String]) -> Vec {
all_frames
}
-/// Attempt to collect frames from the live frame_history buffer in AppState.
-/// Each `Vec` in frame_history is a subcarrier amplitude vector.
-async fn load_frames_from_history(state: &AppState) -> Vec {
- let s = state.read().await;
- let history: &VecDeque> = &s.frame_history;
+/// Build fallback training frames from a snapshot of the live `frame_history`
+/// buffer. Each `Vec` is one frame's subcarrier amplitude vector. Passed as
+/// an owned snapshot (not a live `AppState` borrow) so the training core stays
+/// state-free and independently testable.
+fn frames_from_history(history: &[Vec]) -> Vec {
history
.iter()
.enumerate()
@@ -938,13 +1001,15 @@ fn deterministic_shuffle(n: usize, seed: u64) -> Vec {
/// linear model via mini-batch gradient descent.
///
/// On completion, exports a `.rvf` container with real calibrated weights.
-async fn real_training_loop(
- state: AppState,
+async fn run_training_job(
+ status: Arc>,
+ cancel: Arc,
progress_tx: broadcast::Sender,
config: TrainingConfig,
dataset_ids: Vec,
+ history_snapshot: Vec>,
training_type: &str,
-) {
+) -> Option {
let total_epochs = config.epochs;
let patience = config.early_stopping_patience;
let mut best_pck = 0.0f64;
@@ -978,7 +1043,7 @@ async fn real_training_loop(
let mut frames = load_recording_frames(&dataset_ids).await;
if frames.is_empty() {
info!("No recordings found for dataset_ids; falling back to live frame_history");
- frames = load_frames_from_history(&state).await;
+ frames = frames_from_history(&history_snapshot);
}
if frames.len() < 10 {
@@ -999,11 +1064,12 @@ async fn real_training_loop(
if let Ok(json) = serde_json::to_string(&fail) {
let _ = progress_tx.send(json);
}
- let mut s = state.write().await;
- s.training_state.status.active = false;
- s.training_state.status.phase = "failed".to_string();
- s.training_state.task_handle = None;
- return;
+ {
+ let mut st = status.lock().unwrap();
+ st.active = false;
+ st.phase = "failed".to_string();
+ }
+ return None;
}
info!("Loaded {} frames for training", frames.len());
@@ -1079,13 +1145,10 @@ async fn real_training_loop(
// ── Phase 5: Training loop ───────────────────────────────────────────────
for epoch in 1..=total_epochs {
- // Check cancellation.
- {
- let s = state.read().await;
- if !s.training_state.status.active {
- info!("Training cancelled at epoch {epoch}");
- break;
- }
+ // Check cancellation (cooperative stop flag set by `stop_training`).
+ if cancel.load(Ordering::Relaxed) {
+ info!("Training cancelled at epoch {epoch}");
+ break;
}
let phase = if epoch <= config.warmup_epochs {
@@ -1245,10 +1308,10 @@ async fn real_training_loop(
let remaining = total_epochs.saturating_sub(epoch);
let eta_secs = (remaining as f64 * secs_per_epoch) as u64;
- // Update shared state.
+ // Update the shared status snapshot (read by GET /api/v1/train/status).
{
- let mut s = state.write().await;
- s.training_state.status = TrainingStatus {
+ let mut st = status.lock().unwrap();
+ *st = TrainingStatus {
active: true,
epoch,
total_epochs,
@@ -1297,15 +1360,12 @@ async fn real_training_loop(
// ── Phase 6: Export .rvf model ───────────────────────────────────────────
- let completed_phase;
- {
- let s = state.read().await;
- completed_phase = if s.training_state.status.active {
- "completed"
- } else {
- "cancelled"
- };
- }
+ let completed_phase = if cancel.load(Ordering::Relaxed) {
+ "cancelled"
+ } else {
+ "completed"
+ };
+ let mut written_rvf: Option = None;
// Emit completion message.
let completion = TrainingProgress {
@@ -1326,11 +1386,7 @@ async fn real_training_loop(
if let Err(e) = tokio::fs::create_dir_all(MODELS_DIR).await {
error!("Failed to create models directory: {e}");
} else {
- let model_id = format!(
- "trained-{}-{}",
- training_type,
- chrono::Utc::now().format("%Y%m%d_%H%M%S")
- );
+ let model_id = next_model_id(training_type);
let rvf_path = PathBuf::from(MODELS_DIR).join(format!("{model_id}.rvf"));
let mut builder = RvfBuilder::new();
@@ -1407,28 +1463,32 @@ async fn real_training_loop(
}),
);
- if let Err(e) = builder.write_to_file(&rvf_path) {
- error!("Failed to write trained model RVF: {e}");
- } else {
- info!(
- "Trained model saved: {} ({} params, pck_torso_h@0.2={:.4})",
- rvf_path.display(),
- total_params,
- best_pck
- );
+ match builder.write_to_file(&rvf_path) {
+ Err(e) => {
+ error!("Failed to write trained model RVF: {e}");
+ }
+ Ok(()) => {
+ info!(
+ "Trained model saved: {} ({} params, pck_torso_h@0.2={:.4})",
+ rvf_path.display(),
+ total_params,
+ best_pck
+ );
+ written_rvf = Some(rvf_path);
+ }
}
}
}
- // Mark training as inactive.
+ // Mark training as inactive in the shared status snapshot.
{
- let mut s = state.write().await;
- s.training_state.status.active = false;
- s.training_state.status.phase = completed_phase.to_string();
- s.training_state.task_handle = None;
+ let mut st = status.lock().unwrap();
+ st.active = false;
+ st.phase = completed_phase.to_string();
}
info!("Real {training_type} training finished: phase={completed_phase}");
+ written_rvf
}
// ── Public inference function ────────────────────────────────────────────────
@@ -1559,56 +1619,151 @@ fn default_keypoints() -> Vec<[f64; 4]> {
vec![[320.0, 240.0, 0.0, 0.0]; N_KEYPOINTS]
}
+// ── Server-training enablement gate (ADR-186 P5) ─────────────────────────────
+
+/// Env var that opts a deployment out of in-server training (e.g. the
+/// lightweight appliance image without recordings). When set truthy, the start
+/// endpoints return a structured `enabled:false` response pointing at the CLI —
+/// never a silent `success:true` no-op.
+const DISABLE_ENV: &str = "RUVIEW_DISABLE_SERVER_TRAINING";
+
+/// Whether in-server training is enabled for this deployment.
+fn server_training_enabled() -> bool {
+ training_enabled_from_env(std::env::var(DISABLE_ENV).ok().as_deref())
+}
+
+/// Pure decision (unit-testable without touching process env): enabled unless
+/// the flag is a truthy disable value.
+fn training_enabled_from_env(flag: Option<&str>) -> bool {
+ match flag {
+ Some(v) => {
+ let v = v.trim();
+ !(v == "1" || v.eq_ignore_ascii_case("true") || v.eq_ignore_ascii_case("yes"))
+ }
+ None => true,
+ }
+}
+
+/// Structured, honest "server training is off for this build — use the CLI"
+/// response (HTTP 409). Guarantees no silent no-op in the disabled config.
+fn disabled_response() -> Response {
+ (
+ StatusCode::CONFLICT,
+ Json(serde_json::json!({
+ "status": "error",
+ "enabled": false,
+ "reason": "In-server training is disabled for this deployment.",
+ "cli": "wifi-densepose train-room",
+ // `detail` is surfaced verbatim by the dashboard's API client.
+ "detail": "In-server training is disabled on this build. Train from the CLI: wifi-densepose train-room",
+ })),
+ )
+ .into_response()
+}
+
// ── Axum handlers ────────────────────────────────────────────────────────────
async fn start_training(
State(state): State,
Json(body): Json,
-) -> Json {
- // Check if training is already active.
- {
- let s = state.read().await;
- if s.training_state.status.active {
- return Json(serde_json::json!({
- "status": "error",
- "message": "Training is already active. Stop it first.",
- "current_epoch": s.training_state.status.epoch,
- "total_epochs": s.training_state.status.total_epochs,
- }));
- }
+) -> Response {
+ if !server_training_enabled() {
+ return disabled_response();
}
-
let config = body.config.clone();
- let dataset_ids = body.dataset_ids.clone();
+ match spawn_training_job(&state, config, body.dataset_ids.clone(), "supervised").await {
+ Ok(()) => Json(serde_json::json!({
+ "status": "started",
+ "type": "supervised",
+ "dataset_ids": body.dataset_ids,
+ "config": body.config,
+ }))
+ .into_response(),
+ Err(active) => Json(active_error(&active)).into_response(),
+ }
+}
- // Mark training as active and spawn background task.
- let progress_tx;
- {
+/// Snapshot of the already-running job returned when a start is rejected.
+fn active_error(snap: &TrainingStatus) -> serde_json::Value {
+ serde_json::json!({
+ "status": "error",
+ "message": "Training is already active. Stop it first.",
+ "current_epoch": snap.epoch,
+ "total_epochs": snap.total_epochs,
+ })
+}
+
+/// Seed the shared status, snapshot `frame_history`, and spawn the background
+/// training job. Returns `Err(current_status)` if a job is already active.
+///
+/// Centralises the single-job guard + spawn used by the supervised, pretrain,
+/// and LoRA start handlers so they cannot diverge.
+/// Atomically claim the single training slot.
+///
+/// Checks `active` and sets it `true` **in one `status` lock scope**, so two
+/// concurrent callers cannot both observe the slot free — the first claims it,
+/// the second gets `Err(current_status)`. Returns the seeded status on success.
+///
+/// This is the fix for a TOCTOU race: the previous code checked `is_active()`
+/// under a `state` READ lock, released it, and only afterward set `active`.
+/// A `tokio::RwLock` read lock is shared, so two starts could both hold it, both
+/// see the slot inactive, both proceed — spawning two jobs that then share and
+/// overwrite one status/cancel and orphan a task handle. The claim's atomicity
+/// lives on the `status` mutex, not the coarse `state` lock, which also keeps it
+/// unit-testable without a full `AppState`.
+fn claim_training_slot(
+ status: &Mutex,
+ config: &TrainingConfig,
+) -> Result<(), TrainingStatus> {
+ let mut st = status.lock().unwrap();
+ if st.active {
+ return Err(st.clone());
+ }
+ *st = TrainingStatus {
+ active: true,
+ total_epochs: config.epochs,
+ lr: config.learning_rate,
+ patience_remaining: config.early_stopping_patience,
+ phase: "initializing".to_string(),
+ ..Default::default()
+ };
+ Ok(())
+}
+
+async fn spawn_training_job(
+ state: &AppState,
+ config: TrainingConfig,
+ dataset_ids: Vec,
+ training_type: &'static str,
+) -> Result<(), TrainingStatus> {
+ // Grab the shared handles under a read lock; the RwLock is only guarding
+ // access to the Arcs, not the single-job decision.
+ let (progress_tx, status, cancel, history_snapshot) = {
let s = state.read().await;
- progress_tx = s.training_progress_tx.clone();
- }
+ (
+ s.training_progress_tx.clone(),
+ s.training_state.status.clone(),
+ s.training_state.cancel.clone(),
+ s.frame_history.iter().cloned().collect::>(),
+ )
+ };
- {
- let mut s = state.write().await;
- s.training_state.status = TrainingStatus {
- active: true,
- epoch: 0,
- total_epochs: config.epochs,
- train_loss: 0.0,
- val_pck: 0.0,
- val_oks: 0.0,
- lr: config.learning_rate,
- best_pck: 0.0,
- best_epoch: 0,
- patience_remaining: config.early_stopping_patience,
- eta_secs: None,
- phase: "initializing".to_string(),
- };
- }
+ // Atomic check-and-set on the status mutex. This — not the read lock above —
+ // is what serialises concurrent starts (see `claim_training_slot`).
+ claim_training_slot(&status, &config)?;
+ cancel.store(false, Ordering::Relaxed);
- let state_clone = state.clone();
let handle = tokio::spawn(async move {
- real_training_loop(state_clone, progress_tx, config, dataset_ids, "supervised").await;
+ run_training_job(
+ status,
+ cancel,
+ progress_tx,
+ config,
+ dataset_ids,
+ history_snapshot,
+ training_type,
+ )
+ .await;
});
{
@@ -1616,57 +1771,58 @@ async fn start_training(
s.training_state.task_handle = Some(handle);
}
- Json(serde_json::json!({
- "status": "started",
- "type": "supervised",
- "dataset_ids": body.dataset_ids,
- "config": body.config,
- }))
+ Ok(())
}
async fn stop_training(State(state): State) -> Json {
- let mut s = state.write().await;
- if !s.training_state.status.active {
+ let s = state.read().await;
+ if !s.training_state.is_active() {
return Json(serde_json::json!({
"status": "error",
"message": "No training is currently active.",
}));
}
- s.training_state.status.active = false;
- s.training_state.status.phase = "stopping".to_string();
-
- // The background task checks the active flag and will exit.
- // We do not abort the handle -- we let it finish the current batch gracefully.
+ // Set the cooperative stop flag; the background job observes it between
+ // epochs and exits gracefully after the current batch. We do not abort the
+ // task handle.
+ s.training_state.cancel.store(true, Ordering::Relaxed);
+ {
+ let mut st = s.training_state.status.lock().unwrap();
+ st.phase = "stopping".to_string();
+ }
+ let snap = s.training_state.snapshot();
info!("Training stop requested");
Json(serde_json::json!({
"status": "stopping",
- "epoch": s.training_state.status.epoch,
- "best_pck": s.training_state.status.best_pck,
+ "epoch": snap.epoch,
+ "best_pck": snap.best_pck,
}))
}
async fn training_status(State(state): State) -> Json {
let s = state.read().await;
- Json(serde_json::to_value(&s.training_state.status).unwrap_or_default())
+ let mut value = serde_json::to_value(s.training_state.snapshot()).unwrap_or_default();
+ // Surface the enablement flag so the dashboard can honestly disable the
+ // Start button (with a CLI tooltip) without first firing a POST (ADR-186 P5).
+ if let Some(obj) = value.as_object_mut() {
+ obj.insert(
+ "enabled".to_string(),
+ serde_json::Value::Bool(server_training_enabled()),
+ );
+ }
+ Json(value)
}
async fn start_pretrain(
State(state): State,
Json(body): Json,
-) -> Json {
- {
- let s = state.read().await;
- if s.training_state.status.active {
- return Json(serde_json::json!({
- "status": "error",
- "message": "Training is already active. Stop it first.",
- }));
- }
+) -> Response {
+ if !server_training_enabled() {
+ return disabled_response();
}
-
let config = TrainingConfig {
epochs: body.epochs,
learning_rate: body.lr,
@@ -1675,56 +1831,26 @@ async fn start_pretrain(
..Default::default()
};
- let progress_tx;
- {
- let s = state.read().await;
- progress_tx = s.training_progress_tx.clone();
+ match spawn_training_job(&state, config, body.dataset_ids.clone(), "pretrain").await {
+ Ok(()) => Json(serde_json::json!({
+ "status": "started",
+ "type": "pretrain",
+ "epochs": body.epochs,
+ "lr": body.lr,
+ "dataset_ids": body.dataset_ids,
+ }))
+ .into_response(),
+ Err(active) => Json(active_error(&active)).into_response(),
}
-
- {
- let mut s = state.write().await;
- s.training_state.status = TrainingStatus {
- active: true,
- total_epochs: body.epochs,
- phase: "initializing".to_string(),
- ..Default::default()
- };
- }
-
- let state_clone = state.clone();
- let dataset_ids = body.dataset_ids.clone();
- let handle = tokio::spawn(async move {
- real_training_loop(state_clone, progress_tx, config, dataset_ids, "pretrain").await;
- });
-
- {
- let mut s = state.write().await;
- s.training_state.task_handle = Some(handle);
- }
-
- Json(serde_json::json!({
- "status": "started",
- "type": "pretrain",
- "epochs": body.epochs,
- "lr": body.lr,
- "dataset_ids": body.dataset_ids,
- }))
}
async fn start_lora_training(
State(state): State,
Json(body): Json,
-) -> Json {
- {
- let s = state.read().await;
- if s.training_state.status.active {
- return Json(serde_json::json!({
- "status": "error",
- "message": "Training is already active. Stop it first.",
- }));
- }
+) -> Response {
+ if !server_training_enabled() {
+ return disabled_response();
}
-
let config = TrainingConfig {
epochs: body.epochs,
learning_rate: 0.0005, // lower LR for LoRA
@@ -1735,42 +1861,19 @@ async fn start_lora_training(
..Default::default()
};
- let progress_tx;
- {
- let s = state.read().await;
- progress_tx = s.training_progress_tx.clone();
+ match spawn_training_job(&state, config, body.dataset_ids.clone(), "lora").await {
+ Ok(()) => Json(serde_json::json!({
+ "status": "started",
+ "type": "lora",
+ "base_model_id": body.base_model_id,
+ "profile_name": body.profile_name,
+ "rank": body.rank,
+ "epochs": body.epochs,
+ "dataset_ids": body.dataset_ids,
+ }))
+ .into_response(),
+ Err(active) => Json(active_error(&active)).into_response(),
}
-
- {
- let mut s = state.write().await;
- s.training_state.status = TrainingStatus {
- active: true,
- total_epochs: body.epochs,
- phase: "initializing".to_string(),
- ..Default::default()
- };
- }
-
- let state_clone = state.clone();
- let dataset_ids = body.dataset_ids.clone();
- let handle = tokio::spawn(async move {
- real_training_loop(state_clone, progress_tx, config, dataset_ids, "lora").await;
- });
-
- {
- let mut s = state.write().await;
- s.training_state.task_handle = Some(handle);
- }
-
- Json(serde_json::json!({
- "status": "started",
- "type": "lora",
- "base_model_id": body.base_model_id,
- "profile_name": body.profile_name,
- "rank": body.rank,
- "epochs": body.epochs,
- "dataset_ids": body.dataset_ids,
- }))
}
// ── WebSocket handler for training progress ──────────────────────────────────
@@ -1792,8 +1895,11 @@ async fn handle_train_ws_client(mut socket: WebSocket, state: AppState) {
// Send current status immediately.
{
- let s = state.read().await;
- if let Ok(json) = serde_json::to_string(&s.training_state.status) {
+ let snapshot = {
+ let s = state.read().await;
+ s.training_state.snapshot()
+ };
+ if let Ok(json) = serde_json::to_string(&snapshot) {
let msg = serde_json::json!({
"type": "status",
"data": serde_json::from_str::(&json).unwrap_or_default(),
@@ -1869,6 +1975,60 @@ mod tests {
assert_eq!(status.phase, "idle");
}
+ #[test]
+ fn claim_training_slot_admits_exactly_one_concurrent_start() {
+ // Regression test for the single-job TOCTOU race. Many threads race to
+ // claim one slot at the same instant (a barrier maximises contention);
+ // the status mutex must admit EXACTLY ONE. A split check-then-set (the
+ // old shape) would let several through under load — verified by
+ // temporarily reverting the atomicity, which drops this from 1.
+ use std::sync::atomic::{AtomicUsize, Ordering as O};
+ use std::sync::{Arc, Barrier};
+
+ let status = Arc::new(Mutex::new(TrainingStatus::default()));
+ let config = TrainingConfig::default();
+ let winners = Arc::new(AtomicUsize::new(0));
+
+ const N: usize = 32;
+ let barrier = Arc::new(Barrier::new(N));
+ let mut handles = Vec::with_capacity(N);
+ for _ in 0..N {
+ let status = status.clone();
+ let config = config.clone();
+ let winners = winners.clone();
+ let barrier = barrier.clone();
+ handles.push(std::thread::spawn(move || {
+ barrier.wait();
+ if claim_training_slot(&status, &config).is_ok() {
+ winners.fetch_add(1, O::SeqCst);
+ }
+ }));
+ }
+ for h in handles {
+ h.join().unwrap();
+ }
+
+ assert_eq!(
+ winners.load(O::SeqCst),
+ 1,
+ "exactly one concurrent start may claim the single training slot"
+ );
+ assert!(
+ status.lock().unwrap().active,
+ "the slot must be marked active after a successful claim"
+ );
+ }
+
+ #[test]
+ fn claim_training_slot_rejects_when_already_active() {
+ let status = Arc::new(Mutex::new(TrainingStatus::default()));
+ let config = TrainingConfig::default();
+ assert!(claim_training_slot(&status, &config).is_ok(), "first claim wins");
+ let err = claim_training_slot(&status, &config)
+ .expect_err("second claim must be refused while active");
+ assert!(err.active, "the rejection carries the active status");
+ }
+
#[test]
fn training_progress_serializes() {
let progress = TrainingProgress {
@@ -2132,4 +2292,169 @@ mod tests {
assert_eq!(parsed.n_features, 2);
assert_eq!(parsed.mean, vec![1.0, 2.0]);
}
+
+ /// Build a small deterministic set of synthetic CSI frames with enough
+ /// variation that feature extraction is non-degenerate.
+ fn synthetic_history(n: usize, n_sub: usize) -> Vec> {
+ (0..n)
+ .map(|i| {
+ (0..n_sub)
+ .map(|k| 10.0 + ((i as f64) * 0.3 + (k as f64) * 0.1).sin() * 2.0)
+ .collect()
+ })
+ .collect()
+ }
+
+ /// ADR-186 P3/P6 end-to-end: the real (state-free) training core must
+ /// (a) stream real progress events over the broadcast channel and
+ /// (b) actually write a `.rvf` model artifact on completion — not merely
+ /// flip a status flag. This is the regression guard that keeps the trainer
+ /// wired (the module was previously orphaned / uncompiled — ADR-186 §1.3).
+ #[tokio::test]
+ async fn training_job_streams_real_progress_and_writes_model() {
+ let history = synthetic_history(40, 56);
+
+ let (tx, mut rx) = broadcast::channel::(1024);
+ let status = Arc::new(Mutex::new(TrainingStatus::default()));
+ let cancel = Arc::new(AtomicBool::new(false));
+
+ let config = TrainingConfig {
+ epochs: 3,
+ batch_size: 8,
+ warmup_epochs: 1,
+ early_stopping_patience: 10,
+ ..Default::default()
+ };
+
+ // Empty dataset_ids → falls back to the in-memory history snapshot, so
+ // this test does not depend on the recordings directory.
+ let rvf = run_training_job(
+ status.clone(),
+ cancel,
+ tx,
+ config,
+ Vec::new(),
+ history,
+ "supervised",
+ )
+ .await;
+
+ // (b) A real model artifact was produced and exists on disk.
+ let rvf_path = rvf.expect("training must produce an .rvf model artifact");
+ assert!(
+ rvf_path.exists(),
+ "rvf artifact should exist at {}",
+ rvf_path.display()
+ );
+
+ // (a) Real progress frames were streamed, at least one carrying an epoch.
+ let mut n_frames = 0usize;
+ let mut saw_epoch = false;
+ let mut saw_completed = false;
+ while let Ok(msg) = rx.try_recv() {
+ n_frames += 1;
+ let v: serde_json::Value = serde_json::from_str(&msg).unwrap();
+ if v.get("epoch").and_then(|e| e.as_u64()).unwrap_or(0) >= 1 {
+ saw_epoch = true;
+ }
+ if v.get("phase").and_then(|p| p.as_str()) == Some("completed") {
+ saw_completed = true;
+ }
+ }
+ assert!(n_frames > 0, "expected streamed progress frames, got none");
+ assert!(saw_epoch, "expected at least one epoch-tagged progress frame");
+ assert!(saw_completed, "expected a terminal 'completed' progress frame");
+
+ // Final shared status reflects genuine completion, not just a flag flip:
+ // real epochs ran (the loop wrote per-epoch status) and a finite loss was
+ // computed from the real gradient-descent pass.
+ let final_status = status.lock().unwrap().clone();
+ assert!(!final_status.active, "job should be inactive when finished");
+ assert_eq!(final_status.phase, "completed");
+ assert!(
+ final_status.epoch >= 1,
+ "at least one real training epoch should have run"
+ );
+ assert!(
+ final_status.train_loss.is_finite(),
+ "a finite training loss should have been computed"
+ );
+
+ // Keep the test hermetic — remove the artifact it wrote.
+ let _ = std::fs::remove_file(&rvf_path);
+ }
+
+ /// ADR-186 P4 (path safety): a `dataset_id` containing directory traversal
+ /// is rejected before any file is opened, so the loader returns no frames
+ /// rather than reading an arbitrary file.
+ #[tokio::test]
+ async fn load_recording_frames_rejects_path_traversal() {
+ let frames = load_recording_frames(&["../../etc/passwd".to_string()]).await;
+ assert!(
+ frames.is_empty(),
+ "path-traversal dataset_id must yield no frames"
+ );
+ }
+
+ /// Exported model ids must be unique per call — a second-resolution
+ /// timestamp alone collided for runs finishing in the same wall-clock second
+ /// (silently overwriting each other's `.rvf`, which also flaked the
+ /// concurrent model-writing tests on CI). Guards against regressing the
+ /// filename scheme back to non-unique.
+ #[test]
+ fn model_ids_are_unique_per_call() {
+ let ids: Vec = (0..1000).map(|_| next_model_id("supervised")).collect();
+ let unique: std::collections::HashSet<&String> = ids.iter().collect();
+ assert_eq!(unique.len(), ids.len(), "every model id must be distinct");
+ assert!(ids[0].starts_with("trained-supervised-"));
+ }
+
+ /// ADR-186 P5: the enablement gate is enabled by default and only disabled
+ /// by an explicit truthy opt-out, so a `--no-default-features` / default
+ /// build always has server training ON (no silent regression to disabled).
+ #[test]
+ fn training_enablement_gate() {
+ assert!(training_enabled_from_env(None), "default is enabled");
+ assert!(training_enabled_from_env(Some("0")), "0 keeps it enabled");
+ assert!(training_enabled_from_env(Some("")), "empty keeps it enabled");
+ assert!(!training_enabled_from_env(Some("1")), "1 disables");
+ assert!(!training_enabled_from_env(Some("true")), "true disables");
+ assert!(!training_enabled_from_env(Some("YES")), "case-insensitive");
+ assert!(!training_enabled_from_env(Some(" 1 ")), "trims whitespace");
+ }
+
+ /// A job that is cancelled before it starts still exits cleanly and reports
+ /// the `cancelled` terminal phase (drives `stop_training`'s cooperative flag).
+ #[tokio::test]
+ async fn training_job_honors_cancellation() {
+ let history = synthetic_history(40, 56);
+ let (tx, _rx) = broadcast::channel::(1024);
+ let status = Arc::new(Mutex::new(TrainingStatus::default()));
+ let cancel = Arc::new(AtomicBool::new(true)); // pre-cancelled
+
+ let config = TrainingConfig {
+ epochs: 50,
+ batch_size: 8,
+ warmup_epochs: 1,
+ early_stopping_patience: 10,
+ ..Default::default()
+ };
+
+ let rvf = run_training_job(
+ status.clone(),
+ cancel,
+ tx,
+ config,
+ Vec::new(),
+ history,
+ "supervised",
+ )
+ .await;
+
+ // Cancelled before the first epoch → no model, terminal phase cancelled.
+ assert!(rvf.is_none(), "cancelled run should not export a model");
+ let final_status = status.lock().unwrap().clone();
+ assert!(!final_status.active);
+ assert_eq!(final_status.phase, "cancelled");
+ }
}
diff --git a/v2/crates/wifi-densepose-train/Cargo.toml b/v2/crates/wifi-densepose-train/Cargo.toml
index 133026f5..bebbf82c 100644
--- a/v2/crates/wifi-densepose-train/Cargo.toml
+++ b/v2/crates/wifi-densepose-train/Cargo.toml
@@ -35,7 +35,13 @@ cuda = ["tch-backend"]
[dependencies]
# Internal crates
wifi-densepose-signal = { version = "0.3.0", path = "../wifi-densepose-signal", default-features = false }
-wifi-densepose-nn = { version = "0.3.0", path = "../wifi-densepose-nn" }
+# NOTE: `wifi-densepose-nn` was declared here but never imported anywhere in
+# this crate's src/ or bin/ (the tch-backend model path uses `tch` directly,
+# not this crate). It was a dead dependency that pulled `ort` (ONNX Runtime) +
+# reqwest/hyper into every downstream consumer — including the ADR-185
+# `[meridian]` wheel. Removed to slim the dependency graph. Inference at
+# serving time is done via `wifi-densepose-nn` by the binaries that actually
+# load models, which depend on it directly.
# Core
thiserror.workspace = true