diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5ad7c2f5a..bf65e68bf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,6 +50,17 @@ jobs: # `edited` covers title and body edits as well as the base change we want, # and `changes.base` is populated only for the latter. if: github.event.action != 'edited' || github.event.changes.base + # Three shards, because the serial combine job below costs ~18s whatever the + # count: two leave the backend path at ~98s, and past three the other gate + # jobs set the run's floor instead. Public runners are free. + # + # fail-fast off so one shard's failure does not cancel the other two. A red + # shard tells you nothing about whether the rest of the suite passes, and + # that is the first thing you want to know. + strategy: + fail-fast: false + matrix: + shard: [1, 2, 3] defaults: run: working-directory: backend @@ -59,6 +70,10 @@ jobs: # Steps that never invoke coverage are indifferent to it. env: COVERAGE_CORE: sysmon + # One data file per shard, named so `coverage combine` in backend-coverage + # recognises them as parallel fragments of one run rather than three + # separate ones it should overwrite. + COVERAGE_FILE: .coverage.${{ matrix.shard }} steps: - uses: actions/checkout@v4 with: @@ -149,7 +164,72 @@ jobs: # `pytest` stays serial: -x stops at a different place under xdist and # --pdb cannot attach to a worker, and both are wanted more often when # debugging than the speed is. - - run: pytest tests/ -v --tb=short -m "not external" -n logical --dist worksteal + # + # `--splits/--group` cuts the collected tests into three contiguous chunks + # of equal recorded duration, from `.test_durations`. Contiguous rather + # than pytest-split's `least_duration` bin-packing, which interleaves: + # this suite has tests that pass or fail on what shares their process + # (core/frame_queue.py's shards bind to the first event loop that waits on + # them), so keeping each file's tests together and in collection order is + # the split that least disturbs what runs beside what. A stale durations + # file costs balance, not correctness; it only moves the two boundaries. + # + # `--cov-fail-under=0` overrides the 55 in pyproject's addopts for the + # shards alone. A shard measures a third of the suite, so its own figure + # is meaningless; backend-coverage applies the real threshold to the three + # combined. Overriding here rather than editing addopts keeps a local + # `pytest` enforcing the threshold exactly as it does today. + - run: pytest tests/ -v --tb=short -m "not external" -n logical --dist worksteal --splits 3 --group ${{ matrix.shard }} --cov-fail-under=0 + # include-hidden-files, because `.coverage.N` is a dotfile and v4 drops + # those silently: without it the combine below fails on an empty download + # rather than on anything that names this step. + - uses: actions/upload-artifact@v4 + with: + name: coverage-${{ matrix.shard }} + path: backend/.coverage.${{ matrix.shard }} + include-hidden-files: true + retention-days: 1 + + # The threshold the shards above cannot each apply to themselves. Serial after + # all three by construction, so it is kept to a bare checkout and a single + # dependency: no submodules, no requirements-dev, no libs. + backend-coverage: + runs-on: ubuntu-latest + timeout-minutes: 10 + needs: backend-tests + defaults: + run: + working-directory: backend + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - uses: astral-sh/setup-uv@v5 + # Pinned to the same version as requirements-dev, which pytest-cov drives + # in the shards: a data file's format is tied to the coverage that wrote + # it, and a newer reader is not guaranteed to accept an older fragment. + - run: uv pip install --system coverage==7.8.0 + - uses: actions/download-artifact@v4 + with: + pattern: coverage-* + merge-multiple: true + path: backend + # `combine` deletes the fragments as it consumes them, so the count has to + # be taken first. Asserting it catches the failure this job is most likely + # to have: a download that matched fewer shards than ran, which would + # otherwise report a plausible-looking figure over part of the suite. + - name: All three shards reported + run: | + shopt -s nullglob + fragments=(.coverage.*) + if [ "${#fragments[@]}" -ne 3 ]; then + printf 'expected 3 coverage fragments, found %d: %s\n' \ + "${#fragments[@]}" "${fragments[*]}" >&2 + exit 1 + fi + - run: coverage combine + - run: coverage report --fail-under=55 # Its own job so that backend-tests, which gates every deploy, does not wait # on it: pre-commit builds its hook environments from scratch on every run, @@ -587,7 +667,7 @@ jobs: # `playwright-image` joins the deploy's own prerequisites so an unpublished # image fails the run before the droplet is touched, rather than after a # deploy and a smoke suite have already landed on it. - needs: [changes, backend-tests, lint, web-build, docker-build, env-parity, tower-service-contract, playwright-image] + needs: [changes, backend-tests, backend-coverage, lint, web-build, docker-build, env-parity, tower-service-contract, playwright-image] if: github.ref == 'refs/heads/main' && github.event_name == 'push' && needs.changes.outputs.code == 'true' concurrency: group: staging-deploy diff --git a/ONBOARDING.md b/ONBOARDING.md index 4a5fb6cea..92dcc8f09 100644 --- a/ONBOARDING.md +++ b/ONBOARDING.md @@ -210,6 +210,24 @@ This is also what lets CI run the suite under `pytest-xdist`; see the comment on the pytest step in `.github/workflows/ci.yml` for why it passes `--dist worksteal` and why the flags are not in `addopts`. +CI splits the suite across three runners on top of that, with `pytest-split` +cutting the collected tests into contiguous chunks of equal recorded duration. +A shard measures only its own third, so each overrides the 55% gate away and +uploads its coverage data; the `backend-coverage` job combines the three and +applies the threshold once. A local `pytest` is untouched by all of this and +still enforces the gate itself. + +`backend/.test_durations` only decides where the two boundaries fall, so a stale +one costs balance and never correctness. Regenerate it when the shards drift +apart, from a serial run: + +```bash +cd backend && pytest tests/ -m "not external" --no-cov --store-durations +``` + +Not under `-n`: each xdist worker records only the tests that landed on it, and +the file it writes covers a fraction of the suite. + `COVERAGE_CORE=sysmon` above is not decoration, and CI sets it too. Without it, coverage measures through `sys.settrace`, which is per execution context, so every line after an `await session.…` in a greenlet-backed path counts as unrun: @@ -272,7 +290,8 @@ Two traps in that command: CI runs on every PR, on push to `main`, and on demand through `workflow_dispatch` (`.github/workflows/ci.yml`): -1. Any PR, whatever its base: `backend-tests`, `lint`, `web-build` (once per +1. Any PR, whatever its base: `backend-tests` (three shards) and + `backend-coverage` behind them, `lint`, `web-build` (once per workspace), `docker-build`, `env-parity`, plus an automated review. 2. Merge to `main` → deploy to **staging** → staging smoke + Playwright E2E → deploy to **production** → prod smoke + Playwright E2E. A merge that changes nothing the droplets serve skips that chain, which means diff --git a/backend/.test_durations b/backend/.test_durations new file mode 100644 index 000000000..f8848e60a --- /dev/null +++ b/backend/.test_durations @@ -0,0 +1,4652 @@ +{ + "tests/test_access_identity.py::test_a_cold_start_outage_is_not_logged_per_request": 0.058058816000084335, + "tests/test_access_identity.py::test_a_failed_refresh_is_not_retried_by_every_request": 0.038276191999784714, + "tests/test_access_identity.py::test_a_kid_that_never_appears_is_refused_and_does_not_loop": 0.02930783200008591, + "tests/test_access_identity.py::test_a_malformed_key_set_refuses_rather_than_raising": 0.02253494700016745, + "tests/test_access_identity.py::test_a_partial_config_is_treated_as_absent": 0.018853615999660178, + "tests/test_access_identity.py::test_a_rotation_inside_the_floor_waits_for_it": 0.021270442000286494, + "tests/test_access_identity.py::test_a_stale_set_still_verifies_while_refreshing_fails": 0.017733101999965584, + "tests/test_access_identity.py::test_a_success_is_not_logged_as_a_refusal": 0.022317042999702608, + "tests/test_access_identity.py::test_a_token_for_another_application_is_refused": 0.017682902999695216, + "tests/test_access_identity.py::test_a_token_from_another_team_is_refused": 0.019773014000065814, + "tests/test_access_identity.py::test_a_token_naming_nobody_is_refused": 0.01569156899972768, + "tests/test_access_identity.py::test_a_token_signed_by_someone_else_is_refused": 0.08864193100021112, + "tests/test_access_identity.py::test_a_token_with_no_audience_claim_is_refused": 0.01733470199974363, + "tests/test_access_identity.py::test_a_valid_assertion_yields_the_email": 0.1170962139999574, + "tests/test_access_identity.py::test_a_wrong_audience_names_both": 0.02214661899984094, + "tests/test_access_identity.py::test_an_expired_assertion_is_refused": 0.020553831000142964, + "tests/test_access_identity.py::test_an_outage_is_never_reported_as_an_unknown_key_id[0]": 0.018321406000268325, + "tests/test_access_identity.py::test_an_outage_is_never_reported_as_an_unknown_key_id[25260]": 0.022273012999903585, + "tests/test_access_identity.py::test_an_unknown_key_id_triggers_one_refetch": 0.017515936999870974, + "tests/test_access_identity.py::test_an_unsigned_token_is_refused": 0.016016399000136516, + "tests/test_access_identity.py::test_cloudflare_being_unreachable_refuses_rather_than_admits": 0.021007880999832196, + "tests/test_access_identity.py::test_every_refusal_says_why": 0.02159715899983894, + "tests/test_access_identity.py::test_forged_kids_do_not_fetch_once_per_request": 0.03920498599995881, + "tests/test_access_identity.py::test_large_drift_is_not_tolerated": 0.01790512099978514, + "tests/test_access_identity.py::test_missing_config_names_the_variables": 0.018560160000106407, + "tests/test_access_identity.py::test_no_config_means_no_identity": 0.018712107999817817, + "tests/test_access_identity.py::test_no_token_at_all_is_not_logged": 0.02176967699983834, + "tests/test_access_identity.py::test_one_unknown_kid_costs_one_fetch_not_two": 0.01920621099998243, + "tests/test_access_identity.py::test_past_the_grace_the_stale_set_is_refused": 0.021712636999836832, + "tests/test_access_identity.py::test_rubbish_is_refused": 0.018117989000074886, + "tests/test_access_identity.py::test_serving_a_stale_set_is_not_silent": 0.02786134499979198, + "tests/test_access_identity.py::test_small_clock_drift_is_tolerated": 0.01923155700001189, + "tests/test_access_identity.py::test_the_email_is_normalised": 0.017518812999924194, + "tests/test_access_identity.py::test_the_key_set_is_cached": 0.02527010199992219, + "tests/test_access_identity.py::test_the_stale_warning_is_throttled": 0.0721708139999464, + "tests/test_access_identity.py::test_the_token_is_never_logged": 0.02386918499996682, + "tests/test_access_identity.py::test_unreachable_cloudflare_is_distinguishable_from_a_bad_token": 0.016567532000181018, + "tests/test_access_seam.py::test_a_deactivated_administrator_is_refused": 0.015167634999897928, + "tests/test_access_seam.py::test_a_signed_in_administrator_is_admitted": 0.015279078999810736, + "tests/test_access_seam.py::test_a_signed_in_member_is_not_an_administrator": 0.015629132999947615, + "tests/test_access_seam.py::test_a_verified_assertion_also_satisfies_get_current_user": 0.031890124999790714, + "tests/test_access_seam.py::test_a_verified_assertion_beats_the_bypass": 0.02081774399994174, + "tests/test_access_seam.py::test_a_verified_assertion_makes_require_admin_an_admin": 0.02015246299993123, + "tests/test_access_seam.py::test_an_assertion_that_does_not_verify_is_refused": 0.01851653400012765, + "tests/test_access_seam.py::test_an_unconfigured_verifier_is_never_consulted": 0.015662051000163046, + "tests/test_access_seam.py::test_no_assertion_and_no_bypass_is_refused": 0.020642048999889084, + "tests/test_access_seam.py::test_the_assertion_is_what_gets_verified": 0.021350817999973515, + "tests/test_access_seam.py::test_the_bypass_still_works_where_it_is_opted_into": 0.019101926999837815, + "tests/test_access_seam.py::test_the_identity_carries_a_stable_id_derived_from_the_email": 0.027289804000020013, + "tests/test_access_seam.py::test_the_plain_email_header_is_not_trusted": 0.015853752999873905, + "tests/test_access_seam.py::test_the_provider_says_where_the_identity_came_from": 0.024082697000039843, + "tests/test_admin_routes.py::TestAdminNodeLocationPrivacy::test_all_three_are_behind_require_admin[delete-kwargs2]": 0.135220512999922, + "tests/test_admin_routes.py::TestAdminNodeLocationPrivacy::test_all_three_are_behind_require_admin[get-kwargs0]": 0.1341151849999278, + "tests/test_admin_routes.py::TestAdminNodeLocationPrivacy::test_all_three_are_behind_require_admin[put-kwargs1]": 0.13970258399990598, + "tests/test_admin_routes.py::TestAdminNodeLocationPrivacy::test_delete_is_logged_too": 0.14711093300002176, + "tests/test_admin_routes.py::TestAdminNodeLocationPrivacy::test_delete_returns_the_node_to_its_registration_choice": 0.13207101900002272, + "tests/test_admin_routes.py::TestAdminNodeLocationPrivacy::test_get_answers_for_a_node_nothing_has_ever_heard_of": 0.13875418700013142, + "tests/test_admin_routes.py::TestAdminNodeLocationPrivacy::test_get_reports_the_registration_choice_as_a_raw_piece": 0.14062618899970403, + "tests/test_admin_routes.py::TestAdminNodeLocationPrivacy::test_put_is_logged_like_the_owner_assignment_route": 0.1396121440002389, + "tests/test_admin_routes.py::TestAdminNodeLocationPrivacy::test_put_sets_the_override_and_records_who_set_it": 0.15098155700025018, + "tests/test_admin_routes.py::TestAdminNodeLocationPrivacy::test_put_takes_effect_without_waiting_for_the_ttl": 0.14344322399983866, + "tests/test_admin_routes.py::TestAlerts::test_alerts_filters_severity": 0.139029581999921, + "tests/test_admin_routes.py::TestAlerts::test_alerts_returns_list": 0.15979365000021062, + "tests/test_admin_routes.py::TestConfig::test_config_history_returns_list": 0.1395433000002413, + "tests/test_admin_routes.py::TestConfig::test_get_node_config_live_fallback": 0.14525066299984246, + "tests/test_admin_routes.py::TestConfig::test_get_tower_config_returns_the_live_view": 0.14402524900015123, + "tests/test_admin_routes.py::TestEvents::test_events_respect_limit": 0.13502890399990974, + "tests/test_admin_routes.py::TestEvents::test_list_events_returns_list": 0.14794071300002543, + "tests/test_admin_routes.py::TestEvents::test_log_event_appears_in_list": 0.14011030999995455, + "tests/test_admin_routes.py::TestLeaderboard::test_a_caller_with_a_session_still_gets_them": 0.1450803300001553, + "tests/test_admin_routes.py::TestLeaderboard::test_a_caller_with_no_session_is_not_told_what_each_node_missed": 0.13377426000010928, + "tests/test_admin_routes.py::TestLeaderboard::test_a_stray_field_is_refused_rather_than_dropped": 0.014487511999732305, + "tests/test_admin_routes.py::TestLeaderboard::test_cancelling_one_caller_does_not_cancel_the_others_sharing_it": 0.12843640999994932, + "tests/test_admin_routes.py::TestLeaderboard::test_concurrent_cold_start_requests_share_one_summaries_call": 0.022232742000142025, + "tests/test_admin_routes.py::TestLeaderboard::test_each_caller_gets_exactly_its_row_keys[cold-start]": 0.1370634049999353, + "tests/test_admin_routes.py::TestLeaderboard::test_each_caller_gets_exactly_its_row_keys[snapshot]": 0.2679128650001985, + "tests/test_admin_routes.py::TestLeaderboard::test_its_neighbours_under_the_same_prefix_still_want_a_session": 0.13802439000028244, + "tests/test_admin_routes.py::TestLeaderboard::test_leaderboard_answers_a_caller_with_no_session": 0.14057338199972946, + "tests/test_admin_routes.py::TestLeaderboard::test_leaderboard_does_not_publish_a_name_that_is_a_node_id": 0.15050529200016172, + "tests/test_admin_routes.py::TestLeaderboard::test_leaderboard_empty": 0.13872658099990076, + "tests/test_admin_routes.py::TestLeaderboard::test_leaderboard_leaves_out_a_node_with_no_registry_row": 0.15038624199996775, + "tests/test_admin_routes.py::TestLeaderboard::test_leaderboard_names_nodes_the_same_way_with_a_cold_snapshot": 0.14220941499979745, + "tests/test_admin_routes.py::TestLeaderboard::test_leaderboard_reports_the_ref_and_still_reads_id_keyed_state": 0.14274121899984493, + "tests/test_admin_routes.py::TestLeaderboard::test_leaderboard_with_node": 0.12997378999966713, + "tests/test_admin_routes.py::TestLeaderboard::test_the_cold_start_fallback_withholds_a_private_node[False-1]": 0.13807208100024582, + "tests/test_admin_routes.py::TestLeaderboard::test_the_cold_start_fallback_withholds_a_private_node[True-0]": 0.1437910469999224, + "tests/test_admin_routes.py::TestLeaderboard::test_the_published_row_declares_exactly_the_public_fields": 0.01903494299972408, + "tests/test_admin_routes.py::TestMetrics::test_metrics_returns_expected_fields": 0.15303219899988107, + "tests/test_admin_routes.py::TestMetrics::test_mn_pos_history_counts_the_smoothers_keys": 0.1482491009999194, + "tests/test_admin_routes.py::TestNodeContacts::test_a_node_that_reported_nothing_is_absent": 0.048965899999984686, + "tests/test_admin_routes.py::TestNodeContacts::test_both_routes_are_gated_on_require_admin": 0.015205489000209127, + "tests/test_admin_routes.py::TestNodeContacts::test_deleting_removes_the_row": 0.07757080199985467, + "tests/test_admin_routes.py::TestNodeContacts::test_deleting_what_is_not_there_is_not_an_error": 0.032232333999672846, + "tests/test_admin_routes.py::TestNodeContacts::test_it_lists_what_the_store_holds": 1.891846398000098, + "tests/test_admin_routes.py::TestNodeHealth::test_check_detects_offline": 0.024914165000382127, + "tests/test_admin_routes.py::TestNodeReconnectEvent::test_fresh_connect_has_no_reconnect_flag": 0.024219805000029737, + "tests/test_admin_routes.py::TestNodeReconnectEvent::test_reconnect_flag_in_meta": 0.027527603999942585, + "tests/test_admin_routes.py::TestNodeRefs::test_it_covers_a_connected_node_the_registry_cannot_answer_for": 0.13739587899999606, + "tests/test_admin_routes.py::TestNodeRefs::test_it_is_gated_on_require_admin": 0.019739389000051233, + "tests/test_admin_routes.py::TestNodeRefs::test_it_names_the_node_behind_a_ref": 0.13956475500003762, + "tests/test_admin_routes.py::TestQueueSaturationAlert::test_drop_event_logged_when_throttle_expires": 0.07987270900025578, + "tests/test_admin_routes.py::TestStaleTasks::test_no_stale_when_recent": 0.024257661000092412, + "tests/test_admin_routes.py::TestStaleTasks::test_stale_when_old": 0.024015418000089994, + "tests/test_admin_routes.py::TestStorage::test_storage_returns_json": 0.14623984399963774, + "tests/test_admin_routes.py::TestUsers::test_list_users": 0.1346949560002031, + "tests/test_admin_routes.py::TestUsers::test_set_role_invalid_user": 0.13403407500004505, + "tests/test_adsb_capture_timestamps.py::TestAdsbLolCaptureTime::test_poll_time_stands_in_when_the_row_carries_no_capture_time": 0.01899850199993125, + "tests/test_adsb_capture_timestamps.py::TestAdsbLolCaptureTime::test_the_client_resolves_seen_pos_at_fetch_time": 0.024850818000004438, + "tests/test_adsb_capture_timestamps.py::TestAdsbLolCaptureTime::test_the_rows_capture_time_is_carried_through": 0.02153883400023915, + "tests/test_adsb_capture_timestamps.py::TestBothIngestPathsUseIt::test_frame_processor_path": 0.026748855999812804, + "tests/test_adsb_capture_timestamps.py::TestBothIngestPathsUseIt::test_tcp_fast_path": 0.016305113999806053, + "tests/test_adsb_capture_timestamps.py::TestCalibrationCanNowRefuseAnOldFix::test_a_live_fix_within_the_budget_is_still_recorded": 0.017176007999978538, + "tests/test_adsb_capture_timestamps.py::TestCalibrationCanNowRefuseAnOldFix::test_an_external_fix_of_a_typical_age_is_refused": 0.015907072000118205, + "tests/test_adsb_capture_timestamps.py::TestExternalCacheFreshness::test_a_stalled_feed_stops_being_served": 0.015083347000199865, + "tests/test_adsb_capture_timestamps.py::TestExternalCacheFreshness::test_an_unstamped_entry_is_not_assumed_fresh": 0.016404433999696266, + "tests/test_adsb_capture_timestamps.py::TestExternalCacheFreshness::test_reports_the_entrys_own_capture_time": 0.015106546999732018, + "tests/test_adsb_capture_timestamps.py::TestIngestCaptureStamp::test_a_frame_with_no_timestamp_falls_back_to_receipt": 0.02119226499985416, + "tests/test_adsb_capture_timestamps.py::TestIngestCaptureStamp::test_a_node_clock_ahead_of_ours_is_not_trusted": 0.025703187000317484, + "tests/test_adsb_capture_timestamps.py::TestIngestCaptureStamp::test_a_node_clock_far_behind_ours_is_not_trusted": 0.023729530999844428, + "tests/test_adsb_capture_timestamps.py::TestIngestCaptureStamp::test_backlog_within_the_bound_is_reported_honestly": 0.024799432000236266, + "tests/test_adsb_capture_timestamps.py::TestIngestCaptureStamp::test_the_fallback_is_counted_rather_than_silent": 0.02237344399986796, + "tests/test_adsb_capture_timestamps.py::TestIngestCaptureStamp::test_the_frames_own_capture_time_is_used": 0.021983307000027708, + "tests/test_adsb_capture_timestamps.py::TestOpenSkyCaptureTime::test_poll_time_stands_in_when_the_row_carries_no_position_time": 0.016493716999775643, + "tests/test_adsb_capture_timestamps.py::TestOpenSkyCaptureTime::test_position_time_is_the_capture_stamp": 0.020530732999986867, + "tests/test_adsb_capture_timestamps.py::TestStalledFeedExpiry::test_a_fetch_that_reaches_no_source_still_ages_the_cache": 0.020826909000334126, + "tests/test_adsb_capture_timestamps.py::TestStalledFeedExpiry::test_entries_past_the_budget_are_dropped": 0.017745153000305436, + "tests/test_adsb_capture_timestamps.py::TestStalledFeedExpiry::test_unstamped_entries_are_dropped": 0.01575273800017385, + "tests/test_adsb_cross_validation_gates.py::TestNullIsland::test_a_report_carrying_no_position_penalises_nobody": 0.019913991999828795, + "tests/test_adsb_cross_validation_gates.py::TestOneVotePerSample::test_a_new_divergent_sample_still_counts": 0.01590226299981623, + "tests/test_adsb_cross_validation_gates.py::TestOneVotePerSample::test_a_sample_ages_out_before_the_next_cycle_could_rejudge_it": 0.017366621999826748, + "tests/test_adsb_cross_validation_gates.py::TestOneVotePerSample::test_the_window_is_shorter_than_the_cycle": 0.018051243999707367, + "tests/test_adsb_cross_validation_gates.py::TestTemporalGates::test_a_report_older_than_the_budget_penalises_nobody": 0.02215671699991617, + "tests/test_adsb_cross_validation_gates.py::TestTemporalGates::test_truth_older_than_the_budget_penalises_nobody": 0.025331779999987702, + "tests/test_adsb_cross_validation_gates.py::TestTemporalGates::test_unstamped_truth_penalises_nobody": 0.02344189599989477, + "tests/test_adsb_cross_validation_gates.py::TestTheCheckStillWorks::test_a_co_timed_agreeing_report_is_left_alone": 0.016070815999910337, + "tests/test_adsb_cross_validation_gates.py::TestTheCheckStillWorks::test_a_co_timed_divergent_report_is_penalised": 0.01896331700004339, + "tests/test_adsb_freshness_regressions.py::TestCalibrationSkewStaysOnOneClock::test_a_node_whose_clock_is_off_still_calibrates": 0.017972290999978213, + "tests/test_adsb_freshness_regressions.py::TestCalibrationSkewStaysOnOneClock::test_both_ingest_paths_record_server_receipt_alongside_capture": 0.014513723999925787, + "tests/test_adsb_freshness_regressions.py::TestCrossValidationCannotBeBypassed::test_a_future_stamp_does_not_grant_immunity": 0.015657184000019697, + "tests/test_adsb_freshness_regressions.py::TestCrossValidationCannotBeBypassed::test_every_sample_in_one_frame_is_judged": 0.025795512000058807, + "tests/test_adsb_freshness_regressions.py::TestDirectCacheConsumersGateOnAge::test_verification_truth_pool_refuses_a_stale_external_entry": 0.025952541999913592, + "tests/test_adsb_freshness_regressions.py::TestExternalStampsAreBounded::test_a_future_external_stamp_cannot_outlive_the_prune": 0.01904177700021137, + "tests/test_adsb_freshness_regressions.py::TestForwardSkewIsNotTrusted::test_a_stamp_seconds_into_the_future_is_refused": 0.01623245400014639, + "tests/test_adsb_freshness_regressions.py::TestForwardSkewIsNotTrusted::test_ordinary_jitter_is_still_accepted": 0.01434758599975794, + "tests/test_adsb_freshness_regressions.py::TestLastGoodRowsKeepTheirOriginalAge::test_a_cached_row_is_not_restamped_as_fresh": 0.01586394399987512, + "tests/test_adsb_freshness_regressions.py::TestLastGoodRowsKeepTheirOriginalAge::test_the_client_stamps_absolute_capture_time": 0.02259859399987363, + "tests/test_adsb_freshness_regressions.py::TestNonFiniteFeedValuesDoNotBlankTheCache::test_a_nan_capture_time_drops_one_row_not_the_poll": 0.02839350900012505, + "tests/test_adsb_freshness_regressions.py::TestSimIngestIsBoundedToo::test_a_future_push_stamp_is_refused": 0.0276004169998032, + "tests/test_adsb_freshness_regressions.py::TestSimIngestIsBoundedToo::test_an_honest_push_stamp_is_kept": 0.024060016000021278, + "tests/test_adsb_freshness_regressions.py::TestStampsNeverRegress::test_an_older_frame_does_not_overwrite_a_newer_fix": 0.017827345000114292, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOffTheFramePath::test_node_verification_altitude_stats_come_from_the_airborne_match_alone": 0.014057432999607045, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOffTheFramePath::test_node_verification_survives_a_grounded_truth_candidate": 0.015593626000054428, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOffTheFramePath::test_validate_altitude_stats_come_from_the_airborne_match_alone": 0.015634283000281357, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOffTheFramePath::test_validate_ground_truth_survives_a_grounded_aircraft": 0.017211884000062128, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOnTheFramePath::test_a_non_dict_tag_is_passed_through_not_unpacked[bad1]": 0.04170947099987643, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOnTheFramePath::test_a_non_dict_tag_is_passed_through_not_unpacked[ground]": 0.05281729800003632, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOnTheFramePath::test_adsb_bootstrap_after_solver_failure_coerces_to_zero": 0.023005570000123043, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOnTheFramePath::test_coercion_leaves_absent_keys_absent": 0.014476671999773316, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOnTheFramePath::test_initial_guess_injection_does_not_kill_the_frame": 0.0963943899998867, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOnTheFramePath::test_inline_tag_survives_when_the_fresh_injection_does_not_fire": 0.06664700799979073, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOnTheFramePath::test_null_ground_speed_does_not_kill_the_frame": 0.040959757000109676, + "tests/test_adsb_ground_sentinel.py::TestGroundSentinelOnTheFramePath::test_refresh_between_solves_coerces_to_zero": 0.02228839300028085, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_403_logs_and_propagates_without_retry": 0.015756458000169005, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_429_retries_once_after_a_backoff": 0.01702280899962716, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_a_nameless_area_does_not_raise_at_construction": 0.013178041999708512, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_a_non_mapping_entry_does_not_raise_at_construction[42]": 0.015475487000230714, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_a_non_mapping_entry_does_not_raise_at_construction[None]": 0.014488902999801212, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_a_non_mapping_entry_does_not_raise_at_construction[bad3]": 0.01841780299992024, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_a_non_mapping_entry_does_not_raise_at_construction[not-a-dict]": 0.012869289000036588, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_an_area_missing_lat_or_lon_is_also_skipped": 0.015521591999913653, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_area_still_configured_keeps_cache_and_serves_it_on_failure": 0.017429577000029894, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_areas_are_spaced_by_five_seconds": 0.01582659800010333, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_cache_hit_leaves_last_status_untouched": 0.016833028000064587, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_dropped_area_is_forgotten_from_all_three_dicts": 0.02196422400015763, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_empty_areas": 0.014596552000057272, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_fetch_all_deduplicates": 0.015079814000046099, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_fetch_all_still_serves_the_good_areas_alongside_a_malformed_one": 0.01661242599993784, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_fetch_area_caches_within_interval": 0.017601726000066265, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_fetch_area_returns_aircraft": 0.01638693100017008, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_fetch_area_returns_cache_on_error": 0.019249680000257285, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_fetch_area_url_format": 0.014514361000010467, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_gzip_response_is_decompressed": 0.02021173799994358, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_last_status_distinguishes_success_from_failure": 0.01588083599995116, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_malformed_area_does_not_leave_orphaned_per_area_state": 0.01644584699988627, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_re_added_area_does_not_serve_its_previous_occupancy": 0.014647096999851783, + "tests/test_adsb_lol.py::TestAdsbLolClient::test_request_carries_contact_ua_and_gzip": 0.016623027999457918, + "tests/test_adsb_lol_cache_expiry.py::TestLastGoodExpiry::test_a_failed_fetch_serves_the_last_good_result": 0.017586196999900494, + "tests/test_adsb_lol_cache_expiry.py::TestLastGoodExpiry::test_a_prolonged_outage_stops_serving_it": 0.019769855000049574, + "tests/test_adsb_lol_cache_expiry.py::TestLastGoodExpiry::test_a_successful_fetch_refreshes_the_budget": 0.01820752599996922, + "tests/test_adsb_lol_cache_expiry.py::TestLastGoodExpiry::test_the_rate_limiter_still_serves_a_fresh_cache": 0.01980072099991048, + "tests/test_adsb_regions.py::TestAntimeridianSplit::test_a_band_across_the_antimeridian_is_split_not_swept": 0.015195052999843028, + "tests/test_adsb_regions.py::TestAntimeridianSplit::test_a_split_costing_the_same_as_the_sweep_is_still_taken": 0.01782729499996094, + "tests/test_adsb_regions.py::TestAntimeridianSplit::test_a_split_dearer_than_the_sweep_is_not_taken": 0.016260701999954108, + "tests/test_adsb_regions.py::TestAntimeridianSplit::test_the_negative_side_splits_the_same_way": 0.01648260100000698, + "tests/test_adsb_regions.py::TestAntimeridianSplit::test_the_split_costs_less_than_the_parallel_it_replaces": 0.016045921000113594, + "tests/test_adsb_regions.py::TestAntimeridianSplit::test_the_union_covers_every_member_plus_its_range": 0.020714621000024636, + "tests/test_adsb_regions.py::TestBboxStaysInRange::test_a_clamped_latitude_alone_forces_the_sweep": 0.01576583400014897, + "tests/test_adsb_regions.py::TestBboxStaysInRange::test_a_pole_crossing_band_is_swept_rather_than_split": 0.018499682000310713, + "tests/test_adsb_regions.py::TestBboxStaysInRange::test_near_pole_latitude_is_clamped_not_pushed_past_ninety": 0.027365429000155927, + "tests/test_adsb_regions.py::TestBboxStaysInRange::test_normal_mid_latitude_region_is_unchanged": 0.01647595999997975, + "tests/test_adsb_regions.py::TestBboxStaysInRange::test_saturated_dlon_gives_the_full_sweep_not_an_out_of_range_edge": 0.015543536000222957, + "tests/test_adsb_regions.py::TestCellOf::test_cell_is_stable_across_calls": 0.01367747899985261, + "tests/test_adsb_regions.py::TestCellOf::test_column_width_in_km_is_stable_across_latitudes": 0.018657764999943538, + "tests/test_adsb_regions.py::TestCellOf::test_distant_positions_get_distinct_cells": 0.012588158999733423, + "tests/test_adsb_regions.py::TestCellOf::test_nearby_positions_share_a_cell": 0.012945564000119703, + "tests/test_adsb_regions.py::TestCellOf::test_pole_does_not_explode": 0.016675922000104038, + "tests/test_adsb_regions.py::TestDlonNearThePole::test_a_polar_region_is_a_finite_in_range_box_not_an_explosion": 0.03676989599989611, + "tests/test_adsb_regions.py::TestDlonNearThePole::test_coverage_invariant_holds_wherever_a_span_can_reach_it[85.0]": 0.015629498999714997, + "tests/test_adsb_regions.py::TestDlonNearThePole::test_coverage_invariant_holds_wherever_a_span_can_reach_it[89.0]": 0.014954955000121117, + "tests/test_adsb_regions.py::TestDlonNearThePole::test_no_exception_and_a_finite_bounded_span[85.0]": 0.017819967999912478, + "tests/test_adsb_regions.py::TestDlonNearThePole::test_no_exception_and_a_finite_bounded_span[89.0]": 0.018726705999824844, + "tests/test_adsb_regions.py::TestDlonNearThePole::test_no_exception_and_a_finite_bounded_span[90.0]": 0.019451453999863588, + "tests/test_adsb_regions.py::TestDlonNearThePole::test_the_pole_gets_the_honest_full_sweep": 0.01867221999987123, + "tests/test_adsb_regions.py::TestMalformedPositions::test_a_boolean_is_not_a_latitude": 0.01657851100003427, + "tests/test_adsb_regions.py::TestMalformedPositions::test_a_fleet_of_rubbish_yields_no_regions_rather_than_an_exception": 0.016532492999886017, + "tests/test_adsb_regions.py::TestMalformedPositions::test_an_unusable_position_is_dropped_without_disturbing_the_rest[both-out-of-range]": 0.017656176000173218, + "tests/test_adsb_regions.py::TestMalformedPositions::test_an_unusable_position_is_dropped_without_disturbing_the_rest[inf-lat]": 0.015854002000196488, + "tests/test_adsb_regions.py::TestMalformedPositions::test_an_unusable_position_is_dropped_without_disturbing_the_rest[lat-below-minus-90]": 0.01658595900016735, + "tests/test_adsb_regions.py::TestMalformedPositions::test_an_unusable_position_is_dropped_without_disturbing_the_rest[lon-below-minus-180]": 0.016074848000016573, + "tests/test_adsb_regions.py::TestMalformedPositions::test_an_unusable_position_is_dropped_without_disturbing_the_rest[nan-lat]": 0.01465168699996866, + "tests/test_adsb_regions.py::TestMalformedPositions::test_an_unusable_position_is_dropped_without_disturbing_the_rest[nan-lon]": 0.017037247999951433, + "tests/test_adsb_regions.py::TestMalformedPositions::test_an_unusable_position_is_dropped_without_disturbing_the_rest[neg-inf-lon]": 0.018731256999899415, + "tests/test_adsb_regions.py::TestMalformedPositions::test_an_unusable_position_is_dropped_without_disturbing_the_rest[none-lat]": 0.021122663999904034, + "tests/test_adsb_regions.py::TestMalformedPositions::test_an_unusable_position_is_dropped_without_disturbing_the_rest[string-lat]": 0.015663655999787807, + "tests/test_adsb_regions.py::TestMalformedPositions::test_an_unusable_position_is_dropped_without_disturbing_the_rest[string-lon]": 0.01512250100017809, + "tests/test_adsb_regions.py::TestMalformedPositions::test_boolean_false_pair_is_reported_as_unusable_not_absent": 0.015561269999807337, + "tests/test_adsb_regions.py::TestMalformedPositions::test_dropped_positions_are_logged_with_a_count": 0.016808398999955898, + "tests/test_adsb_regions.py::TestMalformedPositions::test_is_position_absent_does_not_treat_a_bool_as_the_sentinel": 0.016881211999816514, + "tests/test_adsb_regions.py::TestMalformedPositions::test_the_extremes_of_the_valid_range_are_kept": 0.01684047899993857, + "tests/test_adsb_regions.py::TestRegionGeometry::test_as_area_matches_the_client_contract": 0.01664725700015879, + "tests/test_adsb_regions.py::TestRegionGeometry::test_bbox_contains_every_member_plus_its_range": 0.017749380000168458, + "tests/test_adsb_regions.py::TestRegionGeometry::test_bbox_covers_high_latitude_members_across_the_cell": 0.020137288000114495, + "tests/test_adsb_regions.py::TestRegionGeometry::test_metro_cluster_costs_one_opensky_credit": 0.014611638000133098, + "tests/test_adsb_regions.py::TestRegionGeometry::test_radius_covers_every_member_plus_its_range": 0.02785222799980147, + "tests/test_adsb_regions.py::TestRegionGeometry::test_radius_never_breaches_the_schema_cap": 0.017189392000091175, + "tests/test_adsb_regions.py::TestRegionGeometry::test_tight_cluster_is_far_tighter_than_the_ceiling": 0.01942288500003997, + "tests/test_adsb_regions.py::TestRegionsForNodes::test_a_distant_node_does_not_displace_the_others": 0.019781714999908218, + "tests/test_adsb_regions.py::TestRegionsForNodes::test_cap_boundary_is_not_truncated": 0.017071983000278124, + "tests/test_adsb_regions.py::TestRegionsForNodes::test_cap_is_enforced_and_logged": 0.018192206000321676, + "tests/test_adsb_regions.py::TestRegionsForNodes::test_no_nodes_gives_no_regions": 0.017772353000054864, + "tests/test_adsb_regions.py::TestRegionsForNodes::test_only_the_exact_origin_pair_reads_as_absent": 0.01950844400016649, + "tests/test_adsb_regions.py::TestRegionsForNodes::test_ordering_is_deterministic": 0.016211213000133284, + "tests/test_adsb_regions.py::TestRegionsForNodes::test_request_count_does_not_grow_with_node_count": 0.01678235600024891, + "tests/test_adsb_regions.py::TestRegionsForNodes::test_the_absence_test_is_one_predicate_the_whole_backend_shares": 0.016339067999751933, + "tests/test_adsb_regions.py::TestRegionsForNodes::test_three_metros_give_three_regions": 0.01849451499992938, + "tests/test_adsb_regions.py::TestRegionsForNodes::test_unpositioned_nodes_are_dropped": 0.014957693999804178, + "tests/test_adsb_seed_backend.py::TestAdsbForSeeding::test_entry_conversion": 0.01515645500012397, + "tests/test_adsb_seed_backend.py::TestAdsbForSeeding::test_keys_stay_lowercase": 0.015518584000119517, + "tests/test_adsb_seed_backend.py::TestAdsbForSeeding::test_on_ground_sentinel_strings_coerce_to_zero": 0.014754529000128969, + "tests/test_adsb_seed_backend.py::TestAdsbForSeeding::test_skips_invalid_latlon": 0.015223403999925722, + "tests/test_adsb_seed_backend.py::TestAdsbSeedStatusPayload::test_association_status_carries_the_adsb_seed_block": 0.14279831899989404, + "tests/test_adsb_seed_backend.py::TestConfirmedTrackViewsAdsbHex::test_untagged_track_carries_none": 0.017487674000221887, + "tests/test_adsb_seed_backend.py::TestConfirmedTrackViewsAdsbHex::test_view_carries_the_adsb_hex_key": 0.019222326000090106, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_frame_processor_writer[ground-kin2]": 0.026362195000046995, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_frame_processor_writer[moving-kin0]": 0.021372161000044798, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_frame_processor_writer[nokin-kin1]": 0.02265223699987473, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_record_without_derived_fields_falls_back_on_read[ground-kin2]": 0.019047060000048077, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_record_without_derived_fields_falls_back_on_read[moving-kin0]": 0.01729781200015168, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_record_without_derived_fields_falls_back_on_read[nokin-kin1]": 0.017572441000083927, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_sim_ingest_writer[ground-kin2]": 0.016756460000124207, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_sim_ingest_writer[moving-kin0]": 0.018674756000109483, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_sim_ingest_writer[nokin-kin1]": 0.019379019999860247, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_tcp_handler_writer[ground-kin2]": 0.0164193929999783, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_tcp_handler_writer[moving-kin0]": 0.016632820000040738, + "tests/test_adsb_seed_backend.py::TestDerivedFieldsAtWriteTime::test_tcp_handler_writer[nokin-kin1]": 0.022573274000023957, + "tests/test_adsb_seed_backend.py::TestPredictiveAttach::test_cross_world_state_is_not_attached": 0.035201254999947196, + "tests/test_adsb_seed_backend.py::TestPredictiveAttach::test_existing_adsb_list_never_overwritten": 0.02472848300021724, + "tests/test_adsb_seed_backend.py::TestPredictiveAttach::test_frame_without_adsb_gains_index_aligned_list_in_active_mode": 0.02767085000004954, + "tests/test_adsb_seed_backend.py::TestPredictiveAttach::test_off_and_shadow_mode_leave_the_frame_untouched": 0.026005641999972795, + "tests/test_adsb_seed_backend.py::TestProcessOneFrameSolverQueue::test_adsb_inputs_reach_the_solver_queue": 0.03355737900005806, + "tests/test_adsb_seed_backend.py::TestProcessOneFrameSolverQueue::test_claiming_failure_cannot_cost_the_frame": 0.027495602000044528, + "tests/test_adsb_seed_backend.py::TestProcessOneFrameSolverQueue::test_empty_adsb_inputs_add_nothing": 0.03186872699984633, + "tests/test_adsb_seed_backend.py::TestSeedWorldWiring::test_a_sim_and_a_real_node_over_one_footprint_get_no_overlap_zone": 0.02211383899998509, + "tests/test_adsb_seed_backend.py::TestSeedWorldWiring::test_associator_gets_the_state_world_resolver": 0.02110807000008208, + "tests/test_adsb_seed_backend.py::TestSeedWorldWiring::test_two_synthetic_nodes_over_one_footprint_still_pair": 0.03041157400002703, + "tests/test_adsb_seed_backend.py::TestViewAdsbHex::test_all_tagged_history_returns_the_hex": 0.022049523000077897, + "tests/test_adsb_seed_backend.py::TestViewAdsbHex::test_hist_without_adsb_keys_returns_none": 0.014808643000151278, + "tests/test_adsb_seed_backend.py::TestViewAdsbHex::test_last_n_untagged_is_the_swap_signature": 0.01810812599978817, + "tests/test_adsb_seed_backend.py::TestViewAdsbHex::test_track_adsb_hex_matching_is_fine": 0.016582696999876134, + "tests/test_adsb_seed_backend.py::TestViewAdsbHex::test_track_adsb_hex_mismatch_forces_none": 0.01441117900003519, + "tests/test_adsb_seed_backend.py::TestViewAdsbHex::test_two_distinct_hexes_in_window_is_ambiguous": 0.01853270100014015, + "tests/test_adsb_seed_backend.py::TestWorldStamp::test_frame_processor_writer_stamps_by_node_class": 0.02189746300018669, + "tests/test_adsb_seed_backend.py::TestWorldStamp::test_tcp_writer_honours_the_handshake_verdict": 0.013127133000125468, + "tests/test_adsb_seed_backend.py::TestWorldStamp::test_tcp_writer_stamps_real_for_a_hardware_node": 0.012916186999973434, + "tests/test_adsb_seed_backend.py::TestWorldStamp::test_tcp_writer_stamps_sim_for_a_synthetic_node": 0.016105251999988468, + "tests/test_adsb_single_node.py::TestArc::test_a_disconnected_node_leaves_the_entry_without_an_arc": 0.013518529000066337, + "tests/test_adsb_single_node.py::TestArc::test_below_the_differential_floor_the_entry_survives_without_an_arc": 0.013590702000101373, + "tests/test_adsb_single_node.py::TestBindingDefault::test_an_unrecognised_value_degrades_to_shadow": 0.7190457200001674, + "tests/test_adsb_single_node.py::TestBindingDefault::test_unset_means_binding": 0.6740198300001339, + "tests/test_adsb_single_node.py::TestDownstream::test_dedup_prefers_the_adsb_fix_over_a_solver_estimate": 0.016166537999879438, + "tests/test_adsb_single_node.py::TestDownstream::test_entry_survives_the_per_node_ws_filter": 0.013375831000075777, + "tests/test_adsb_single_node.py::TestDownstream::test_multinode_still_outranks_it": 0.014755637000007482, + "tests/test_adsb_single_node.py::TestDownstream::test_the_builder_publishes_the_entry_and_leaves_detection_arcs_alone": 0.015089966000005006, + "tests/test_adsb_single_node.py::TestQualification::test_a_stale_second_node_does_not_disqualify": 0.01960670499988737, + "tests/test_adsb_single_node.py::TestQualification::test_flight_is_null_without_an_adsb_cache_entry": 0.015043427000136944, + "tests/test_adsb_single_node.py::TestQualification::test_newest_fresh_claim_supplies_the_measurement": 0.01677478700003121, + "tests/test_adsb_single_node.py::TestQualification::test_one_fresh_claim_emits_the_contract_entry": 0.022912979999773597, + "tests/test_adsb_single_node.py::TestQualification::test_repeat_claims_from_one_node_still_qualify": 0.016704168999694957, + "tests/test_adsb_single_node.py::TestQualification::test_stale_claims_emit_nothing": 0.01933335600006103, + "tests/test_adsb_single_node.py::TestQualification::test_two_distinct_nodes_emit_nothing": 0.014769869000019753, + "tests/test_adsb_truth_regions.py::TestAdsbLolFetch::test_aircraft_are_converted_and_stamped_adsb_lol": 0.022481700000071214, + "tests/test_adsb_truth_regions.py::TestAdsbLolFetch::test_areas_are_named_for_their_region_so_the_client_cache_keys_line_up": 0.018635919999724138, + "tests/test_adsb_truth_regions.py::TestAdsbLolFetch::test_every_region_failing_covers_nothing": 0.030838882999887574, + "tests/test_adsb_truth_regions.py::TestAdsbLolFetch::test_only_the_regions_that_answered_are_reported_covered": 0.10465674699980809, + "tests/test_adsb_truth_regions.py::TestNodesWithoutUsablePositions::test_a_fleet_with_no_positions_at_all_says_so": 0.05716020899990326, + "tests/test_adsb_truth_regions.py::TestNodesWithoutUsablePositions::test_a_node_missing_one_coordinate_is_not_placed_on_the_prime_meridian": 0.0699917000001733, + "tests/test_adsb_truth_regions.py::TestNodesWithoutUsablePositions::test_a_null_coordinate_pair_reads_as_unpositioned_not_as_rubbish": 0.08111588399992797, + "tests/test_adsb_truth_regions.py::TestNodesWithoutUsablePositions::test_one_unusable_position_does_not_starve_the_rest": 0.06387992800000575, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_a_429_costs_only_its_own_region_and_logs_when_credits_return": 0.02107912400015266, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_a_non_200_leaves_that_region_uncovered_and_says_so": 0.022856933999946705, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_a_region_nothing_was_asked_for_is_not_reported_covered": 0.0206594789999599, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_a_state_vector_too_short_to_index_costs_only_itself[None]": 0.016145834000099057, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_a_state_vector_too_short_to_index_costs_only_itself[abc123]": 0.01909578100003273, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_a_state_vector_too_short_to_index_costs_only_itself[short0]": 0.017232362000186185, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_a_state_vector_too_short_to_index_costs_only_itself[short1]": 0.02254376299993055, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_a_states_field_that_is_not_a_list_leaves_the_box_to_the_fallback[payload0]": 0.017019826999785437, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_a_states_field_that_is_not_a_list_leaves_the_box_to_the_fallback[payload1]": 0.017326340999943568, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_a_states_field_that_is_not_a_list_leaves_the_box_to_the_fallback[payload2]": 0.019998671000166723, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_a_transport_error_does_not_abandon_the_regions_behind_it": 0.023990275000187467, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_an_empty_sky_counts_as_covered[None]": 0.015009620999990148, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_an_empty_sky_counts_as_covered[states0]": 0.015324585000143998, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_an_unreadable_200_leaves_the_region_to_the_fallback[None-raises0]": 0.02022376699983397, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_an_unreadable_200_leaves_the_region_to_the_fallback[payload1-None]": 0.01988146300027438, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_every_region_failing_at_the_transport_does_discard_the_pool": 0.024406864000184214, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_one_malformed_state_vector_costs_only_itself": 0.019969799999898896, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_states_are_parsed_and_stamped_opensky": 0.01662901999998212, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_the_bounding_box_of_each_region_is_what_is_queried": 0.01815291699995214, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_the_burst_is_capped_rather_than_tracking_the_region_count": 0.041156667999985075, + "tests/test_adsb_truth_regions.py::TestOpenSkyFetch::test_the_regions_are_asked_concurrently": 0.026336475999869435, + "tests/test_adsb_truth_regions.py::TestProviderHandover::test_a_malformed_opensky_200_still_reaches_the_fallback[None-raises0]": 0.042268918999752714, + "tests/test_adsb_truth_regions.py::TestProviderHandover::test_a_malformed_opensky_200_still_reaches_the_fallback[payload1-None]": 0.07535995800003548, + "tests/test_adsb_truth_regions.py::TestProviderHandover::test_an_aircraft_both_providers_saw_keeps_the_entry_that_names_its_supplier": 0.0578075240000544, + "tests/test_adsb_truth_regions.py::TestProviderHandover::test_both_providers_key_the_cache_in_the_same_case": 0.06272613599958277, + "tests/test_adsb_truth_regions.py::TestProviderHandover::test_only_the_uncovered_regions_are_handed_to_the_fallback": 0.055356392000021515, + "tests/test_adsb_truth_regions.py::TestProviderHandover::test_the_summary_names_only_the_regions_the_fallback_actually_covered": 0.059839249000106065, + "tests/test_adsb_truth_regions.py::TestRangeBeyondTheQueryMargin::test_a_max_range_that_is_not_a_number_is_not_measured_against_it": 0.08196319700005006, + "tests/test_adsb_truth_regions.py::TestRangeBeyondTheQueryMargin::test_a_range_past_the_margin_names_the_range_and_the_margin": 0.07350966900003186, + "tests/test_adsb_truth_regions.py::TestRangeBeyondTheQueryMargin::test_the_margin_itself_is_not_reported_as_a_shortfall": 0.06921448700018118, + "tests/test_adsb_truth_regions.py::TestRateLimitBackoff::test_a_429_that_left_a_region_uncovered_does_arm_it": 0.030793369999855713, + "tests/test_adsb_truth_regions.py::TestRateLimitBackoff::test_a_429_the_fallback_covered_costs_no_backoff": 0.02437911099991652, + "tests/test_adsb_truth_regions.py::TestRateLimitBackoff::test_another_region_s_gap_does_not_charge_the_credit_budget": 0.0193366179998975, + "tests/test_adsb_truth_regions.py::TestRateLimitBackoff::test_the_fallback_failing_outright_leaves_the_429_charged": 0.02085539999984576, + "tests/test_adsb_truth_regions.py::TestRegionFetch::test_a_total_failure_keeps_the_last_good_cache": 0.0235934659999657, + "tests/test_adsb_truth_regions.py::TestRegionFetch::test_an_empty_successful_fetch_clears_rather_than_hiding": 0.021892442000080337, + "tests/test_adsb_truth_regions.py::TestRegionFetch::test_every_metro_is_represented_in_the_merged_cache": 0.030206306000081895, + "tests/test_adsb_truth_regions.py::TestRegionFetch::test_the_fallback_throwing_outright_still_keeps_opensky_s_regions": 0.021724881999944046, + "tests/test_adsb_truth_regions.py::TestSplitRegionFetch::test_a_half_covered_region_goes_to_the_fallback": 0.020312992000071972, + "tests/test_adsb_truth_regions.py::TestSplitRegionFetch::test_a_truthfully_empty_box_replaces_the_cache_though_everything_else_failed": 0.01739611900006821, + "tests/test_adsb_truth_regions.py::TestSplitRegionFetch::test_both_boxes_are_asked_for_and_merge_into_one_region": 0.028588194000121803, + "tests/test_adsb_truth_regions.py::TestSplitRegionFetch::test_every_box_failing_at_the_transport_discards_the_pool": 0.019837258000052316, + "tests/test_adsb_truth_regions.py::TestSplitRegionFetch::test_one_box_failing_at_the_transport_keeps_the_pool": 0.021639486000140096, + "tests/test_adsb_truth_regions.py::TestSplitRegionFetch::test_one_box_refused_credit_leaves_the_whole_region_uncovered": 0.021530792000021393, + "tests/test_adsb_truth_regions.py::TestSplitRegionFetch::test_the_burst_stays_capped_when_regions_split": 0.04696976599984737, + "tests/test_adsb_truth_regions.py::TestSplitRegionFetch::test_the_half_that_answered_survives_the_fallback_failing_too": 0.016541126000220174, + "tests/test_aircraft_broadcast.py::TestBroadcastAircraft::test_failing_client_is_removed": 0.08374175500011916, + "tests/test_aircraft_broadcast.py::TestBroadcastAircraft::test_failing_owner_client_is_removed": 0.055795367999962764, + "tests/test_aircraft_broadcast.py::TestBroadcastAircraft::test_ground_truth_slimmed_to_last_position": 0.1136592030002248, + "tests/test_aircraft_broadcast.py::TestBroadcastAircraft::test_owner_client_gets_only_their_nodes": 0.0867537850001554, + "tests/test_aircraft_broadcast.py::TestBroadcastAircraft::test_updates_state_and_sends_to_clients": 0.08351325600006021, + "tests/test_aircraft_broadcast.py::TestFilterPayloadToNodes::test_empty_node_set_yields_nothing": 0.06733110699997269, + "tests/test_aircraft_broadcast.py::TestFilterPayloadToNodes::test_filters_to_given_nodes": 0.06706093400021018, + "tests/test_aircraft_broadcast.py::TestFilterPayloadToNodes::test_multinode_kept_when_contributor_owned": 0.06307755599959819, + "tests/test_aircraft_broadcast.py::TestRealOnlyDict::test_filters_to_real_nodes": 0.06563340199977574, + "tests/test_aircraft_broadcast.py::TestRealOnlyDict::test_multinode_aircraft_kept_when_any_contributor_real": 0.05584481699997923, + "tests/test_aircraft_flush.py::TestBroadcastAircraft::test_updates_state_bytes": 0.07289862599986918, + "tests/test_aircraft_flush.py::TestBroadcastFanOut::test_a_raising_client_is_dropped_without_counting_a_timeout": 0.07102110300002096, + "tests/test_aircraft_flush.py::TestBroadcastFanOut::test_live_clients_are_fanned_out_too": 0.18736524700011614, + "tests/test_aircraft_flush.py::TestBroadcastFanOut::test_many_slow_clients_cost_one_timeout_not_one_each": 0.17890551699974822, + "tests/test_aircraft_flush.py::TestBroadcastFanOut::test_owner_clients_are_fanned_out_with_their_filtered_payloads": 0.1850851760000296, + "tests/test_aircraft_flush.py::TestBroadcastFanOut::test_slow_client_is_dropped_and_the_others_are_served": 0.18367285799990896, + "tests/test_aircraft_flush.py::TestRealOnlyDict::test_empty_aircraft": 0.06497730700016291, + "tests/test_aircraft_flush.py::TestRealOnlyDict::test_filters_synthetic_nodes": 0.06383274399991024, + "tests/test_aircraft_flush.py::TestRealOnlyDict::test_multinode_includes_if_any_real": 0.0627167019999888, + "tests/test_aircraft_flush_refs.py::TestFlushOnce::test_an_unregistered_node_reaches_no_public_feed": 0.1008364790000087, + "tests/test_aircraft_flush_refs.py::TestFlushOnce::test_the_frame_kept_on_state_is_neither_redacted_nor_substituted": 0.07506988900013312, + "tests/test_aircraft_flush_refs.py::TestFlushOnce::test_the_public_feed_is_published_under_the_ref": 0.09164500300016698, + "tests/test_aircraft_flush_refs.py::TestFlushOnce::test_the_real_only_feed_still_finds_its_nodes_after_substitution": 0.08034984699975212, + "tests/test_aircraft_flush_refs.py::TestOwnerFeed::test_substituting_first_would_empty_it": 0.06152007100013179, + "tests/test_aircraft_flush_refs.py::TestOwnerFeed::test_the_owner_snapshot_is_filtered_by_id_then_published_as_a_ref": 0.08586103100014952, + "tests/test_alerting.py::TestCallTimeCapture::test_auth_captured_once_not_reread_when_thread_runs": 0.06974463699975786, + "tests/test_alerting.py::TestCallTimeCapture::test_environment_captured_once_not_reread_when_thread_runs": 0.05776824400004443, + "tests/test_alerting.py::TestCallTimeCapture::test_format_captured_once_not_reread_when_thread_runs": 0.053102740999747766, + "tests/test_alerting.py::TestCallTimeCapture::test_host_captured_once_not_reread_when_thread_runs": 0.05556638299981387, + "tests/test_alerting.py::TestCallTimeCapture::test_url_captured_once_not_reread_when_thread_runs": 0.05020035799998368, + "tests/test_alerting.py::TestClickupChatFormat::test_content_contains_alert_type_message_and_each_meta_pair": 0.08320033499990132, + "tests/test_alerting.py::TestClickupChatFormat::test_content_includes_environment_and_host_lines": 0.043204156999763654, + "tests/test_alerting.py::TestClickupChatFormat::test_empty_meta_renders_cleanly": 0.059379695999950854, + "tests/test_alerting.py::TestClickupChatFormat::test_full_call_pins_url_headers_and_body_together": 0.0790855959999135, + "tests/test_alerting.py::TestConcurrentDeliveryIsRefused::test_a_different_alert_type_is_not_blocked": 0.09957231100020181, + "tests/test_alerting.py::TestConcurrentDeliveryIsRefused::test_a_send_is_refused_while_the_same_type_is_still_in_flight": 0.08284833599986996, + "tests/test_alerting.py::TestConcurrentDeliveryIsRefused::test_the_in_flight_marker_is_cleared_after_a_failed_delivery": 0.07549882500006788, + "tests/test_alerting.py::TestConcurrentDeliveryIsRefused::test_the_in_flight_marker_is_cleared_once_delivery_ends": 0.07761339600006067, + "tests/test_alerting.py::TestCooldownAfterFailedDelivery::test_exhausted_retriable_failure_reopens_the_slot_early": 0.0833349619999808, + "tests/test_alerting.py::TestCooldownAfterFailedDelivery::test_failed_release_does_not_clobber_slot_claimed_by_later_send": 0.09776466399989658, + "tests/test_alerting.py::TestCooldownAfterFailedDelivery::test_terminal_4xx_keeps_its_cooldown_slot": 0.07066269999972974, + "tests/test_alerting.py::TestCooldownAfterFailedDelivery::test_the_reopen_deadline_outranks_a_shorter_cooldown": 0.07844043899990538, + "tests/test_alerting.py::TestCooldownAfterFailedDelivery::test_the_reopen_deadline_survives_a_cooldown_change": 0.06973718599988388, + "tests/test_alerting.py::TestDeliveryRetry::test_400_is_not_retried": 0.07739267799979643, + "tests/test_alerting.py::TestDeliveryRetry::test_401_is_not_retried": 0.07357395900021402, + "tests/test_alerting.py::TestDeliveryRetry::test_500_is_retried_and_the_alert_arrives": 0.07339971299984427, + "tests/test_alerting.py::TestDeliveryRetry::test_backoff_delays_fall_inside_their_own_attempt_window": 0.08672011600015139, + "tests/test_alerting.py::TestDeliveryRetry::test_backoff_is_jittered_rather_than_a_fixed_schedule": 0.11755375799998546, + "tests/test_alerting.py::TestDeliveryRetry::test_backoff_is_slept_between_attempts_but_not_after_the_last": 0.09808421899992936, + "tests/test_alerting.py::TestDeliveryRetry::test_connection_error_is_retried_and_the_alert_arrives": 0.09261347200003911, + "tests/test_alerting.py::TestDeliveryRetry::test_cooldown_is_held_across_retries_and_reopened_once_at_the_end": 0.108947267999838, + "tests/test_alerting.py::TestDeliveryRetry::test_delivery_that_eventually_succeeds_keeps_its_cooldown_slot": 0.06982495200008998, + "tests/test_alerting.py::TestDeliveryRetry::test_delivery_that_succeeds_on_retry_is_not_logged_at_error": 0.06674997899995105, + "tests/test_alerting.py::TestDeliveryRetry::test_exhausted_delivery_is_logged_at_error": 0.08718415100020138, + "tests/test_alerting.py::TestDeliveryRetry::test_non_retriable_failure_is_logged_at_error": 0.0849295340003664, + "tests/test_alerting.py::TestDeliveryRetry::test_read_timeout_is_retried": 0.09104760100012754, + "tests/test_alerting.py::TestDeliveryRetry::test_retrying_is_bounded": 0.09671287500009385, + "tests/test_alerting.py::TestDeliveryRetry::test_successful_first_attempt_does_not_sleep": 0.08584229300004154, + "tests/test_alerting.py::TestDeliveryRetry::test_unexpected_exception_is_not_retried": 0.07633681899983458, + "tests/test_alerting.py::TestDeliveryRetryDetails::test_a_terminal_4xx_mid_sequence_keeps_the_cooldown_slot": 0.06356024900014745, + "tests/test_alerting.py::TestDeliveryRetryDetails::test_a_terminal_4xx_mid_sequence_stops_the_retries": 0.09412256400014485, + "tests/test_alerting.py::TestDeliveryRetryDetails::test_exhausted_5xx_log_keeps_the_greppable_wording": 0.08781889699980638, + "tests/test_alerting.py::TestDeliveryRetryDetails::test_one_client_serves_the_whole_sequence": 0.07771353699990868, + "tests/test_alerting.py::TestDeliveryRetryDetails::test_terminal_4xx_log_keeps_the_greppable_wording": 0.07895927300000949, + "tests/test_alerting.py::TestDeliveryRetryDetails::test_unreachable_sink_logs_the_traceback_once_at_the_end": 0.12296800400008578, + "tests/test_alerting.py::TestEnvironmentAndHost::test_alert_environment_empty_yields_unknown": 0.09460242500017557, + "tests/test_alerting.py::TestEnvironmentAndHost::test_alert_environment_stripped": 0.07245563399987986, + "tests/test_alerting.py::TestEnvironmentAndHost::test_alert_environment_unset_yields_unknown": 0.049764454000069236, + "tests/test_alerting.py::TestEnvironmentAndHost::test_gethostname_empty_string_yields_unknown": 0.07201241899997513, + "tests/test_alerting.py::TestEnvironmentAndHost::test_gethostname_raising_falls_back_to_unknown_and_does_not_propagate": 0.05760671800021555, + "tests/test_alerting.py::TestEnvironmentAndHost::test_raw_body_reflects_call_time_environment_and_host": 0.05698279999978695, + "tests/test_alerting.py::TestLogDestination::test_logs_disabled_when_url_unset": 0.06901955699981954, + "tests/test_alerting.py::TestLogDestination::test_logs_scheme_and_host_without_leaking_token_or_full_url": 0.07098589399993216, + "tests/test_alerting.py::TestLogDestination::test_logs_unparseable_url_without_a_bare_scheme_and_host": 0.06274437899992336, + "tests/test_alerting.py::TestLogDestination::test_unbalanced_ipv6_bracket_does_not_raise": 0.06123991100002968, + "tests/test_alerting.py::TestLogDestinationClickupAuthWarning::test_no_warning_when_clickup_chat_format_and_auth_set": 0.059511759999850256, + "tests/test_alerting.py::TestLogDestinationClickupAuthWarning::test_no_warning_when_raw_format_and_auth_empty": 0.07149390999984462, + "tests/test_alerting.py::TestLogDestinationClickupAuthWarning::test_warns_when_clickup_chat_format_and_auth_empty": 0.10042400199995427, + "tests/test_alerting.py::TestLogDestinationClickupAuthWarning::test_warns_when_url_unparseable_and_clickup_chat_auth_empty": 0.08130685300011464, + "tests/test_alerting.py::TestRedirectsAreNotDelivered::test_a_204_is_still_a_successful_delivery": 0.06066862499983472, + "tests/test_alerting.py::TestRedirectsAreNotDelivered::test_a_redirect_is_not_counted_as_delivered": 0.06184438499985845, + "tests/test_alerting.py::TestRedirectsAreNotDelivered::test_a_redirect_is_not_retried": 0.065443841999695, + "tests/test_alerting.py::TestRedirectsAreNotDelivered::test_a_redirect_names_the_url_rather_than_the_token": 0.06704107400014436, + "tests/test_alerting.py::TestRetryCostsTheSinkNoMoreThanBefore::test_a_lowercased_retry_after_is_honoured": 0.08181219500011139, + "tests/test_alerting.py::TestRetryCostsTheSinkNoMoreThanBefore::test_retry_after_is_honoured_on_a_5xx_too": 0.06714699000008295, + "tests/test_alerting.py::TestRetryCostsTheSinkNoMoreThanBefore::test_the_reopen_window_covers_a_full_sequence_of_attempts": 0.08402112600015244, + "tests/test_alerting.py::TestSendAlert::test_cooldown_blocks_duplicate_alert": 0.06980587299995022, + "tests/test_alerting.py::TestSendAlert::test_different_alert_types_independent_cooldown": 0.05836420300011014, + "tests/test_alerting.py::TestSendAlert::test_disabled_returns_without_calling_httpx": 0.04984854700001051, + "tests/test_alerting.py::TestSendAlert::test_empty_cooldown_env_var_treated_as_unset": 0.0383354469997812, + "tests/test_alerting.py::TestSendAlert::test_is_enabled_false_when_url_unset": 0.03665077400000882, + "tests/test_alerting.py::TestSendAlert::test_is_enabled_true_when_url_set": 0.03433208799970089, + "tests/test_alerting.py::TestSendAlert::test_malformed_cooldown_does_not_raise_and_does_not_silence_alert": 0.04596646999993936, + "tests/test_alerting.py::TestSendAlert::test_malformed_cooldown_falls_back_to_exactly_300": 0.029048081999917486, + "tests/test_alerting.py::TestSendAlert::test_malformed_cooldown_logs_warning_with_bad_value": 0.02814209899997877, + "tests/test_alerting.py::TestSendAlert::test_raw_format_default_matches_current_payload_exactly": 0.026388337999605938, + "tests/test_alerting.py::TestSendAlert::test_unrecognised_format_warns_and_falls_back_to_raw": 0.06347478299971954, + "tests/test_alerting.py::TestSendAlert::test_webhook_4xx_response_does_not_raise": 0.0375439639999513, + "tests/test_alerting.py::TestSendAlert::test_webhook_error_does_not_propagate": 0.07109176300014042, + "tests/test_alerting.py::TestSendAlert::test_whitespace_only_cooldown_treated_as_unset_and_does_not_warn": 0.06241078500011099, + "tests/test_alerting.py::TestSendAlert::test_zero_cooldown_disables_suppression": 0.09574193800017383, + "tests/test_alerting.py::TestSettingsWhitespaceTolerance::test_cooldown_strips_surrounding_whitespace": 0.088516387999789, + "tests/test_alerting.py::TestSettingsWhitespaceTolerance::test_webhook_auth_strips_surrounding_whitespace": 0.0753814979998424, + "tests/test_alerting.py::TestSettingsWhitespaceTolerance::test_webhook_format_strips_whitespace_and_uses_clickup_body": 0.07518648900008884, + "tests/test_alerting.py::TestSettingsWhitespaceTolerance::test_webhook_url_strips_surrounding_whitespace": 0.13016373100003875, + "tests/test_alerting.py::TestTransient4xxAreRetried::test_403_is_still_terminal": 0.07979910099993504, + "tests/test_alerting.py::TestTransient4xxAreRetried::test_408_is_retried": 0.09766542499983188, + "tests/test_alerting.py::TestTransient4xxAreRetried::test_429_is_retried_and_the_alert_arrives": 0.08474731999990581, + "tests/test_alerting.py::TestTransient4xxAreRetried::test_malformed_retry_after_falls_back_to_the_backoff": 0.08028426300029423, + "tests/test_alerting.py::TestTransient4xxAreRetried::test_retry_after_is_capped": 0.07123625499980335, + "tests/test_alerting.py::TestTransient4xxAreRetried::test_retry_after_is_honoured_over_the_backoff": 0.07326393600010306, + "tests/test_alerting.py::TestTransient4xxAreRetried::test_retry_after_never_shortens_the_backoff": 0.07420673199999328, + "tests/test_analysis_weather.py::test_fetch_historical_filters_to_requested_window": 0.05734046899988243, + "tests/test_analysis_weather.py::test_fetch_historical_handles_naive_datetimes": 0.06287657899997612, + "tests/test_analysis_weather.py::test_fetch_historical_returns_empty_on_http_error": 0.06246423099992171, + "tests/test_analysis_weather.py::test_fetch_historical_returns_empty_on_payload_missing_hourly": 0.06533301700005723, + "tests/test_analysis_weather.py::test_fetch_historical_returns_empty_when_end_before_start": 0.06249143699983506, + "tests/test_analysis_weather.py::test_fetch_historical_returns_one_row_per_hour": 0.06471319099978246, + "tests/test_analytics_refresh.py::TestAccuracyStats::test_all_zero_errors": 0.06257300300012503, + "tests/test_analytics_refresh.py::TestAccuracyStats::test_empty_samples": 0.06905990999985079, + "tests/test_analytics_refresh.py::TestAccuracyStats::test_multiple_sources_split": 0.06177160700008244, + "tests/test_analytics_refresh.py::TestAccuracyStats::test_percentiles_correct": 0.07357228000023497, + "tests/test_analytics_refresh.py::TestAccuracyStats::test_single_sample": 0.06372667899995577, + "tests/test_analytics_refresh.py::TestConnectedNodesSnapshot::test_snapshot_with_lock": 0.060771342000180084, + "tests/test_analytics_refresh.py::TestMissedDetectionsCountsClaimsAsDetections::test_a_freshly_claimed_aircraft_is_detected_not_missed": 0.0566764319999038, + "tests/test_analytics_refresh.py::TestMissedDetectionsCountsClaimsAsDetections::test_a_stale_claim_still_reads_as_missed": 0.07058702600033939, + "tests/test_analytics_refresh.py::TestMissedDetectionsHonoursConfiguredBeamWidth::test_default_width_follows_the_shared_constant_not_a_local_copy": 0.05633942400004344, + "tests/test_analytics_refresh.py::TestMissedDetectionsHonoursConfiguredBeamWidth::test_wide_beam_node_counts_an_aircraft_a_narrow_beam_would_miss": 0.06817102199988767, + "tests/test_analytics_refresh.py::TestNodeRefInPublicPayloads::test_both_analytics_variants_carry_it": 0.07633142699978634, + "tests/test_analytics_refresh.py::TestNodeRefInPublicPayloads::test_the_handle_is_the_key_it_is_published_under": 0.09788433399990026, + "tests/test_analytics_refresh.py::TestNodeRefInPublicPayloads::test_the_nodes_payload_carries_it": 0.07385181200015722, + "tests/test_analytics_refresh.py::TestNumpySerializationTrap::test_nested_numpy_in_analytics_shape": 0.0630403929997101, + "tests/test_analytics_refresh.py::TestNumpySerializationTrap::test_orjson_accepts_numpy_with_flag": 0.06663497299996379, + "tests/test_analytics_refresh.py::TestNumpySerializationTrap::test_orjson_rejects_numpy_float64_by_default": 0.07573437299993202, + "tests/test_analytics_refresh.py::TestReputationEvaluations::test_blocked_node_no_rewards": 0.07413570399967284, + "tests/test_analytics_refresh.py::TestReputationEvaluations::test_high_detection_rate_penalty": 0.06648418400027367, + "tests/test_analytics_refresh.py::TestReputationEvaluations::test_high_trust_rewards_node": 0.06302858100002595, + "tests/test_analytics_refresh.py::TestReputationEvaluations::test_low_trust_blocks_node": 0.058935097999892605, + "tests/test_analytics_refresh.py::TestReputationEvaluations::test_neighbour_consistency_penalty": 0.06724626599998373, + "tests/test_analytics_refresh.py::TestReputationEvaluations::test_penalty_cap": 0.0777321519999532, + "tests/test_analytics_refresh.py::TestReputationEvaluations::test_reputation_never_above_one": 0.057472549999829425, + "tests/test_analytics_refresh.py::TestReputationEvaluations::test_reputation_never_negative": 0.06086945799984278, + "tests/test_analytics_refresh.py::TestReputationEvaluations::test_stale_heartbeat_penalty": 0.10346259800007829, + "tests/test_analytics_refresh.py::TestReputationEvaluations::test_summary_shape": 0.060227882999924987, + "tests/test_analytics_refresh.py::TestReputationEvaluations::test_unblock_resets_reputation_to_0_3": 0.07309835999990355, + "tests/test_analytics_refresh_helpers.py::TestAircraftInBeam::test_aircraft_at_exactly_max_range": 0.10290668899983757, + "tests/test_analytics_refresh_helpers.py::TestAircraftInBeam::test_aircraft_beam_wraps_at_360_degrees": 0.07539805600004001, + "tests/test_analytics_refresh_helpers.py::TestAircraftInBeam::test_aircraft_beyond_max_range": 0.07123862499997813, + "tests/test_analytics_refresh_helpers.py::TestAircraftInBeam::test_aircraft_narrow_beam_10deg": 0.07277719899980184, + "tests/test_analytics_refresh_helpers.py::TestAircraftInBeam::test_aircraft_near_boundary_inside": 0.0734450200000083, + "tests/test_analytics_refresh_helpers.py::TestAircraftInBeam::test_aircraft_near_boundary_outside": 0.08316869400005089, + "tests/test_analytics_refresh_helpers.py::TestAircraftInBeam::test_aircraft_on_boresight_but_too_far": 0.07911043699982656, + "tests/test_analytics_refresh_helpers.py::TestAircraftInBeam::test_aircraft_on_boresight_within_range": 0.0707773259998703, + "tests/test_analytics_refresh_helpers.py::TestAircraftInBeam::test_aircraft_within_range_and_beam_30deg_offset": 0.09443931200007682, + "tests/test_analytics_refresh_helpers.py::TestBearingDeg::test_bearing_east": 0.060179449000088425, + "tests/test_analytics_refresh_helpers.py::TestBearingDeg::test_bearing_north": 0.08557425400022112, + "tests/test_analytics_refresh_helpers.py::TestBearingDeg::test_bearing_northeast": 0.07212307099985082, + "tests/test_analytics_refresh_helpers.py::TestBearingDeg::test_bearing_range_east": 0.06590117399991868, + "tests/test_analytics_refresh_helpers.py::TestBearingDeg::test_bearing_range_north": 0.07242866700016748, + "tests/test_analytics_refresh_helpers.py::TestBearingDeg::test_bearing_range_south": 0.0683821979998811, + "tests/test_analytics_refresh_helpers.py::TestBearingDeg::test_bearing_range_west": 0.06503294000003734, + "tests/test_analytics_refresh_helpers.py::TestBearingDeg::test_bearing_same_point": 0.06613343799972426, + "tests/test_analytics_refresh_helpers.py::TestBearingDeg::test_bearing_same_point_nonzero": 0.06072317699999985, + "tests/test_analytics_refresh_helpers.py::TestBearingDeg::test_bearing_south": 0.062296073999959845, + "tests/test_analytics_refresh_helpers.py::TestBearingDeg::test_bearing_west": 0.06896523199998228, + "tests/test_analytics_refresh_helpers.py::TestBistaticAngleDeg::test_acute_angle_geometry": 0.0750935030000619, + "tests/test_analytics_refresh_helpers.py::TestBistaticAngleDeg::test_collinear_near_baseline_gives_large_angle": 0.08453871999995499, + "tests/test_analytics_refresh_helpers.py::TestBistaticAngleDeg::test_degenerate_aircraft_at_rx_returns_180": 0.08611680799981514, + "tests/test_analytics_refresh_helpers.py::TestBistaticAngleDeg::test_degenerate_aircraft_at_tx_returns_180": 0.07372329999998328, + "tests/test_analytics_refresh_helpers.py::TestBistaticAngleDeg::test_symmetric_geometry_approximates_90": 0.08510076400011712, + "tests/test_analytics_refresh_helpers.py::TestCoverageConstraintRefresh::test_a_changed_digest_triggers_a_rebuild": 0.08181911800033959, + "tests/test_analytics_refresh_helpers.py::TestCoverageConstraintRefresh::test_a_later_change_triggers_another_rebuild": 0.03975030499987042, + "tests/test_analytics_refresh_helpers.py::TestCoverageConstraintRefresh::test_a_node_without_a_polygon_is_skipped": 0.0409801579996838, + "tests/test_analytics_refresh_helpers.py::TestCoverageConstraintRefresh::test_an_unchanged_digest_costs_nothing": 0.047811031000037474, + "tests/test_analytics_refresh_helpers.py::TestCoverageConstraintRefresh::test_first_build_is_never_delayed_by_the_floor": 0.05250655800023196, + "tests/test_analytics_refresh_helpers.py::TestCoverageConstraintRefresh::test_recheck_floor_skips_known_nodes": 0.07287215600013042, + "tests/test_analytics_refresh_helpers.py::TestCoverageConstraintRefresh::test_sub_bucket_drift_does_not_rebuild": 0.04566994600008911, + "tests/test_analytics_refresh_helpers.py::TestCoverageRebuildBudget::test_a_cycle_rebuilds_at_most_the_budget": 0.04343704299981255, + "tests/test_analytics_refresh_helpers.py::TestCoverageRebuildBudget::test_a_deferred_node_commits_its_digest_only_when_it_rebuilds": 0.0444765769998412, + "tests/test_analytics_refresh_helpers.py::TestCoverageRebuildBudget::test_a_node_that_moves_back_before_its_turn_is_dequeued": 0.06431940400011626, + "tests/test_analytics_refresh_helpers.py::TestCoverageRebuildBudget::test_a_node_that_moves_back_forgets_its_enqueue_time": 0.08165807799991853, + "tests/test_analytics_refresh_helpers.py::TestCoverageRebuildBudget::test_a_requeued_node_does_not_lose_its_place": 0.06003984099993431, + "tests/test_analytics_refresh_helpers.py::TestCoverageRebuildBudget::test_a_retrip_keeps_the_original_enqueue_time": 0.059436000999994576, + "tests/test_analytics_refresh_helpers.py::TestCoverageRebuildBudget::test_the_backlog_gauge_reports_what_is_still_owed": 0.04717358700031582, + "tests/test_analytics_refresh_helpers.py::TestCoverageRebuildBudget::test_the_bookkeeping_never_outlives_the_queue": 0.056742798999721344, + "tests/test_analytics_refresh_helpers.py::TestCoverageRebuildBudget::test_the_excess_is_carried_and_drained_in_order": 0.046849444999907064, + "tests/test_analytics_refresh_helpers.py::TestCoverageRebuildBudget::test_the_oldest_wait_gauge_reads_the_front_of_the_queue": 0.056474682999805736, + "tests/test_analytics_refresh_helpers.py::TestCoverageRebuildIsOffTheAnalyticsJob::test_refresh_analytics_and_nodes_does_not_rebuild_grids": 0.06926181599988013, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFor::test_a_coasting_track_is_excluded": 0.05961607900007948, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFor::test_a_freshly_associated_track_is_included": 0.05745324899976367, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFor::test_hex_is_lowercased": 0.05487014599998474, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFor::test_missing_n_missed_defaults_harmless_for_stub_tracks": 0.04779951299997265, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFor::test_newest_detection_tag_outranks_a_stale_track_hex": 0.06170518099997935, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFor::test_no_pipeline_returns_empty_set": 0.05221296700005951, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFor::test_track_without_adsb_hex_is_skipped": 0.06439047399976516, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFor::test_untagged_newest_detection_falls_back_to_the_track_hex": 0.06851937500005079, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFromClaims::test_a_fresh_claim_from_another_node_does_not": 0.06161275500016927, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFromClaims::test_a_fresh_claim_from_this_node_counts_as_detected": 0.05410419199984062, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFromClaims::test_a_stale_claim_does_not": 0.06538916299996345, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFromClaims::test_claims_and_tracker_tracks_are_unioned": 0.05226526699971146, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFromClaims::test_hex_is_lowercased": 0.04639934900001208, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFromClaims::test_malformed_claim_entries_are_survived": 0.06106688799991389, + "tests/test_analytics_refresh_helpers.py::TestDetectedHexesFromClaims::test_this_node_is_found_behind_another_node_s_newer_claim": 0.07944860900011008, + "tests/test_analytics_refresh_helpers.py::TestDisappearanceDetector::test_event_on_detected_then_gone_with_fresh_in_fov_adsb": 0.07198410700016211, + "tests/test_analytics_refresh_helpers.py::TestDisappearanceDetector::test_liveness_guard_blocks_a_dark_node": 0.06588041300005898, + "tests/test_analytics_refresh_helpers.py::TestDisappearanceDetector::test_memory_expires_without_an_event_when_no_fresh_fix_ever_arrives": 0.07723413500002607, + "tests/test_analytics_refresh_helpers.py::TestDisappearanceDetector::test_no_event_for_never_detected_aircraft": 0.07763706400010051, + "tests/test_analytics_refresh_helpers.py::TestDisappearanceDetector::test_no_event_when_the_adsb_fix_is_stale": 0.04787161700005527, + "tests/test_analytics_refresh_helpers.py::TestDisappearanceDetector::test_no_event_when_the_fresh_fix_is_outside_the_current_fov": 0.05870645900017735, + "tests/test_analytics_refresh_helpers.py::TestDisappearanceDetector::test_per_cycle_cap": 0.05852980699978616, + "tests/test_analytics_refresh_helpers.py::TestInBeamRespectsBistaticRule::test_absent_key_keeps_monostatic_scoring": 0.07681637799964847, + "tests/test_analytics_refresh_helpers.py::TestInBeamRespectsBistaticRule::test_beam_still_gates_under_the_bistatic_rule": 0.0890608270001394, + "tests/test_analytics_refresh_helpers.py::TestInBeamRespectsBistaticRule::test_bistatic_rule_excludes_what_monostatic_includes": 0.10267135999993116, + "tests/test_analytics_refresh_helpers.py::TestInBeamRespectsBistaticRule::test_bistatic_rule_includes_targets_inside_the_budget": 0.08228020399997149, + "tests/test_analytics_refresh_helpers.py::TestQuantizeDigestTupleFormat::test_a_meaningful_limit_move_still_changes_the_digest": 0.07196685600024466, + "tests/test_analytics_refresh_helpers.py::TestQuantizeDigestTupleFormat::test_float_digest_still_works_unquantized_by_the_tuple_branch": 0.06028789499987397, + "tests/test_analytics_refresh_helpers.py::TestQuantizeDigestTupleFormat::test_limit_is_quantized_to_the_same_2km_grain": 0.06626249200030543, + "tests/test_analytics_refresh_helpers.py::TestQuantizeDigestTupleFormat::test_none_entries_pass_through": 0.06100451299994347, + "tests/test_analytics_refresh_helpers.py::TestQuantizeDigestTupleFormat::test_state_code_compared_exactly": 0.06380242999966868, + "tests/test_analytics_routes.py::TestAccuracy::test_accuracy_returns_bytes": 0.20638359700001274, + "tests/test_analytics_routes.py::TestAccuracy::test_accuracy_with_data": 0.19594932499990136, + "tests/test_analytics_routes.py::TestAdsbReport::test_missing_fields": 0.17283876600004078, + "tests/test_analytics_routes.py::TestAdsbReport::test_valid_report": 0.2111212020001858, + "tests/test_analytics_routes.py::TestAnalytics::test_analytics_real_only": 0.1932985749999716, + "tests/test_analytics_routes.py::TestAnalytics::test_analytics_returns_bytes": 0.19535049699993579, + "tests/test_analytics_routes.py::TestAnalytics::test_node_analytics_found": 0.20637823599986405, + "tests/test_analytics_routes.py::TestAnalytics::test_node_analytics_not_found": 0.18573284199987938, + "tests/test_analytics_routes.py::TestAnomalies::test_anomalies_empty": 0.18939985200017873, + "tests/test_analytics_routes.py::TestAnomalies::test_anomalies_with_data": 0.19670300999973733, + "tests/test_analytics_routes.py::TestAssociationStatus::test_claiming_counters_reflect_the_associator": 0.21390538900027423, + "tests/test_analytics_routes.py::TestAssociationStatus::test_status_includes_claiming_block": 0.21503940299999158, + "tests/test_analytics_routes.py::TestAssociationStatus::test_status_reports_world_skipped_pairs": 0.18875315800028147, + "tests/test_analytics_routes.py::TestAssociationStatus::test_status_returns_expected_fields": 0.1908882249999806, + "tests/test_analytics_routes.py::TestAssociationStatus::test_track_pairs_block_reports_the_live_counters": 0.19639674699988063, + "tests/test_analytics_routes.py::TestOverlaps::test_overlaps_returns_bytes": 0.19976425799995923, + "tests/test_analytics_routes.py::TestPerNodeAnalyticsRoute::test_the_id_the_ref_stands_in_for_is_not_an_address_for_it": 0.18794919199990545, + "tests/test_analytics_routes.py::TestPerNodeAnalyticsRoute::test_the_route_carries_the_ref": 0.18868051500044203, + "tests/test_anonymous_admin_closed.py::test_local_may_keep_the_bypass": 0.10299550600007024, + "tests/test_anonymous_admin_closed.py::test_no_deployed_overlay_leaves_the_verifier_unconfigured[docker-compose.prod.yml]": 0.07139707900000758, + "tests/test_anonymous_admin_closed.py::test_no_deployed_overlay_leaves_the_verifier_unconfigured[docker-compose.staging.yml]": 0.07716392999986965, + "tests/test_anonymous_admin_closed.py::test_no_deployed_overlay_leaves_the_verifier_unconfigured[docker-compose.test.yml]": 0.09785499599956893, + "tests/test_anonymous_admin_closed.py::test_no_deployed_overlay_opts_into_the_anonymous_admin[docker-compose.prod.yml]": 0.07523999799991543, + "tests/test_anonymous_admin_closed.py::test_no_deployed_overlay_opts_into_the_anonymous_admin[docker-compose.staging.yml]": 0.09597241400001622, + "tests/test_anonymous_admin_closed.py::test_no_deployed_overlay_opts_into_the_anonymous_admin[docker-compose.test.yml]": 0.07497535500010599, + "tests/test_api_reference.py::test_every_component_is_reached_by_a_published_operation": 0.06384524399982183, + "tests/test_api_reference.py::test_every_published_tag_is_declared_and_grouped_once": 0.072970739000084, + "tests/test_api_reference.py::test_fastapis_own_pages_are_gone[/docs/oauth2-redirect]": 0.21524398000019573, + "tests/test_api_reference.py::test_fastapis_own_pages_are_gone[/docs]": 0.19213630200010812, + "tests/test_api_reference.py::test_fastapis_own_pages_are_gone[/redoc]": 0.19503454199980297, + "tests/test_api_reference.py::test_it_publishes_exactly_these_operations": 0.2839096640000207, + "tests/test_api_reference.py::test_no_account_admin_or_test_route_is_listed": 0.04785719500000596, + "tests/test_api_reference.py::test_the_api_vhost_serves_tower_finders_schema_from_its_own_origin": 0.12120619699976487, + "tests/test_api_reference.py::test_the_description_keeps_the_node_apis_sections_under_its_own_lead": 0.050362557999733326, + "tests/test_api_reference.py::test_the_node_operations_are_the_contracts_own": 0.06061478300011913, + "tests/test_api_reference.py::test_the_page_loads_the_pinned_scalar_under_its_own_policy": 0.17963103499982935, + "tests/test_api_reference.py::test_the_page_renders_each_document_with_scalars_uploads_off": 0.18063672299990685, + "tests/test_api_reference.py::test_the_policy_admits_the_inline_script_by_its_hash": 0.2019838780001919, + "tests/test_api_reference.py::test_the_served_document_is_the_public_one": 0.18523911200009024, + "tests/test_api_reference.py::test_the_whole_schema_is_for_an_administrator": 0.19676241799993477, + "tests/test_api_reference.py::test_without_tower_finder_the_location_is_not_rendered": 0.09523389700007101, + "tests/test_arc_builder.py::TestArcCacheIntegration::test_dropped_hex_is_evicted": 0.057657563999782724, + "tests/test_arc_builder.py::TestArcCacheIntegration::test_unchanged_fleet_second_build_zero_rebuilds": 0.06587342300008459, + "tests/test_arc_builder.py::TestArcDifferentialFloor::test_above_floor_builds": 0.061393576000000394, + "tests/test_arc_builder.py::TestArcDifferentialFloor::test_below_floor_returns_none": 0.06828203600025518, + "tests/test_arc_builder.py::TestArcDifferentialFloor::test_floor_boundary": 0.06861598000000413, + "tests/test_arc_builder.py::TestArcIgnoresAltitude::test_alt_none_zero_high_all_identical[0.0]": 0.05334110099965983, + "tests/test_arc_builder.py::TestArcIgnoresAltitude::test_alt_none_zero_high_all_identical[40000.0]": 0.05376961799970559, + "tests/test_arc_builder.py::TestArcIgnoresAltitude::test_alt_none_zero_high_all_identical[9000.0]": 0.04823868899984518, + "tests/test_arc_builder.py::TestArcIgnoresAltitude::test_alt_none_zero_high_all_identical[None]": 0.07529792000013913, + "tests/test_arc_builder.py::TestArcIgnoresAltitude::test_arc_points_satisfy_2d_differential": 0.052566671000022325, + "tests/test_arc_builder.py::TestArcIgnoresAltitude::test_track_altitude_is_ignored": 0.051375066999980845, + "tests/test_arc_builder.py::TestArcMotionVelocityFallback::test_estimator_accepts_supersonic_displacement": 0.056398858000193286, + "tests/test_arc_builder.py::TestArcMotionVelocityFallback::test_estimator_rejects_too_recent": 0.05421986900023512, + "tests/test_arc_builder.py::TestArcMotionVelocityFallback::test_estimator_returns_gs_and_track_from_two_samples": 0.06513324199977433, + "tests/test_arc_builder.py::TestArcMotionVelocityFallback::test_estimator_returns_none_without_log": 0.0545137930000692, + "tests/test_arc_builder.py::TestArcOnlyAnomalyAllowlist::test_bare_flag_without_types_dropped": 0.05439157400019212, + "tests/test_arc_builder.py::TestArcOnlyAnomalyAllowlist::test_disallowed_types_stripped_supersonic_survives": 0.0753404780002711, + "tests/test_arc_builder.py::TestArcOnlyAnomalyAllowlist::test_gt_flagged_hex_survives_clean_emit": 0.06564213300021038, + "tests/test_arc_builder.py::TestArcOnlyAnomalyAllowlist::test_only_disallowed_types_unflags": 0.05947689100003117, + "tests/test_arc_builder.py::TestArcSpansDetectionArea::test_arc_points_lie_on_measured_differential_within_limit": 0.07057627299991509, + "tests/test_arc_builder.py::TestArcSpansDetectionArea::test_delay_beyond_differential_limit_returns_none": 0.077689644999964, + "tests/test_arc_builder.py::TestArcSpansDetectionArea::test_known_position_no_longer_trims_the_arc": 0.08882380399973044, + "tests/test_arc_builder.py::TestArcSpansDetectionArea::test_monostatic_range_excludes_out_of_reach_bearings": 0.0549030079998829, + "tests/test_arc_builder.py::TestArcSpansDetectionArea::test_omni_node_spans_beyond_any_wedge": 0.0700196440000127, + "tests/test_arc_builder.py::TestArcSpansDetectionArea::test_point_budget_is_bounded": 0.06086035399994216, + "tests/test_arc_builder.py::TestArcSpansDetectionArea::test_wedge_arc_stays_inside_genuine_beam": 0.08537134900007004, + "tests/test_arc_builder.py::TestArcTrackIsTranslated::test_fuzz_off_emits_the_true_midpoint": 0.05268489199988835, + "tests/test_arc_builder.py::TestArcTrackIsTranslated::test_icon_is_displaced_by_about_the_node_offset": 0.06581945299990366, + "tests/test_arc_builder.py::TestArcTrackIsTranslated::test_icon_sits_on_the_published_arc": 0.08081535199994505, + "tests/test_arc_builder.py::TestArcTrackIsTranslated::test_internal_state_stays_in_the_true_frame": 0.06698582600006375, + "tests/test_arc_builder.py::TestArcTrackIsTranslated::test_recent_positions_are_served_from_the_public_store": 0.060872816000255625, + "tests/test_arc_builder.py::TestArcTrackIsTranslated::test_rms_gate_nulled_arc_still_moves_the_icon": 0.05306075699991197, + "tests/test_arc_builder.py::TestArcTrackIsTranslated::test_solver_position_is_translated_for_arc_tracks": 0.053904943999896204, + "tests/test_arc_builder.py::TestArcTrackIsTranslated::test_solver_position_untouched_for_an_adsb_seed_track": 0.056269757000109166, + "tests/test_arc_builder.py::TestArcTrackIsTranslated::test_the_true_store_never_receives_the_public_position": 0.0502968470000269, + "tests/test_arc_builder.py::TestBearingDeg::test_east": 0.049424574999875404, + "tests/test_arc_builder.py::TestBearingDeg::test_north": 0.06147770899974603, + "tests/test_arc_builder.py::TestBearingDeg::test_round_trip": 0.06666450300008364, + "tests/test_arc_builder.py::TestBearingDeg::test_south": 0.04837907099977201, + "tests/test_arc_builder.py::TestBearingDeg::test_west": 0.06445839599996361, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_37_points_for_normal_delay": 0.0582620819998283, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_arc_coords_are_finite": 0.06465930200010916, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_arc_within_max_range": 0.045320774000174424, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_explicit_beam_azimuth": 0.06907784000009087, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_min_two_points": 0.07429045799995038, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_monotonically_increases_with_delay": 0.07576399700019465, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_nan_beam_width_does_not_poison_the_arc_with_nan_points": 0.07756701399989652, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_narrow_beam_yields_fewer_points": 0.0817030509997494, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_non_finite_max_bistatic_defers_to_configured_max_range": 0.0713664659999722, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_returns_list_of_pairs": 0.06809598600011668, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_returns_none_for_negative_delay": 0.07324412799971469, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_returns_none_for_none_delay": 0.05589357199983169, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_returns_none_for_zero_delay": 0.05351846400003524, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_returns_none_missing_rx_coords": 0.05222421300004498, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_returns_none_missing_tx_coords": 0.06073007499981031, + "tests/test_arc_builder.py::TestBuildSingleNodeArc::test_very_large_delay_no_crash": 0.0696967969997786, + "tests/test_arc_builder.py::TestEnuToLla::test_east_offset": 0.06160352099982447, + "tests/test_arc_builder.py::TestEnuToLla::test_north_offset": 0.05719254300015564, + "tests/test_arc_builder.py::TestEnuToLla::test_zero_enu_is_rx": 0.048876320999852396, + "tests/test_arc_builder.py::TestFloorTrackStillEmits::test_above_floor_track_gets_arc": 0.05889426699991418, + "tests/test_arc_builder.py::TestFloorTrackStillEmits::test_below_floor_track_emits_without_arc": 0.06681008800001109, + "tests/test_arc_builder.py::TestGateHoldIsBounded::test_expired_hold_also_restores_arc": 0.0749766940000427, + "tests/test_arc_builder.py::TestGateHoldIsBounded::test_held_position_coasts_instead_of_freezing": 0.06437889899984839, + "tests/test_arc_builder.py::TestGateHoldIsBounded::test_hold_clears_when_gate_stops_firing": 0.05296370300015951, + "tests/test_arc_builder.py::TestGateHoldIsBounded::test_hold_engages_and_records_anchor": 0.04693215700012843, + "tests/test_arc_builder.py::TestGateHoldIsBounded::test_hold_releases_after_max_hold": 0.05206816100007927, + "tests/test_arc_builder.py::TestGateHoldIsBounded::test_seen_reports_real_age": 0.07423965999987558, + "tests/test_arc_builder.py::TestGateHoldIsBounded::test_stale_track_is_not_rendered": 0.056047938999654434, + "tests/test_arc_builder.py::TestGatePreservesArc::test_clean_rms_keeps_arc_and_new_position": 0.06497552499968151, + "tests/test_arc_builder.py::TestGatePreservesArc::test_rms_gate_suppresses_arc_and_reverts_lat_lon": 0.059193159999949785, + "tests/test_arc_builder.py::TestGatePreservesArc::test_speed_gate_keeps_arc_and_reverts_lat_lon": 0.05080007200012915, + "tests/test_arc_builder.py::TestPositionJumpAnomaly::test_normal_motion_not_flagged": 0.05652301300006002, + "tests/test_arc_builder.py::TestPositionJumpAnomaly::test_teleport_not_flagged_but_observable": 0.06307853700013766, + "tests/test_arc_builder.py::TestSingleNodeArcCache::test_altitude_change_does_not_invalidate_cache": 0.04741549600021244, + "tests/test_arc_builder.py::TestSingleNodeArcCache::test_cached_equals_fresh": 0.07478745799994613, + "tests/test_arc_builder.py::TestSingleNodeArcCache::test_delay_change_rebuilds": 0.058022983999990174, + "tests/test_arc_builder.py::TestSingleNodeArcCache::test_delay_change_still_rebuilds_regardless_of_altitude": 0.05230755999991743, + "tests/test_arc_builder.py::TestSingleNodeArcCache::test_identical_inputs_build_once": 0.0528557790000832, + "tests/test_arc_builder.py::TestSingleNodeArcCache::test_jitter_within_epsilon_hits": 0.06004093299998203, + "tests/test_arc_builder.py::TestSingleNodeArcCache::test_none_delay_caches_and_hits": 0.05709153500015418, + "tests/test_arc_builder.py::TestSingleNodeArcCache::test_position_change_hits_cache": 0.06340555499991751, + "tests/test_arc_builder.py::TestTrackEntryPaths::test_drone_target_class": 0.055493021000074805, + "tests/test_arc_builder.py::TestTrackEntryPaths::test_speed_knots_aircraft": 0.073243554000328, + "tests/test_arc_builder.py::TestTrackEntryPaths::test_track_angle_range": 0.06435192200001438, + "tests/test_arc_builder.py::TestTrackEntryPaths::test_track_has_target_class": 0.058338747000107105, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_empty_archive_dir_returns_zero_stats": 1.9149020720001317, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_empty_dirs_pruned_after_delete": 0.55363249800007, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_file_within_retention_not_deleted": 0.4566367709999213, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_fresh_file_not_uploaded": 0.3949760460000107, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_no_upload_when_r2_disabled": 0.05880584400006228, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_old_file_is_uploaded_to_r2": 0.37593190100005813, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_old_file_uploaded_then_deleted": 0.6139790659999562, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_tracks_parquet_deleted_past_retention": 0.5159032139997635, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_tracks_parquet_uploaded_under_tracks_prefix": 0.9472844679999071, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_upload_cap_respected": 6.736452207000184, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_uploaded_file_content_in_r2": 0.7312544760000037, + "tests/test_archive_lifecycle.py::TestArchiveLifecycleMoto::test_very_old_file_deleted_locally": 0.38471899599994686, + "tests/test_archive_lifecycle.py::TestIterArchiveFiles::test_non_dir_entries_at_each_level_are_skipped": 0.05609672400009913, + "tests/test_archive_lifecycle.py::TestIterArchiveFiles::test_oserror_during_iteration_does_not_crash": 0.07732454699998925, + "tests/test_archive_lifecycle.py::TestIterArchiveFiles::test_parquet_and_json_files_are_yielded": 0.07135066499995446, + "tests/test_archive_lifecycle.py::TestPruneEmptyDirs::test_base_dir_is_never_removed": 0.07519428600016909, + "tests/test_archive_lifecycle.py::TestPruneEmptyDirs::test_dir_with_files_is_kept": 0.06808099099976062, + "tests/test_archive_lifecycle.py::TestPruneEmptyDirs::test_empty_leaf_dir_is_removed": 0.06193334899990077, + "tests/test_archive_lifecycle.py::TestRetentionDisabled::test_old_file_deleted_when_retention_positive": 0.07515115999967747, + "tests/test_archive_lifecycle.py::TestRetentionDisabled::test_old_file_kept_when_retention_negative": 0.06351956899993638, + "tests/test_archive_lifecycle.py::TestRetentionDisabled::test_old_file_kept_when_retention_zero": 0.07693763200018111, + "tests/test_archive_lifecycle.py::TestRunArchiveLifecycleCap::test_files_beyond_cap_are_skipped": 8.254573407999715, + "tests/test_archive_lifecycle.py::TestRunArchiveLifecycleEmptyDir::test_nonexistent_dir_returns_zero_stats": 0.08594594299984237, + "tests/test_archive_lifecycle.py::TestRunArchiveLifecycleOSError::test_stat_oserror_skips_file_no_error_counted": 0.0745998419999978, + "tests/test_archive_lifecycle.py::TestRunArchiveLifecycleOSError::test_unlink_oserror_increments_errors": 0.061272399000017685, + "tests/test_archive_lifecycle.py::TestRunArchiveLifecycleOSError::test_upload_failure_increments_errors": 0.06333413900006235, + "tests/test_archive_lifecycle.py::TestUploadSentinel::test_existing_sentinel_skips_re_upload": 0.06640192200006823, + "tests/test_archive_lifecycle.py::TestUploadSentinel::test_file_without_sentinel_not_deleted": 0.05737340099994981, + "tests/test_archive_lifecycle.py::TestUploadSentinel::test_sentinel_created_on_successful_upload": 0.07432062700036113, + "tests/test_archive_lifecycle.py::TestUploadSentinel::test_sentinel_not_created_on_failed_upload": 0.0663283730002604, + "tests/test_archive_lifecycle.py::TestUploadSentinel::test_sentinel_removed_with_file": 0.07160526699999537, + "tests/test_auth.py::TestAuthDependencies::test_get_current_user_auth_disabled_returns_anonymous": 0.021860798000034265, + "tests/test_auth.py::TestAuthDependencies::test_get_current_user_invalid_token_raises_401": 0.017142074000048524, + "tests/test_auth.py::TestAuthDependencies::test_get_current_user_missing_cookie_raises_401": 0.01908737500002644, + "tests/test_auth.py::TestAuthDependencies::test_require_admin_auth_disabled_returns_anonymous": 0.01582615999996051, + "tests/test_auth.py::TestAuthDependencies::test_require_admin_non_admin_raises_403": 0.01861200799976359, + "tests/test_auth.py::TestAuthFlagDerivation::test_auth_is_enabled_without_any_provider_configured": 0.07278847500015218, + "tests/test_auth.py::TestAuthFlagDerivation::test_configured_access_beats_the_flag": 0.06723387300030481, + "tests/test_auth.py::TestAuthFlagDerivation::test_flag_alone_enables_bypass_with_no_environment_set": 0.05841966000002685, + "tests/test_auth.py::TestAuthFlagDerivation::test_flag_enables_bypass_in_production": 0.0476165510001465, + "tests/test_auth.py::TestAuthFlagDerivation::test_half_configured_access_does_not_beat_the_flag[CF_ACCESS_AUD]": 0.0656987790000585, + "tests/test_auth.py::TestAuthFlagDerivation::test_half_configured_access_does_not_beat_the_flag[CF_ACCESS_TEAM_DOMAIN]": 0.07041407499991692, + "tests/test_auth.py::TestAuthFlagDerivation::test_module_flags_come_from_the_derivation": 0.05219087200021022, + "tests/test_auth.py::TestAuthFlagDerivation::test_no_environment_name_enables_bypass[dev]": 0.05710023099982209, + "tests/test_auth.py::TestAuthFlagDerivation::test_no_environment_name_enables_bypass[production]": 0.06180406299995411, + "tests/test_auth.py::TestAuthFlagDerivation::test_no_environment_name_enables_bypass[staging]": 0.06182411799977672, + "tests/test_auth.py::TestAuthFlagDerivation::test_no_environment_name_enables_bypass[test]": 0.05794350800010761, + "tests/test_auth.py::TestAuthFlagDerivation::test_only_the_literal_one_enables_bypass[ 1]": 0.06574325100018541, + "tests/test_auth.py::TestAuthFlagDerivation::test_only_the_literal_one_enables_bypass[0]": 0.14533606600002713, + "tests/test_auth.py::TestAuthFlagDerivation::test_only_the_literal_one_enables_bypass[1 ]": 0.06876291200001106, + "tests/test_auth.py::TestAuthFlagDerivation::test_only_the_literal_one_enables_bypass[True]": 0.05992440199997873, + "tests/test_auth.py::TestAuthFlagDerivation::test_only_the_literal_one_enables_bypass[]": 0.07529593500021292, + "tests/test_auth.py::TestAuthFlagDerivation::test_only_the_literal_one_enables_bypass[on]": 0.08086079300005622, + "tests/test_auth.py::TestAuthFlagDerivation::test_only_the_literal_one_enables_bypass[true]": 0.0587317649999477, + "tests/test_auth.py::TestAuthFlagDerivation::test_only_the_literal_one_enables_bypass[yes]": 0.06526051600008032, + "tests/test_auth.py::TestAuthFlagDerivation::test_test_env_alone_does_not_enable_bypass": 0.059612921999814716, + "tests/test_auth.py::TestJWT::test_expired_token_rejected": 0.07427436000011767, + "tests/test_auth.py::TestJWT::test_garbage_token_rejected": 0.07367103699994004, + "tests/test_auth.py::TestJWT::test_tampered_token_not_readable": 0.08288107699991087, + "tests/test_auth.py::TestJWT::test_token_contains_subject": 0.06984256400005506, + "tests/test_auth.py::TestJWT::test_token_has_expiry": 0.07912695399954828, + "tests/test_auth.py::TestJWT::test_write_and_read_token_roundtrip": 0.057138275000170324, + "tests/test_auth.py::TestNodeOwnership::test_a_new_owner_takes_the_node_without_the_last_ones_claim": 0.05326166800000465, + "tests/test_auth.py::TestNodeOwnership::test_a_node_that_never_registered_cannot_be_owned": 0.04911856600006104, + "tests/test_auth.py::TestNodeOwnership::test_assigning_the_owner_a_node_already_has_changes_nothing": 0.04618229700008669, + "tests/test_auth.py::TestNodeOwnership::test_clearing_the_owner_leaves_the_node_unclaimed": 0.0502794349999931, + "tests/test_auth.py::TestNodeOwnership::test_set_and_clear_node_owner": 0.05999262899990754, + "tests/test_auth.py::TestNodeOwnership::test_set_node_owner_updates_existing_owner": 0.0425820670000121, + "tests/test_auth.py::TestSqlitePragmas::test_engine_uses_wal_and_safety_pragmas": 0.07688599800007978, + "tests/test_auth.py::test_admin_route_refuses_anonymous_callers_without_the_flag": 10.102650035999886, + "tests/test_auth_routes.py::TestAdminNodeOwnerRoutes::test_a_node_that_never_registered_cannot_be_given_an_owner": 0.13373794899985114, + "tests/test_auth_routes.py::TestAdminNodeOwnerRoutes::test_list_node_owners_empty": 0.13356682699986777, + "tests/test_auth_routes.py::TestAdminNodeOwnerRoutes::test_list_node_owners_shows_owned": 0.13795911900001556, + "tests/test_auth_routes.py::TestAdminNodeOwnerRoutes::test_set_node_owner_invalid_uuid_returns_404": 0.13286060499990526, + "tests/test_auth_routes.py::TestAdminNodeOwnerRoutes::test_set_node_owner_nonexistent_user_returns_404": 0.12978860299995176, + "tests/test_auth_routes.py::TestAdminNodeOwnerRoutes::test_set_node_owner_null_clears_ownership": 0.1357498720001331, + "tests/test_auth_routes.py::TestClaimRoutes::test_a_click_binds_and_opens_a_session": 0.1333142080000016, + "tests/test_auth_routes.py::TestClaimRoutes::test_a_decline_answers_ok_and_then_stops_working": 0.1314701729997978, + "tests/test_auth_routes.py::TestClaimRoutes::test_a_link_for_a_node_claimed_meanwhile_is_409": 0.12987712800008921, + "tests/test_auth_routes.py::TestClaimRoutes::test_a_spent_link_is_400_rather_than_saying_which_of_three_it_was": 0.13156693799987806, + "tests/test_auth_routes.py::TestClaimRoutes::test_an_address_nobody_confirmed_is_not_what_a_node_was_claimed_with": 0.1393907900001068, + "tests/test_auth_routes.py::TestClaimRoutes::test_an_admin_clearing_an_owner_also_clears_the_claim": 0.23199572499993337, + "tests/test_auth_routes.py::TestClaimRoutes::test_an_admin_reassigning_a_node_clears_the_claim_that_bound_it": 0.23506738300034158, + "tests/test_auth_routes.py::TestClaimRoutes::test_an_admin_reassigning_a_node_to_its_own_owner_keeps_the_claim": 0.23984010599997418, + "tests/test_auth_routes.py::TestClaimRoutes::test_an_unknown_link_answers_exactly_as_a_spent_one": 0.13286044499977834, + "tests/test_auth_routes.py::TestClaimRoutes::test_releasing_a_node_the_caller_does_not_own_is_404": 0.13628745500022887, + "tests/test_auth_routes.py::TestClaimRoutes::test_the_owner_list_names_the_address_a_node_was_claimed_with": 0.1477025809999759, + "tests/test_auth_routes.py::TestClaimRoutes::test_the_preview_names_the_node_without_spending_the_link": 0.13953753800001323, + "tests/test_auth_routes.py::TestClaimRoutes::test_the_preview_of_an_unknown_link_is_404": 0.13942421200022181, + "tests/test_auth_routes.py::TestClaimRoutes::test_the_signed_in_user_carries_the_fleet_flag": 0.1325824289999673, + "tests/test_auth_routes.py::TestLogoutEndsTheAccessSession::test_a_request_without_an_assertion_is_not_redirected": 0.1344926240001314, + "tests/test_auth_routes.py::TestLogoutEndsTheAccessSession::test_a_service_token_is_not_redirected": 0.1319842749999225, + "tests/test_auth_routes.py::TestLogoutEndsTheAccessSession::test_an_access_session_is_told_to_visit_the_edge_logout": 0.14308245899997019, + "tests/test_auth_routes.py::TestLogoutEndsTheAccessSession::test_an_access_session_still_has_its_auth_cookie_cleared": 0.13107093200005693, + "tests/test_auth_routes.py::TestMeEndpoint::test_logout_clears_auth_cookie": 0.13747672800013788, + "tests/test_auth_routes.py::TestMeEndpoint::test_logout_returns_ok": 0.13266796300013084, + "tests/test_auth_routes.py::TestMeEndpoint::test_me_reports_the_access_identity_rather_than_the_anonymous_admin": 0.13602613100010785, + "tests/test_auth_routes.py::TestMeEndpoint::test_me_returns_anonymous_admin_in_test_mode": 0.14918966499999442, + "tests/test_auth_routes.py::TestMeEndpoint::test_me_says_there_is_no_fleet_when_the_flag_is_unset": 0.15978092900013507, + "tests/test_auth_routes.py::TestMeEndpoint::test_me_says_whether_this_server_runs_a_fleet": 0.14134901000011268, + "tests/test_auth_routes.py::TestMyNodeLocationPrivacy::test_a_body_without_private_is_rejected": 0.13790101599988702, + "tests/test_auth_routes.py::TestMyNodeLocationPrivacy::test_clearing_a_node_registered_public_makes_it_public_again": 0.1347097930001837, + "tests/test_auth_routes.py::TestMyNodeLocationPrivacy::test_clearing_privacy_on_a_node_you_do_not_own_is_404": 0.1286346979998143, + "tests/test_auth_routes.py::TestMyNodeLocationPrivacy::test_clearing_returns_the_node_to_its_registration_choice": 0.1326394990001063, + "tests/test_auth_routes.py::TestMyNodeLocationPrivacy::test_setting_privacy_on_a_node_you_do_not_own_is_404": 0.13326398799972594, + "tests/test_auth_routes.py::TestMyNodeLocationPrivacy::test_setting_private_returns_the_override_state": 0.13143371099999968, + "tests/test_auth_routes.py::TestMyNodeLocationPrivacy::test_setting_private_takes_effect_without_waiting_for_the_ttl": 0.1323180480001156, + "tests/test_auth_routes.py::TestMyNodeLocationPrivacy::test_setting_public_overrides_a_private_registration": 0.13290822400017532, + "tests/test_auth_routes.py::TestMyNodes::test_an_owned_node_carries_the_ref_the_public_surfaces_key_on": 0.13199644400015131, + "tests/test_auth_routes.py::TestMyNodes::test_my_nodes_empty_when_no_ownership": 0.13064551800016488, + "tests/test_auth_routes.py::TestMyNodes::test_my_nodes_entry_carries_position_status_for_a_private_node": 0.13373146799995084, + "tests/test_auth_routes.py::TestMyNodes::test_my_nodes_entry_has_expected_fields": 0.13116602199988847, + "tests/test_auth_routes.py::TestMyNodes::test_my_nodes_lists_owned_node": 0.13096697499986476, + "tests/test_auth_routes.py::TestMyNodesCarriesLocationPrivacy::test_a_node_registered_public_reads_public_from_its_registration": 0.13852526300024692, + "tests/test_auth_routes.py::TestMyNodesCarriesLocationPrivacy::test_a_registered_node_names_its_registration": 0.13587897799993698, + "tests/test_auth_routes.py::TestMyNodesCarriesLocationPrivacy::test_an_override_outranks_it_and_says_so": 0.1325262380003096, + "tests/test_backfill_archive_fuzz.py::TestFuzzRxColumns::test_a_null_receiver_stays_null": 0.016611403999831964, + "tests/test_backfill_archive_fuzz.py::TestFuzzRxColumns::test_each_row_uses_its_own_nodes_offset": 0.015332747999991625, + "tests/test_backfill_archive_fuzz.py::TestFuzzRxColumns::test_every_other_column_is_untouched": 0.016617374000134078, + "tests/test_backfill_archive_fuzz.py::TestFuzzRxColumns::test_it_lands_exactly_where_the_live_surfaces_publish": 0.017729370999859384, + "tests/test_backfill_archive_fuzz.py::TestFuzzRxColumns::test_the_input_table_is_not_stamped": 0.017101252999964345, + "tests/test_backfill_archive_fuzz.py::TestFuzzRxColumns::test_the_receiver_moves_into_the_donut": 0.02054336499963938, + "tests/test_backfill_archive_fuzz.py::TestFuzzRxColumns::test_the_result_is_stamped_published": 0.01687611299985292, + "tests/test_backfill_archive_fuzz.py::TestFuzzRxColumns::test_the_transmitter_stays_true": 0.01777255599995442, + "tests/test_backfill_archive_fuzz.py::TestNeedsFuzzing::test_a_stamped_file_does_not": 0.016986282999823743, + "tests/test_backfill_archive_fuzz.py::TestNeedsFuzzing::test_an_unstamped_file_needs_it": 0.01696141500019621, + "tests/test_backfill_archive_fuzz.py::TestNeedsFuzzing::test_the_timestamp_guard_skips_post_fuzz_files": 0.017599508000103015, + "tests/test_backfill_archive_fuzz.py::TestRunRefusals::test_it_refuses_when_fuzzing_is_off": 0.015154939000012746, + "tests/test_backfill_archive_fuzz.py::TestRunRefusals::test_it_refuses_without_an_explicit_salt": 0.01353830699986247, + "tests/test_backfill_archive_fuzz.py::TestTransformParquetBytes::test_a_file_written_by_the_writer_is_never_touched": 0.019480335999787712, + "tests/test_backfill_archive_fuzz.py::TestTransformParquetBytes::test_a_pre_fuzz_file_is_rewritten": 3.3541014839997843, + "tests/test_backfill_archive_fuzz.py::TestTransformParquetBytes::test_a_second_pass_is_a_no_op": 0.023675940999737577, + "tests/test_backfill_archive_fuzz.py::TestTransformParquetBytes::test_force_rewrites_a_stamped_file": 0.019100666000213096, + "tests/test_background_tasks.py::TestAnalyticsRefreshPacing::test_a_cycle_longer_than_the_interval_still_leaves_a_gap": 0.015679599999657512, + "tests/test_background_tasks.py::TestAnalyticsRefreshPacing::test_a_failed_cycle_waits_the_whole_interval": 0.02424918599990633, + "tests/test_background_tasks.py::TestAnalyticsRefreshPacing::test_the_sleep_absorbs_the_cycle_cost": 0.014919579000206795, + "tests/test_background_tasks.py::TestBroadcastAircraft::test_updates_state": 0.017491093999979057, + "tests/test_background_tasks.py::TestRealOnlyDict::test_empty_data": 0.014616578999948615, + "tests/test_background_tasks.py::TestRealOnlyDict::test_filters_synthetic_nodes": 0.014297805000069275, + "tests/test_background_tasks.py::TestRealOnlyDict::test_includes_multinode_with_real_contributor": 0.014379257999962647, + "tests/test_background_tasks.py::TestTaskTimestamps::test_bump_task_error_is_atomic_under_threads": 0.0181385070000033, + "tests/test_background_tasks.py::TestTaskTimestamps::test_task_error_counts": 0.01553083599992533, + "tests/test_background_tasks.py::TestTaskTimestamps::test_task_last_success_updated": 0.017301419999967038, + "tests/test_blah2_poller.py::test_a_blah2_frame_becomes_a_v1_wire_frame": 0.01599923700018735, + "tests/test_blah2_poller.py::test_a_blocked_node_is_not_a_target": 0.052798917000018264, + "tests/test_blah2_poller.py::test_a_cancel_that_httpx_absorbs_still_stops_the_radar": 0.07412570499991489, + "tests/test_blah2_poller.py::test_a_credential_that_cannot_be_decrypted_is_not_polled_without_it": 0.03916453200008618, + "tests/test_blah2_poller.py::test_a_live_radar_is_streaming": 0.06754877699995632, + "tests/test_blah2_poller.py::test_a_node_missing_from_the_registries_is_registered_before_its_frame": 0.05593412799998987, + "tests/test_blah2_poller.py::test_a_node_without_a_configuration_has_its_frames_dropped": 0.07478191500035791, + "tests/test_blah2_poller.py::test_a_radar_clock_beyond_the_limit_files_nothing_and_says_so": 0.2704277509999429, + "tests/test_blah2_poller.py::test_a_radar_that_keeps_failing_is_unreachable": 0.21561841500010814, + "tests/test_blah2_poller.py::test_a_radar_that_recovers_streams_again": 0.2913596470000357, + "tests/test_blah2_poller.py::test_a_radar_with_no_detection_yet_is_stalled_not_unreachable": 0.244069823000018, + "tests/test_blah2_poller.py::test_a_repeated_frame_is_filed_once": 0.13796514600016963, + "tests/test_blah2_poller.py::test_a_write_for_a_superseded_epoch_changes_nothing": 0.10905659200011542, + "tests/test_blah2_poller.py::test_an_active_probed_radar_is_a_target": 0.04636098200012384, + "tests/test_blah2_poller.py::test_an_address_the_policy_refuses_is_never_contacted": 0.1841801650002708, + "tests/test_blah2_poller.py::test_an_answer_refreshes_the_nodes_heartbeat": 0.07087584599980801, + "tests/test_blah2_poller.py::test_an_empty_frame_is_a_valid_wire_frame": 0.014489142000002175, + "tests/test_blah2_poller.py::test_an_endpoint_changed_since_its_probe_is_not_a_target": 0.049442083000030834, + "tests/test_blah2_poller.py::test_an_idle_radar_serving_its_last_frame_is_stalled": 0.2692757760000859, + "tests/test_blah2_poller.py::test_an_unreachable_radar_backs_off": 0.017696909999813215, + "tests/test_blah2_poller.py::test_credentials_are_presented": 0.06807889900005648, + "tests/test_blah2_poller.py::test_empty_frames_are_filed": 0.0820494790000339, + "tests/test_blah2_poller.py::test_health_reports_whether_this_deployment_polls": 0.13844962100006342, + "tests/test_blah2_poller.py::test_more_detections_than_a_v1_frame_holds_is_no_frame": 0.013619358999903852, + "tests/test_blah2_poller.py::test_new_frames_are_queued_under_the_node_and_mirrored": 0.09299523300001056, + "tests/test_blah2_poller.py::test_polling_is_on_only_for_exactly_1[-False]": 0.016550214999824675, + "tests/test_blah2_poller.py::test_polling_is_on_only_for_exactly_1[0-False]": 0.01747618399986095, + "tests/test_blah2_poller.py::test_polling_is_on_only_for_exactly_1[1-True]": 0.017062677000012627, + "tests/test_blah2_poller.py::test_polling_is_on_only_for_exactly_1[true-False]": 0.02232454299996789, + "tests/test_blah2_poller.py::test_stopping_the_poller_stops_every_radar": 0.06979281300004914, + "tests/test_blah2_poller.py::test_stopping_the_poller_while_it_stops_a_radar[CancelledError]": 0.053141144000164786, + "tests/test_blah2_poller.py::test_stopping_the_poller_while_it_stops_a_radar[RuntimeError]": 0.05592592300013166, + "tests/test_blah2_poller.py::test_the_address_is_vetted_again_every_session": 0.584744995000392, + "tests/test_blah2_poller.py::test_the_poller_follows_the_registry": 0.21659262499997567, + "tests/test_blah2_poller.py::test_the_registry_is_re_read_without_being_asked": 0.14859451200004514, + "tests/test_blah2_poller.py::test_the_running_app_polls_a_radar_into_its_frame_workers": 0.6035256430000118, + "tests/test_blah2_poller.py::test_the_task_polls_where_polling_is_on": 0.0574354980001317, + "tests/test_blah2_poller.py::test_the_task_returns_at_once_where_polling_is_off": 0.019807315999969433, + "tests/test_blah2_poller.py::test_the_undefined_prefix_is_stripped": 0.054799925999986954, + "tests/test_blah2_probe.py::test_a_config_that_is_not_json_is_not_blah2": 0.03185415099983402, + "tests/test_blah2_probe.py::test_a_cpi_that_is_not_a_positive_number_is_left_out[-1]": 0.015562855999860403, + "tests/test_blah2_probe.py::test_a_cpi_that_is_not_a_positive_number_is_left_out[0.75]": 0.01452491299983194, + "tests/test_blah2_probe.py::test_a_cpi_that_is_not_a_positive_number_is_left_out[0]": 0.014936701999886282, + "tests/test_blah2_probe.py::test_a_cpi_that_is_not_a_positive_number_is_left_out[None]": 0.014654346000043006, + "tests/test_blah2_probe.py::test_a_detection_frame_parses": 0.014330622999978004, + "tests/test_blah2_probe.py::test_a_frame_that_does_not_advance_is_stalled": 0.0926600109996798, + "tests/test_blah2_probe.py::test_a_live_stock_blah2_passes": 0.08647846300004858, + "tests/test_blah2_probe.py::test_a_missing_config_is_a_bad_response": 0.03132666200008316, + "tests/test_blah2_probe.py::test_a_radar_that_has_not_detected_yet_is_refused": 0.03504042300028232, + "tests/test_blah2_probe.py::test_a_site_name_is_optional": 0.015255695999940144, + "tests/test_blah2_probe.py::test_a_skewed_radar_clock_is_refused_with_the_offset[-60-behind]": 0.09987191300001541, + "tests/test_blah2_probe.py::test_a_skewed_radar_clock_is_refused_with_the_offset[60-ahead]": 0.09899531099972592, + "tests/test_blah2_probe.py::test_a_small_clock_offset_is_accepted": 0.10530934800021896, + "tests/test_blah2_probe.py::test_an_adelaide_receiver_with_its_own_transmitter_is_accepted": 0.015726089000054344, + "tests/test_blah2_probe.py::test_an_empty_body_means_no_detection_yet[ \\n]": 0.015231755999820962, + "tests/test_blah2_probe.py::test_an_empty_body_means_no_detection_yet[]": 0.01439364799989562, + "tests/test_blah2_probe.py::test_an_empty_frame_is_valid": 0.014513750000105574, + "tests/test_blah2_probe.py::test_an_oversized_detection_is_refused": 0.04329738400019778, + "tests/test_blah2_probe.py::test_blah2_arm_is_refused_after_config_alone": 0.040710026999704496, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[hello]": 0.015654541999992944, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]": 0.03169628799992097, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[[]]": 0.01441773400006241, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[undefined]": 0.014639284999930169, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[undefinedundefined{\"timestamp\": 1700000000000, \"delay\": [12.5, 12.5], \"doppler\": [-40.0, -40.0], \"snr\": [14.2, 14.2]}]": 0.0141249630000857, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[{\"delay\": [], \"doppler\": [], \"snr\": []}]": 0.014621192000049632, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[{\"timestamp\": \"1700000000000\", \"delay\": [], \"doppler\": [], \"snr\": []}]": 0.014542766999966261, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[{\"timestamp\": -1, \"delay\": [], \"doppler\": [], \"snr\": []}]": 0.014907364000237067, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[{\"timestamp\": 1700000000000, \"delay\": 1, \"doppler\": 2, \"snr\": 3}]": 0.015473618000214628, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[{\"timestamp\": 1700000000000, \"delay\": [\"1\"], \"doppler\": [2], \"snr\": [3]}]": 0.01513932200009549, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[{\"timestamp\": 1700000000000, \"delay\": [1.0], \"doppler\": [], \"snr\": []}]": 0.015346490999945672, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[{\"timestamp\": 1700000000000, \"delay\": [NaN], \"doppler\": [2], \"snr\": [3]}]": 0.014211848000059035, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[{\"timestamp\": 1700000000000, \"delay\": [], \"doppler\": []}]": 0.014486239999769168, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[{\"timestamp\": 1700000000000.5, \"delay\": [], \"doppler\": [], \"snr\": []}]": 0.014208420000159094, + "tests/test_blah2_probe.py::test_bodies_that_are_not_a_blah2_frame_are_refused[{\"timestamp\": true, \"delay\": [], \"doppler\": [], \"snr\": []}]": 0.01451476600004753, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[blah2]": 0.016959976000180177, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config0]": 0.014239845000020068, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config10]": 0.021139052999842534, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config11]": 0.015171433999967121, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config12]": 0.02339604199983114, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config13]": 0.01754222999988997, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config14]": 0.019139507000090816, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config15]": 0.017876638000188905, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config16]": 0.015459061999990809, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config17]": 0.01638973599960991, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config18]": 0.01602675699973588, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config19]": 0.017432835000136038, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config2]": 0.014734200999782843, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config3]": 0.017310674000100335, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config4]": 0.014741929999900094, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config5]": 0.014595275000374386, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config6]": 0.014740127000095526, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config7]": 0.014937949999875855, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config8]": 0.018304295999769238, + "tests/test_blah2_probe.py::test_configs_that_are_not_blah2_are_refused[config9]": 0.015066226999806531, + "tests/test_blah2_probe.py::test_each_stable_key_moves_the_fingerprint[path0-10.5001]": 0.01773919700008264, + "tests/test_blah2_probe.py::test_each_stable_key_moves_the_fingerprint[path1--30.2501]": 0.014484484000149678, + "tests/test_blah2_probe.py::test_each_stable_key_moves_the_fingerprint[path2-13]": 0.014999900000020716, + "tests/test_blah2_probe.py::test_each_stable_key_moves_the_fingerprint[path3-Elsewhere]": 0.01492425100013861, + "tests/test_blah2_probe.py::test_each_stable_key_moves_the_fingerprint[path4-10.7501]": 0.014224304999970627, + "tests/test_blah2_probe.py::test_each_stable_key_moves_the_fingerprint[path5--30.5001]": 0.014498166999828754, + "tests/test_blah2_probe.py::test_each_stable_key_moves_the_fingerprint[path6-301]": 0.014702827999826695, + "tests/test_blah2_probe.py::test_each_stable_key_moves_the_fingerprint[path7-Other tower]": 0.015462287999753244, + "tests/test_blah2_probe.py::test_each_stable_key_moves_the_fingerprint[path8-204640001]": 0.016590350999877046, + "tests/test_blah2_probe.py::test_fs_is_optional": 0.017924466000067696, + "tests/test_blah2_probe.py::test_irrelevant_keys_leave_the_fingerprint_alone[path0-3000000]": 0.015384241999981896, + "tests/test_blah2_probe.py::test_irrelevant_keys_leave_the_fingerprint_alone[path1-HackRF]": 0.014470759000005273, + "tests/test_blah2_probe.py::test_irrelevant_keys_leave_the_fingerprint_alone[path2-1.5]": 0.014565724000249247, + "tests/test_blah2_probe.py::test_irrelevant_keys_leave_the_fingerprint_alone[path3-3100]": 0.014844997000182047, + "tests/test_blah2_probe.py::test_irrelevant_keys_leave_the_fingerprint_alone[path4-False]": 0.014420641999777217, + "tests/test_blah2_probe.py::test_irrelevant_keys_leave_the_fingerprint_alone[path5-False]": 0.015507846999980757, + "tests/test_blah2_probe.py::test_irrelevant_keys_leave_the_fingerprint_alone[path6-extra]": 0.016313398000193047, + "tests/test_blah2_probe.py::test_irrelevant_keys_leave_the_fingerprint_alone[path7-value7]": 0.015497503000005963, + "tests/test_blah2_probe.py::test_stock_config_parses": 0.028682013000207007, + "tests/test_blah2_probe.py::test_the_blah2_arm_shape_is_sent_to_the_node_route": 0.014923772999964058, + "tests/test_blah2_probe.py::test_the_default_policy_keeps_the_probe_off_loopback": 0.03571924399989257, + "tests/test_blah2_probe.py::test_the_example_config_is_refused_after_config_alone": 0.03198545300006117, + "tests/test_blah2_probe.py::test_the_example_matches_however_the_numbers_are_spelled": 0.01794369600020218, + "tests/test_blah2_probe.py::test_the_example_matches_on_position_whatever_the_names": 0.015887125999825003, + "tests/test_blah2_probe.py::test_the_fingerprint_hashes_a_canonical_form": 0.015915683999992325, + "tests/test_blah2_probe.py::test_the_fingerprint_ignores_number_spelling": 0.014665826999817, + "tests/test_blah2_probe.py::test_the_fingerprint_refuses_a_config_that_is_not_blah2": 0.01643819700007043, + "tests/test_blah2_probe.py::test_the_fingerprint_treats_negative_zero_as_zero": 0.016303758999583806, + "tests/test_blah2_probe.py::test_the_first_frame_after_an_api_restart_loses_its_undefined_prefix": 0.014515687999846705, + "tests/test_blah2_probe.py::test_the_gap_between_reads_spans_two_cpis_within_bounds[0.5-1.75]": 0.014872696000111318, + "tests/test_blah2_probe.py::test_the_gap_between_reads_spans_two_cpis_within_bounds[1.5-3.0]": 0.015513125999859767, + "tests/test_blah2_probe.py::test_the_gap_between_reads_spans_two_cpis_within_bounds[2.5-5.0]": 0.01601888299978782, + "tests/test_blah2_probe.py::test_the_gap_between_reads_spans_two_cpis_within_bounds[60.0-5.0]": 0.018357155999865427, + "tests/test_blah2_probe.py::test_the_gap_between_reads_spans_two_cpis_within_bounds[None-1.75]": 0.017241357000330026, + "tests/test_blah2_probe.py::test_the_probe_requests_only_config_and_detection": 0.1027376810000078, + "tests/test_blah2_probe.py::test_the_probe_waits_by_the_radars_own_cpi": 0.09103768799991485, + "tests/test_blah2_probe.py::test_the_shipped_adelaide_example_is_refused": 0.017654370999935054, + "tests/test_blah2_probe.py::test_the_undefined_prefix_quirk_does_not_fail_the_probe": 0.11091334200023084, + "tests/test_blah2_probe.py::test_the_whole_probe_is_bounded": 0.33440663599981235, + "tests/test_calibration.py::TestAgeGate::test_a_fix_at_the_limit_is_recorded": 0.014787952999995468, + "tests/test_calibration.py::TestAgeGate::test_a_fresh_fix_is_recorded": 0.01717012400013118, + "tests/test_calibration.py::TestAgeGate::test_a_stale_fix_is_refused": 0.014938330999939353, + "tests/test_calibration.py::TestAgeGate::test_the_limit_is_the_solvers_stated_one": 0.01448830099980114, + "tests/test_calibration.py::TestBothCallSitesUseIt::test_frame_path_routes_through_the_helper": 0.017273351000085313, + "tests/test_calibration.py::TestBothCallSitesUseIt::test_solver_does_not_calibrate_at_all": 0.01550671300014983, + "tests/test_calibration.py::TestClaimLaneRecorder::test_a_fresh_claim_records_one_point": 0.01681736099999398, + "tests/test_calibration.py::TestClaimLaneRecorder::test_an_unusable_position_or_node_records_nothing": 0.016337845999942147, + "tests/test_calibration.py::TestClaimLaneRecorder::test_the_age_rule_still_applies": 0.01730849299997317, + "tests/test_calibration.py::TestClaimLaneRecorder::test_the_point_is_stamped_with_detection_ts": 0.01678548800009594, + "tests/test_calibration.py::TestClaimLaneRecorder::test_there_is_no_skew_rule": 0.01756848400009403, + "tests/test_calibration.py::TestFanOut::test_an_empty_node_list_records_nothing": 0.014813383000046088, + "tests/test_calibration.py::TestFanOut::test_every_contributing_node_gets_the_point": 0.014791230000128053, + "tests/test_calibration.py::TestFixDetectionSkewGate::test_a_recorded_point_is_stamped_with_detection_ts_not_fix_ts": 0.019127479999951902, + "tests/test_calibration.py::TestFixDetectionSkewGate::test_a_skew_at_the_limit_is_recorded": 0.04112207599996509, + "tests/test_calibration.py::TestFixDetectionSkewGate::test_a_skew_past_the_limit_records_nothing": 0.01579985599983047, + "tests/test_calibration.py::TestFixDetectionSkewGate::test_skew_is_symmetric": 0.10643569500007288, + "tests/test_calibration.py::TestPositionGuard::test_a_missing_position_is_refused": 0.01508955600002082, + "tests/test_calibration.py::TestPositionGuard::test_blank_node_ids_are_skipped": 0.018325462999882802, + "tests/test_calibration.py::TestPositionGuard::test_null_island_is_refused": 0.01428208800007269, + "tests/test_calibration_from_claims.py::TestBeyondTheCoveragePrior::test_a_fix_past_the_prior_still_records": 0.015373899999985952, + "tests/test_calibration_from_claims.py::TestExclusivity::test_a_rival_inside_the_claim_gate_blocks_the_point": 0.02145162300030279, + "tests/test_calibration_from_claims.py::TestExclusivity::test_a_rival_outside_the_claim_gate_does_not": 0.018647739999778423, + "tests/test_calibration_from_claims.py::TestExclusivity::test_dark_projection_contention_blocks_the_point": 0.015456560999837166, + "tests/test_calibration_from_claims.py::TestHoldAndFollow::test_a_hold_whose_fix_aged_past_the_claim_cap_records_nothing": 0.02490941600012775, + "tests/test_calibration_from_claims.py::TestHoldAndFollow::test_a_refreshed_hold_is_judged_on_the_fresh_fixs_residual": 0.01708746400004202, + "tests/test_calibration_from_claims.py::TestHoldAndFollow::test_a_refreshed_hold_records_like_a_path_2_claim": 0.017959040000050663, + "tests/test_calibration_from_claims.py::TestHoldAndFollow::test_a_refreshed_holds_registry_entry_carries_no_calibration_keys": 0.0261558669999431, + "tests/test_calibration_from_claims.py::TestHoldAndFollow::test_follow_claims_record_nothing": 0.018109660999925836, + "tests/test_calibration_from_claims.py::TestHoldAndFollow::test_hold_claims_record_nothing_once_the_transponder_stops": 0.018836081999779708, + "tests/test_calibration_from_claims.py::TestMaturityAndTheCleanCase::test_a_gap_inside_the_window_does_not_reset": 0.016631447000008848, + "tests/test_calibration_from_claims.py::TestMaturityAndTheCleanCase::test_keeps_recording_once_mature": 0.01771755300001132, + "tests/test_calibration_from_claims.py::TestMaturityAndTheCleanCase::test_records_on_the_third_claim_and_not_before": 0.01598526599991601, + "tests/test_calibration_from_claims.py::TestMaturityAndTheCleanCase::test_streak_resets_after_a_long_gap": 0.016450356999712312, + "tests/test_calibration_from_claims.py::TestNodeTags::test_a_cached_competitor_inside_the_gate_blocks_a_tag": 0.0165346920000502, + "tests/test_calibration_from_claims.py::TestNodeTags::test_a_clean_tag_records": 0.016505045999792856, + "tests/test_calibration_from_claims.py::TestNodeTags::test_a_path1_hex_is_never_assigned_by_path2": 0.015032979999887175, + "tests/test_calibration_from_claims.py::TestRecordedPosition::test_the_point_is_the_dead_reckoned_position": 0.016657019999911427, + "tests/test_calibration_from_claims.py::TestResidualAndFreshness::test_doppler_residual_beyond_the_calibration_gate": 0.018592445000194857, + "tests/test_calibration_from_claims.py::TestResidualAndFreshness::test_residual_inside_the_claim_gate_but_beyond_the_calibration_gate": 0.019684671999812053, + "tests/test_calibration_from_claims.py::TestResidualAndFreshness::test_stale_fix_inside_the_claim_age_cap": 0.01990767699976459, + "tests/test_claim_link_delivery.py::test_nothing_is_sent_without_a_host_to_address_the_link_to": 0.017144541999869034, + "tests/test_claim_link_delivery.py::test_the_link_follows_force_https": 0.018856765000009545, + "tests/test_claim_link_delivery.py::test_the_link_lands_on_the_consoles_claim_page": 0.020365478000030635, + "tests/test_claim_routes.py::test_a_claim_row_survives_a_re_registration": 0.15852399099981085, + "tests/test_claim_routes.py::test_a_click_landing_on_the_clickers_own_binding_succeeds": 0.13392600300016966, + "tests/test_claim_routes.py::test_a_click_refused_for_a_taken_node_does_not_spend_the_link": 0.043507195000074717, + "tests/test_claim_routes.py::test_a_decline_leaves_a_link_minted_since_alone": 0.038010012999848186, + "tests/test_claim_routes.py::test_a_decline_leaves_the_address_on_file": 0.0315873559998181, + "tests/test_claim_routes.py::test_a_decline_returns_the_node_to_unowned": 0.03985586899989357, + "tests/test_claim_routes.py::test_a_declined_link_cannot_then_be_redeemed": 0.034067745999891486, + "tests/test_claim_routes.py::test_a_link_for_a_node_claimed_meanwhile_is_refused": 0.03780957400022089, + "tests/test_claim_routes.py::test_a_link_for_an_address_the_node_has_since_replaced_is_refused": 0.09317295500022738, + "tests/test_claim_routes.py::test_a_link_still_in_a_mailbox_cannot_claim_a_node_whose_claim_was_cleared": 0.0937961809997887, + "tests/test_claim_routes.py::test_a_refused_click_leaves_the_address_unconfirmed": 0.03654906000019764, + "tests/test_claim_routes.py::test_a_release_by_somebody_who_does_not_own_it_is_refused": 0.19755618300018796, + "tests/test_claim_routes.py::test_a_release_clears_the_binding_and_the_address": 0.13634620100015127, + "tests/test_claim_routes.py::test_a_released_node_can_be_claimed_again": 0.26505095200013784, + "tests/test_claim_routes.py::test_a_second_click_on_the_same_link_does_nothing": 0.10293498300006831, + "tests/test_claim_routes.py::test_a_second_node_joins_the_account_the_address_already_has": 0.11917658200013648, + "tests/test_claim_routes.py::test_a_sign_in_link_cannot_claim_a_node": 0.05259783600013179, + "tests/test_claim_routes.py::test_an_empty_token_is_refused": 0.01704210200000489, + "tests/test_claim_routes.py::test_an_expired_link_is_refused": 0.03500037000003431, + "tests/test_claim_routes.py::test_an_unknown_link_is_refused": 0.023149729999886404, + "tests/test_claim_routes.py::test_declining_an_unknown_link_is_false": 0.01838547999977891, + "tests/test_claim_routes.py::test_one_click_binds_the_node": 0.11306272100023307, + "tests/test_claim_routes.py::test_one_click_confirms_the_address": 0.09394586500002333, + "tests/test_claim_routes.py::test_one_click_creates_the_account_when_the_address_is_new": 0.09499221900023258, + "tests/test_claim_routes.py::test_one_click_spends_the_link": 0.09521410599973024, + "tests/test_claim_routes.py::test_only_the_hash_of_a_token_is_ever_stored": 0.05990776400017239, + "tests/test_claim_routes.py::test_releasing_an_unowned_node_is_false": 0.04646834900017893, + "tests/test_claim_routes.py::test_the_claim_row_and_the_node_row_agree_on_the_node": 0.054536439000003156, + "tests/test_claim_routes.py::test_the_two_expiries_agree": 0.02983059400003185, + "tests/test_classify_migration_gap.py::test_a_destructive_gap_names_the_downgrade_target": 0.9075855319999846, + "tests/test_classify_migration_gap.py::test_an_additive_gap_is_safe_to_serve": 0.8469841059998089, + "tests/test_classify_migration_gap.py::test_an_undeclared_revision_is_graded_destructive": 0.7880797289999464, + "tests/test_classify_migration_gap.py::test_an_unknown_ref_reports_cleanly_rather_than_raising": 0.7697843379999085, + "tests/test_classify_migration_gap.py::test_no_gap_when_the_restored_tree_ships_every_revision": 0.6850195049999002, + "tests/test_classify_migration_gap.py::test_restoring_a_pre_alembic_tree_puts_the_whole_history_in_the_gap": 0.8946519900000567, + "tests/test_custody.py::TestCanonicalize::test_different_key_order_same_output": 0.06476943600000595, + "tests/test_custody.py::TestCanonicalize::test_no_whitespace": 0.10427280899989455, + "tests/test_custody.py::TestCanonicalize::test_sorted_keys": 0.08090066699992349, + "tests/test_custody.py::TestChainRecovery::test_recovered_prev_hash": 0.10555340500013699, + "tests/test_custody.py::TestCrossKeyVerification::test_wrong_key_rejects": 0.09591338199993515, + "tests/test_custody.py::TestEdgeCases::test_close_hour_no_detections_returns_none": 0.05562288000010085, + "tests/test_custody.py::TestEdgeCases::test_signed_packet_with_adsb": 0.13088362100006634, + "tests/test_custody.py::TestHashChainBuilder::test_add_detections": 0.07162034400016637, + "tests/test_custody.py::TestHashChainBuilder::test_chain_links": 0.10310322500026814, + "tests/test_custody.py::TestHashChainBuilder::test_chain_log_persisted": 0.06963080300010915, + "tests/test_custody.py::TestHashChainBuilder::test_close_hour": 0.12610218100007842, + "tests/test_custody.py::TestHashChainBuilder::test_initial_prev_hash": 0.11338691699984338, + "tests/test_custody.py::TestHashChainBuilder::test_no_pending": 0.07307235800021772, + "tests/test_custody.py::TestHashChainVerifier::test_first_entry_valid": 0.06576932799976021, + "tests/test_custody.py::TestHashChainVerifier::test_full_chain_valid": 0.12730000300030042, + "tests/test_custody.py::TestHashChainVerifier::test_second_entry_valid": 0.11340697200012073, + "tests/test_custody.py::TestHashChainVerifier::test_wrong_prev_hash_rejected": 0.09172442799990677, + "tests/test_custody.py::TestModelsSerialization::test_hash_chain_entry_round_trip": 0.10411505199999738, + "tests/test_custody.py::TestModelsSerialization::test_node_identity_round_trip": 0.0675489350001044, + "tests/test_custody.py::TestModelsSerialization::test_signed_packet_round_trip": 0.07280861599997479, + "tests/test_custody.py::TestPacketSigner::test_delay_matches": 0.14032551100012824, + "tests/test_custody.py::TestPacketSigner::test_doppler_matches": 0.06460091500025555, + "tests/test_custody.py::TestPacketSigner::test_has_signature": 0.11487427599990951, + "tests/test_custody.py::TestPacketSigner::test_node_id": 0.07641905900004531, + "tests/test_custody.py::TestPacketSigner::test_payload_hash_is_64_hex": 0.23699859299995296, + "tests/test_custody.py::TestPacketSigner::test_signing_mode": 0.054620631000034336, + "tests/test_custody.py::TestPacketSigner::test_snr_matches": 0.06733555100004196, + "tests/test_custody.py::TestPacketSigner::test_timestamp": 0.07797582799980773, + "tests/test_custody.py::TestPacketVerifier::test_accepts_valid": 0.1281716849998702, + "tests/test_custody.py::TestPacketVerifier::test_rejects_tampered": 0.07953297600010956, + "tests/test_custody.py::TestPacketVerifier::test_rejects_unknown_node": 0.10005582500025412, + "tests/test_custody.py::TestSignatureVerifier::test_registered_nodes": 0.08440859599977557, + "tests/test_custody.py::TestSignatureVerifier::test_reject_wrong_hash": 0.1094111840000096, + "tests/test_custody.py::TestSignatureVerifier::test_verify_valid_packet": 0.06878632899997683, + "tests/test_custody.py::TestSigningVerification::test_hash_sha256_is_deterministic": 0.07664083799977561, + "tests/test_custody.py::TestSigningVerification::test_hash_sha256_returns_64_hex": 0.06473994099997071, + "tests/test_custody.py::TestSigningVerification::test_sign_hex_returns_hex": 0.08665696300022319, + "tests/test_custody.py::TestSigningVerification::test_sign_returns_bytes": 0.14248717800001032, + "tests/test_custody.py::TestSigningVerification::test_signature_verifies": 0.08412409099992146, + "tests/test_custody.py::TestSigningVerification::test_tampered_data_fails": 0.06871288399997866, + "tests/test_custody.py::TestSoftwareCryptoBackend::test_fingerprint_is_16_hex": 0.09267179400012537, + "tests/test_custody.py::TestSoftwareCryptoBackend::test_key_file_created": 0.07885728699989158, + "tests/test_custody.py::TestSoftwareCryptoBackend::test_public_key_pem_format": 0.06767203200001859, + "tests/test_custody.py::TestSoftwareCryptoBackend::test_reloaded_key_matches": 0.09825865799984967, + "tests/test_custody.py::TestSoftwareCryptoBackend::test_serial_starts_with_syn": 0.07923265099998389, + "tests/test_custody.py::TestSoftwareCryptoBackend::test_signing_mode_is_software": 0.17704745399987587, + "tests/test_custody_routes.py::TestCustodyChainEntry::test_rolling_cap": 0.2038766589998886, + "tests/test_custody_routes.py::TestCustodyChainEntry::test_submit_entry": 0.19590045000018108, + "tests/test_custody_routes.py::TestCustodyChainEntry::test_submit_entry_no_auth": 0.20091864899995926, + "tests/test_custody_routes.py::TestCustodyChainEntryVerification::test_chain_entry_with_registered_key_exception_path": 0.20468544300001668, + "tests/test_custody_routes.py::TestCustodyChainEntryVerification::test_chain_node_with_identity_returns_identity_dict": 0.20471380899994074, + "tests/test_custody_routes.py::TestCustodyIqCommitment::test_rolling_cap": 0.20663739400015402, + "tests/test_custody_routes.py::TestCustodyIqCommitment::test_submit_commitment": 0.20979715999988002, + "tests/test_custody_routes.py::TestCustodyIqCommitment::test_submit_no_auth": 0.2317587420000109, + "tests/test_custody_routes.py::TestCustodyRead::test_chain_not_found": 0.17955195100012133, + "tests/test_custody_routes.py::TestCustodyRead::test_status_empty": 0.21993326799997703, + "tests/test_custody_routes.py::TestCustodyRead::test_verify_not_found": 0.19263563599997724, + "tests/test_custody_routes.py::TestCustodyRegister::test_register_empty_node_id": 0.2275538010001128, + "tests/test_custody_routes.py::TestCustodyRegister::test_register_missing_node_id": 0.22663804800004073, + "tests/test_custody_routes.py::TestCustodyRegister::test_register_no_api_key": 0.21087267600000814, + "tests/test_custody_routes.py::TestCustodyRegister::test_register_success": 0.21272677499996462, + "tests/test_custody_routes.py::TestCustodyRegister::test_register_wrong_api_key": 0.19173288800016053, + "tests/test_custody_routes.py::TestCustodyVerifyChain::test_verify_chain_exception_returns_500": 0.1982963360001122, + "tests/test_custody_routes.py::TestCustodyVerifyChain::test_verify_chain_no_public_key_returns_400": 0.19603018199995859, + "tests/test_dark_follow.py::TestAnchorDeadReckoning::test_dead_reckoning_honours_it": 0.08589589399980468, + "tests/test_dark_follow.py::TestAnchorDeadReckoning::test_dead_reckoning_still_refuses_a_far_solve": 0.058365064000099665, + "tests/test_dark_follow.py::TestAnchorDeadReckoning::test_the_flat_gate_refuses_a_fast_anchor": 0.05014587400023629, + "tests/test_dark_follow.py::TestClaiming::test_a_caller_that_cannot_take_the_split_gets_no_path_3": 0.06902343200022187, + "tests/test_dark_follow.py::TestClaiming::test_a_matching_detection_is_claimed_and_a_stray_is_not": 0.09745740599987585, + "tests/test_dark_follow.py::TestClaiming::test_a_stale_track_claims_nothing": 0.08130595900001936, + "tests/test_dark_follow.py::TestClaiming::test_adsb_wins_a_contested_detection": 0.10869224400016719, + "tests/test_dark_follow.py::TestClaiming::test_off_mode_claims_nothing": 0.08742938300019887, + "tests/test_dark_follow.py::TestFollowPass::test_a_node_with_no_config_is_dropped_not_the_key": 0.07468534399981763, + "tests/test_dark_follow.py::TestFollowPass::test_a_single_node_is_not_enough": 0.07139820600013991, + "tests/test_dark_follow.py::TestFollowPass::test_no_newer_claim_is_no_new_solve": 0.06436657600011131, + "tests/test_dark_follow.py::TestFollowPass::test_off_mode_does_nothing": 0.0622069300000021, + "tests/test_dark_follow.py::TestFollowPass::test_shadow_classifies_a_displaced_solve_as_not_ok": 0.06927067699962208, + "tests/test_dark_follow.py::TestFollowPass::test_shadow_records_and_never_publishes": 0.18150846800017462, + "tests/test_dark_follow.py::TestFollowPass::test_skewed_claims_keep_their_capture_epochs[False-binding]": 0.0593596900000648, + "tests/test_dark_follow.py::TestFollowPass::test_skewed_claims_keep_their_capture_epochs[False-shadow]": 0.05479740800001309, + "tests/test_dark_follow.py::TestFollowPass::test_skewed_claims_keep_their_capture_epochs[True-binding]": 0.05685714400010511, + "tests/test_dark_follow.py::TestFollowPass::test_skewed_claims_keep_their_capture_epochs[True-shadow]": 0.06324464300018917, + "tests/test_dark_follow.py::TestFollowPass::test_the_adsb_pass_ignores_follow_claims": 0.07535382899982324, + "tests/test_dark_follow.py::TestFollowPass::test_the_rate_limit_holds_between_passes": 0.05902934499999901, + "tests/test_dark_follow.py::TestFollowPass::test_three_nodes_produce_one_anchored_queue_item": 0.06317715600016527, + "tests/test_dark_follow.py::TestGateSigmaClamp::test_a_manoeuvre_sigma_gates_exactly_like_the_ceiling": 0.06831414999987828, + "tests/test_dark_follow.py::TestGateSigmaClamp::test_a_normal_target_is_untouched": 0.07519630500041785, + "tests/test_dark_follow.py::TestGateSigmaClamp::test_the_clamp_is_what_narrows_it": 0.06640167499995187, + "tests/test_dark_follow.py::TestGhostGuard::test_a_good_solve_clears_the_streak": 0.10678091399995537, + "tests/test_dark_follow.py::TestGhostGuard::test_a_published_record_counts_and_clears": 0.05542176299991297, + "tests/test_dark_follow.py::TestGhostGuard::test_a_withheld_record_does_not_clear_an_existing_streak": 0.06372950299987679, + "tests/test_dark_follow.py::TestGhostGuard::test_an_n2_unconfirmed_record_is_withheld_not_charged": 0.07743126399986977, + "tests/test_dark_follow.py::TestGhostGuard::test_rejected_history_records_feed_the_guard": 0.07549297700006719, + "tests/test_dark_follow.py::TestGhostGuard::test_the_cooldown_expires": 0.06778675299983661, + "tests/test_dark_follow.py::TestGhostGuard::test_two_rejected_solves_drop_the_key": 0.07870404499976758, + "tests/test_dark_follow.py::TestIneligibilityCounters::test_a_noisy_velocity_is_counted_by_reason": 0.07712085399998614, + "tests/test_dark_follow.py::TestIneligibilityCounters::test_a_stale_track_is_counted_as_age": 0.06659907099992779, + "tests/test_dark_follow.py::TestIneligibilityCounters::test_an_adsb_key_is_not_in_the_population_at_all": 0.06587482999998429, + "tests/test_dark_follow.py::TestIneligibilityCounters::test_an_eligible_key_bumps_nothing": 0.07172036899987688, + "tests/test_dark_follow.py::TestIneligibilityCounters::test_each_gate_has_its_own_counter[dark_follow_inelig_min_nodes-kwargs2]": 0.07763371300029576, + "tests/test_dark_follow.py::TestIneligibilityCounters::test_each_gate_has_its_own_counter[dark_follow_inelig_min_solves-kwargs1]": 0.059420244999955685, + "tests/test_dark_follow.py::TestIneligibilityCounters::test_each_gate_has_its_own_counter[dark_follow_inelig_no_pos-kwargs0]": 0.05336088700005348, + "tests/test_dark_follow.py::TestIneligibilityCounters::test_no_filter_state_is_counted": 0.06420630999991772, + "tests/test_dark_follow.py::TestIneligibilityCounters::test_the_cooldown_a_drop_starts_is_counted_on_the_next_rebuild": 0.07971590200008905, + "tests/test_dark_follow.py::TestKeyOwnership::test_a_solve_further_out_mints_rather_than_joining": 0.06072466499995244, + "tests/test_dark_follow.py::TestKeyOwnership::test_a_solve_next_to_a_freshly_followed_key_is_shadowed": 0.053656824999734454, + "tests/test_dark_follow.py::TestKeyOwnership::test_an_n2_solve_cannot_join_a_followed_n3_key": 0.06936002900010863, + "tests/test_dark_follow.py::TestKeyOwnership::test_ownership_expires": 0.09644706799986125, + "tests/test_dark_follow.py::TestKeyOwnership::test_the_follow_lanes_own_solve_still_lands_on_its_key": 0.07636809699988589, + "tests/test_dark_follow.py::TestKeyOwnership::test_the_inert_modes_key_exactly_as_before[off]": 0.05655267599991021, + "tests/test_dark_follow.py::TestKeyOwnership::test_the_inert_modes_key_exactly_as_before[shadow]": 0.06620120799993856, + "tests/test_dark_follow.py::TestManoeuvreReprieve::test_a_fresh_episode_is_budgeted_from_its_first_rebuild": 0.06819336199987447, + "tests/test_dark_follow.py::TestManoeuvreReprieve::test_a_key_that_is_not_manoeuvring_is_still_dropped": 0.06393597000010232, + "tests/test_dark_follow.py::TestManoeuvreReprieve::test_a_manoeuvring_key_is_kept_over_the_ceiling": 0.06593672199983303, + "tests/test_dark_follow.py::TestManoeuvreReprieve::test_a_sigma_past_the_hard_ceiling_is_dropped_mid_manoeuvre": 0.06649713499996324, + "tests/test_dark_follow.py::TestManoeuvreReprieve::test_the_reprieve_expires_after_keep_max_s": 0.057893817999911334, + "tests/test_dark_follow.py::TestManoeuvreReprieve::test_the_target_carries_the_real_sigma_not_the_clamped_one": 0.07486154699995495, + "tests/test_dark_follow.py::TestManoeuvreReprieve::test_the_two_reject_drop_still_applies_to_a_kept_key": 0.06087450800032457, + "tests/test_dark_follow.py::TestModesInProcessOneFrame::test_binding_strips_the_followed_detection": 0.11553441199998815, + "tests/test_dark_follow.py::TestModesInProcessOneFrame::test_shadow_leaves_the_frame_whole": 0.14670471500016902, + "tests/test_dark_follow.py::TestN2InputsAreSkipped::test_a_third_node_is_unaffected": 0.07235229799994158, + "tests/test_dark_follow.py::TestN2InputsAreSkipped::test_the_skipped_key_keeps_its_target_status": 0.16806715199982136, + "tests/test_dark_follow.py::TestN2InputsAreSkipped::test_two_nodes_are_enqueued_when_the_bypass_is_on": 0.0449544280002101, + "tests/test_dark_follow.py::TestN2InputsAreSkipped::test_two_nodes_are_not_enqueued_when_the_bypass_is_off": 0.05803066599992235, + "tests/test_dark_follow.py::TestPseudoStates::test_a_key_that_was_never_wide_is_not_a_target": 0.06197991100020772, + "tests/test_dark_follow.py::TestPseudoStates::test_a_narrow_last_solve_on_a_wide_key_is_still_a_target": 0.05674954199980675, + "tests/test_dark_follow.py::TestPseudoStates::test_a_noisy_velocity_drops_the_key": 0.07555222000019057, + "tests/test_dark_follow.py::TestPseudoStates::test_a_stale_track_is_not": 0.05214044200010903, + "tests/test_dark_follow.py::TestPseudoStates::test_an_adsb_key_is_never_followed": 0.07668504700018275, + "tests/test_dark_follow.py::TestPseudoStates::test_an_established_track_is_a_target": 0.05588979999970434, + "tests/test_dark_follow.py::TestPseudoStates::test_no_filter_state_is_not": 0.06593745000009221, + "tests/test_dark_follow.py::TestPseudoStates::test_off_mode_has_no_targets": 0.06959527799995158, + "tests/test_dark_follow.py::TestPseudoStates::test_too_few_nodes_is_not": 0.05767407300004379, + "tests/test_dark_follow.py::TestPseudoStates::test_too_few_solves_is_not": 0.05695833200002198, + "tests/test_dark_follow.py::TestShadowedSolveIsARejection::test_a_solve_the_lane_does_not_own_still_publishes": 0.05444536599975436, + "tests/test_dark_follow.py::TestShadowedSolveIsARejection::test_refusals_never_reach_the_follow_ghost_guard": 0.07677302599995528, + "tests/test_dark_follow.py::TestShadowedSolveIsARejection::test_the_solve_is_recorded_counted_and_not_published": 0.0670882559995789, + "tests/test_dark_key_track_continuity.py::TestFollowOwnedKeys::test_no_shared_tracks_still_mints": 0.054359604000183026, + "tests/test_dark_key_track_continuity.py::TestFollowOwnedKeys::test_one_shared_track_shadows_beyond_the_shadow_radius": 0.0567130960000668, + "tests/test_dark_key_track_continuity.py::TestFollowOwnedKeys::test_shared_tracks_do_not_widen_the_gate": 0.07906741299984787, + "tests/test_dark_key_track_continuity.py::TestFollowOwnedKeys::test_stale_shared_ids_do_not_count": 0.11016163799990863, + "tests/test_dark_key_track_continuity.py::TestFollowOwnedKeys::test_two_shared_tracks_join_the_followed_key": 0.06559124399996108, + "tests/test_dark_key_track_continuity.py::TestOrdinaryCandidates::test_a_track_sharing_key_beats_a_nearer_stranger": 0.09768298700009836, + "tests/test_dark_key_track_continuity.py::TestOrdinaryCandidates::test_an_out_of_gate_sharer_is_not_joined": 0.058777115999873786, + "tests/test_dark_key_track_continuity.py::TestOrdinaryCandidates::test_without_shared_ids_the_nearer_key_still_wins": 0.058797147999939625, + "tests/test_dark_key_track_continuity.py::TestRecentTrackIdMemory::test_a_missing_or_malformed_memory_is_not_a_crash": 0.07011890800004039, + "tests/test_dark_key_track_continuity.py::TestRecentTrackIdMemory::test_ids_merge_across_writes_and_prune_by_age": 0.1223205119999875, + "tests/test_dark_key_track_continuity.py::TestRecentTrackIdMemory::test_the_memory_is_capped": 0.1946434080000472, + "tests/test_deploy_scope.py::test_a_comment_beside_a_change_in_one_file_deploys": 0.9037461759996859, + "tests/test_deploy_scope.py::test_a_comment_beside_a_typescript_change_deploys": 0.8979913729997406, + "tests/test_deploy_scope.py::test_a_deleted_module_deploys": 0.784291015000008, + "tests/test_deploy_scope.py::test_a_dropped_noqa_is_inert": 0.8814686299999721, + "tests/test_deploy_scope.py::test_a_file_that_will_not_parse_deploys[after]": 0.8639083050002228, + "tests/test_deploy_scope.py::test_a_file_that_will_not_parse_deploys[before]": 0.7891423600003691, + "tests/test_deploy_scope.py::test_a_mode_change_deploys": 0.8248092510000333, + "tests/test_deploy_scope.py::test_a_module_that_became_markdown_deploys": 0.7809173479997753, + "tests/test_deploy_scope.py::test_a_new_module_deploys": 0.7896026900000379, + "tests/test_deploy_scope.py::test_a_renamed_local_deploys": 0.8815467880001506, + "tests/test_deploy_scope.py::test_a_requirements_change_deploys": 0.7932863939997787, + "tests/test_deploy_scope.py::test_a_requoted_string_is_inert": 0.8468448910002735, + "tests/test_deploy_scope.py::test_a_retargeted_symlink_deploys": 0.749204189000011, + "tests/test_deploy_scope.py::test_a_reworded_comment_is_inert": 0.897326208999857, + "tests/test_deploy_scope.py::test_a_submodule_bump_deploys": 0.8446166069998071, + "tests/test_deploy_scope.py::test_an_edited_docstring_deploys": 0.9046094690002064, + "tests/test_deploy_scope.py::test_an_empty_diff_deploys": 0.6749095340001077, + "tests/test_deploy_scope.py::test_an_undiffable_base_deploys[no-base]": 0.6840378000001692, + "tests/test_deploy_scope.py::test_an_undiffable_base_deploys[unknown-base]": 0.7831697410001652, + "tests/test_deploy_scope.py::test_markdown_alone_is_inert": 0.9711901950001902, + "tests/test_deploy_scope.py::test_markdown_under_a_public_directory_deploys[dashboard/public/help.md]": 0.7905124760000035, + "tests/test_deploy_scope.py::test_markdown_under_a_public_directory_deploys[public/help.md]": 0.7889345590003813, + "tests/test_deploy_scope.py::test_reformatting_is_inert[trailing-blank-lines]": 0.9432705639999313, + "tests/test_deploy_scope.py::test_reformatting_is_inert[trailing-whitespace]": 0.8923545750001267, + "tests/test_deploy_scope.py::test_reformatting_is_inert[wrapped-with-a-magic-trailing-comma]": 0.9762984010001219, + "tests/test_deploy_workflows.py::test_a_stale_marker_refuses_the_deploy_before_the_rollback_point_is_taken[production]": 0.2967124460001287, + "tests/test_deploy_workflows.py::test_a_stale_marker_refuses_the_deploy_before_the_rollback_point_is_taken[staging]": 0.5270635350000248, + "tests/test_deploy_workflows.py::test_a_stale_marker_refuses_the_deploy_before_the_rollback_point_is_taken[test]": 0.10195333899991965, + "tests/test_deploy_workflows.py::test_marker_is_cleared_only_once_the_app_answers[production]": 0.2485811270000795, + "tests/test_deploy_workflows.py::test_marker_is_cleared_only_once_the_app_answers[staging]": 0.1881260300001486, + "tests/test_deploy_workflows.py::test_marker_is_cleared_only_once_the_app_answers[test]": 0.12057863499990162, + "tests/test_deploy_workflows.py::test_marker_is_written_after_the_rollback_point_and_before_anything_moves[production]": 0.384810577999815, + "tests/test_deploy_workflows.py::test_marker_is_written_after_the_rollback_point_and_before_anything_moves[staging]": 0.10421900400024242, + "tests/test_deploy_workflows.py::test_marker_is_written_after_the_rollback_point_and_before_anything_moves[test]": 0.1074431359998016, + "tests/test_deploy_workflows.py::test_nothing_between_the_marker_write_and_the_tree_move_can_refuse[production]": 0.26424214500002563, + "tests/test_deploy_workflows.py::test_nothing_between_the_marker_write_and_the_tree_move_can_refuse[staging]": 0.11252555100031714, + "tests/test_deploy_workflows.py::test_nothing_between_the_marker_write_and_the_tree_move_can_refuse[test]": 0.11739470200018332, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[cancelled-pull_request-refs/heads/main]": 0.25591322499985836, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[cancelled-pull_request-refs/heads/topic]": 0.17978848899997502, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[cancelled-pull_request-refs/pull/417/merge]": 0.13658726399989973, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[cancelled-push-refs/heads/main]": 0.23866690400018342, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[cancelled-push-refs/heads/topic]": 0.2260771459998523, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[cancelled-push-refs/pull/417/merge]": 0.31692008699974394, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[cancelled-workflow_dispatch-refs/heads/main]": 0.18410134300006575, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[cancelled-workflow_dispatch-refs/heads/topic]": 0.2060762110002088, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[cancelled-workflow_dispatch-refs/pull/417/merge]": 0.25598276200003056, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[failure-pull_request-refs/heads/main]": 0.31306301099994016, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[failure-pull_request-refs/heads/topic]": 0.2916390909999791, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[failure-pull_request-refs/pull/417/merge]": 0.32502323100038666, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[failure-push-refs/heads/main]": 0.269591347999949, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[failure-push-refs/heads/topic]": 0.24775764499986508, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[failure-push-refs/pull/417/merge]": 0.37941310400015027, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[failure-workflow_dispatch-refs/heads/main]": 0.31257728499986115, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[failure-workflow_dispatch-refs/heads/topic]": 0.38752883400024984, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[failure-workflow_dispatch-refs/pull/417/merge]": 0.3120334519996959, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[skipped-pull_request-refs/heads/main]": 0.2631054280000171, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[skipped-pull_request-refs/heads/topic]": 0.29239061099974606, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[skipped-pull_request-refs/pull/417/merge]": 0.21949599999993552, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[skipped-push-refs/heads/main]": 0.24503084300022238, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[skipped-push-refs/heads/topic]": 0.22012271900007363, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[skipped-push-refs/pull/417/merge]": 0.28536080899993976, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[skipped-workflow_dispatch-refs/heads/main]": 0.23123012099995321, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[skipped-workflow_dispatch-refs/heads/topic]": 0.23563292899984845, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[skipped-workflow_dispatch-refs/pull/417/merge]": 0.24032086700003674, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[success-pull_request-refs/heads/main]": 0.34126967099973626, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[success-pull_request-refs/heads/topic]": 0.2952862549998372, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[success-pull_request-refs/pull/417/merge]": 0.3312786839999262, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[success-push-refs/heads/main]": 0.3725015830000302, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[success-push-refs/heads/topic]": 0.36261959399985244, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[success-push-refs/pull/417/merge]": 0.2571033010001429, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[success-workflow_dispatch-refs/heads/main]": 0.2625848469997436, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[success-workflow_dispatch-refs/heads/topic]": 0.22025749999988875, + "tests/test_deploy_workflows.py::test_production_rollback_requires_a_failed_or_cancelled_main_push[success-workflow_dispatch-refs/pull/417/merge]": 0.25345937200017943, + "tests/test_deploy_workflows.py::test_rollback_job_reads_back_what_the_deploy_wrote[production]": 0.732049305999908, + "tests/test_deploy_workflows.py::test_rollback_job_reads_back_what_the_deploy_wrote[staging]": 0.22250826900017273, + "tests/test_deploy_workflows.py::test_rollback_job_reads_back_what_the_deploy_wrote[test]": 0.2018747499996607, + "tests/test_deploy_workflows.py::test_the_stack_stays_up_until_the_new_image_exists[production]": 0.23270889800028272, + "tests/test_deploy_workflows.py::test_the_stack_stays_up_until_the_new_image_exists[staging]": 0.09913117999963106, + "tests/test_deploy_workflows.py::test_the_stack_stays_up_until_the_new_image_exists[test]": 0.08120379300021341, + "tests/test_detection_mirror.py::TestBatchCarriesTheRef::test_a_node_with_no_ref_sends_none_rather_than_a_null": 0.055720971000255304, + "tests/test_detection_mirror.py::TestBatchCarriesTheRef::test_a_registered_node_sends_its_ref": 0.05787253099992995, + "tests/test_detection_mirror.py::test_a_batch_that_builds_empty_is_not_posted_and_is_counted": 0.13246581299995341, + "tests/test_detection_mirror.py::test_a_duplicate_host_refuses_to_arm": 0.06655902800002877, + "tests/test_detection_mirror.py::test_a_failed_batch_counts_frames_not_batches": 0.06651366400024017, + "tests/test_detection_mirror.py::test_a_failing_drain_or_build_does_not_kill_the_task": 0.1634351110001262, + "tests/test_detection_mirror.py::test_a_failing_target_is_named_in_the_log_line_and_the_event": 0.08115470600000663, + "tests/test_detection_mirror.py::test_a_full_queue_drops_rather_than_raising": 0.05810062399996241, + "tests/test_detection_mirror.py::test_a_hung_target_does_not_hold_the_others_back": 0.08426592199975858, + "tests/test_detection_mirror.py::test_a_mixed_drain_counts_the_departed_node_while_sending_the_survivor": 0.09975158900010683, + "tests/test_detection_mirror.py::test_a_non_https_url_refuses_to_arm": 0.08245778899959078, + "tests/test_detection_mirror.py::test_a_partial_landing_credits_only_what_arrived": 0.07557484400012981, + "tests/test_detection_mirror.py::test_a_receiver_that_queues_nothing_is_a_failure_not_a_success": 0.069952445999661, + "tests/test_detection_mirror.py::test_a_refusing_receiver_is_counted_not_raised": 0.0618989390002298, + "tests/test_detection_mirror.py::test_a_saturated_queue_logs_its_own_line_throttled": 0.05931125400002202, + "tests/test_detection_mirror.py::test_a_single_target_still_arms_as_before": 0.08403999500001191, + "tests/test_detection_mirror.py::test_an_empty_key_entry_sends_that_receiver_no_key": 0.10773838400018576, + "tests/test_detection_mirror.py::test_an_empty_url_entry_refuses_to_arm": 0.06399892800004636, + "tests/test_detection_mirror.py::test_an_unreachable_receiver_is_counted_not_raised": 0.06584064000003309, + "tests/test_detection_mirror.py::test_an_unusable_response_is_a_failure_not_a_silent_success[missing-frames-queued]": 0.15143679299967516, + "tests/test_detection_mirror.py::test_an_unusable_response_is_a_failure_not_a_silent_success[non-json-body]": 0.07750246499972491, + "tests/test_detection_mirror.py::test_armed_offer_queues_the_frame": 0.060468771000159904, + "tests/test_detection_mirror.py::test_arming_clears_the_counters": 0.06862675000002127, + "tests/test_detection_mirror.py::test_batch_carries_position_tags_in_the_pipeline_shape": 0.05858871499981433, + "tests/test_detection_mirror.py::test_batch_groups_by_node_and_carries_config": 0.09292493199973251, + "tests/test_detection_mirror.py::test_batch_skips_a_node_whose_config_left_the_registry": 0.14517039699967427, + "tests/test_detection_mirror.py::test_comma_separated_targets_are_trimmed": 0.19529205899971203, + "tests/test_detection_mirror.py::test_configure_from_env_resets_health_state": 0.05210481499989328, + "tests/test_detection_mirror.py::test_each_target_receives_the_same_batch_with_its_own_key": 0.06344719300000179, + "tests/test_detection_mirror.py::test_mismatched_url_and_key_counts_refuse_to_arm[more-keys-than-urls]": 0.06708889900005488, + "tests/test_detection_mirror.py::test_mismatched_url_and_key_counts_refuse_to_arm[more-urls-than-keys]": 0.05454222700018363, + "tests/test_detection_mirror.py::test_mismatched_url_and_key_counts_refuse_to_arm[two-urls-no-key]": 0.06253775100003622, + "tests/test_detection_mirror.py::test_offer_holds_the_wire_model_not_a_converted_dict": 0.05774507299997822, + "tests/test_detection_mirror.py::test_offer_is_a_no_op_when_unarmed": 0.10027801000001091, + "tests/test_detection_mirror.py::test_one_failing_target_leaves_the_other_healthy_and_credited": 0.10153253400017093, + "tests/test_detection_mirror.py::test_one_http_url_refuses_the_whole_configuration": 0.049885788000210596, + "tests/test_detection_mirror.py::test_send_posts_the_bulk_shape_with_the_key": 0.0645032429999901, + "tests/test_detection_mirror.py::test_the_lifespan_arms_the_mirror_and_starts_its_task": 0.20541956799979744, + "tests/test_detection_mirror.py::test_the_task_fans_one_drain_out_to_every_target": 0.08323695099988981, + "tests/test_detection_mirror.py::test_the_task_returns_at_once_when_unarmed": 0.08013418599989564, + "tests/test_detection_mirror.py::test_unset_url_leaves_the_mirror_unarmed": 0.0836892600000283, + "tests/test_digitalocean_client.py::test_aclose_closes_the_pool": 0.058204132999890135, + "tests/test_digitalocean_client.py::test_droplet_tag_defaults": 0.06276817900015885, + "tests/test_digitalocean_client.py::test_get_json_refuses_without_token": 0.05917983899985302, + "tests/test_digitalocean_client.py::test_get_json_sends_the_bearer_per_request_and_raises_on_status": 0.05552828200006843, + "tests/test_digitalocean_client.py::test_token_is_read_per_call": 0.06651530799990724, + "tests/test_digitalocean_client.py::test_wrappers_unwrap_the_envelope": 0.05964438599994537, + "tests/test_e2e_pipeline.py::TestBackgroundFrameLoop::test_loop_drains_queue_and_increments_counter[asyncio]": 0.1680120999999417, + "tests/test_e2e_pipeline.py::TestBackgroundFrameLoop::test_loop_promotes_track_to_active[asyncio]": 0.25379632299996047, + "tests/test_e2e_pipeline.py::TestFrameProcessorTracker::test_extra_frames_beyond_n_window_do_not_reset_track": 0.22892364599988468, + "tests/test_e2e_pipeline.py::TestFrameProcessorTracker::test_first_frame_creates_tentative_track": 0.06749259999969581, + "tests/test_e2e_pipeline.py::TestFrameProcessorTracker::test_m_of_n_frames_promote_track_to_active": 0.17419151999979476, + "tests/test_e2e_pipeline.py::TestFrameProcessorTracker::test_node_registered_in_analytics_after_frames": 0.07092356199996175, + "tests/test_e2e_pipeline.py::TestFrameProcessorTracker::test_promoted_track_appears_in_event_writer": 0.30451931299990065, + "tests/test_e2e_pipeline.py::TestFrameProcessorTracker::test_promoted_track_has_stable_id": 0.291379920999816, + "tests/test_e2e_pipeline.py::TestFullE2E::test_handshake_order_enforced": 0.060173042000315036, + "tests/test_e2e_pipeline.py::TestFullE2E::test_node_registered_in_state_after_handshake": 0.06998799599978156, + "tests/test_e2e_pipeline.py::TestFullE2E::test_node_status_disconnected_after_eof": 0.07943847299998197, + "tests/test_e2e_pipeline.py::TestFullE2E::test_tcp_frames_flow_through_to_active_track": 0.2521725300000526, + "tests/test_e2e_pipeline.py::TestFullIntegrationPath::test_analytics_refresh_includes_node_after_processing": 0.29459067599987065, + "tests/test_e2e_pipeline.py::TestFullIntegrationPath::test_leaderboard_includes_node_with_detections": 0.3492121170002065, + "tests/test_e2e_pipeline.py::TestFullIntegrationPath::test_missed_detections_computed_for_node": 0.2627388310002061, + "tests/test_e2e_pipeline.py::TestFullIntegrationPath::test_storage_endpoint_disk_fields": 0.05623766299959243, + "tests/test_e2e_pipeline.py::TestGeolocationAfterPromotion::test_adsb_track_populates_active_geo_aircraft": 0.694100841999898, + "tests/test_e2e_pipeline.py::TestGeolocationAfterPromotion::test_geolocation_attempted_after_promotion": 0.5705835139999635, + "tests/test_e2e_pipeline.py::TestGeolocationAfterPromotion::test_non_adsb_track_geo_attempted": 0.5232779540001502, + "tests/test_e2e_pipeline.py::TestRegressions::test_frame_without_timestamp_is_rejected": 0.06523343600019871, + "tests/test_e2e_pipeline.py::TestRegressions::test_malformed_json_does_not_crash_handler": 0.09600479700020514, + "tests/test_e2e_pipeline.py::TestRegressions::test_non_finite_adsb_coords_skipped_in_enqueue": 0.07745605399986744, + "tests/test_e2e_pipeline.py::TestRegressions::test_pipeline_does_not_share_state_across_nodes": 0.4148670309998579, + "tests/test_e2e_pipeline.py::TestTCPDetectionEnqueue::test_config_ack_sent_before_any_frame": 0.07102297399978852, + "tests/test_e2e_pipeline.py::TestTCPDetectionEnqueue::test_invalid_config_sends_nack_and_rejects_node": 0.05892216699999153, + "tests/test_e2e_pipeline.py::TestTCPDetectionEnqueue::test_queue_full_increments_drop_counter": 0.060034524999991845, + "tests/test_e2e_pipeline.py::TestTCPDetectionEnqueue::test_rate_limiter_disabled_enqueues_all": 0.06832365900004334, + "tests/test_e2e_pipeline.py::TestTCPDetectionEnqueue::test_rate_limiter_drops_rapid_duplicates": 0.05968641499998739, + "tests/test_e2e_pipeline.py::TestTCPDetectionEnqueue::test_single_detection_lands_in_queue": 0.06267381699990437, + "tests/test_email_address.py::test_addresses_are_accepted[ADA@EXAMPLE.COM]": 0.055574902999978804, + "tests/test_email_address.py::test_addresses_are_accepted[a@b.co]": 0.11391028400021241, + "tests/test_email_address.py::test_addresses_are_accepted[ada.lovelace+nodes@example.co.uk]": 0.06717296800024997, + "tests/test_email_address.py::test_addresses_are_accepted[ada@example.com]": 0.08100948500009508, + "tests/test_email_address.py::test_non_addresses_are_refused[ ada@example.com-leading space]": 0.06117458800008535, + "tests/test_email_address.py::test_non_addresses_are_refused[-empty]": 0.05914747399992848, + "tests/test_email_address.py::test_non_addresses_are_refused[@example.com-no local part]": 0.06089838800016878, + "tests/test_email_address.py::test_non_addresses_are_refused[ada @example.com-inner space]": 0.05330247100005181, + "tests/test_email_address.py::test_non_addresses_are_refused[ada example.com-no at sign]": 0.0609870860000683, + "tests/test_email_address.py::test_non_addresses_are_refused[ada@-no domain]": 0.0705439060000117, + "tests/test_email_address.py::test_non_addresses_are_refused[ada@.com-empty leading label]": 0.06642992500019318, + "tests/test_email_address.py::test_non_addresses_are_refused[ada@@example.com-two at signs]": 0.05971832800014454, + "tests/test_email_address.py::test_non_addresses_are_refused[ada@example.-empty trailing label]": 0.07201137599986396, + "tests/test_email_address.py::test_non_addresses_are_refused[ada@example.com -trailing space]": 0.059014229000013074, + "tests/test_email_address.py::test_non_addresses_are_refused[ada@example@com-at sign in the domain]": 0.06054627699995763, + "tests/test_email_address.py::test_non_addresses_are_refused[ada@localhost-single-label domain]": 0.0550315100001626, + "tests/test_email_address.py::test_non_addresses_are_refused[ada\\n@example.com-newline]": 0.07464337800001886, + "tests/test_email_address.py::test_non_addresses_are_refused[ada\\t@example.com-tab]": 0.054588240999919435, + "tests/test_email_address.py::test_the_bound_matches_the_column_the_two_tables_share": 0.0767385220003689, + "tests/test_env_parity_scoping.py::TestCloudflareAccessEntries::test_the_access_audience_may_differ_per_environment[staging]": 0.050769874000025084, + "tests/test_env_parity_scoping.py::TestCloudflareAccessEntries::test_the_access_audience_may_differ_per_environment[test]": 0.06262495800001489, + "tests/test_env_parity_scoping.py::TestCloudflareAccessEntries::test_the_anonymous_admin_flag_may_never_differ[staging]": 0.02491816899987498, + "tests/test_env_parity_scoping.py::TestCloudflareAccessEntries::test_the_anonymous_admin_flag_may_never_differ[test]": 0.03294230000005882, + "tests/test_env_parity_scoping.py::TestEdgeNetworkEntry::test_edge_network_divergence_is_not_allowed_anywhere[staging-networks.retina-edge.external]": 0.055943038000123124, + "tests/test_env_parity_scoping.py::TestEdgeNetworkEntry::test_edge_network_divergence_is_not_allowed_anywhere[staging-services.server.networks.retina-edge]": 0.06760043100007351, + "tests/test_env_parity_scoping.py::TestEdgeNetworkEntry::test_edge_network_divergence_is_not_allowed_anywhere[test-networks.retina-edge.external]": 0.08514067999999497, + "tests/test_env_parity_scoping.py::TestEdgeNetworkEntry::test_edge_network_divergence_is_not_allowed_anywhere[test-services.server.networks.retina-edge]": 0.07932819300003757, + "tests/test_env_parity_scoping.py::TestMailTransport::test_staging_may_not": 0.029272169000023496, + "tests/test_env_parity_scoping.py::TestMailTransport::test_the_sender_identity_may_never_differ": 0.028907682999943063, + "tests/test_env_parity_scoping.py::TestMailTransport::test_the_test_droplet_may_diverge": 0.02768051699968055, + "tests/test_env_parity_scoping.py::TestScopeValidation::test_scoping_to_the_reference_is_rejected": 0.02983317100029126, + "tests/test_env_parity_scoping.py::TestScopeValidation::test_unknown_environment_is_rejected": 0.026752543999919, + "tests/test_env_parity_scoping.py::TestScoping::test_non_matching_path_is_never_allowed": 0.07354723299999932, + "tests/test_env_parity_scoping.py::TestScoping::test_scoped_entry_applies_only_to_its_own_environment": 0.04643134200023269, + "tests/test_env_parity_scoping.py::TestScoping::test_unscoped_entry_applies_to_every_environment": 0.05735078800012161, + "tests/test_epoch_alignment.py::TestProcessSolverItemWiring::test_flag_off_leaves_the_input_untouched": 0.019728387000213843, + "tests/test_epoch_alignment.py::TestProcessSolverItemWiring::test_flag_on_hands_the_solver_aligned_delays": 0.015817687999970076, + "tests/test_epoch_alignment.py::TestPureHelper::test_each_delay_moves_by_its_own_doppler_rate": 0.033783466999921075, + "tests/test_epoch_alignment.py::TestPureHelper::test_fc_spelled_FC_is_accepted": 0.0185715889997482, + "tests/test_epoch_alignment.py::TestPureHelper::test_input_is_not_mutated": 0.02202083799988941, + "tests/test_epoch_alignment.py::TestPureHelper::test_newest_measurement_is_the_epoch_and_is_untouched": 0.03660819200013066, + "tests/test_epoch_alignment.py::TestPureHelper::test_single_measurement_input_is_a_no_op": 0.021453457000234266, + "tests/test_epoch_alignment.py::TestPureHelper::test_timestamp_ms_is_restamped_to_the_epoch": 0.027561486999729823, + "tests/test_epoch_alignment.py::TestPureHelper::test_zero_doppler_measurement_is_unchanged": 0.020117111999979898, + "tests/test_epoch_alignment.py::TestSignAgainstSimulatorGeometry::test_alignment_moves_the_stale_delay_toward_the_truth[vel_kms0]": 0.02143094000007295, + "tests/test_epoch_alignment.py::TestSignAgainstSimulatorGeometry::test_alignment_moves_the_stale_delay_toward_the_truth[vel_kms1]": 0.017686644999685086, + "tests/test_epoch_alignment.py::TestSignAgainstSimulatorGeometry::test_alignment_moves_the_stale_delay_toward_the_truth[vel_kms2]": 0.02057732599996598, + "tests/test_epoch_alignment.py::TestSignAgainstSimulatorGeometry::test_correction_and_truth_share_a_sign": 0.021002953000333946, + "tests/test_epoch_alignment.py::TestSkipPath::test_missing_field_skips_the_whole_input[broken0]": 0.024725839000211636, + "tests/test_epoch_alignment.py::TestSkipPath::test_missing_field_skips_the_whole_input[broken1]": 0.025871158999962063, + "tests/test_epoch_alignment.py::TestSkipPath::test_missing_t_s_key_entirely_skips": 0.029920539999693574, + "tests/test_epoch_alignment.py::TestSkipPath::test_unknown_node_config_skips": 0.03183884600002784, + "tests/test_external_adsb_units.py::test_a_non_numeric_ground_speed_becomes_unknown_rather_than_raising": 0.02378167199958625, + "tests/test_external_adsb_units.py::test_adsb_lol_ground_speed_is_converted_from_knots": 0.017567340999903536, + "tests/test_external_adsb_units.py::test_both_feeds_agree_on_one_aircrafts_speed": 0.037454778999972405, + "tests/test_external_adsb_units.py::test_opensky_velocity_is_stored_unconverted": 0.020138462999966578, + "tests/test_feed_gc_task.py::TestGCWithoutAFeedBuild::test_feed_gc_is_in_the_staleness_registry": 0.020353893000219614, + "tests/test_feed_gc_task.py::TestGCWithoutAFeedBuild::test_stale_arc_motion_is_pruned_by_the_task_body": 0.019530734999989363, + "tests/test_feed_gc_task.py::TestGCWithoutAFeedBuild::test_the_loop_reports_success_to_the_task_registry": 0.023731928999723095, + "tests/test_feed_gc_task.py::TestMultinodeExpiryOffTheTimer::test_assisted_entry_keeps_its_longer_lane_expiry": 0.026978188000384762, + "tests/test_feed_gc_task.py::TestMultinodeExpiryOffTheTimer::test_fresh_dark_entry_is_kept": 0.024068877999980032, + "tests/test_feed_gc_task.py::TestMultinodeExpiryOffTheTimer::test_pruning_twice_is_idempotent": 0.022699956999758797, + "tests/test_feed_gc_task.py::TestMultinodeExpiryOffTheTimer::test_stale_dark_entry_is_popped_and_its_anomaly_hex_discarded": 0.023220412999990003, + "tests/test_feed_gc_task.py::TestMultinodeExpiryOffTheTimer::test_the_task_body_runs_the_multinode_expiry_too": 0.021248743999649378, + "tests/test_feed_history_snapshot.py::test_arc_builder_survives_a_concurrently_appended_history": 0.6288505080001414, + "tests/test_feed_multinode.py::TestAdsbAssistedLane::test_adsb_keyed_entry_is_assisted_and_carries_the_hex": 0.017462570000134292, + "tests/test_feed_multinode.py::TestAdsbAssistedLane::test_dark_keyed_entry_is_not_assisted_and_has_no_hex": 0.016626781000240953, + "tests/test_feed_multinode.py::TestAdsbAssistedLane::test_result_adsb_hex_does_not_override_a_dark_key": 0.017571383999893442, + "tests/test_feed_multinode.py::TestGsSource::test_kf_entry_gs_uses_learned_velocity_by_default": 0.01929011300012462, + "tests/test_feed_multinode.py::TestGsSource::test_no_kf_entry_uses_solve_velocity": 0.01927002800016453, + "tests/test_feed_multinode.py::TestGsSource::test_track_gs_source_solve_restores_old_behaviour": 0.01936881300002824, + "tests/test_feed_multinode.py::TestGsSource::test_vel_untrusted_active_mode_drops_solve_sourced_gs_track": 0.017407859000059034, + "tests/test_feed_multinode.py::TestGsSource::test_vel_untrusted_active_mode_keeps_kf_sourced_gs_track": 0.02385088200003338, + "tests/test_feed_multinode.py::TestMultinodeDeadReckonCap::test_assisted_entry_past_the_cap_holds_its_dead_reckoned_point": 0.05810816699977295, + "tests/test_feed_multinode.py::TestMultinodeDeadReckonCap::test_dr_horizon_is_capped_at_mn_dr_cap_s": 0.01712020099989786, + "tests/test_feed_multinode.py::TestMultinodeDeadReckonCap::test_fresh_entry_is_dead_reckoned_fully": 0.018625596999982008, + "tests/test_feed_multinode.py::TestMultinodeDeadReckonCap::test_solve_epoch_position_equals_the_fix_at_zero_age": 0.018515952999905494, + "tests/test_feed_multinode.py::TestMultinodeDeadReckonCap::test_solve_epoch_position_is_published_undead_reckoned": 0.016340392000074644, + "tests/test_feed_multinode.py::TestMultinodeDeadReckonSource::test_kf_entry_dr_uses_learned_velocity_by_default": 0.020412489999898753, + "tests/test_feed_multinode.py::TestMultinodeDeadReckonSource::test_track_dr_source_solve_restores_old_behaviour": 0.021356136999884257, + "tests/test_feed_multinode.py::TestMultinodeEntryFailureIsolation::test_one_raising_entry_does_not_abort_the_build": 0.02204190199995537, + "tests/test_feed_multinode.py::TestMultinodeEntryFailureIsolation::test_repeated_failures_are_rate_limited_to_one_log_line": 0.017439525000327194, + "tests/test_feed_multinode.py::TestMultinodeLaneExpiry::test_assisted_entry_at_the_same_age_survives": 0.01862261400015086, + "tests/test_feed_multinode.py::TestMultinodeLaneExpiry::test_assisted_entry_still_expires_at_60s": 0.01794511500020235, + "tests/test_feed_multinode.py::TestMultinodeLaneExpiry::test_dark_entry_inside_the_dark_expiry_is_rendered": 0.047024979000070743, + "tests/test_feed_multinode.py::TestMultinodeLaneExpiry::test_dark_entry_past_the_dark_expiry_is_dropped": 0.028771583999969153, + "tests/test_feed_multinode.py::TestSolveUncertaintyFields::test_dark_lane_gets_the_dark_floor_and_the_known_lane_does_not": 0.017602166999949986, + "tests/test_feed_multinode.py::TestSolveUncertaintyFields::test_formal_sigma_widens_the_disc": 0.017393284000036147, + "tests/test_feed_multinode.py::TestSolveUncertaintyFields::test_kf_state_supplies_the_velocity_sigma": 0.017962418000024627, + "tests/test_feed_multinode.py::TestSolveUncertaintyFields::test_known_lane_n2_entry_carries_the_bare_floor": 0.01691481000011663, + "tests/test_feed_multinode.py::TestSolveUncertaintyFields::test_no_kf_state_uses_the_default_velocity_sigma": 0.017074112000045716, + "tests/test_feed_multinode.py::TestSolveUncertaintyFields::test_result_adsb_hex_does_not_soften_a_dark_key": 0.017713009999852147, + "tests/test_feed_multinode.py::TestSolveUncertaintyFields::test_solve_epoch_position_rides_along_with_the_sigma": 0.017612104999898293, + "tests/test_feed_multinode.py::TestVelTrustDisplay::test_trusted_active_mode_keeps_gs_track_no_flag": 0.01850595799965049, + "tests/test_feed_multinode.py::TestVelTrustDisplay::test_untrusted_active_mode_drops_gs_track": 0.01737691000016639, + "tests/test_feed_multinode.py::TestVelTrustDisplay::test_untrusted_default_env_keeps_gs_track": 0.018051382000294325, + "tests/test_frame_processor.py::TestAppendTrackHistory::test_appends_position": 0.016019339000195032, + "tests/test_frame_processor.py::TestAppendTrackHistory::test_different_positions_appended": 0.018841969000050085, + "tests/test_frame_processor.py::TestAppendTrackHistory::test_respects_maxlen": 0.017064800000071045, + "tests/test_frame_processor.py::TestAppendTrackHistory::test_skips_duplicate_positions": 0.01724597499992342, + "tests/test_frame_processor.py::TestAppendTrackHistory::test_survives_gc_popping_the_public_twin_mid_append": 0.016348065999864048, + "tests/test_frame_processor.py::TestArchiveBuffering::test_failed_flush_retains_frames_in_buffer": 0.016995182000073328, + "tests/test_frame_processor.py::TestArchiveBuffering::test_flush_empty_is_noop": 0.01667173000009825, + "tests/test_frame_processor.py::TestArchiveBuffering::test_successful_flush_drops_persisted_prefix": 0.01721903900011057, + "tests/test_frame_processor.py::TestBuildCombinedAircraftJson::test_adsb_only_excluded_from_map": 0.02512393800020618, + "tests/test_frame_processor.py::TestBuildCombinedAircraftJson::test_detecting_nodes_lists_every_node_seeing_a_hex": 0.022264541999902576, + "tests/test_frame_processor.py::TestBuildCombinedAircraftJson::test_pending_arcs_cover_adsb_tracks_with_buffer_key_fields": 0.024168952000081845, + "tests/test_frame_processor.py::TestBuildCombinedAircraftJson::test_pending_arcs_still_skip_tentative_tracks": 0.024760590000141747, + "tests/test_frame_processor.py::TestBuildCombinedAircraftJson::test_returns_valid_structure": 0.02422854700012067, + "tests/test_frame_processor.py::TestConfirmedTrackViewsStaleness::test_five_second_old_coasting_track_is_excluded_at_three": 0.016975986999796078, + "tests/test_frame_processor.py::TestConfirmedTrackViewsStaleness::test_fresh_track_survives_beside_a_stale_one": 0.01631447600016145, + "tests/test_frame_processor.py::TestConfirmedTrackViewsStaleness::test_no_frame_time_disables_the_filter": 0.017143338999858315, + "tests/test_frame_processor.py::TestConfirmedTrackViewsStaleness::test_same_track_is_included_at_ten": 0.015857962000154657, + "tests/test_frame_processor.py::TestConfirmedTrackViewsStaleness::test_tentative_is_still_excluded_regardless_of_freshness": 0.023330005999923742, + "tests/test_frame_processor.py::TestConfirmedTrackViewsStaleness::test_zero_disables_the_filter": 0.016330551999999443, + "tests/test_frame_processor.py::TestDedupAircraft::test_contributing_nodes_merged_onto_survivor": 0.01909302299986848, + "tests/test_frame_processor.py::TestDedupAircraft::test_distinct_aircraft_are_not_merged": 0.0169736110001395, + "tests/test_frame_processor.py::TestDedupAircraft::test_distinct_ground_truth_never_merged_despite_proximity": 0.016663269999980912, + "tests/test_frame_processor.py::TestDedupAircraft::test_empty_and_singleton_are_passthrough": 0.01619996799990986, + "tests/test_frame_processor.py::TestDedupAircraft::test_multinode_wins_over_single_node_arc": 0.049368628999900466, + "tests/test_frame_processor.py::TestDedupAircraft::test_one_aircraft_one_entry_via_ground_truth": 0.11115919700000632, + "tests/test_frame_processor.py::TestDedupAircraft::test_proximity_fallback_without_ground_truth": 0.018760074000056193, + "tests/test_frame_processor.py::TestDedupAircraft::test_vertically_separated_aircraft_not_merged": 0.017589747999863903, + "tests/test_frame_processor.py::TestDedupMultinodeSplitAndFreshness::test_altitude_separated_multinode_entries_both_survive": 0.016376707000063107, + "tests/test_frame_processor.py::TestDedupMultinodeSplitAndFreshness::test_distant_arc_still_collapses_under_the_solve": 0.01887427499991645, + "tests/test_frame_processor.py::TestDedupMultinodeSplitAndFreshness::test_equal_node_count_breaks_on_freshness": 0.01668907299995226, + "tests/test_frame_processor.py::TestDedupMultinodeSplitAndFreshness::test_fresher_higher_node_solve_wins_the_tie": 0.016097855000225536, + "tests/test_frame_processor.py::TestDedupMultinodeSplitAndFreshness::test_proximity_path_unchanged_apart_from_the_tie_break": 0.018247861999952875, + "tests/test_frame_processor.py::TestGetNodeConfigs::test_leaves_the_stored_config_alone": 0.020048061000125017, + "tests/test_frame_processor.py::TestGetNodeConfigs::test_omits_an_unplaced_node": 0.018159255000000485, + "tests/test_frame_processor.py::TestGetNodeConfigs::test_resolves_a_null_altitude": 0.02851841499978036, + "tests/test_frame_processor.py::TestGetNodeConfigs::test_returns_configs": 0.01596888900007798, + "tests/test_frame_processor.py::TestGetNodeConfigs::test_skips_missing_config": 0.019096459999900617, + "tests/test_frame_processor.py::TestGetNodeConfigs::test_wanted_narrows_the_snapshot": 0.01631250699983866, + "tests/test_frame_processor.py::TestGetOrCreateNodePipeline::test_creates_pipeline_for_new_node": 0.03131979699992371, + "tests/test_frame_processor.py::TestGetOrCreateNodePipeline::test_null_altitudes_default_rather_than_reach_the_geolocator_as_none": 0.04374962199995025, + "tests/test_frame_processor.py::TestGetOrCreateNodePipeline::test_returns_cached_pipeline": 0.03239276599992991, + "tests/test_frame_processor.py::TestGetOrCreateNodePipeline::test_returns_none_for_a_node_with_no_usable_position": 0.025562927999999374, + "tests/test_frame_processor.py::TestGroundTruthGhostPruning::test_aircraft_between_pushes_survives": 0.017671362000328372, + "tests/test_frame_processor.py::TestGroundTruthGhostPruning::test_despawned_aircraft_is_pruned": 0.016440393000038966, + "tests/test_frame_processor.py::TestGroundTruthGhostPruning::test_live_aircraft_survives": 0.01726124099968729, + "tests/test_frame_processor.py::TestGroundTruthGhostPruning::test_track_history_keeps_the_longer_window": 0.01961813799994161, + "tests/test_frame_processor.py::TestMultinodeToAircraft::test_basic_conversion": 0.023558997000009185, + "tests/test_frame_processor.py::TestMultinodeToAircraft::test_clean_result_discards_hex": 0.017191537000144308, + "tests/test_frame_processor.py::TestMultinodeToAircraft::test_contributing_track_anomaly_propagates": 0.019848314999762806, + "tests/test_frame_processor.py::TestMultinodeToAircraft::test_subsonic_not_flagged": 0.016903971000147067, + "tests/test_frame_processor.py::TestMultinodeToAircraft::test_supersonic_speed_is_not_flagged": 0.017301126000120348, + "tests/test_frame_processor.py::TestNormalizeHexKey::test_basic": 0.017023357000198303, + "tests/test_frame_processor.py::TestNormalizeHexKey::test_empty": 0.028667133999988437, + "tests/test_frame_processor.py::TestNormalizeHexKey::test_none": 0.026811948999693413, + "tests/test_frame_processor.py::TestNormalizeHexKey::test_whitespace": 0.024615076999907615, + "tests/test_frame_processor.py::TestPositionDistanceKm::test_known_distance": 0.024625594999861278, + "tests/test_frame_processor.py::TestPositionDistanceKm::test_same_point": 0.03803603000005751, + "tests/test_frame_processor.py::TestPositionDistanceKm::test_small_distance": 0.022266431999923952, + "tests/test_frame_processor.py::TestProcessOneFrame::test_claiming_anchored_inputs_reach_the_solver_queue": 0.032788322000214976, + "tests/test_frame_processor.py::TestProcessOneFrame::test_invalid_adsb_entries_skipped": 0.025862652999876445, + "tests/test_frame_processor.py::TestProcessOneFrame::test_process_valid_frame": 0.05606476099956126, + "tests/test_frame_processor.py::TestProcessOneFrame::test_sets_aircraft_dirty_with_adsb": 0.026130714999908378, + "tests/test_frame_processor.py::TestResolveAltitudes::test_a_null_takes_the_terrain_default": 0.017349955000099726, + "tests/test_frame_processor.py::TestResolveAltitudes::test_an_absent_altitude_takes_the_terrain_default": 0.019225422999625152, + "tests/test_frame_processor.py::TestResolveAltitudes::test_sea_level_survives": 0.016243095999925572, + "tests/test_frame_processor.py::TestResolveGroundTruthHex::test_exact_match": 0.015131439000242608, + "tests/test_frame_processor.py::TestResolveGroundTruthHex::test_no_match_too_far": 0.015867538999827957, + "tests/test_frame_processor.py::TestResolveGroundTruthHex::test_proximity_match": 0.016263969999954497, + "tests/test_frame_worker_sharding.py::test_drain_helpers_walk_every_shard": 0.017454452000038145, + "tests/test_frame_worker_sharding.py::test_frames_from_different_nodes_still_run_in_parallel": 0.048495927999965716, + "tests/test_frame_worker_sharding.py::test_health_check_sees_a_backlog_spread_across_shards": 0.017055572999879587, + "tests/test_frame_worker_sharding.py::test_one_worker_is_a_plain_fifo": 0.07850525900016692, + "tests/test_frame_worker_sharding.py::test_queue_depth_counts_frames_parked_in_shards": 0.03782818800004861, + "tests/test_frame_worker_sharding.py::test_same_node_frames_are_serial_and_keep_arrival_order": 0.3517052069998954, + "tests/test_frame_worker_sharding.py::test_shard_mapping_is_stable_across_processes": 0.021213865000163423, + "tests/test_fresh_adsb_fallback.py::TestFreshAdsbFallback::test_altitude_m_to_ft_conversion": 0.01971650799987401, + "tests/test_fresh_adsb_fallback.py::TestFreshAdsbFallback::test_external_cache_used_when_live_absent": 0.017142092000312914, + "tests/test_fresh_adsb_fallback.py::TestFreshAdsbFallback::test_external_cache_used_when_live_stale": 0.017259415000125955, + "tests/test_fresh_adsb_fallback.py::TestFreshAdsbFallback::test_heading_passthrough": 0.019456103000266012, + "tests/test_fresh_adsb_fallback.py::TestFreshAdsbFallback::test_live_feed_returned_when_fresh": 0.017557938999971157, + "tests/test_fresh_adsb_fallback.py::TestFreshAdsbFallback::test_missing_lat_uses_solver_fallback": 0.018938607000109187, + "tests/test_fresh_adsb_fallback.py::TestFreshAdsbFallback::test_non_numeric_alt_defaults_to_zero": 0.01893383000015092, + "tests/test_fresh_adsb_fallback.py::TestFreshAdsbFallback::test_non_numeric_velocity_defaults_to_zero": 0.018773163999867393, + "tests/test_fresh_adsb_fallback.py::TestFreshAdsbFallback::test_none_alt_defaults_to_zero": 0.01749487800020688, + "tests/test_fresh_adsb_fallback.py::TestFreshAdsbFallback::test_velocity_ms_to_knots_conversion": 0.018434949000038614, + "tests/test_fresh_adsb_fallback.py::TestFreshAdsbFallback::test_zero_alt_m_produces_zero_alt_baro": 0.01666903000000275, + "tests/test_geo_delay_freshness.py::TestAdsbBootstrapCarriesDelay::test_first_encounter_fallback_seeds_delay_from_newest_detection": 0.0236603139996987, + "tests/test_geo_delay_freshness.py::TestDelayRefreshBetweenSolves::test_identity_evidence_comes_from_the_newest_detection": 0.024836943999844152, + "tests/test_geo_delay_freshness.py::TestDelayRefreshBetweenSolves::test_lazy_event_refreshes_delay_via_track_ref": 0.024347423999870443, + "tests/test_geo_delay_freshness.py::TestDelayRefreshBetweenSolves::test_materialized_event_refreshes_delay": 0.02336793399990711, + "tests/test_geo_delay_freshness.py::TestDelayRefreshBetweenSolves::test_materialized_multi_detection_event_takes_the_newest": 0.02349097400019673, + "tests/test_geo_delay_freshness.py::TestDelayRefreshBetweenSolves::test_zero_delay_does_not_clobber_last_good_value": 0.024249727000096755, + "tests/test_geo_delay_freshness.py::TestSolvedTrackUsesNewestDetection::test_latest_delay_is_newest_not_oldest": 0.022570183999732762, + "tests/test_geo_equivalence.py::TestInNodeBeam::test_a_zero_beam_width_is_treated_as_missing": 0.01871466100010366, + "tests/test_geo_equivalence.py::TestInNodeBeam::test_an_explicit_aim_wins_over_broadside": 0.01580077799985702, + "tests/test_geo_equivalence.py::TestInNodeBeam::test_it_agrees_on_a_randomised_sweep": 0.10834200099975533, + "tests/test_geo_equivalence.py::TestInNodeBeam::test_no_tx_and_no_aim_skips_the_bearing_test": 0.015960962999770345, + "tests/test_geo_equivalence.py::TestNodeBeamParamsMalformedInput::test_infinite_max_range_km_falls_back_to_the_default": 0.020125049999933253, + "tests/test_geo_equivalence.py::TestNodeBeamParamsMalformedInput::test_nan_azimuth_with_tx_falls_back_to_real_broadside_not_null_island": 0.0157157470000584, + "tests/test_geo_equivalence.py::TestNodeBeamParamsMalformedInput::test_nan_azimuth_without_tx_falls_back_to_none_not_a_fabricated_bearing": 0.01631292900015069, + "tests/test_geo_equivalence.py::TestNodeBeamParamsMalformedInput::test_nan_beam_width_falls_back_to_the_shared_default": 0.022662367000066297, + "tests/test_geo_equivalence.py::TestNodeBeamParamsMalformedInput::test_non_finite_max_bistatic_range_km_is_treated_as_absent": 0.022053558000152407, + "tests/test_geo_equivalence.py::TestNodeBeamParamsMalformedInput::test_string_zero_max_bistatic_no_longer_causes_a_false_miss": 0.020468216999915967, + "tests/test_geo_equivalence.py::TestNodeBeamParamsMalformedInput::test_string_zero_max_bistatic_range_is_cast_to_a_falsy_float": 0.022399621999966257, + "tests/test_geo_equivalence.py::TestNodeBeamParamsMalformedInput::test_various_malformed_azimuths_all_fall_back_the_same_way[-inf]": 0.021380613999781417, + "tests/test_geo_equivalence.py::TestNodeBeamParamsMalformedInput::test_various_malformed_azimuths_all_fall_back_the_same_way[inf]": 0.018964150000329028, + "tests/test_geo_equivalence.py::TestNodeBeamParamsMalformedInput::test_various_malformed_azimuths_all_fall_back_the_same_way[nan]": 0.01621568199993817, + "tests/test_geo_equivalence.py::TestNodeBeamParamsMalformedInput::test_various_malformed_azimuths_all_fall_back_the_same_way[not-a-number]": 0.020031464999874515, + "tests/test_geo_equivalence.py::TestPrimitives::test_bearing_matches": 0.019509148999759418, + "tests/test_geo_equivalence.py::TestPrimitives::test_bistatic_delay_matches_the_helper": 0.019838259000152902, + "tests/test_geo_equivalence.py::TestPrimitives::test_haversine_matches": 0.019495776000212572, + "tests/test_geo_equivalence.py::TestPrimitives::test_haversine_matches_the_helpers_asin_form": 0.02185506999990139, + "tests/test_golden_path.py::TestGoldenPath_Layer1_TCPHandshake::test_config_ack_sent_to_node": 0.02794706400004543, + "tests/test_golden_path.py::TestGoldenPath_Layer1_TCPHandshake::test_detection_frames_land_in_queue": 0.02877594799997496, + "tests/test_golden_path.py::TestGoldenPath_Layer1_TCPHandshake::test_node_registered_after_config": 0.029169492999699287, + "tests/test_golden_path.py::TestGoldenPath_Layer1_TCPHandshake::test_node_status_set_after_disconnect": 0.020652708000170605, + "tests/test_golden_path.py::TestGoldenPath_Layer2_FrameProcessor::test_active_track_has_stable_id": 0.06303686199998992, + "tests/test_golden_path.py::TestGoldenPath_Layer2_FrameProcessor::test_first_frame_creates_tentative_track": 0.025006714000028296, + "tests/test_golden_path.py::TestGoldenPath_Layer2_FrameProcessor::test_geolocation_attempted_after_promotion": 0.14824073699992368, + "tests/test_golden_path.py::TestGoldenPath_Layer2_FrameProcessor::test_n_frames_promote_to_active": 0.06053528299980826, + "tests/test_golden_path.py::TestGoldenPath_Layer3_HttpApi::test_aircraft_json_parseable": 0.14641713900005016, + "tests/test_golden_path.py::TestGoldenPath_Layer3_HttpApi::test_dashboard_counts_node": 0.15384570699961841, + "tests/test_golden_path.py::TestGoldenPath_Layer3_HttpApi::test_dashboard_publishes_the_refresh_cadence": 0.15325450399996043, + "tests/test_golden_path.py::TestGoldenPath_Layer3_HttpApi::test_health_ok": 0.1462788469998486, + "tests/test_golden_path.py::TestGoldenPath_Layer3_HttpApi::test_radar_analytics_returns_json": 0.14556940099987514, + "tests/test_golden_path.py::TestGoldenPath_Layer3_HttpApi::test_radar_nodes_returns_json": 0.15516493299992362, + "tests/test_golden_path.py::TestGoldenPath_Layer3_HttpApi::test_unauthenticated_admin_write_rejected": 0.1454096660002051, + "tests/test_golden_path.py::TestGoldenPath_Layer4_FullStack::test_full_golden_path": 0.20753611200007072, + "tests/test_health_branches.py::TestCoverageRebuildBacklogStaleness::test_a_rebuild_waiting_too_long_is_degraded": 0.018593378999867127, + "tests/test_health_branches.py::TestCoverageRebuildBacklogStaleness::test_a_steady_queue_that_drains_is_healthy": 0.017470168000045305, + "tests/test_health_branches.py::TestCoverageRebuildBacklogStaleness::test_an_empty_queue_is_healthy_whatever_the_gauge_says": 0.018170866000218666, + "tests/test_health_branches.py::TestCoverageRebuildBacklogStaleness::test_the_ceiling_is_configurable": 0.018364781999935076, + "tests/test_health_branches.py::TestCoverageRebuildBacklogStaleness::test_the_cold_start_warm_up_does_not_fire": 0.016492913000092813, + "tests/test_health_branches.py::TestHealthDegradedBranches::test_anomaly_flood": 0.14929310699994858, + "tests/test_health_branches.py::TestHealthDegradedBranches::test_coverage_rebuild_backlog": 0.14138144899993677, + "tests/test_health_branches.py::TestHealthDegradedBranches::test_coverage_rebuild_backlog_within_budget_is_healthy": 0.03275591300007363, + "tests/test_health_branches.py::TestHealthDegradedBranches::test_high_miss_rate": 0.1564513989999341, + "tests/test_health_branches.py::TestHealthDegradedBranches::test_invalid_accuracy_bytes_handled": 0.159021163000034, + "tests/test_health_branches.py::TestHealthDegradedBranches::test_no_active_tracks": 0.15563459999998486, + "tests/test_health_branches.py::TestHealthDegradedBranches::test_node_dropout": 0.15807740499985812, + "tests/test_health_branches.py::TestHealthDegradedBranches::test_solver_accuracy_degraded": 0.15342208399988522, + "tests/test_health_branches.py::TestHealthDegradedBranches::test_solver_latency_high": 0.1528574330000083, + "tests/test_health_branches.py::TestHealthDegradedBranches::test_solver_queue_backpressure": 0.16134035599998242, + "tests/test_health_branches.py::TestHealthDegradedBranches::test_solver_queue_drops": 0.14934071600009702, + "tests/test_health_branches.py::TestMissRateThreshold::test_a_blind_network_is_still_degraded": 0.017212057000051573, + "tests/test_health_branches.py::TestMissRateThreshold::test_nodes_with_nothing_in_range_do_not_drag_the_average_down": 0.016763037999908192, + "tests/test_health_branches.py::TestMissRateThreshold::test_the_observed_operating_band_is_not_degraded": 0.03146304100027919, + "tests/test_health_branches.py::TestMissRateThreshold::test_the_threshold_is_configurable": 0.016972507000218684, + "tests/test_health_branches.py::TestMissRateThreshold::test_the_threshold_is_the_boundary_it_claims_to_be": 0.016445757999917987, + "tests/test_health_branches.py::TestSolverQueueDropsRecency::test_a_lifetime_count_alone_is_not_degraded": 0.015991509000059523, + "tests/test_health_branches.py::TestSolverQueueDropsRecency::test_a_process_that_never_dropped_is_not_degraded": 0.016440105999890875, + "tests/test_health_branches.py::TestSolverQueueDropsRecency::test_a_recent_drop_is_degraded_and_names_both_counts": 0.01741645300012351, + "tests/test_health_branches.py::TestSolverQueueDropsRecency::test_record_solver_queue_drop_bumps_and_stamps": 0.01800300500008234, + "tests/test_health_branches.py::TestSolverQueueDropsRecency::test_the_window_is_configurable": 0.019392552000226715, + "tests/test_health_branches.py::TestSyntheticFleetAdvertisement::test_a_degraded_server_still_answers_the_question": 0.1489393540000492, + "tests/test_health_branches.py::TestSyntheticFleetAdvertisement::test_a_healthy_server_with_a_fleet_says_so": 0.13603063000005022, + "tests/test_health_branches.py::TestSyntheticFleetAdvertisement::test_a_healthy_server_without_one_says_so_too": 0.1496450869999535, + "tests/test_health_branches.py::TestSyntheticFleetAdvertisement::test_the_readiness_probe_body_is_left_alone": 0.14653599600001144, + "tests/test_health_branches.py::TestThresholdSettings::test_a_malformed_value_falls_back_instead_of_raising": 0.01751686099987637, + "tests/test_health_branches.py::TestThresholdSettings::test_an_unset_value_uses_the_default": 0.0166020239998943, + "tests/test_health_branches.py::TestThresholdSettings::test_node_dropout_threshold_is_read_the_same_way": 0.017200789999833432, + "tests/test_health_branches.py::TestThresholdSettings::test_the_setting_is_read_per_call_not_once_at_import": 0.016002939999680166, + "tests/test_health_branches.py::TestThresholdSettings::test_whitespace_is_treated_as_unset": 0.01591626500021448, + "tests/test_health_monitor.py::TestComputeHealthIssues::test_healthy_state_has_no_issues": 0.03109204499992302, + "tests/test_health_monitor.py::TestComputeHealthIssues::test_known_lane_samples_do_not_flag_accuracy": 0.017112984999812397, + "tests/test_health_monitor.py::TestComputeHealthIssues::test_multinode_still_flags_alongside_known_lane_samples": 0.01664280799991502, + "tests/test_health_monitor.py::TestComputeHealthIssues::test_single_node_arc_error_does_not_flag_accuracy": 0.01632652600005713, + "tests/test_health_monitor.py::TestComputeHealthIssues::test_solver_drops_flagged_as_warning": 0.01801157299996703, + "tests/test_health_monitor.py::TestComputeHealthIssues::test_trusted_solve_degradation_flags_accuracy": 0.016524039999922024, + "tests/test_health_monitor.py::TestDarkSamplesReachTheProbe::test_accurate_dark_solves_do_not": 0.016228894000050786, + "tests/test_health_monitor.py::TestDarkSamplesReachTheProbe::test_dark_samples_are_binned_under_multinode_solve": 0.01709198599996853, + "tests/test_health_monitor.py::TestDarkSamplesReachTheProbe::test_degraded_dark_solves_fire_the_alert": 0.017680218999885255, + "tests/test_health_monitor.py::TestRunCycle::test_fires_alert_per_issue": 0.015463937999811606, + "tests/test_health_monitor.py::TestRunCycle::test_resolved_alert_when_issue_clears": 0.015637981000054424, + "tests/test_health_routes.py::TestHealth::test_health_degraded_disk_low": 0.13845122600014292, + "tests/test_health_routes.py::TestHealth::test_health_degraded_queue_saturated": 0.14681602999985444, + "tests/test_health_routes.py::TestHealth::test_health_degraded_stale_task": 0.14661771800001588, + "tests/test_health_routes.py::TestHealth::test_health_disk_usage_exception_does_not_crash": 0.15971273300033317, + "tests/test_health_routes.py::TestHealth::test_health_ok": 0.13946655099994132, + "tests/test_health_routes.py::TestHealth::test_health_strict_returns_200_when_ok": 0.1444321519998084, + "tests/test_health_routes.py::TestHealth::test_health_strict_returns_503_when_degraded": 0.14212757899986173, + "tests/test_id_utils.py::TestIsTransponderHex::test_everything_else_is_refused[A1B2C3]": 0.01759709499992823, + "tests/test_id_utils.py::TestIsTransponderHex::test_everything_else_is_refused[None]": 0.0175943520000601, + "tests/test_id_utils.py::TestIsTransponderHex::test_everything_else_is_refused[]": 0.017261429999962274, + "tests/test_id_utils.py::TestIsTransponderHex::test_everything_else_is_refused[a1b2c3d]": 0.02533083000002989, + "tests/test_id_utils.py::TestIsTransponderHex::test_everything_else_is_refused[a1b2c]": 0.020880500999737706, + "tests/test_id_utils.py::TestIsTransponderHex::test_everything_else_is_refused[g1b2c3]": 0.015982685999915702, + "tests/test_id_utils.py::TestIsTransponderHex::test_everything_else_is_refused[mn-adsb-a1b2c3]": 0.01691154499962977, + "tests/test_id_utils.py::TestIsTransponderHex::test_everything_else_is_refused[obj-01373]": 0.022110953999799676, + "tests/test_id_utils.py::TestIsTransponderHex::test_everything_else_is_refused[~~a1b2c3]": 0.016367158999855747, + "tests/test_id_utils.py::TestIsTransponderHex::test_transponder_shapes_pass[000001]": 0.0184724030000325, + "tests/test_id_utils.py::TestIsTransponderHex::test_transponder_shapes_pass[a1b2c3]": 0.025917012000036266, + "tests/test_id_utils.py::TestIsTransponderHex::test_transponder_shapes_pass[abcdef]": 0.018344679999927394, + "tests/test_id_utils.py::TestIsTransponderHex::test_transponder_shapes_pass[~a1b2c3]": 0.01922465200004808, + "tests/test_infrastructure.py::test_a_droplet_with_no_metrics_is_named_rather_than_left_blank": 0.02265128299995922, + "tests/test_infrastructure.py::test_a_malformed_sample_costs_its_own_metric_only": 0.01962330599985762, + "tests/test_infrastructure.py::test_a_non_finite_sample_is_skipped_not_clamped": 0.016785577999826273, + "tests/test_infrastructure.py::test_an_http_status_is_named_in_the_error": 0.022113799999942785, + "tests/test_infrastructure.py::test_build_snapshot_reports_unconfigured_without_token": 0.018523464999816497, + "tests/test_infrastructure.py::test_build_snapshot_survives_one_check_failing": 0.029522862000021632, + "tests/test_infrastructure.py::test_build_snapshot_survives_one_droplet_failing": 0.02224902500006465, + "tests/test_infrastructure.py::test_build_snapshot_survives_one_metric_failing": 0.021681551000028776, + "tests/test_infrastructure.py::test_check_and_droplet_pipelines_overlap": 0.018215077999911955, + "tests/test_infrastructure.py::test_concurrent_cold_callers_share_one_build": 0.021855061999985992, + "tests/test_infrastructure.py::test_cpu_series_is_busy_fraction_of_counter_deltas": 0.015647776999685448, + "tests/test_infrastructure.py::test_cpu_series_skips_an_interval_a_mode_has_no_sample_for": 0.016457726999988154, + "tests/test_infrastructure.py::test_cpu_series_without_idle_or_with_flat_counters_is_empty": 0.016275102999770752, + "tests/test_infrastructure.py::test_route_answers_503_when_a_cold_build_overruns": 0.02904177499999605, + "tests/test_infrastructure.py::test_route_returns_the_snapshot": 0.14021940900011032, + "tests/test_infrastructure.py::test_route_serves_the_last_good_snapshot_when_a_build_overruns": 0.03422863600030723, + "tests/test_infrastructure.py::test_snapshot_is_cached_for_the_ttl": 0.022796614999833764, + "tests/test_infrastructure.py::test_summarise_check_status_and_worst_uptime": 0.017224577000433783, + "tests/test_infrastructure.py::test_the_route_is_gated_on_require_admin": 0.01780498300013278, + "tests/test_infrastructure.py::test_unconfigured_snapshot_is_not_cached": 0.018423976999883962, + "tests/test_infrastructure.py::test_used_fraction_aligns_on_timestamp_and_skips_gaps": 0.01653030299985403, + "tests/test_ingest_event_loop.py::TestIngestDoesNotBlockTheLoop::test_bulk_registration_leaves_the_app_responsive": 2.0489944799999193, + "tests/test_ingest_event_loop.py::TestIngestDoesNotBlockTheLoop::test_single_node_registration_leaves_the_app_responsive": 2.030052937000164, + "tests/test_ingest_event_loop.py::TestRegistrationStillHappens::test_bulk_node_is_registered": 0.07118803599996681, + "tests/test_ingest_event_loop.py::TestRegistrationStillHappens::test_single_node_is_registered": 0.05248736399994414, + "tests/test_ingest_event_loop.py::TestRegistrationStillHappens::test_the_registration_reaches_the_associator": 0.04086518199983402, + "tests/test_ingest_event_loop.py::TestTheNonHttpPathDoesNotBlockTheLoop::test_v1_pipeline_registration_leaves_the_loop_free": 2.083184326000037, + "tests/test_ingest_event_loop.py::TestTheNonHttpRegistrationStillHappens::test_the_v1_node_reaches_the_registries": 0.0834045280000737, + "tests/test_known_claiming.py::TestContention::test_a_track_truncated_away_does_not_contest": 0.07070911400001023, + "tests/test_known_claiming.py::TestContention::test_claim_over_an_established_dark_track_is_contested": 0.07415684999978112, + "tests/test_known_claiming.py::TestContention::test_contested_still_set_for_a_track_inside_the_cap": 0.07911432999981116, + "tests/test_known_claiming.py::TestContention::test_ineligible_dark_track_does_not_contest": 0.05868326699987847, + "tests/test_known_claiming.py::TestContention::test_projection_set_is_capped": 0.08440502099961122, + "tests/test_known_claiming.py::TestGateVsFixAge::test_aged_fix_widens_the_gate": 0.07839546199988945, + "tests/test_known_claiming.py::TestGateVsFixAge::test_fresh_fix_keeps_the_base_gate": 0.08554473799995321, + "tests/test_known_claiming.py::TestGateVsFixAge::test_past_the_age_cap_is_no_candidate_at_all": 0.07887836100007917, + "tests/test_known_claiming.py::TestGlobalAssignment::test_no_geometry_claims_nothing": 0.0811539599999378, + "tests/test_known_claiming.py::TestGlobalAssignment::test_one_to_one_beats_greedy_on_a_crossing_pair": 0.07152869800029293, + "tests/test_known_claiming.py::TestGlobalAssignment::test_positionless_node_claims_nothing": 0.08296365300020625, + "tests/test_known_claiming.py::TestGlobalAssignment::test_ungated_detection_stays_dark": 0.0721910030001709, + "tests/test_known_claiming.py::TestGroundSentinelInTags::test_grounded_tag_does_not_silently_disable_the_lane": 0.08761555000023691, + "tests/test_known_claiming.py::TestGroundSentinelInTags::test_grounded_tag_still_claims": 0.06421970499991403, + "tests/test_known_claiming.py::TestModesInProcessOneFrame::test_binding_strips_claimed_indices_from_the_pipeline_frame": 0.12606631100015875, + "tests/test_known_claiming.py::TestModesInProcessOneFrame::test_known_lane_gets_its_own_perf_bucket": 0.1583450030000222, + "tests/test_known_claiming.py::TestModesInProcessOneFrame::test_off_computes_nothing": 0.11515274800012776, + "tests/test_known_claiming.py::TestModesInProcessOneFrame::test_perf_line_carries_the_known_bucket": 0.09403857899997092, + "tests/test_known_claiming.py::TestModesInProcessOneFrame::test_shadow_records_the_claim_but_changes_nothing_downstream": 0.13201978600000075, + "tests/test_known_claiming.py::TestNodeBiasHook::test_missing_module_degrades_silently": 0.07838586900015798, + "tests/test_known_claiming.py::TestNodeBiasHook::test_residuals_are_recorded_signed": 0.0842282209998757, + "tests/test_known_claiming.py::TestNodeTagPrecedence::test_node_supplied_tag_wins_over_a_better_cached_match": 0.06772561199977645, + "tests/test_known_claiming.py::TestNodeTagPrecedence::test_tag_is_not_regated": 0.06009239200011507, + "tests/test_known_claiming.py::TestRangePrescreen::test_prescreen_never_disagrees_with_the_gate[antimeridian]": 0.29297446700002183, + "tests/test_known_claiming.py::TestRangePrescreen::test_prescreen_never_disagrees_with_the_gate[bistatic]": 0.4000829210001484, + "tests/test_known_claiming.py::TestRangePrescreen::test_prescreen_never_disagrees_with_the_gate[coverage_limit]": 0.4225145469999916, + "tests/test_known_claiming.py::TestRangePrescreen::test_prescreen_never_disagrees_with_the_gate[fov]": 0.47043945499967776, + "tests/test_known_claiming.py::TestRangePrescreen::test_prescreen_never_disagrees_with_the_gate[high_latitude]": 0.3452514099997188, + "tests/test_known_claiming.py::TestRangePrescreen::test_prescreen_never_disagrees_with_the_gate[monostatic]": 0.3550634569999147, + "tests/test_known_claiming.py::TestRegistryContract::test_claim_record_shape": 0.07634830699998929, + "tests/test_known_claiming.py::TestRegistryContract::test_reset_for_tests_clears_registry_and_counters": 0.06834892200004106, + "tests/test_known_claiming.py::TestStripAndGc::test_feed_gc_prunes_stale_hexes_only": 0.0765645599999516, + "tests/test_known_claiming.py::TestStripAndGc::test_non_list_keys_pass_through": 0.06696926999984498, + "tests/test_known_claiming.py::TestStripAndGc::test_strip_all_claimed_leaves_empty_lists": 0.07695531800004574, + "tests/test_known_claiming.py::TestVisibilityGate::test_beyond_the_footprint_claims_nothing": 0.08150843199996416, + "tests/test_known_claiming.py::TestVisibilityGate::test_in_beam_candidate_still_claims": 0.07286987600014072, + "tests/test_known_claiming.py::TestVisibilityGate::test_node_tag_is_not_visibility_gated": 0.06365670899981524, + "tests/test_known_claiming.py::TestVisibilityGate::test_out_of_beam_bearing_claims_nothing": 0.07034733500017865, + "tests/test_known_claiming.py::TestVisibilityGate::test_prescreen_rejects_are_counted_as_visibility_rejects": 0.0724315900001784, + "tests/test_known_claiming.py::TestVisibilityGate::test_the_learned_coverage_prior_does_not_gate_claims": 0.09219864299984692, + "tests/test_known_claiming.py::TestVisibilityGate::test_the_wedge_and_footprint_still_gate_with_a_prior_present": 0.06600241099999948, + "tests/test_known_claiming.py::TestWorldGate::test_handshake_verdict_beats_the_prefix_rule": 0.0720540479999272, + "tests/test_known_claiming.py::TestWorldGate::test_node_tag_is_not_world_gated": 0.08059979300014675, + "tests/test_known_claiming.py::TestWorldGate::test_real_node_skips_a_sim_world_candidate": 0.08128012700012732, + "tests/test_known_claiming.py::TestWorldGate::test_sim_node_claims_a_sim_world_candidate": 0.07288177999976142, + "tests/test_known_claiming.py::TestWorldGate::test_sim_node_skips_a_real_world_candidate": 0.07640716299943051, + "tests/test_known_claiming.py::TestWorldGate::test_unregistered_node_falls_back_to_the_prefix_rule": 0.07515811999996913, + "tests/test_known_claiming.py::TestWorldGate::test_untagged_candidate_is_not_gated": 0.07663154000010763, + "tests/test_known_lane.py::TestAccuracySampleThrottle::test_distinct_hexes_are_throttled_independently": 0.0702124530000674, + "tests/test_known_lane.py::TestAccuracySampleThrottle::test_same_hex_samples_again_once_the_window_elapses": 0.06831299899999976, + "tests/test_known_lane.py::TestAccuracySampleThrottle::test_second_attempt_within_the_window_is_not_sampled": 0.07321726499981196, + "tests/test_known_lane.py::TestAccuracySampleThrottle::test_throttle_map_is_swept_of_dead_hexes": 0.06982017299992549, + "tests/test_known_lane.py::TestAccuracySampleThrottle::test_unconverged_attempts_do_not_consume_the_window": 0.07342741399997976, + "tests/test_known_lane.py::TestClaimSelection::test_a_newer_claim_reopens_the_hex": 0.08462904899988644, + "tests/test_known_lane.py::TestClaimSelection::test_contested_claims_are_skipped": 0.06734959200002777, + "tests/test_known_lane.py::TestClaimSelection::test_incompatible_timestamps_drop_the_lagging_node": 0.07668442599992886, + "tests/test_known_lane.py::TestClaimSelection::test_malformed_claim_entries_are_survived": 0.08282473000008395, + "tests/test_known_lane.py::TestClaimSelection::test_missing_adsb_fix_produces_no_attempt": 0.10716661800006477, + "tests/test_known_lane.py::TestClaimSelection::test_newest_claim_per_node_wins": 0.07340509700020448, + "tests/test_known_lane.py::TestClaimSelection::test_single_node_claims_produce_no_attempt": 0.0674909529998331, + "tests/test_known_lane.py::TestClaimSelection::test_stale_claims_produce_no_attempt": 0.06869069300000774, + "tests/test_known_lane.py::TestClaimSelection::test_unchanged_registry_is_not_resolved_twice": 0.07012171700012004, + "tests/test_known_lane.py::TestClassification::test_displaced_solve_is_a_ghost_and_still_sampled": 0.08885873100007302, + "tests/test_known_lane.py::TestClassification::test_ghost_is_never_published_even_in_binding": 0.07302884399996401, + "tests/test_known_lane.py::TestClassification::test_solver_exception_counts_as_no_converge": 0.07400902599988513, + "tests/test_known_lane.py::TestClassification::test_unconverged_solve_records_but_never_samples": 0.06501418800007741, + "tests/test_known_lane.py::TestMaybeRunPass::test_interval_gate_holds_between_passes": 0.07807045700019444, + "tests/test_known_lane.py::TestMaybeRunPass::test_live_flag_absent_is_a_noop": 0.0809323260000383, + "tests/test_known_lane.py::TestMaybeRunPass::test_never_raises_even_on_a_garbage_registry": 0.0957120410000698, + "tests/test_known_lane.py::TestMaybeRunPass::test_off_mode_returns_before_the_lock": 0.08328371899983722, + "tests/test_known_lane.py::TestModeGating::test_binding_publishes_under_the_hex": 0.07494136299987986, + "tests/test_known_lane.py::TestModeGating::test_binding_supersedes_the_regular_pipelines_entry": 0.07807766899986746, + "tests/test_known_lane.py::TestModeGating::test_off_mode_does_nothing_at_all": 0.07086544300000241, + "tests/test_known_lane.py::TestModeGating::test_shadow_records_but_publishes_nothing": 0.08864307499993629, + "tests/test_known_lane.py::TestModeGating::test_unrecognised_live_mode_falls_back_to_off": 0.07356153799992171, + "tests/test_known_lane.py::TestModeGating::test_unrecognised_override_falls_back_to_off": 0.07549540300010449, + "tests/test_known_lane.py::TestPublishFailureContainment::test_a_failing_publish_does_not_skip_the_remaining_hexes": 0.08225026600007368, + "tests/test_known_lane.py::TestPublishResidualGate::test_absent_rms_delay_publishes": 0.07269815600011498, + "tests/test_known_lane.py::TestPublishResidualGate::test_high_rms_truth_match_is_classified_sampled_but_not_published": 0.09228048400018452, + "tests/test_known_lane.py::TestPublishResidualGate::test_low_rms_truth_match_publishes_ungated": 0.06660066599988568, + "tests/test_known_lane.py::TestPublishResidualGate::test_raising_the_bound_publishes_the_same_solve": 0.06910714100013138, + "tests/test_known_lane.py::TestPublishResidualGate::test_shadow_mode_never_counts_a_rejection": 0.062435332999712045, + "tests/test_known_lane.py::TestRealSolve::test_three_node_claims_solve_and_tag_n_nodes": 0.06657711599996219, + "tests/test_known_lane.py::TestRealSolve::test_two_node_claims_solve_and_truth_match": 0.08334646799971779, + "tests/test_known_lane.py::TestSliceAAbsence::test_absent_known_claims_is_a_noop": 0.08115975400005482, + "tests/test_known_lane.py::TestSliceAAbsence::test_absent_mode_reads_as_off": 0.08393233100036923, + "tests/test_known_track_follow.py::TestFollowClaim::test_c_a_fresh_fix_stays_with_path_2": 0.08444090100010726, + "tests/test_known_track_follow.py::TestFollowClaim::test_c_a_new_node_claims_from_the_lanes_own_position": 0.11919379400001162, + "tests/test_known_track_follow.py::TestFollowClaim::test_c_nothing_is_offered_below_the_solve_count": 0.0760967509997954, + "tests/test_known_track_follow.py::TestFollowClaim::test_c_nothing_is_offered_for_a_stale_entry": 0.06835992399987845, + "tests/test_known_track_follow.py::TestFollowClaim::test_c_the_original_stale_fix_is_carried_when_a_hold_has_one": 0.11576079600035882, + "tests/test_known_track_follow.py::TestFollowClaim::test_c_the_path_is_off_when_the_max_age_is_zero": 0.06538008000006812, + "tests/test_known_track_follow.py::TestReanchor::test_b_a_fix_seeded_ghost_never_reanchors": 0.09845744399990508, + "tests/test_known_track_follow.py::TestReanchor::test_b_inconsistent_kf_ghosts_do_not_reanchor": 0.09058498199988207, + "tests/test_known_track_follow.py::TestReanchor::test_b_two_consistent_kf_ghosts_reanchor_and_publish": 0.08238855800004785, + "tests/test_known_track_follow.py::TestStaleAdsbVelocity::test_a_fresh_fix_still_seeds_the_velocity": 0.07266736299993681, + "tests/test_known_track_follow.py::TestStaleAdsbVelocity::test_a_stale_eastbound_fix_does_not_hold_the_filter_east": 0.10218719499994222, + "tests/test_known_track_follow.py::test_solver_stats_export_the_new_counters": 0.1416023340002539, + "tests/test_known_track_hold.py::TestDelayRatePhysics::test_delay_rate_sign_against_the_simulator": 0.08539159800011475, + "tests/test_known_track_hold.py::TestHoldPath::test_fresh_fix_that_agrees_refreshes_the_hold": 0.06691536799985442, + "tests/test_known_track_hold.py::TestHoldPath::test_fresh_fix_that_disagrees_drops_the_hold": 0.060790813999801685, + "tests/test_known_track_hold.py::TestHoldPath::test_gap_beyond_the_window_expires_the_hold": 0.06082806199970037, + "tests/test_known_track_hold.py::TestHoldPath::test_hold_precedes_dark_follow": 0.07124960599958285, + "tests/test_known_track_hold.py::TestHoldPath::test_tagged_frame_then_silence_keeps_the_claim": 0.10305258900007175, + "tests/test_known_track_hold.py::TestHoldPath::test_zero_gap_is_the_rollback_lever": 0.09396576100016318, + "tests/test_known_track_hold.py::TestKnownLaneStaleSeed::test_fresh_fix_seeds_from_the_fix": 0.09859130399991045, + "tests/test_known_track_hold.py::TestKnownLaneStaleSeed::test_stale_fix_seeds_from_the_lanes_own_solve": 0.08503840300022603, + "tests/test_known_track_hold.py::TestKnownLaneStaleSeed::test_stale_fix_without_a_prior_solve_falls_back": 0.0905066809998516, + "tests/test_known_track_hold.py::TestSimulationIntegration::test_link_survives_the_transponder_going_quiet": 0.1741639629999554, + "tests/test_lifespan_cleanup.py::test_cleanup_awaits_tasks_before_final_writes[None-False]": 0.22872950599980868, + "tests/test_lifespan_cleanup.py::test_cleanup_awaits_tasks_before_final_writes[None-True]": 0.21580714699985037, + "tests/test_lifespan_cleanup.py::test_cleanup_awaits_tasks_before_final_writes[executor-False]": 0.2279138389999389, + "tests/test_lifespan_cleanup.py::test_cleanup_awaits_tasks_before_final_writes[executor-True]": 0.21642609600007745, + "tests/test_lifespan_cleanup.py::test_cleanup_awaits_tasks_before_final_writes[solver-False]": 0.23099956700002622, + "tests/test_lifespan_cleanup.py::test_cleanup_awaits_tasks_before_final_writes[solver-True]": 0.21925720899957923, + "tests/test_lifespan_cleanup.py::test_partial_startup_still_stops_workers": 0.24012073500011866, + "tests/test_lifespan_cleanup.py::test_restart_refuses_stopping_solver_before_restoring_or_priming_state": 0.10689413299996886, + "tests/test_lifespan_cleanup.py::test_restart_refuses_unfinished_background_work_before_restoring_state": 0.07990381200011143, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_a_bad_token_is_refused_the_same_way[ ]": 0.20448212499991314, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_a_bad_token_is_refused_the_same_way[%00]": 0.3160124769999584, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_a_bad_token_is_refused_the_same_way[../../etc/passwd]": 0.37172836800004916, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_a_bad_token_is_refused_the_same_way[]": 0.20071015799976522, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_a_bad_token_is_refused_the_same_way[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]": 0.23642836199974226, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_a_bad_token_is_refused_the_same_way[never-issued]": 0.19346358799998598, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_a_get_on_the_consume_route_does_not_redeem": 0.44635776700010865, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_a_second_redemption_fails": 0.45993027399981656, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_an_existing_superuser_cannot_sign_in_by_link": 0.42268040599992673, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_redeeming_opens_a_session": 0.398242737000146, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_redeeming_twice_does_not_create_two_accounts": 0.45163086399998065, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_the_account_is_never_an_administrator": 0.3042617809996955, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_the_account_records_how_it_was_made": 0.4100647130003381, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_the_cookie_is_a_session_for_that_person": 0.3155956690002313, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_the_cookie_is_httponly_and_secure": 0.6448601890001555, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_the_failure_message_does_not_distinguish_the_reason": 0.4286948910000774, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_the_signed_in_user_carries_what_me_would_say_about_the_fleet": 0.30784826499984774, + "tests/test_magic_link_routes.py::TestConsumeMagicLink::test_the_superuser_refusal_is_indistinguishable_from_a_dead_link": 0.5271004910000556, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_a_capped_address_still_gets_202": 0.21719267699995726, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_a_malformed_address_is_rejected": 0.22899959799997305, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_a_refused_request_mints_no_token": 0.21727860700002566, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_accepts_and_mails_a_link": 0.3165111869998327, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_an_unknown_address_gets_the_same_answer_as_a_known_one": 0.3122766499998306, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_no_session_cookie_is_set_by_asking": 0.2390983279997272, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_the_link_host_comes_from_configuration_not_the_request": 0.22515284300015992, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_the_link_lands_at_the_consoles_root": 0.3281487430001562, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_the_mail_reads_as_written": 0.22911083000008148, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_the_mailed_link_carries_the_token_and_nothing_else_does": 0.20982264899976144, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_the_response_body_never_carries_the_token": 0.2196843650003757, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_unavailable_when_mail_is_not_configured": 0.197671008000043, + "tests/test_magic_link_routes.py::TestRequestMagicLink::test_unavailable_when_the_link_host_is_unknown": 0.21366035400001238, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[/%2F%2Fevil.example.com]": 0.20906148700009908, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[//evil.example.com/settings]": 0.19850026399990384, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[//evil.example.com]": 0.2104496649999419, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[/\\\\evil.example.com]": 0.1971781079998891, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]": 0.20671652300006826, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[/set tings]": 0.19601452299980338, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[/settings#danger]": 0.23455013300008432, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[/settings?tab=security]": 0.2170358649998434, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[]": 0.20251639299999624, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[https://evil.example.com/]": 0.3198100690001411, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[javascript:alert(1)]": 0.22455147199980274, + "tests/test_magic_link_routes.py::TestSignInDestination::test_anything_but_a_plain_path_is_dropped_and_the_link_still_sent[settings]": 0.2285504960000253, + "tests/test_magic_link_routes.py::TestSignInDestination::test_it_does_not_change_the_answer": 0.38788652699986415, + "tests/test_magic_link_routes.py::TestSignInDestination::test_the_link_carries_it[/data/2026/09/17]": 0.2009902620000048, + "tests/test_magic_link_routes.py::TestSignInDestination::test_the_link_carries_it[/nodes/ret-0042]": 0.21745668899984594, + "tests/test_magic_link_routes.py::TestSignInDestination::test_the_link_carries_it[/settings]": 0.2150217880002856, + "tests/test_magic_link_routes.py::TestSignInDestination::test_the_link_carries_it[/sim/physics]": 0.2593679260000954, + "tests/test_magic_link_routes.py::TestSignInDestination::test_without_one_the_link_is_bare": 0.22210690699989755, + "tests/test_magic_link_routes.py::TestSourceDerivation::test_a_forwarding_header_from_an_untrusted_peer_buys_no_quota": 1.2550742849998642, + "tests/test_magic_link_routes.py::TestSourceDerivation::test_address_variants_share_quota[192.0.2.1-::ffff:192.0.2.1-192.0.2.2]": 0.09793598099986411, + "tests/test_magic_link_routes.py::TestSourceDerivation::test_address_variants_share_quota[2001:db8:1:2::1-2001:db8:1:2::2-2001:db8:1:3::1]": 0.08533211600001778, + "tests/test_magic_link_routes.py::TestSourceDerivation::test_trusted_proxy_uses_last_untrusted_hop": 0.0718200070000421, + "tests/test_magic_link_routes.py::TestSourceQuota::test_a_full_source_table_refuses_new_sources": 0.19883396100021855, + "tests/test_magic_link_routes.py::TestSourceQuota::test_beyond_the_quota_nothing_is_mailed": 0.3975664740000866, + "tests/test_magic_link_routes.py::TestSourceQuota::test_the_quota_counts_requests_not_addresses": 0.4499348329998156, + "tests/test_magic_links.py::TestConsumeMagicLink::test_a_second_redemption_fails": 0.10416896799983988, + "tests/test_magic_links.py::TestConsumeMagicLink::test_a_used_link_is_not_deleted": 0.1056513169999107, + "tests/test_magic_links.py::TestConsumeMagicLink::test_an_empty_token_fails_without_touching_the_database[ ]": 0.06387583500008986, + "tests/test_magic_links.py::TestConsumeMagicLink::test_an_empty_token_fails_without_touching_the_database[None]": 0.05688587699978598, + "tests/test_magic_links.py::TestConsumeMagicLink::test_an_empty_token_fails_without_touching_the_database[]": 0.17168439300030514, + "tests/test_magic_links.py::TestConsumeMagicLink::test_an_expired_link_fails": 0.0781132519998664, + "tests/test_magic_links.py::TestConsumeMagicLink::test_an_unknown_token_fails": 0.05849446600018382, + "tests/test_magic_links.py::TestConsumeMagicLink::test_redeeming_invalidates_the_addresss_other_links": 0.3570298559998264, + "tests/test_magic_links.py::TestConsumeMagicLink::test_redeeming_leaves_another_addresss_links_alone": 0.12099551299979794, + "tests/test_magic_links.py::TestConsumeMagicLink::test_returns_the_email": 0.08916349000014634, + "tests/test_magic_links.py::TestCreateMagicLink::test_asking_again_does_not_invalidate_the_outstanding_link": 0.10392043599995304, + "tests/test_magic_links.py::TestCreateMagicLink::test_email_is_normalised": 0.07219842100016649, + "tests/test_magic_links.py::TestCreateMagicLink::test_expiry_is_fifteen_minutes": 0.0678803240000434, + "tests/test_magic_links.py::TestCreateMagicLink::test_returns_a_token_and_stores_only_its_hash": 0.08656735299996399, + "tests/test_magic_links.py::TestCreateMagicLink::test_the_raw_token_appears_nowhere_in_the_row": 0.09521902699975726, + "tests/test_magic_links.py::TestCreateMagicLink::test_two_requests_give_two_different_tokens": 0.09531525899978988, + "tests/test_magic_links.py::TestOutstandingLinkCap::test_beyond_the_cap_no_link_is_issued": 0.16453790400009893, + "tests/test_magic_links.py::TestOutstandingLinkCap::test_expired_links_do_not_count_against_the_cap": 0.15785877999996956, + "tests/test_magic_links.py::TestOutstandingLinkCap::test_expired_rows_are_cleared_rather_than_accumulating": 0.10518892099980803, + "tests/test_magic_links.py::TestOutstandingLinkCap::test_the_cap_is_per_address": 0.16274875400017663, + "tests/test_magic_links.py::test_a_claim_link_cannot_be_redeemed_as_a_sign_in": 0.07980530400004682, + "tests/test_magic_links.py::test_a_refusal_by_intent_leaves_the_link_usable_by_its_rightful_redeemer": 0.07472703000007641, + "tests/test_magic_links.py::test_a_sign_in_link_cannot_be_redeemed_as_a_claim": 0.09500480699989566, + "tests/test_magic_links.py::test_a_sign_in_link_is_about_nobody_s_node": 0.11112172699995426, + "tests/test_magic_links.py::test_claiming_does_not_wipe_an_outstanding_sign_in_link": 0.11953520199995182, + "tests/test_magic_links.py::test_claiming_one_node_does_not_wipe_the_link_for_another": 0.1275196000001415, + "tests/test_magic_links.py::test_invalidating_an_unknown_handle_is_not_an_error": 0.07465739200006283, + "tests/test_magic_links.py::test_invalidating_makes_a_link_unredeemable": 0.10016005900001801, + "tests/test_magic_links.py::test_invalidating_one_link_leaves_the_others_alone": 0.1229320520001238, + "tests/test_magic_links.py::test_peeking_a_spent_link_gives_nothing": 0.12479437600018173, + "tests/test_magic_links.py::test_peeking_does_not_spend_the_link": 0.1271382470001754, + "tests/test_magic_links.py::test_peeking_is_bound_by_intent_like_redeeming": 0.08375894699975106, + "tests/test_magic_links.py::test_signing_in_does_not_wipe_an_outstanding_claim_link": 0.10767315099997177, + "tests/test_magic_links.py::test_the_cap_is_counted_per_intent": 0.14189794700018865, + "tests/test_magic_links.py::test_the_node_travels_with_a_claim_link": 0.07741006600031142, + "tests/test_magic_links.py::test_the_sweep_still_clears_abandoned_links_of_the_same_intent": 0.09779315800005861, + "tests/test_mail.py::TestCloudflareRequiresItsSettings::test_complete_configuration_resolves": 0.06455450600014956, + "tests/test_mail.py::TestCloudflareRequiresItsSettings::test_each_missing_setting_is_unconfigured_and_named[CLOUDFLARE_ACCOUNT_ID]": 0.06520930799979396, + "tests/test_mail.py::TestCloudflareRequiresItsSettings::test_each_missing_setting_is_unconfigured_and_named[CLOUDFLARE_EMAIL_TOKEN]": 0.06968269500021051, + "tests/test_mail.py::TestCloudflareRequiresItsSettings::test_each_missing_setting_is_unconfigured_and_named[MAIL_FROM]": 0.06633317799992255, + "tests/test_mail.py::TestLogDestination::test_log_transport_is_announced_loudly": 0.12353453800028547, + "tests/test_mail.py::TestLogDestination::test_names_the_transport_and_sender": 0.08733949800011942, + "tests/test_mail.py::TestLogDestination::test_never_prints_the_token": 0.2759143389998826, + "tests/test_mail.py::TestLogDestination::test_says_nothing_when_unconfigured": 0.06834036699979151, + "tests/test_mail.py::TestLogTransport::test_needs_no_token": 0.0636225559999275, + "tests/test_mail.py::TestLogTransport::test_refusal_leaves_mail_unconfigured_rather_than_falling_back": 0.0895618879999347, + "tests/test_mail.py::TestLogTransport::test_refused_in_production": 0.09789978300000257, + "tests/test_mail.py::TestSend::test_a_bare_sender_address_is_sent_without_a_name": 0.07785945999967225, + "tests/test_mail.py::TestSend::test_a_linefeed_in_a_header_is_refused_without_raising[subject]": 0.0780954220001604, + "tests/test_mail.py::TestSend::test_a_linefeed_in_a_header_is_refused_without_raising[to]": 0.08762119500011067, + "tests/test_mail.py::TestSend::test_a_network_failure_is_logged_and_returns_false[timeout]": 0.06527914600019358, + "tests/test_mail.py::TestSend::test_a_network_failure_is_logged_and_returns_false[unreachable]": 0.14227398799994262, + "tests/test_mail.py::TestSend::test_a_non_ascii_body_still_sends": 0.0714231520003068, + "tests/test_mail.py::TestSend::test_an_error_response_is_logged_with_cloudflares_reason": 0.06927158599978611, + "tests/test_mail.py::TestSend::test_an_error_response_that_is_not_json_does_not_raise": 0.07315885600019101, + "tests/test_mail.py::TestSend::test_an_undeliverable_recipient_is_a_failure[permanent_bounces]": 0.055788062000146965, + "tests/test_mail.py::TestSend::test_an_undeliverable_recipient_is_a_failure[suppressed_recipients]": 0.06155803200022092, + "tests/test_mail.py::TestSend::test_authenticates_with_the_token_as_a_bearer": 0.07220516499978658, + "tests/test_mail.py::TestSend::test_log_transport_keeps_a_long_url_unbroken": 0.08071402599989597, + "tests/test_mail.py::TestSend::test_log_transport_writes_the_body": 0.08934245499995086, + "tests/test_mail.py::TestSend::test_posts_to_the_accounts_send_endpoint": 0.0761650509998617, + "tests/test_mail.py::TestSend::test_sends_sender_recipient_subject_and_body": 0.07570096999984344, + "tests/test_mail.py::TestSend::test_the_request_has_a_timeout": 0.07001451599990105, + "tests/test_mail.py::TestSend::test_token_never_appears_in_logs_on_failure[error-response]": 0.07611372099995606, + "tests/test_mail.py::TestSend::test_token_never_appears_in_logs_on_failure[network]": 0.09903364600017994, + "tests/test_mail.py::TestSend::test_unconfigured_returns_false_and_does_not_raise": 0.07173373599971455, + "tests/test_mail.py::TestSendInBackground::test_a_thread_that_never_started_gives_its_slot_back": 0.06787753900016469, + "tests/test_mail.py::TestSendInBackground::test_delivery_runs_on_the_thread": 0.09204659600004561, + "tests/test_mail.py::TestSendInBackground::test_drops_the_send_once_the_cap_is_reached": 0.07464259800008222, + "tests/test_mail.py::TestSendInBackground::test_returns_without_waiting_for_delivery": 0.0630290710000736, + "tests/test_mail.py::TestSendInBackground::test_the_slot_is_released_when_delivery_finishes": 0.08730838400015273, + "tests/test_mail.py::TestSendInBackground::test_the_slot_is_released_when_delivery_raises": 0.07390541900031167, + "tests/test_mail.py::TestSendInBackground::test_thread_creation_failure_does_not_reach_the_caller": 0.0875096830000075, + "tests/test_mail.py::TestTransport::test_empty_string_treated_as_unset": 0.054599837000068874, + "tests/test_mail.py::TestTransport::test_unknown_value_warns_and_is_unconfigured": 0.07112531999996463, + "tests/test_mail.py::TestTransport::test_unset_does_not_warn": 0.07673354199960158, + "tests/test_mail.py::TestTransport::test_unset_is_unconfigured": 0.059893952999800604, + "tests/test_mail.py::TestTransport::test_value_is_case_insensitive_and_trimmed": 0.07200753999995868, + "tests/test_mail.py::TestTransport::test_whitespace_only_treated_as_unset": 0.05783903799988366, + "tests/test_mender_lookup.py::test_a_401_raises_mender_unreachable": 0.14167447200020433, + "tests/test_mender_lookup.py::test_a_5xx_raises_mender_unreachable": 0.08188471099992967, + "tests/test_mender_lookup.py::test_a_device_with_another_identity_resolves_to_none": 0.07392453500006013, + "tests/test_mender_lookup.py::test_a_full_page_logs_a_warning_and_still_resolves": 0.15180998799996814, + "tests/test_mender_lookup.py::test_a_garbage_mender_server_raises_mender_unreachable": 0.08976106799991612, + "tests/test_mender_lookup.py::test_a_json_object_body_raises_mender_unreachable": 0.09543496900028003, + "tests/test_mender_lookup.py::test_a_list_of_non_dict_elements_raises_mender_unreachable": 0.07847324199997274, + "tests/test_mender_lookup.py::test_a_malformed_device_ahead_of_the_requested_one_still_resolves_it": 0.07255767500009824, + "tests/test_mender_lookup.py::test_a_malformed_device_with_no_match_raises_mender_unreachable": 0.1398486479999974, + "tests/test_mender_lookup.py::test_a_malformed_timeout_raises_mender_unreachable": 0.09152188899997782, + "tests/test_mender_lookup.py::test_a_non_ascii_mender_server_raises_mender_unreachable": 0.11879134299988436, + "tests/test_mender_lookup.py::test_a_non_json_200_raises_mender_unreachable": 0.08227484899975934, + "tests/test_mender_lookup.py::test_a_non_list_auth_sets_raises_mender_unreachable": 0.07909725199988316, + "tests/test_mender_lookup.py::test_a_non_pem_pubkey_resolves_without_a_fingerprint": 0.08482669899967732, + "tests/test_mender_lookup.py::test_a_non_string_auth_set_id_resolves_without_it": 0.15721263700015697, + "tests/test_mender_lookup.py::test_a_non_string_node_id_raises_mender_unreachable": 0.09726525200017022, + "tests/test_mender_lookup.py::test_a_non_string_pubkey_resolves_without_a_fingerprint": 0.10400766400016437, + "tests/test_mender_lookup.py::test_a_pending_device_resolves_but_is_not_accepted": 0.1226058539996302, + "tests/test_mender_lookup.py::test_a_timeout_raises_mender_unreachable": 0.32564714399995864, + "tests/test_mender_lookup.py::test_accepted_status_with_no_accepted_auth_set_is_ambiguous": 0.07900427599997784, + "tests/test_mender_lookup.py::test_an_accepted_auth_set_with_a_non_accepted_status_warns_but_resolves_to_its_own_status": 0.09291846200017062, + "tests/test_mender_lookup.py::test_an_accepted_device_resolves": 0.08483299100021213, + "tests/test_mender_lookup.py::test_an_auth_set_list_with_a_non_dict_element_raises_mender_unreachable": 0.0874747479999769, + "tests/test_mender_lookup.py::test_an_empty_server_falls_back_to_the_default": 0.09377906999998231, + "tests/test_mender_lookup.py::test_an_empty_timeout_falls_back_to_the_default": 0.09752111700004207, + "tests/test_mender_lookup.py::test_an_unknown_device_resolves_to_none": 0.07487315700018371, + "tests/test_mender_lookup.py::test_identity_data_as_a_string_raises_mender_unreachable": 0.07883856000012202, + "tests/test_mender_lookup.py::test_mender_pat_set_after_import_is_picked_up": 0.0930719789998875, + "tests/test_mender_lookup.py::test_more_than_one_accepted_set_is_refused_rather_than_resolved": 0.09390257099994415, + "tests/test_metro_and_arcs.py::TestArcBuilderWithDelay::test_accepts_float_delay": 0.11530587199968068, + "tests/test_metro_and_arcs.py::TestArcBuilderWithDelay::test_accepts_track_object": 0.10600532100011151, + "tests/test_metro_and_arcs.py::TestArcBuilderWithDelay::test_zero_delay_returns_none": 0.0879428220000591, + "tests/test_metro_and_arcs.py::TestKnownMetros::test_has_atl_and_gvl": 0.11922604699998374, + "tests/test_metro_and_arcs.py::TestKnownMetros::test_metro_has_required_keys": 0.08989581800028645, + "tests/test_metro_and_arcs.py::TestParseMetroAreas::test_case_insensitive": 0.0946297279999726, + "tests/test_metro_and_arcs.py::TestParseMetroAreas::test_empty_string": 0.12074340200001643, + "tests/test_metro_and_arcs.py::TestParseMetroAreas::test_multiple_metros": 0.09014922299979844, + "tests/test_metro_and_arcs.py::TestParseMetroAreas::test_single_metro": 0.07671272300012788, + "tests/test_metro_and_arcs.py::TestParseMetroAreas::test_unknown_metro_skipped": 0.08756320699990283, + "tests/test_metro_and_arcs.py::TestParseMetroAreas::test_whitespace_handling": 0.09936264799989658, + "tests/test_migrations.py::test_0015_downgrade_hands_the_owners_back": 5.9006160779999846, + "tests/test_migrations.py::test_0015_folds_every_owner_into_the_claims": 4.899428382000224, + "tests/test_migrations.py::test_0015_refuses_an_owner_for_a_node_that_never_registered": 3.891568091999943, + "tests/test_migrations.py::test_0016_downgrade_drops_both_polled_radar_tables": 4.091734421999945, + "tests/test_migrations.py::test_every_migration_declares_rollback_safety": 0.04173016599997936, + "tests/test_migrations.py::test_every_migration_is_numbered_for_chain_order": 0.04671359600001779, + "tests/test_migrations.py::test_migrations_have_exactly_one_head": 4.3992050550000386, + "tests/test_migrations.py::test_migrations_produce_the_schema_create_all_produces": 5.943602804999955, + "tests/test_migrations.py::test_rollback_ahead_sentinel_matches_alembics_wording": 3.800091944000087, + "tests/test_migrations.py::test_upgrade_downgrade_upgrade_round_trips": 14.462358409999979, + "tests/test_migrations.py::test_upgrading_a_pre_alembic_database_succeeds": 8.405669718000127, + "tests/test_mlat_history.py::TestAnchoredN2DisplacementCap::test_anchored_n2_inside_the_tight_cap_is_published": 0.029249732000153017, + "tests/test_mlat_history.py::TestAnchoredN2DisplacementCap::test_anchored_n2_past_the_tight_cap_is_rejected": 0.02857424799981345, + "tests/test_mlat_history.py::TestAnchoredN2DisplacementCap::test_anchored_n3_keeps_the_lane_cap": 0.05538159900015671, + "tests/test_mlat_history.py::TestAnchoredN2DisplacementCap::test_bottom_up_n2_keeps_the_lane_cap": 0.032791842999813525, + "tests/test_mlat_history.py::TestAnchoredN2DisplacementCap::test_cap_is_tunable_without_a_deploy": 0.031393036999816104, + "tests/test_mlat_history.py::TestAnchoredN2DisplacementCap::test_default_cap_is_1_5_km": 0.03298386700021183, + "tests/test_mlat_history.py::TestDarkAccuracySamples::test_adsb_anchored_solve_is_not_double_sampled_here": 0.0400675300002149, + "tests/test_mlat_history.py::TestDarkAccuracySamples::test_known_lane_records_are_not_sampled_by_this_path": 0.04104403999963324, + "tests/test_mlat_history.py::TestDarkAccuracySamples::test_no_ground_truth_means_no_sample": 0.04755074300010165, + "tests/test_mlat_history.py::TestDarkAccuracySamples::test_published_dark_solve_with_gt_is_sampled": 0.06509054799971636, + "tests/test_mlat_history.py::TestDarkAccuracySamples::test_rejected_solve_is_not_sampled": 0.06491071499976897, + "tests/test_mlat_history.py::TestDisplacementCapByLane::test_a_narrowed_dark_cap_rejects_what_the_default_publishes": 0.02906962200017915, + "tests/test_mlat_history.py::TestDisplacementCapByLane::test_adsb_anchored_solve_keeps_the_tight_cap": 0.05223983099972429, + "tests/test_mlat_history.py::TestDisplacementCapByLane::test_adsb_reject_leaves_the_dark_counter_alone": 0.029522853999878862, + "tests/test_mlat_history.py::TestDisplacementCapByLane::test_dark_reject_bumps_the_dark_counter_as_well": 0.027462431999992987, + "tests/test_mlat_history.py::TestDisplacementCapByLane::test_dark_solve_inside_the_dark_cap_is_published": 0.037827698000000964, + "tests/test_mlat_history.py::TestDisplacementCapByLane::test_dark_solve_past_the_dark_cap_is_rejected": 0.028716581000026054, + "tests/test_mlat_history.py::TestDisplacementCapByLane::test_default_dark_cap_is_two_grid_steps": 0.06744288799995957, + "tests/test_mlat_history.py::TestDisplacementCapByLane::test_env_var_overrides_the_dark_cap": 0.03280899700007467, + "tests/test_mlat_history.py::TestDisplacementCapByLane::test_history_record_carries_the_cap_that_judged_it": 0.058817268999746375, + "tests/test_mlat_history.py::TestDisplacementCapByLane::test_non_transponder_id_is_judged_dark": 0.029342242999973678, + "tests/test_mlat_history.py::TestDisplacementCapKm::test_anchored_n2_beats_either_lane[False]": 0.02857038599995576, + "tests/test_mlat_history.py::TestDisplacementCapKm::test_anchored_n2_beats_either_lane[True]": 0.03167641399977583, + "tests/test_mlat_history.py::TestDisplacementCapKm::test_dark_is_taken_as_given": 0.029874292999920726, + "tests/test_mlat_history.py::TestDisplacementCapKm::test_gate_and_record_both_read_it": 0.038051552999831983, + "tests/test_mlat_history.py::TestDisplacementCapKm::test_lane_caps_apply_otherwise": 0.02862978299981478, + "tests/test_mlat_history.py::TestEndpoint::test_all_returns_window": 0.05341436600019733, + "tests/test_mlat_history.py::TestEndpoint::test_lookup_by_hex": 0.05231422600013502, + "tests/test_mlat_history.py::TestEndpoint::test_rejects_nearby_within_10km": 0.046478435000153695, + "tests/test_mlat_history.py::TestEndpoint::test_requires_hex_or_all": 0.04992977899996731, + "tests/test_mlat_history.py::TestEndpoint::test_unknown_hex_returns_empty": 0.05216261000009581, + "tests/test_mlat_history.py::TestForeignNodeStamp::test_a_node_aimed_away_is_named_foreign": 0.04633362699996724, + "tests/test_mlat_history.py::TestForeignNodeStamp::test_a_node_out_of_range_is_foreign": 0.06125473499969303, + "tests/test_mlat_history.py::TestForeignNodeStamp::test_all_nodes_in_cone_is_not_contaminated": 0.0446027970006071, + "tests/test_mlat_history.py::TestForeignNodeStamp::test_an_adsb_record_is_not_stamped": 0.04531388799978231, + "tests/test_mlat_history.py::TestForeignNodeStamp::test_no_ground_truth_means_no_stamp": 0.05318203900014851, + "tests/test_mlat_history.py::TestForeignNodeStamp::test_trimmed_nodes_are_judged_too": 0.043687224999303, + "tests/test_mlat_history.py::TestForeignNodeStamp::test_unregistered_nodes_are_not_stamped_clean": 0.04379079799991814, + "tests/test_mlat_history.py::TestGtIdentityBinding::test_adsb_fix_dead_reckoned": 0.03997416599986536, + "tests/test_mlat_history.py::TestGtIdentityBinding::test_dark_record_keeps_proximity_scan": 0.037947366000025795, + "tests/test_mlat_history.py::TestGtIdentityBinding::test_record_alt_source_absent_is_none": 0.03808441299997867, + "tests/test_mlat_history.py::TestGtIdentityBinding::test_record_carries_alt_source": 0.03547598100021787, + "tests/test_mlat_history.py::TestGtIdentityBinding::test_seeded_binds_own_trail_not_nearest": 0.04386352500000612, + "tests/test_mlat_history.py::TestGtIdentityBinding::test_seeded_no_trail_uses_live_adsb": 0.05945842099981746, + "tests/test_mlat_history.py::TestGtIdentityBinding::test_seeded_stale_adsb_abstains": 0.0455984829998215, + "tests/test_mlat_history.py::TestGtIdentityBinding::test_seeded_stale_trail_falls_back_to_adsb": 0.03966197399972771, + "tests/test_mlat_history.py::TestGtIdentityBinding::test_seeded_unknown_hex_abstains": 0.04963790200008589, + "tests/test_mlat_history.py::TestGtIdentityBinding::test_seeded_uppercase_hex_normalized": 0.048811760000035065, + "tests/test_mlat_history.py::TestKeyDecisionObservability::test_a_reject_carries_neither_field": 0.02959322200013048, + "tests/test_mlat_history.py::TestKeyDecisionObservability::test_a_second_solve_nearby_is_recorded_as_a_re_key": 0.096816206000085, + "tests/test_mlat_history.py::TestKeyDecisionObservability::test_a_solve_measured_before_the_entry_it_joins_is_still_a_re_key": 0.03265988699990885, + "tests/test_mlat_history.py::TestKeyDecisionObservability::test_adsb_lane_records_its_branch_and_no_distance": 0.030678079999916008, + "tests/test_mlat_history.py::TestKeyDecisionObservability::test_first_dark_solve_is_recorded_as_a_mint": 0.03371092699990186, + "tests/test_mlat_history.py::TestLaneFilterAndPerLaneCap::test_default_lane_is_all_and_counts_every_lane": 0.05534109299969714, + "tests/test_mlat_history.py::TestLaneFilterAndPerLaneCap::test_hex_lookup_reports_the_lane_block_too": 0.05629358099940873, + "tests/test_mlat_history.py::TestLaneFilterAndPerLaneCap::test_known_volume_cannot_evict_dark_records_from_the_response": 0.054492269000093074, + "tests/test_mlat_history.py::TestLaneFilterAndPerLaneCap::test_lane_dark_returns_only_dark_records": 0.04713849500012657, + "tests/test_mlat_history.py::TestLaneFilterAndPerLaneCap::test_lane_known_returns_only_known_records": 0.05119744800049375, + "tests/test_mlat_history.py::TestLaneFilterAndPerLaneCap::test_limit_is_clamped_to_the_maximum": 0.05141967500003375, + "tests/test_mlat_history.py::TestLaneFilterAndPerLaneCap::test_unknown_lane_is_rejected": 0.043144756000401685, + "tests/test_mlat_history.py::TestPerLaneDeques::test_all_query_merges_both_lanes_in_ts_order": 0.0841915030000564, + "tests/test_mlat_history.py::TestPerLaneDeques::test_hex_lookup_finds_a_known_lane_publish": 0.05502237700011392, + "tests/test_mlat_history.py::TestPerLaneDeques::test_known_lane_records_go_to_the_known_deque": 0.044672840000202996, + "tests/test_mlat_history.py::TestPerLaneDeques::test_known_lane_volume_cannot_evict_dark_records": 0.04590940599973692, + "tests/test_mlat_history.py::TestPerLaneDeques::test_regular_records_go_to_the_regular_deque": 0.048280544000135706, + "tests/test_mlat_history.py::TestPerLaneDeques::test_window_effective_minutes_is_zero_on_an_empty_store": 0.04994965800005957, + "tests/test_mlat_history.py::TestPerLaneDeques::test_window_effective_minutes_reports_the_oldest_record_held": 0.04635074999941935, + "tests/test_mlat_history.py::TestRecording::test_a_badly_fitted_n2_reject_is_labelled_chi2": 0.03405586400003813, + "tests/test_mlat_history.py::TestRecording::test_age_prune_drops_old_records": 0.046505100999866045, + "tests/test_mlat_history.py::TestRecording::test_beam_reject_is_recorded": 0.029395377000128065, + "tests/test_mlat_history.py::TestRecording::test_displacement_reject_records_distance": 0.03077612200013391, + "tests/test_mlat_history.py::TestRecording::test_known_lane_record_is_not_dark_inflated": 0.04420891399990978, + "tests/test_mlat_history.py::TestRecording::test_n2_reject_says_which_of_the_two_causes_it_was": 0.029961268000079144, + "tests/test_mlat_history.py::TestRecording::test_n2_unconfirmed_is_recorded": 0.03499567600033515, + "tests/test_mlat_history.py::TestRecording::test_published_record_carries_the_calibrated_sigma": 0.03535132100023475, + "tests/test_mlat_history.py::TestRecording::test_published_solve_records_positions_and_gt": 0.03979316099980679, + "tests/test_mlat_history.py::TestRecording::test_published_solver_hex_matches_feed_hex": 0.033337375000201064, + "tests/test_mlat_history.py::TestRecording::test_record_without_n_nodes_has_no_sigma": 0.039278731000194966, + "tests/test_mlat_history.py::TestRecording::test_reset_for_tests_clears_history": 0.03700934099992992, + "tests/test_mlat_history.py::TestRecording::test_rms_delay_reject_is_recorded": 0.03323468700000376, + "tests/test_mlat_history.py::TestRecording::test_rms_doppler_reject_is_recorded": 0.027419415000167646, + "tests/test_mlat_history.py::TestRecording::test_stale_gt_is_not_stamped": 0.029574650999848018, + "tests/test_mlat_history.py::TestRecording::test_unconverged_is_recorded": 0.030286117999821727, + "tests/test_mlat_history.py::TestResolveSkipDump::test_lane_filter_applies_to_skips": 0.07501122299981944, + "tests/test_mlat_history.py::TestResolveSkipDump::test_skip_records_the_blocking_claim": 0.09320909299958657, + "tests/test_mlat_history.py::TestResolveSkipDump::test_skips_do_not_land_in_the_solve_history": 0.07693453999991107, + "tests/test_mlat_history.py::TestResolveSkipDump::test_unknown_kind_is_rejected": 0.04072949300007167, + "tests/test_mlat_history.py::TestTrailSnapshotRace::test_nearest_gt_survives_concurrent_appends": 5.301628702999778, + "tests/test_mlat_verification.py::TestAdsbFallback::test_adsb_aircraft_used_when_no_ground_truth_trail": 0.04455644600056985, + "tests/test_mlat_verification.py::TestAdsbFallback::test_non_finite_feed_values_do_not_poison_the_truth_pool": 0.04140232500003549, + "tests/test_mlat_verification.py::TestAdsbFallbackEdgeCases::test_adsb_entry_with_lat_none_filtered": 0.05045817399968655, + "tests/test_mlat_verification.py::TestAdsbFallbackEdgeCases::test_adsb_hex_already_in_trails_not_duplicated": 0.04950355600067269, + "tests/test_mlat_verification.py::TestAdsbFallbackEdgeCases::test_stale_adsb_entry_not_added_to_truth_pool": 0.044433743999888975, + "tests/test_mlat_verification.py::TestByNodeCount::test_by_node_count_populated": 0.05590432500002862, + "tests/test_mlat_verification.py::TestEmptyState::test_empty_multinode_tracks": 0.040403119000075094, + "tests/test_mlat_verification.py::TestEmptyState::test_empty_truth_pool": 0.04225830799941832, + "tests/test_mlat_verification.py::TestEmptyState::test_returns_valid_json_always": 0.041113799000413564, + "tests/test_mlat_verification.py::TestExternalAdsbFallback::test_external_adsb_skipped_when_already_in_live": 0.042416639000748546, + "tests/test_mlat_verification.py::TestExternalAdsbFallback::test_external_adsb_skipped_when_no_coords": 0.05867161500009388, + "tests/test_mlat_verification.py::TestExternalAdsbFallback::test_external_adsb_used_as_truth": 0.047580350999396614, + "tests/test_mlat_verification.py::TestExternalAdsbTruthSchema::test_external_truth_keeps_metric_altitude_and_speed": 0.0404135459993995, + "tests/test_mlat_verification.py::TestHttpEndpoint::test_endpoint_reflects_refresh": 0.08180984900036492, + "tests/test_mlat_verification.py::TestHttpEndpoint::test_endpoint_returns_200": 0.043372018999889406, + "tests/test_mlat_verification.py::TestHttpEndpoint::test_mlat_accuracy_endpoint_reflects_refresh": 0.061082131000148365, + "tests/test_mlat_verification.py::TestMlatAccuracyStats::test_empty_samples_returns_zero_count": 0.04533806899962656, + "tests/test_mlat_verification.py::TestMlatAccuracyStats::test_per_aircraft_collapses_repeats_to_one_point_per_hex_per_n": 0.055877155999951356, + "tests/test_mlat_verification.py::TestMlatAccuracyStats::test_per_aircraft_normal_excludes_anomalous": 0.03898519300037151, + "tests/test_mlat_verification.py::TestMlatAccuracyStats::test_stats_are_grouped_by_node_count": 0.05428485299944441, + "tests/test_mlat_verification.py::TestMlatSummaryHelper::test_summary_returns_empty_dict_on_corrupt_bytes": 0.03812335400016309, + "tests/test_mlat_verification.py::TestMlatSummaryHelper::test_summary_returns_expected_keys_after_refresh": 0.041418245999921055, + "tests/test_mlat_verification.py::TestMlatSummaryHelper::test_summary_returns_zeros_when_no_matches": 0.04032220099998085, + "tests/test_mlat_verification.py::TestNoDoubleMatching::test_two_solves_near_same_truth_only_one_matches": 0.04814145299997108, + "tests/test_mlat_verification.py::TestPercentiles::test_percentile_with_multiple_matches": 0.05228803199997856, + "tests/test_mlat_verification.py::TestProximityThreshold::test_solve_beyond_threshold_not_matched": 0.0410143879998941, + "tests/test_mlat_verification.py::TestProximityThreshold::test_solve_within_threshold_matched": 0.057230089999393385, + "tests/test_mlat_verification.py::TestRealSolverIntegration::test_multiple_close_targets_each_matched": 0.08264190200043231, + "tests/test_mlat_verification.py::TestRealSolverIntegration::test_noisy_measurements_still_converge[0.5-5.0]": 0.06561004199966192, + "tests/test_mlat_verification.py::TestRealSolverIntegration::test_noisy_measurements_still_converge[1.0-10.0]": 0.1236157910007023, + "tests/test_mlat_verification.py::TestRealSolverIntegration::test_real_solver_converges_n_nodes[2-1.0]": 0.08809607700004563, + "tests/test_mlat_verification.py::TestRealSolverIntegration::test_real_solver_converges_n_nodes[3-0.5]": 0.06308227600038663, + "tests/test_mlat_verification.py::TestRealSolverIntegration::test_real_solver_converges_n_nodes[4-0.5]": 0.07635535100007473, + "tests/test_mlat_verification.py::TestRealSolverIntegration::test_real_solver_converges_n_nodes[5-0.5]": 0.07293164299971977, + "tests/test_mlat_verification.py::TestRealSolverIntegration::test_real_solver_moving_target": 0.07160399200029133, + "tests/test_mlat_verification.py::TestSingleMatch::test_close_solve_matches_truth": 0.04125021600020773, + "tests/test_mlat_verification.py::TestSingleMatch::test_error_metrics_in_summary": 0.05164980200015634, + "tests/test_mlat_verification.py::TestSolveResultFiltering::test_future_timestamp_skipped": 0.044217915999979596, + "tests/test_mlat_verification.py::TestSolveResultFiltering::test_solve_at_the_null_island_sentinel_is_skipped": 0.037773714999730146, + "tests/test_mlat_verification.py::TestSolveResultFiltering::test_solve_on_the_equator_is_kept": 0.044500167000023794, + "tests/test_mlat_verification.py::TestStaleFiltering::test_stale_multinode_result_skipped": 0.05107875000021522, + "tests/test_mlat_verification.py::TestStaleFiltering::test_stale_truth_point_skipped": 0.04269886900010533, + "tests/test_mlat_verification.py::TestStaleFiltering::test_time_matched_trail_point_used": 0.04336724099948697, + "tests/test_mlat_verification.py::TestTrackFields::test_all_expected_track_keys_present": 0.0409752200002913, + "tests/test_mlat_verification.py::TestTrackFields::test_rms_values_carried_through_to_track": 0.045448926999142714, + "tests/test_mlat_verification.py::TestTracksLimit::test_tracks_list_capped_at_100": 0.12470071600000665, + "tests/test_mn_lifetime.py::TestFeedGates::test_n2_confirmed_is_rendered": 0.04288764800048739, + "tests/test_mn_lifetime.py::TestFeedGates::test_n2_gate_disabled_via_min_solves_1": 0.03329974499956734, + "tests/test_mn_lifetime.py::TestFeedGates::test_n2_one_shot_is_not_rendered": 0.034522525999818754, + "tests/test_mn_lifetime.py::TestFeedGates::test_n3_confirmed_old_entry_is_rendered": 0.03287782999996125, + "tests/test_mn_lifetime.py::TestFeedGates::test_n3_one_shot_past_ttl_is_not_rendered_but_not_expired": 0.035828370000672294, + "tests/test_mn_lifetime.py::TestFeedGates::test_n3_one_shot_within_ttl_is_rendered": 0.03812557499986724, + "tests/test_mn_lifetime.py::TestForgetMnKey::test_all_four_stores_are_cleared": 0.03868675700005042, + "tests/test_mn_lifetime.py::TestForgetMnKey::test_forgetting_an_unknown_key_is_a_no_op": 0.038384945999951015, + "tests/test_mn_lifetime.py::TestHistoryRecord::test_published_record_carries_solve_count_and_source_track_ids": 0.040569289999893954, + "tests/test_mn_lifetime.py::TestHistoryRecord::test_published_record_carries_supersession_verdicts": 0.03830852200007939, + "tests/test_mn_lifetime.py::TestHistoryRecord::test_reject_record_carries_empty_supersession_fields": 0.033775504999994155, + "tests/test_mn_lifetime.py::TestHistoryRecordKfAction::test_published_records_carry_the_filter_action": 0.09024223699952927, + "tests/test_mn_lifetime.py::TestHistoryRecordKfAction::test_reject_record_carries_none": 0.036982932000228175, + "tests/test_mn_lifetime.py::TestSolveCount::test_first_publish_solve_count_is_1": 0.03743912900017676, + "tests/test_mn_lifetime.py::TestSolveCount::test_second_publish_same_position_solve_count_is_2": 0.03957838899941635, + "tests/test_mn_lifetime.py::TestSupersession::test_a_neighbour_five_km_off_is_no_longer_popped": 0.036495843000466266, + "tests/test_mn_lifetime.py::TestSupersession::test_an_in_gate_neighbour_at_a_different_altitude_is_counted_separately": 0.04066745499994795, + "tests/test_mn_lifetime.py::TestSupersession::test_disjoint_track_ids_do_not_supersede": 0.038209932000427216, + "tests/test_mn_lifetime.py::TestSupersession::test_shared_track_id_far_away_does_not_supersede": 0.03506489600022178, + "tests/test_mn_lifetime.py::TestSupersession::test_shared_track_id_within_the_gate_supersedes_old_entry": 0.03780639800015706, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_a_missing_altitude_on_either_side_fails_open": 0.036983628000143653, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_an_entry_far_ahead_of_this_solve_is_not_reckoned_backwards": 0.03672357400000692, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_an_entry_with_no_position_cannot_match_spatially": 0.03918728999997256, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_an_entry_with_no_source_ids_of_its_own_cannot_match_by_subset": 0.06305779500007702, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_an_out_of_order_entry_is_dead_reckoned_backwards": 0.038225234000037744, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_close_but_far_apart_in_altitude_does_not_match": 0.03727939400005198, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_dead_reckoning_carries_a_fast_target_into_the_gate": 0.044746805999693606, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_entry_older_than_max_age_does_not_match": 0.032412663999821234, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_identical_inputs_close_by_at_a_different_altitude_do_not_match": 0.037845582000500144, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_identical_inputs_match_beyond_the_spatial_gate_but_not_unboundedly": 0.0482428199993592, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_inside_the_age_scaled_gate_matches_and_reports_the_distance": 0.03890854599967497, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_just_outside_the_age_scaled_gate_does_not_match": 0.03965942099966924, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_partial_overlap_far_away_is_refused": 0.03624886899979174, + "tests/test_mn_lifetime.py::TestSupersessionMatch::test_the_supersession_base_is_tighter_than_the_keying_base": 0.0395203539992508, + "tests/test_mn_stale_coast.py::TestEvidenceAccessors::test_manoeuvre_level_is_none_without_filter_state": 0.05635194799924648, + "tests/test_mn_stale_coast.py::TestEvidenceAccessors::test_was_dropped_honours_a_shorter_window": 0.07963190700002087, + "tests/test_mn_stale_coast.py::TestEvidenceAccessors::test_was_dropped_reports_a_live_cooldown_and_nothing_else": 0.1377019520000431, + "tests/test_mn_stale_coast.py::TestRetirementAtMint::test_a_key_older_than_the_ceiling_is_no_candidate": 0.057520311000189395, + "tests/test_mn_stale_coast.py::TestRetirementAtMint::test_a_key_solved_a_moment_ago_is_no_candidate": 0.05484778600020945, + "tests/test_mn_stale_coast.py::TestRetirementAtMint::test_a_key_too_far_away_is_no_candidate": 0.06196806500020102, + "tests/test_mn_stale_coast.py::TestRetirementAtMint::test_altitude_mismatch_keeps_the_key": 0.05015247099981934, + "tests/test_mn_stale_coast.py::TestRetirementAtMint::test_an_adsb_assisted_key_is_never_retired": 0.044675171000108094, + "tests/test_mn_stale_coast.py::TestRetirementAtMint::test_disabled_by_env_changes_nothing": 0.04585456399945542, + "tests/test_mn_stale_coast.py::TestRetirementAtMint::test_kf_manoeuvre_level_is_evidence_on_its_own": 0.062001618000522285, + "tests/test_mn_stale_coast.py::TestRetirementAtMint::test_no_turn_evidence_keeps_the_key": 0.07183879399917714, + "tests/test_mn_stale_coast.py::TestRetirementAtMint::test_turn_dropped_key_is_retired_and_its_trail_transplanted": 0.04108157099972232, + "tests/test_mn_stale_coast.py::TestStaleCoastCandidate::test_ages_outside_the_band_are_skipped[0.0]": 0.04522916899941265, + "tests/test_mn_stale_coast.py::TestStaleCoastCandidate::test_ages_outside_the_band_are_skipped[3.9]": 0.041959861000123055, + "tests/test_mn_stale_coast.py::TestStaleCoastCandidate::test_ages_outside_the_band_are_skipped[300.0]": 0.07476816999997027, + "tests/test_mn_stale_coast.py::TestStaleCoastCandidate::test_ages_outside_the_band_are_skipped[60.1]": 0.051672702000360005, + "tests/test_mn_stale_coast.py::TestStaleCoastCandidate::test_an_entry_without_a_position_is_skipped": 0.04890382599978693, + "tests/test_mn_stale_coast.py::TestStaleCoastCandidate::test_evidence_refusal_outranks_an_altitude_one": 0.1253709060001711, + "tests/test_mn_stale_coast.py::TestStaleCoastCandidate::test_manoeuvre_at_the_threshold_is_not_evidence": 0.14903443499997593, + "tests/test_mn_stale_coast.py::TestStaleCoastCandidate::test_picks_the_nearest_of_several_candidates": 0.054702959999758605, + "tests/test_mn_stale_coast.py::TestStaleCoastCandidate::test_unknown_altitude_fails_open": 0.05293126600008691, + "tests/test_nginx_app_vhost.py::test_data_is_the_consoles_own_page": 0.05768744199986031, + "tests/test_nginx_app_vhost.py::test_no_redirect_names_a_hostname": 0.04675140699964686, + "tests/test_nginx_app_vhost.py::test_no_vhost_serves_the_deleted_map": 0.12733721199992942, + "tests/test_nginx_app_vhost.py::test_nothing_is_served_from_the_old_mount": 0.10612991299967689, + "tests/test_nginx_app_vhost.py::test_the_console_is_the_root": 0.2152528989995517, + "tests/test_nginx_app_vhost.py::test_the_old_explorers_paths_land_on_the_page": 0.05751516700047432, + "tests/test_nginx_app_vhost.py::test_the_old_mount_redirects_every_path_to_its_root_twin": 0.06332751000036296, + "tests/test_nginx_app_vhost.py::test_the_slashless_mount_redirects_too": 0.07584318299996085, + "tests/test_nginx_credential_zones.py::test_every_credential_location_uses_the_tight_zone": 0.15452982500028156, + "tests/test_nginx_credential_zones.py::test_no_credential_location_falls_into_the_general_api_zone": 0.13169677599989882, + "tests/test_nginx_credential_zones.py::test_the_credential_prefix_is_present_on_three_vhosts": 0.1453986649999024, + "tests/test_nginx_credential_zones.py::test_the_magic_link_endpoints_inherit_the_credential_prefix": 0.11662090999925567, + "tests/test_nginx_credential_zones.py::test_the_session_endpoints_are_still_the_only_ones_excused": 0.19039570600034494, + "tests/test_nginx_default_server.py::test_exactly_one_vhost_is_the_declared_default": 0.23653177600044728, + "tests/test_nginx_default_server.py::test_the_catch_all_precedes_every_named_vhost": 0.1364867479996974, + "tests/test_nginx_default_server.py::test_the_catch_all_refuses_rather_than_serving_anything": 0.06446196799970494, + "tests/test_nginx_default_server.py::test_the_catch_all_still_demands_cloudflares_client_certificate": 0.0705091849999917, + "tests/test_nginx_default_server.py::test_the_default_is_the_catch_all_and_not_a_named_vhost": 0.0882407589997456, + "tests/test_nginx_default_server.py::test_the_laptop_stack_keeps_its_fall_through": 0.1792925529994136, + "tests/test_nginx_origin_marker.py::test_each_suite_probes_the_marker[ci.yml (production smoke)]": 0.5398373660000289, + "tests/test_nginx_origin_marker.py::test_each_suite_probes_the_marker[staging-smoke-test.sh]": 0.07083141799967052, + "tests/test_nginx_origin_marker.py::test_each_suite_sources_the_shared_marker[ci.yml (production smoke)]": 0.2448522640002011, + "tests/test_nginx_origin_marker.py::test_each_suite_sources_the_shared_marker[staging-smoke-test.sh]": 0.11217347600040739, + "tests/test_nginx_origin_marker.py::test_every_tls_vhost_sends_the_marker": 0.19607457200027056, + "tests/test_nginx_origin_marker.py::test_no_suite_hardcodes_the_marker[ci.yml (production smoke)]": 0.2742920600007892, + "tests/test_nginx_origin_marker.py::test_no_suite_hardcodes_the_marker[staging-smoke-test.sh]": 0.05750286500006041, + "tests/test_nginx_origin_marker.py::test_the_marker_is_set_with_always": 0.1590987269996731, + "tests/test_nginx_origin_marker.py::test_the_marker_value_is_a_literal": 0.06701810100003058, + "tests/test_nginx_origin_marker.py::test_the_shell_and_the_config_agree_on_the_header_name": 0.07320107799978359, + "tests/test_nginx_origin_marker.py::test_the_shell_and_the_config_agree_on_the_marker": 0.06368972599966582, + "tests/test_nginx_origin_marker.py::test_the_shell_side_is_lowercase": 0.049907942000118055, + "tests/test_nginx_relative_redirects.py::test_no_block_turns_absolute_redirects_back_on[plain]": 0.04463738699996611, + "tests/test_nginx_relative_redirects.py::test_no_block_turns_absolute_redirects_back_on[tls]": 0.05017747400006556, + "tests/test_nginx_relative_redirects.py::test_redirects_are_relative_on_every_vhost[plain]": 0.08440306200009218, + "tests/test_nginx_relative_redirects.py::test_redirects_are_relative_on_every_vhost[tls]": 0.10875892199965165, + "tests/test_nginx_rewrite_ordering.py::test_every_proxy_pass_variable_is_assigned_in_its_location": 0.04515010600016467, + "tests/test_nginx_rewrite_ordering.py::test_no_break_before_a_set": 0.04244012199978897, + "tests/test_nginx_rewrite_ordering.py::test_the_template_still_has_locations_to_check": 0.09186714600036794, + "tests/test_nginx_static_cache.py::test_every_other_static_file_is_revalidated": 0.0493481020002946, + "tests/test_nginx_static_cache.py::test_immutable_is_confined_to_hashed_assets": 0.10518725299971265, + "tests/test_no_real_identities.py::test_no_real_node_identity_is_tracked": 5.0163386750004975, + "tests/test_node_auth.py::test_a_committed_token_resolves_in_a_later_session": 0.07590100399966104, + "tests/test_node_auth.py::test_a_malformed_authorization_header_is_401[Basic abc]": 0.0546022269995774, + "tests/test_node_auth.py::test_a_malformed_authorization_header_is_401[Bearer ]": 0.04979510100019979, + "tests/test_node_auth.py::test_a_malformed_authorization_header_is_401[Bearer]": 0.04800656599991271, + "tests/test_node_auth.py::test_a_malformed_authorization_header_is_401[Token xyz]": 0.048246428000311425, + "tests/test_node_auth.py::test_a_malformed_authorization_header_is_401[]": 0.047280128999773297, + "tests/test_node_auth.py::test_a_minted_node_ref_matches_the_wire_pattern": 0.038680147999457404, + "tests/test_node_auth.py::test_a_minted_token_resolves": 0.07254748800005473, + "tests/test_node_auth.py::test_a_revoked_token_does_not_resolve": 0.06549824700005047, + "tests/test_node_auth.py::test_an_uncommitted_registration_leaves_no_usable_token": 0.064641493999261, + "tests/test_node_auth.py::test_an_unknown_token_is_401": 0.04745248699964577, + "tests/test_node_auth.py::test_minting_does_not_repeat": 0.11632537599962234, + "tests/test_node_auth.py::test_only_the_hash_is_stored": 0.07378360299935594, + "tests/test_node_auth.py::test_revoking_reports_how_many_it_revoked": 0.06706567899982474, + "tests/test_node_auth.py::test_the_scheme_is_case_insensitive[BEARER]": 0.0665476160002072, + "tests/test_node_auth.py::test_the_scheme_is_case_insensitive[Bearer]": 0.06729743599998983, + "tests/test_node_auth.py::test_the_scheme_is_case_insensitive[bearer]": 0.07142251399909583, + "tests/test_node_bias.py::TestBiasEstimator::test_converges_on_synthetic_biased_residuals": 0.06913764499995523, + "tests/test_node_bias.py::TestBiasEstimator::test_maturity_bar_distinct_hexes": 0.041682351999952516, + "tests/test_node_bias.py::TestBiasEstimator::test_maturity_bar_sample_count": 0.042488311999477446, + "tests/test_node_bias.py::TestBiasEstimator::test_maturity_bar_spread": 0.04684886599989113, + "tests/test_node_bias.py::TestContractDefaults::test_record_accepts_unknown_keys_without_raising": 0.04064862500035815, + "tests/test_node_bias.py::TestContractDefaults::test_record_drops_non_finite_and_empty_keys": 0.03654071099981593, + "tests/test_node_bias.py::TestContractDefaults::test_trust_below_sample_bar_stays_at_prior": 0.11714091900012136, + "tests/test_node_bias.py::TestContractDefaults::test_unknown_node_bias_is_zero": 0.04989905499996894, + "tests/test_node_bias.py::TestContractDefaults::test_unknown_node_trust_is_neutral_prior": 0.05045057600000291, + "tests/test_node_bias.py::TestCrossValidationRejectsUnusableFixes::test_a_self_report_with_boolean_coordinates_is_not_penalised": 0.23235594800007675, + "tests/test_node_bias.py::TestCrossValidationRejectsUnusableFixes::test_a_self_report_without_a_position_is_not_penalised": 0.17864892100033103, + "tests/test_node_bias.py::TestLyingRadar::test_misfitting_node_trust_sinks_while_peers_keep_theirs": 0.04200534899973718, + "tests/test_node_bias.py::TestSelfReportCoexistence::test_cross_validation_skips_backend_fed_samples": 0.048533323000810924, + "tests/test_node_bias.py::TestSelfReportCoexistence::test_route_and_backend_samples_share_one_score": 0.16729508899970824, + "tests/test_node_bias.py::TestSnapshotCompat::test_backend_fed_samples_round_trip_with_provenance": 0.06674431199962783, + "tests/test_node_bias.py::TestSnapshotCompat::test_old_format_snapshot_still_loads": 0.06974074099980498, + "tests/test_node_bias.py::TestSurfacing::test_node_analytics_includes_bias_block": 0.18323258499958683, + "tests/test_node_bias.py::TestSurfacing::test_node_analytics_omits_bias_block_when_unknown": 0.2076789480001935, + "tests/test_node_claim_endpoint.py::test_a_bad_bearer_is_401_rather_than_a_body_refusal": 0.09764222399962819, + "tests/test_node_claim_endpoint.py::test_a_body_that_is_not_json_is_400_invalid_claim": 0.1089047569998911, + "tests/test_node_claim_endpoint.py::test_a_bounced_address_is_not_mailed_again": 0.20076632099971903, + "tests/test_node_claim_endpoint.py::test_a_bounced_address_reads_unclaimed_with_the_flag": 0.16740883599959488, + "tests/test_node_claim_endpoint.py::test_a_different_address_after_a_bounce_is_mailed_normally": 0.15735682099966652, + "tests/test_node_claim_endpoint.py::test_a_get_without_a_bearer_is_401": 0.07189487699952224, + "tests/test_node_claim_endpoint.py::test_a_missing_address_is_400_invalid_claim": 0.08414122300018789, + "tests/test_node_claim_endpoint.py::test_a_nomination_records_a_challenge_and_mails_its_token": 0.1300505050007814, + "tests/test_node_claim_endpoint.py::test_a_nomination_stores_the_address_and_answers_pending": 0.1548792539997521, + "tests/test_node_claim_endpoint.py::test_a_rate_limited_nomination_is_not_stored": 0.25729738700010785, + "tests/test_node_claim_endpoint.py::test_a_refused_nomination_on_an_owned_node_writes_nothing": 0.1447388769997815, + "tests/test_node_claim_endpoint.py::test_a_second_address_drops_the_verified_flag": 0.16485710799997833, + "tests/test_node_claim_endpoint.py::test_a_second_address_replaces_the_first_challenge": 0.18281405000016093, + "tests/test_node_claim_endpoint.py::test_an_address_at_its_link_cap_leaves_no_dead_challenge_behind": 0.210366853999858, + "tests/test_node_claim_endpoint.py::test_an_address_that_is_not_one_is_400": 0.1014631609996286, + "tests/test_node_claim_endpoint.py::test_an_expired_challenge_does_not_make_a_repeated_put_mail_again": 0.16278543499947773, + "tests/test_node_claim_endpoint.py::test_an_expired_challenge_is_still_resendable": 0.16732182900022963, + "tests/test_node_claim_endpoint.py::test_an_expired_challenge_reads_unclaimed_with_the_address_still_on_file": 0.1882128060001378, + "tests/test_node_claim_endpoint.py::test_an_owned_node_accepts_the_address_it_is_bound_to": 0.13881990299978497, + "tests/test_node_claim_endpoint.py::test_an_owned_node_refuses_a_different_address_and_names_the_bound_one": 0.1352787350001563, + "tests/test_node_claim_endpoint.py::test_get_answers_owned_with_the_bound_address": 0.1431039779999992, + "tests/test_node_claim_endpoint.py::test_get_answers_unclaimed_for_a_node_that_never_nominated": 0.1183451540000533, + "tests/test_node_claim_endpoint.py::test_get_writes_nothing": 0.09482521599966276, + "tests/test_node_claim_endpoint.py::test_no_bearer_is_401_and_writes_nothing": 0.09275516599973344, + "tests/test_node_claim_endpoint.py::test_re_sending_the_same_address_answers_pending_without_mailing_again": 0.12878358099987963, + "tests/test_node_claim_endpoint.py::test_resend_mails_again_where_a_repeated_put_does_not": 0.12557429599974057, + "tests/test_node_claim_endpoint.py::test_resend_mints_a_fresh_token_rather_than_repeating_the_old_one": 0.15575732499974038, + "tests/test_node_claim_endpoint.py::test_resend_on_an_owned_node_is_refused": 0.13676337000015337, + "tests/test_node_claim_endpoint.py::test_resend_with_nothing_on_file_answers_unclaimed_and_mails_nothing": 0.3659049709995088, + "tests/test_node_claim_endpoint.py::test_the_address_is_normalised_before_it_is_stored": 0.11881804800032114, + "tests/test_node_claim_endpoint.py::test_the_sixth_nomination_in_an_hour_is_429_with_a_retry_after": 0.25749298799973985, + "tests/test_node_claim_store.py::test_a_bounce_drops_the_challenge_so_the_node_reads_unclaimed": 0.07220815500022582, + "tests/test_node_claim_store.py::test_a_bounce_on_a_node_with_no_challenge_gives_back_no_handle": 0.08730091799952788, + "tests/test_node_claim_store.py::test_a_different_address_after_a_bounce_starts_clean": 0.11151710000012827, + "tests/test_node_claim_store.py::test_a_new_address_drops_the_verified_flag": 0.06789116900017689, + "tests/test_node_claim_store.py::test_a_node_that_never_nominated_has_no_row": 0.0565545780004868, + "tests/test_node_claim_store.py::test_a_second_challenge_replaces_the_first_and_returns_its_handle": 0.10598415000004024, + "tests/test_node_claim_store.py::test_clearing_a_claim_leaves_no_row_and_no_challenge": 0.0892972570004531, + "tests/test_node_claim_store.py::test_clearing_a_node_that_has_no_claim_is_not_an_error": 0.08863139400000364, + "tests/test_node_claim_store.py::test_dropping_a_challenge_returns_its_handle_and_then_none": 0.07356252299996413, + "tests/test_node_claim_store.py::test_marking_a_node_with_no_claim_does_nothing": 0.07515644900013285, + "tests/test_node_claim_store.py::test_marking_undeliverable_for_a_superseded_address_does_nothing": 0.07610887700002422, + "tests/test_node_claim_store.py::test_marking_verified_for_a_superseded_address_does_nothing": 0.07289868099996966, + "tests/test_node_claim_store.py::test_nominating_an_address_stores_it_unverified": 0.057667506000143476, + "tests/test_node_claim_store.py::test_rewriting_the_same_address_leaves_verified_alone": 0.07044950499948754, + "tests/test_node_claim_store.py::test_the_first_challenge_displaces_nothing": 0.08583251999925778, + "tests/test_node_claim_store.py::test_verifying_a_superseded_address_leaves_the_live_challenge_alone": 0.06790137800044249, + "tests/test_node_claim_store.py::test_verifying_spends_the_challenge": 0.06722207800066826, + "tests/test_node_claim_validation.py::test_a_body_that_is_not_an_object_is_refused_rather_than_raising_type_error[7]": 0.046069343999533885, + "tests/test_node_claim_validation.py::test_a_body_that_is_not_an_object_is_refused_rather_than_raising_type_error[None]": 0.04831452600001285, + "tests/test_node_claim_validation.py::test_a_body_that_is_not_an_object_is_refused_rather_than_raising_type_error[ada@example.com]": 0.04631466100045145, + "tests/test_node_claim_validation.py::test_a_body_that_is_not_an_object_is_refused_rather_than_raising_type_error[payload0]": 0.03966565599966998, + "tests/test_node_claim_validation.py::test_a_missing_address_is_refused": 0.046060775999649195, + "tests/test_node_claim_validation.py::test_a_non_string_address_is_refused": 0.04035077799971987, + "tests/test_node_claim_validation.py::test_a_null_address_is_refused_rather_than_clearing_anything": 0.04226401199957763, + "tests/test_node_claim_validation.py::test_an_address_already_normalised_is_unchanged": 0.04120280899996942, + "tests/test_node_claim_validation.py::test_an_address_at_the_bound_is_accepted": 0.0401283829996828, + "tests/test_node_claim_validation.py::test_an_address_comes_back_normalised": 0.07131829899981312, + "tests/test_node_claim_validation.py::test_an_over_long_address_is_refused_on_its_trimmed_form": 0.04416851499991026, + "tests/test_node_claim_validation.py::test_an_unknown_key_is_named_back": 0.037984908999987965, + "tests/test_node_claim_validation.py::test_several_unknown_keys_always_name_the_same_one": 0.04107542599967928, + "tests/test_node_claim_validation.py::test_the_published_schema_is_not_shared_between_callers": 0.04393729900039034, + "tests/test_node_claim_validation.py::test_the_published_schema_requires_the_one_field_it_describes": 0.049536215999978594, + "tests/test_node_claim_validation.py::test_whitespace_alone_is_refused": 0.04006300899982307, + "tests/test_node_config_endpoint.py::test_a_body_that_is_not_an_object_is_400": 0.10133860299993103, + "tests/test_node_config_endpoint.py::test_a_body_that_is_not_json_is_400": 0.09086731899969891, + "tests/test_node_config_endpoint.py::test_a_change_reaches_the_pipeline_once": 0.12521064399925308, + "tests/test_node_config_endpoint.py::test_a_changed_field_mints_the_next_version_and_supersedes_the_last": 0.11647813199988377, + "tests/test_node_config_endpoint.py::test_a_failed_handoff_alerts_and_keeps_the_stored_version": 0.113957948999996, + "tests/test_node_config_endpoint.py::test_a_long_unknown_field_is_400_rather_than_500": 0.09462630900043223, + "tests/test_node_config_endpoint.py::test_a_new_version_reaches_the_pipeline": 0.18317729799991866, + "tests/test_node_config_endpoint.py::test_a_null_callsign_is_accepted_and_stored": 0.1984335099996315, + "tests/test_node_config_endpoint.py::test_a_resend_with_both_antenna_fields_null_is_not_a_change": 0.1929764569999861, + "tests/test_node_config_endpoint.py::test_a_revoked_token_is_401": 0.07882759099993564, + "tests/test_node_config_endpoint.py::test_an_invalid_body_without_a_token_is_still_401": 0.07722019600032581, + "tests/test_node_config_endpoint.py::test_an_invalid_config_is_400_naming_the_field[above_bound]": 0.10005335399955584, + "tests/test_node_config_endpoint.py::test_an_invalid_config_is_400_naming_the_field[azimuth_exclusive_max]": 0.15244886600021346, + "tests/test_node_config_endpoint.py::test_an_invalid_config_is_400_naming_the_field[below_bound]": 0.10598096499961684, + "tests/test_node_config_endpoint.py::test_an_invalid_config_is_400_naming_the_field[empty_callsign]": 0.13646667600005458, + "tests/test_node_config_endpoint.py::test_an_invalid_config_is_400_naming_the_field[exclusive_min]": 0.08077928299962878, + "tests/test_node_config_endpoint.py::test_an_invalid_config_is_400_naming_the_field[missing]": 0.08722997599943483, + "tests/test_node_config_endpoint.py::test_an_invalid_config_is_400_naming_the_field[unknown]": 0.11891382800013162, + "tests/test_node_config_endpoint.py::test_an_invalid_config_is_400_naming_the_field[width_exclusive_min]": 0.10096097899986489, + "tests/test_node_config_endpoint.py::test_an_unauthenticated_call_is_401": 0.09737586800019926, + "tests/test_node_config_endpoint.py::test_an_unchanged_resend_does_not_touch_the_pipeline": 0.22834203499996875, + "tests/test_node_config_endpoint.py::test_an_unchanged_resend_returns_the_active_version": 0.10847432499986098, + "tests/test_node_config_endpoint.py::test_an_unparseable_body_without_a_token_is_still_401": 0.1072982939999747, + "tests/test_node_config_endpoint.py::test_the_baseline_matches_what_the_fixture_seeded": 0.10267902200030221, + "tests/test_node_config_endpoint.py::test_the_node_row_follows_the_active_version": 0.11294894200000272, + "tests/test_node_config_endpoint.py::test_the_route_commits": 0.10167544700016151, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[beam_azimuth_deg]": 0.06564656799992008, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[beam_width_deg]": 0.06796016899943425, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[cpi_s]": 0.06941427399988243, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[delay_tolerance_us]": 0.07684845899984794, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[doppler_tolerance_hz]": 0.08585573500067767, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[fc_hz]": 0.07595114300011119, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[fs_hz]": 0.08125402099994972, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[max_range_km]": 0.08036188799997035, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[rx_alt_ft]": 0.07880753900053605, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[rx_lat]": 0.07855068800017762, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[rx_lon]": 0.08295089299963365, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[tx_alt_ft]": 0.13130763899971498, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[tx_callsign]": 0.12520280700027797, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[tx_lat]": 0.07478151900068042, + "tests/test_node_config_store.py::test_a_change_to_any_one_field_mints_the_next_version[tx_lon]": 0.07835045499950866, + "tests/test_node_config_store.py::test_a_changed_configuration_supersedes_the_previous_version": 0.10617915300008463, + "tests/test_node_config_store.py::test_a_null_callsign_round_trips": 0.07109403000004022, + "tests/test_node_config_store.py::test_a_null_position_round_trips": 0.06444291899970267, + "tests/test_node_config_store.py::test_a_resend_is_unchanged_however_many_times_it_arrives": 0.07459782199975962, + "tests/test_node_config_store.py::test_a_version_is_never_reused_once_the_active_row_is_superseded": 0.10264155800041408, + "tests/test_node_config_store.py::test_an_azimuth_appearing_is_a_new_version": 0.1275114809996012, + "tests/test_node_config_store.py::test_an_unchanged_configuration_keeps_its_version": 0.07662974400000166, + "tests/test_node_config_store.py::test_filling_in_a_null_is_a_change_in_both_directions": 0.10163244499972279, + "tests/test_node_config_store.py::test_nothing_is_committed": 0.07870307400025922, + "tests/test_node_config_store.py::test_the_compared_fields_are_every_geometry_column": 0.041640916999767796, + "tests/test_node_config_store.py::test_the_configuration_belongs_to_the_node_that_sent_it": 0.08563558700006979, + "tests/test_node_config_store.py::test_the_first_configuration_is_version_one": 0.07623061399999642, + "tests/test_node_config_store.py::test_versions_go_on_climbing_across_several_changes": 0.09338173300056951, + "tests/test_node_config_validation.py::test_a_baseline_shorter_than_the_degenerate_threshold_is_rejected": 0.037659603000065545, + "tests/test_node_config_validation.py::test_a_boolean_is_not_accepted_as_a_number": 0.03399873700027456, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[bool-false]": 0.028533896000681125, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[bool-true]": 0.02749617900008161, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[empty-string]": 0.03530515800048306, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[float]": 0.04066240400015886, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[infinity]": 0.033705339999869466, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[int-too-large-for-a-float]": 0.02886818900014987, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[int]": 0.029749319000075047, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[list]": 0.03334412100048212, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[nan]": 0.032925364000220725, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[negative-infinity]": 0.030096712000158732, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[negative-numeric-string]": 0.027315986000303383, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[non-numeric-string]": 0.03188504400077363, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[null]": 0.027886846999990667, + "tests/test_node_config_validation.py::test_a_coordinate_becomes_a_float_or_none[numeric-string]": 0.040388529999745515, + "tests/test_node_config_validation.py::test_a_missing_beam_width_is_still_rejected": 0.03766662699990775, + "tests/test_node_config_validation.py::test_a_missing_field_is_rejected": 0.04123898000034387, + "tests/test_node_config_validation.py::test_a_missing_key_is_still_an_error": 0.049215138999898045, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[bool-false-rx_lat]": 0.0682510519995958, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[bool-false-rx_lon]": 0.0659387189998597, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[bool-false-tx_lat]": 0.0689162380003836, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[bool-false-tx_lon]": 0.05854762499984645, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[bool-true-rx_lat]": 0.0339418239996121, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[bool-true-rx_lon]": 0.03643091700041623, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[bool-true-tx_lat]": 0.0384740470003635, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[bool-true-tx_lon]": 0.05438758699938262, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[empty-string-rx_lat]": 0.044871170000078564, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[empty-string-rx_lon]": 0.044502799000383675, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[empty-string-tx_lat]": 0.052383682999789016, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[empty-string-tx_lon]": 0.0748301370003901, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[list-rx_lat]": 0.11154340699977183, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[list-rx_lon]": 0.05189610499974151, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[list-tx_lat]": 0.04490121100025135, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[list-tx_lon]": 0.03781570399996781, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[string-rx_lat]": 0.033619553000335145, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[string-rx_lon]": 0.03622551200032831, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[string-tx_lat]": 0.04829437400030656, + "tests/test_node_config_validation.py::test_a_non_numeric_coordinate_reads_as_not_placed_rather_than_raising[string-tx_lon]": 0.07065347599927918, + "tests/test_node_config_validation.py::test_a_non_numeric_type_is_rejected[51.42]": 0.03234408099979191, + "tests/test_node_config_validation.py::test_a_non_numeric_type_is_rejected[None]": 0.033092884000325284, + "tests/test_node_config_validation.py::test_a_non_numeric_type_is_rejected[value2]": 0.03140172099983829, + "tests/test_node_config_validation.py::test_a_non_numeric_type_is_rejected[value3]": 0.036645933000272635, + "tests/test_node_config_validation.py::test_a_non_string_callsign_is_rejected[123]": 0.03374853700006497, + "tests/test_node_config_validation.py::test_a_non_string_callsign_is_rejected[value1]": 0.034605082999860315, + "tests/test_node_config_validation.py::test_a_null_callsign_is_preserved_not_defaulted": 0.030953648000377143, + "tests/test_node_config_validation.py::test_a_null_is_accepted_for_exactly_the_fields_published_as_nullable": 0.03583196099998531, + "tests/test_node_config_validation.py::test_a_payload_that_is_not_an_object_is_rejected_not_raised_through[5]": 0.03340274699985457, + "tests/test_node_config_validation.py::test_a_payload_that_is_not_an_object_is_rejected_not_raised_through[None]": 0.033254435999879206, + "tests/test_node_config_validation.py::test_a_payload_that_is_not_an_object_is_rejected_not_raised_through[payload3]": 0.03445403299974714, + "tests/test_node_config_validation.py::test_a_payload_that_is_not_an_object_is_rejected_not_raised_through[payload4]": 0.036402994000127364, + "tests/test_node_config_validation.py::test_a_payload_that_is_not_an_object_is_rejected_not_raised_through[payload5]": 0.036381239000093046, + "tests/test_node_config_validation.py::test_a_payload_that_is_not_an_object_is_rejected_not_raised_through[rx_lat]": 0.0346235109996087, + "tests/test_node_config_validation.py::test_a_present_beam_width_keeps_the_contract_interval[0.1]": 0.043608823000340635, + "tests/test_node_config_validation.py::test_a_present_beam_width_keeps_the_contract_interval[360]": 0.04573764899987509, + "tests/test_node_config_validation.py::test_a_usable_altitude_is_kept_as_a_float[below-sea-level]": 0.03457797100008975, + "tests/test_node_config_validation.py::test_a_usable_altitude_is_kept_as_a_float[numeric-string]": 0.034464104999642586, + "tests/test_node_config_validation.py::test_a_usable_altitude_is_kept_as_a_float[sea-level]": 0.0498308969995378, + "tests/test_node_config_validation.py::test_a_valid_config_passes_through_unchanged": 0.03564904899985777, + "tests/test_node_config_validation.py::test_a_validated_config_survives_canonicalisation_unchanged": 0.03419893000000229, + "tests/test_node_config_validation.py::test_altitude_alone_does_not_separate_a_coincident_pair": 0.03685383200036085, + "tests/test_node_config_validation.py::test_an_absent_altitude_becomes_null": 0.03590274799944382, + "tests/test_node_config_validation.py::test_an_empty_payload_is_rejected_rather_than_defaulted": 0.04152613999985988, + "tests/test_node_config_validation.py::test_an_explicit_null_rx_is_not_overruled_by_a_stray_legacy_lat": 0.03547263600012229, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[beam_azimuth_deg]": 0.03601343399986945, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[beam_width_deg]": 0.03324819500039666, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[cpi_s]": 0.03243288699968616, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[delay_tolerance_us]": 0.0382165150003857, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[doppler_tolerance_hz]": 0.03402523300019311, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[fc_hz]": 0.03539062700019713, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[fs_hz]": 0.03460346699966976, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[max_range_km]": 0.035670756000399706, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[rx_alt_ft]": 0.03653631299994231, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[rx_lat]": 0.034421049000229686, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[rx_lon]": 0.0369597220005744, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[tx_alt_ft]": 0.04305101299951275, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[tx_lat]": 0.03495914399991307, + "tests/test_node_config_validation.py::test_an_integer_too_large_for_a_float_is_rejected[tx_lon]": 0.040402540000286535, + "tests/test_node_config_validation.py::test_an_out_of_range_coordinate_is_reported_before_a_missing_pair": 0.05091885899992121, + "tests/test_node_config_validation.py::test_an_unknown_field_is_rejected": 0.036088057000142726, + "tests/test_node_config_validation.py::test_an_unknown_field_is_reported_before_a_missing_one": 0.02676106199987771, + "tests/test_node_config_validation.py::test_an_unusable_altitude_becomes_null[bool]": 0.04815488699978232, + "tests/test_node_config_validation.py::test_an_unusable_altitude_becomes_null[int-too-large-for-a-float]": 0.04214183700014473, + "tests/test_node_config_validation.py::test_an_unusable_altitude_becomes_null[nan]": 0.04833354500033238, + "tests/test_node_config_validation.py::test_an_unusable_altitude_becomes_null[non-numeric-string]": 0.0511181110000507, + "tests/test_node_config_validation.py::test_an_unusable_altitude_becomes_null[null]": 0.05066904799969052, + "tests/test_node_config_validation.py::test_an_unusable_axis_nulls_its_partner": 0.030275302000063675, + "tests/test_node_config_validation.py::test_baseline_check_is_skipped_when_a_side_is_null": 0.04588259100000869, + "tests/test_node_config_validation.py::test_canonical_config_leaves_the_input_dict_alone": 0.07020180499966955, + "tests/test_node_config_validation.py::test_canonical_config_never_raises_on_a_non_dict[int]": 0.044266661000619933, + "tests/test_node_config_validation.py::test_canonical_config_never_raises_on_a_non_dict[list]": 0.0367557930003386, + "tests/test_node_config_validation.py::test_canonical_config_never_raises_on_a_non_dict[none]": 0.05216699900029198, + "tests/test_node_config_validation.py::test_canonical_config_never_raises_on_a_non_dict[string]": 0.05317141600016839, + "tests/test_node_config_validation.py::test_canonical_config_never_raises_on_a_non_dict[tuple]": 0.03316908399983731, + "tests/test_node_config_validation.py::test_canonicalising_twice_changes_nothing": 0.038921757000025536, + "tests/test_node_config_validation.py::test_config_invalid_carries_a_field_and_a_reason": 0.03302219999977751, + "tests/test_node_config_validation.py::test_every_missing_field_is_reported_by_name": 0.04053148799994233, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[beam_azimuth_deg]": 0.033237926000310836, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[beam_width_deg]": 0.03131761299982827, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[cpi_s]": 0.033830390999810334, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[delay_tolerance_us]": 0.03596745300001203, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[doppler_tolerance_hz]": 0.03584797199937384, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[fc_hz]": 0.036227812000106496, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[fs_hz]": 0.037359085999469244, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[max_range_km]": 0.03387659200006965, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[rx_alt_ft]": 0.03169241700015846, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[rx_lat]": 0.03515112400009457, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[rx_lon]": 0.03462570000010601, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[tx_alt_ft]": 0.03520644699983677, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[tx_lat]": 0.03707529099938256, + "tests/test_node_config_validation.py::test_every_published_bound_is_where_the_validator_refuses[tx_lon]": 0.03297897899983582, + "tests/test_node_config_validation.py::test_exclusive_minimums_reject_a_negative_as_well_as_zero[beam_width_deg]": 0.03520966500036593, + "tests/test_node_config_validation.py::test_exclusive_minimums_reject_a_negative_as_well_as_zero[cpi_s]": 0.037559937999503745, + "tests/test_node_config_validation.py::test_exclusive_minimums_reject_a_negative_as_well_as_zero[delay_tolerance_us]": 0.03515726000023278, + "tests/test_node_config_validation.py::test_exclusive_minimums_reject_a_negative_as_well_as_zero[doppler_tolerance_hz]": 0.03808697599970401, + "tests/test_node_config_validation.py::test_exclusive_minimums_reject_a_negative_as_well_as_zero[max_range_km]": 0.033729024999502144, + "tests/test_node_config_validation.py::test_half_a_pair_nulls_the_other_half[rx_lat]": 0.03170607399988512, + "tests/test_node_config_validation.py::test_half_a_pair_nulls_the_other_half[rx_lon]": 0.034671720000005735, + "tests/test_node_config_validation.py::test_half_a_pair_nulls_the_other_half[tx_lat]": 0.0307146510003804, + "tests/test_node_config_validation.py::test_half_a_pair_nulls_the_other_half[tx_lon]": 0.03026689999978771, + "tests/test_node_config_validation.py::test_half_a_position_is_rejected[overrides0-rx_lat]": 0.03604519700047604, + "tests/test_node_config_validation.py::test_half_a_position_is_rejected[overrides1-rx_lon]": 0.04366465099974448, + "tests/test_node_config_validation.py::test_half_a_position_is_rejected[overrides2-tx_lat]": 0.03955469499987885, + "tests/test_node_config_validation.py::test_half_a_position_is_rejected[overrides3-tx_lon]": 0.06312789100047667, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[beam_azimuth_deg-0]": 0.03405268899996372, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[beam_azimuth_deg-359.999]": 0.033958955999878526, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[beam_width_deg-360]": 0.03381084800003009, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[cpi_s-10]": 0.036827793999691494, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[fc_hz-1000000]": 0.0404370769997513, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[fc_hz-6000000000]": 0.044896166999933484, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[fs_hz-100000]": 0.03424284800030364, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[fs_hz-20000000]": 0.030624525000348513, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[max_range_km-1000]": 0.036024488000293786, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[rx_alt_ft--1500]": 0.026184660000126314, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[rx_alt_ft-30000]": 0.03168372499976613, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[rx_lat--90]": 0.03136454300056357, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[rx_lat-90]": 0.03099231200030772, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[rx_lon--180]": 0.027048676000049454, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[rx_lon-180]": 0.03227958000024955, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[tx_alt_ft--1500]": 0.031006294000235357, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[tx_alt_ft-30000]": 0.03736041800038947, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[tx_lat--90]": 0.031292644000131986, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[tx_lat-90]": 0.034326094000334706, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[tx_lon--180]": 0.027173558999948, + "tests/test_node_config_validation.py::test_inclusive_bounds_are_accepted[tx_lon-180]": 0.029384768000454642, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-beam_azimuth_deg]": 0.03712124499998026, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-beam_width_deg]": 0.03575759499972264, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-cpi_s]": 0.03642997499991907, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-delay_tolerance_us]": 0.03624452999974892, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-doppler_tolerance_hz]": 0.033681794999665726, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-fc_hz]": 0.04302891499992256, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-fs_hz]": 0.03527541100038434, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-max_range_km]": 0.03649124000003212, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-rx_alt_ft]": 0.03572942299933857, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-rx_lat]": 0.038135956000132865, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-rx_lon]": 0.037266867000198545, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-tx_alt_ft]": 0.03666126199959763, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-tx_lat]": 0.029372907999913878, + "tests/test_node_config_validation.py::test_infinity_is_rejected[-inf-tx_lon]": 0.03140250800015565, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-beam_azimuth_deg]": 0.04951269900038824, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-beam_width_deg]": 0.03922613899931093, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-cpi_s]": 0.055273238999689056, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-delay_tolerance_us]": 0.05489794300046924, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-doppler_tolerance_hz]": 0.034231943000122556, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-fc_hz]": 0.03968855599987364, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-fs_hz]": 0.038510604000293824, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-max_range_km]": 0.05051678499967238, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-rx_alt_ft]": 0.03473070799964262, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-rx_lat]": 0.05842681399963112, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-rx_lon]": 0.05249558099967544, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-tx_alt_ft]": 0.0380178799996429, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-tx_lat]": 0.03056722599967543, + "tests/test_node_config_validation.py::test_infinity_is_rejected[inf-tx_lon]": 0.03845242800025517, + "tests/test_node_config_validation.py::test_integers_are_normalised_to_floats": 0.03231172199957655, + "tests/test_node_config_validation.py::test_nan_is_rejected[beam_azimuth_deg]": 0.03518579999945359, + "tests/test_node_config_validation.py::test_nan_is_rejected[beam_width_deg]": 0.0374344519996157, + "tests/test_node_config_validation.py::test_nan_is_rejected[cpi_s]": 0.04434595500015348, + "tests/test_node_config_validation.py::test_nan_is_rejected[delay_tolerance_us]": 0.051155626999388915, + "tests/test_node_config_validation.py::test_nan_is_rejected[doppler_tolerance_hz]": 0.053170842999406887, + "tests/test_node_config_validation.py::test_nan_is_rejected[fc_hz]": 0.03567486500014638, + "tests/test_node_config_validation.py::test_nan_is_rejected[fs_hz]": 0.03677371799994944, + "tests/test_node_config_validation.py::test_nan_is_rejected[max_range_km]": 0.033563347999916004, + "tests/test_node_config_validation.py::test_nan_is_rejected[rx_alt_ft]": 0.03940053600035753, + "tests/test_node_config_validation.py::test_nan_is_rejected[rx_lat]": 0.032344093000119756, + "tests/test_node_config_validation.py::test_nan_is_rejected[rx_lon]": 0.03503072900002735, + "tests/test_node_config_validation.py::test_nan_is_rejected[tx_alt_ft]": 0.031979323000541626, + "tests/test_node_config_validation.py::test_nan_is_rejected[tx_lat]": 0.041943011000057595, + "tests/test_node_config_validation.py::test_nan_is_rejected[tx_lon]": 0.037065787999836175, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-beam_azimuth_deg]": 0.030666264000046795, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-beam_width_deg]": 0.03336488900004042, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-cpi_s]": 0.036995313000261376, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-delay_tolerance_us]": 0.04204748800066227, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-doppler_tolerance_hz]": 0.03460115300003963, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-fc_hz]": 0.034042088000205695, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-fs_hz]": 0.03460438299953239, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-max_range_km]": 0.03340338900034112, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-rx_alt_ft]": 0.03679840599943418, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-rx_lat]": 0.03698140500000591, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-rx_lon]": 0.03689119499995286, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-tx_alt_ft]": 0.03960468099967329, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-tx_lat]": 0.036384725000061735, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[False-tx_lon]": 0.03606635699952676, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-beam_azimuth_deg]": 0.040904831000261765, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-beam_width_deg]": 0.03950024799996754, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-cpi_s]": 0.04125434000025052, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-delay_tolerance_us]": 0.03632240700017064, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-doppler_tolerance_hz]": 0.03491683500033105, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-fc_hz]": 0.041309826000087924, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-fs_hz]": 0.03181296299999303, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-max_range_km]": 0.034047391999592946, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-rx_alt_ft]": 0.030946241000037844, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-rx_lat]": 0.03718863299991426, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-rx_lon]": 0.0359713580000971, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-tx_alt_ft]": 0.03999178499998379, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-tx_lat]": 0.03460485599953245, + "tests/test_node_config_validation.py::test_no_numeric_field_accepts_a_boolean[True-tx_lon]": 0.035949524999978166, + "tests/test_node_config_validation.py::test_non_geometry_keys_pass_through_unchanged": 0.03398857600041083, + "tests/test_node_config_validation.py::test_null_beam_azimuth_is_preserved_not_defaulted": 0.04336627900011081, + "tests/test_node_config_validation.py::test_null_beam_width_is_preserved_not_defaulted": 0.036503042000276764, + "tests/test_node_config_validation.py::test_null_coordinates_are_accepted[full]": 0.038344768000570184, + "tests/test_node_config_validation.py::test_null_coordinates_are_accepted[neither]": 0.038805770000635675, + "tests/test_node_config_validation.py::test_null_coordinates_are_accepted[no-altitude]": 0.03642005799974868, + "tests/test_node_config_validation.py::test_null_coordinates_are_accepted[no-rx]": 0.0435301179995804, + "tests/test_node_config_validation.py::test_null_coordinates_are_accepted[no-tx]": 0.04415818600000421, + "tests/test_node_config_validation.py::test_null_coordinates_are_accepted[one-altitude]": 0.03809913700024481, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[beam_azimuth_deg--1]": 0.03686181800048871, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[beam_azimuth_deg-360]": 0.038198141000066244, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[beam_width_deg-0]": 0.03898887300010756, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[beam_width_deg-360.1]": 0.05572572400024001, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[beam_width_deg-361]": 0.039653474999795435, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[cpi_s--1]": 0.036972161999983655, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[cpi_s-0]": 0.034154565000335424, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[cpi_s-10.001]": 0.03617186900009983, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[delay_tolerance_us--1]": 0.040203820999977324, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[delay_tolerance_us-0]": 0.04178862200024014, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[doppler_tolerance_hz--1]": 0.03670963500007929, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[doppler_tolerance_hz-0]": 0.03313788500008741, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[fc_hz-6000000001]": 0.03634466199991948, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[fc_hz-999999]": 0.03810566500033019, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[fs_hz-20000001]": 0.046571715999562, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[fs_hz-99999]": 0.03933699799972601, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[max_range_km-0]": 0.041304042000319896, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[max_range_km-1001]": 0.043928151999807596, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[rx_alt_ft--1501]": 0.03584282700012409, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[rx_alt_ft-30001]": 0.03369676400006938, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[rx_lat--91]": 0.036916406999807805, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[rx_lat-91]": 0.03974977799998669, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[rx_lon--181]": 0.03557815900012429, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[rx_lon-181]": 0.03752330000043003, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[tx_alt_ft--1501]": 0.04623784199975489, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[tx_alt_ft-30001]": 0.038955988999532565, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[tx_callsign-]": 0.033326140999633935, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[tx_callsign-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": 0.03854022499945131, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[tx_lat--91]": 0.0345909490001759, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[tx_lat-91]": 0.03450947699957396, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[tx_lon--181]": 0.041643577000286314, + "tests/test_node_config_validation.py::test_out_of_range_values_are_rejected_naming_the_field[tx_lon-181]": 0.03850624000006064, + "tests/test_node_config_validation.py::test_position_status_on_a_config_that_never_saw_validate_config[empty]": 0.12214716299968131, + "tests/test_node_config_validation.py::test_position_status_on_a_config_that_never_saw_validate_config[latitude-without-longitude]": 0.034262006000062684, + "tests/test_node_config_validation.py::test_position_status_on_a_config_that_never_saw_validate_config[unrelated-keys-only]": 0.039342175999991014, + "tests/test_node_config_validation.py::test_position_status_treats_the_zero_pair_as_absent[rx-null-island]": 0.03636618100017586, + "tests/test_node_config_validation.py::test_position_status_treats_the_zero_pair_as_absent[rx-on-the-equator]": 0.04027499800076839, + "tests/test_node_config_validation.py::test_position_status_treats_the_zero_pair_as_absent[tx-null-island]": 0.03512162700053523, + "tests/test_node_config_validation.py::test_position_status_treats_the_zero_pair_as_absent[tx-on-the-prime-meridian]": 0.046400229999562725, + "tests/test_node_config_validation.py::test_rx_and_tx_at_the_same_point_is_rejected": 0.0449104149993218, + "tests/test_node_config_validation.py::test_sharing_one_coordinate_is_not_a_degenerate_baseline[override0]": 0.03770755499999723, + "tests/test_node_config_validation.py::test_sharing_one_coordinate_is_not_a_degenerate_baseline[override1]": 0.037800827999944886, + "tests/test_node_config_validation.py::test_the_field_named_is_always_a_string": 0.03601076400036618, + "tests/test_node_config_validation.py::test_the_legacy_flat_spelling_becomes_the_rx_pair": 0.03377038899998297, + "tests/test_node_config_validation.py::test_the_output_carries_exactly_the_contract_fields": 0.03456478899988724, + "tests/test_node_config_validation.py::test_the_payload_is_not_mutated": 0.03718220400014616, + "tests/test_node_config_validation.py::test_the_published_callsign_length_is_where_the_validator_refuses": 0.03176162599947929, + "tests/test_node_config_validation.py::test_the_returned_dict_is_not_the_payload": 0.04069021899977088, + "tests/test_node_config_validation.py::test_the_tolerances_have_no_upper_bound[1000.0-delay_tolerance_us]": 0.03952931100047863, + "tests/test_node_config_validation.py::test_the_tolerances_have_no_upper_bound[1000.0-doppler_tolerance_hz]": 0.04074487100024271, + "tests/test_node_config_validation.py::test_the_tolerances_have_no_upper_bound[1000000.0-delay_tolerance_us]": 0.037903100999756134, + "tests/test_node_config_validation.py::test_the_tolerances_have_no_upper_bound[1000000.0-doppler_tolerance_hz]": 0.03479716800029564, + "tests/test_node_config_validation.py::test_the_tolerances_have_no_upper_bound[1e+300-delay_tolerance_us]": 0.061343921000570845, + "tests/test_node_config_validation.py::test_the_tolerances_have_no_upper_bound[1e+300-doppler_tolerance_hz]": 0.03827584800001205, + "tests/test_node_config_validation.py::test_the_zero_pair_collapses_but_a_single_zero_axis_survives[rx-null-island]": 0.041148506000354246, + "tests/test_node_config_validation.py::test_the_zero_pair_collapses_but_a_single_zero_axis_survives[rx-on-the-equator]": 0.07889233500009141, + "tests/test_node_config_validation.py::test_the_zero_pair_collapses_but_a_single_zero_axis_survives[rx-on-the-prime-meridian]": 0.04484571600005438, + "tests/test_node_config_validation.py::test_the_zero_pair_collapses_but_a_single_zero_axis_survives[tx-null-island]": 0.04581555000049775, + "tests/test_node_config_validation.py::test_the_zero_pair_collapses_but_a_single_zero_axis_survives[tx-on-the-equator]": 0.05389436699988437, + "tests/test_node_config_validation.py::test_the_zero_pair_collapses_but_a_single_zero_axis_survives[tx-on-the-prime-meridian]": 0.04771535899999435, + "tests/test_node_config_validation.py::test_zero_beam_azimuth_is_not_null": 0.03741783899977236, + "tests/test_node_contact_endpoint.py::test_a_bad_bearer_is_401_rather_than_a_body_refusal": 0.06701724499998818, + "tests/test_node_contact_endpoint.py::test_a_body_that_is_not_an_object_is_refused": 0.090494943000067, + "tests/test_node_contact_endpoint.py::test_a_body_that_is_not_json_is_refused_the_same_way": 0.06883804500057522, + "tests/test_node_contact_endpoint.py::test_a_contact_document_is_stored": 0.08003662499959319, + "tests/test_node_contact_endpoint.py::test_a_contact_put_carries_a_bounced_address": 0.10829248300024119, + "tests/test_node_contact_endpoint.py::test_a_contact_put_carries_the_claim_state": 0.10803025899986096, + "tests/test_node_contact_endpoint.py::test_a_contact_put_does_not_touch_the_claim": 0.10093773700054953, + "tests/test_node_contact_endpoint.py::test_a_refused_document_names_the_field[payload0-middle_name]": 0.06609975900028076, + "tests/test_node_contact_endpoint.py::test_a_refused_document_names_the_field[payload1-email]": 0.06581691300016246, + "tests/test_node_contact_endpoint.py::test_a_refused_document_names_the_field[payload2-phone]": 0.07286935800084393, + "tests/test_node_contact_endpoint.py::test_a_refused_document_names_the_field[payload3-first_name]": 0.07428768099953231, + "tests/test_node_contact_endpoint.py::test_a_refused_document_names_the_field[payload4-last_name]": 0.06709809099993436, + "tests/test_node_contact_endpoint.py::test_a_refused_document_names_the_field[payload5-country]": 0.06901909999987765, + "tests/test_node_contact_endpoint.py::test_a_resend_clears_what_it_omits": 0.09300779099976353, + "tests/test_node_contact_endpoint.py::test_an_empty_document_is_accepted_and_stores_nulls": 0.08155266899984781, + "tests/test_node_contact_endpoint.py::test_no_bearer_is_401_and_writes_nothing": 0.06632997299993804, + "tests/test_node_contact_endpoint.py::test_the_response_carries_the_time_the_row_was_written": 0.07598728299990398, + "tests/test_node_contact_store.py::test_delete_contact_is_false_when_there_was_nothing_to_delete": 0.062206443000377476, + "tests/test_node_contact_store.py::test_delete_contact_removes_the_row_and_says_so": 0.07427351499973156, + "tests/test_node_contact_store.py::test_every_contact_field_is_nullable": 0.07217513299974598, + "tests/test_node_contact_store.py::test_list_contacts_returns_every_row_keyed_by_node": 0.21080709399984698, + "tests/test_node_contact_store.py::test_the_migrated_schema_holds_a_contact_row": 0.06513917099982791, + "tests/test_node_contact_store.py::test_updated_at_comes_back_aware_on_the_unchanged_path": 0.07178628499968909, + "tests/test_node_contact_store.py::test_upsert_holds_one_row_per_node": 0.07159870399982537, + "tests/test_node_contact_store.py::test_upsert_leaves_updated_at_alone_when_nothing_moved": 0.07508929000005082, + "tests/test_node_contact_store.py::test_upsert_moves_updated_at_when_a_field_changes": 0.09157730900005845, + "tests/test_node_contact_store.py::test_upsert_replaces_wholesale_rather_than_merging": 0.07396532500024477, + "tests/test_node_contact_store.py::test_upsert_writes_a_row_for_a_node_that_had_none": 0.06699181100020724, + "tests/test_node_contact_validation.py::test_a_body_that_is_not_an_object_is_refused": 0.05301304800013895, + "tests/test_node_contact_validation.py::test_a_country_code_is_stored_upper_case[GB]": 0.051327871999546915, + "tests/test_node_contact_validation.py::test_a_country_code_is_stored_upper_case[Gb]": 0.08220725199953449, + "tests/test_node_contact_validation.py::test_a_country_code_is_stored_upper_case[gb]": 0.08686799499992048, + "tests/test_node_contact_validation.py::test_a_country_longer_than_the_column_is_refused_as_too_long[GBR]": 0.05992544199989425, + "tests/test_node_contact_validation.py::test_a_country_longer_than_the_column_is_refused_as_too_long[united kingdom]": 0.05368140099972152, + "tests/test_node_contact_validation.py::test_a_country_survives_surrounding_whitespace": 0.0576107859997137, + "tests/test_node_contact_validation.py::test_a_country_that_is_not_two_letters_is_refused[1]": 0.06347374999995736, + "tests/test_node_contact_validation.py::test_a_country_that_is_not_two_letters_is_refused[??]": 0.05753354799981025, + "tests/test_node_contact_validation.py::test_a_country_that_is_not_two_letters_is_refused[G1]": 0.06423824700004843, + "tests/test_node_contact_validation.py::test_a_country_that_is_not_two_letters_is_refused[G]": 0.05247901800021282, + "tests/test_node_contact_validation.py::test_a_field_longer_than_its_column_is_refused[email-256]": 0.04758614100046543, + "tests/test_node_contact_validation.py::test_a_field_longer_than_its_column_is_refused[first_name-65]": 0.04881727600013619, + "tests/test_node_contact_validation.py::test_a_field_longer_than_its_column_is_refused[last_name-65]": 0.047315061000517744, + "tests/test_node_contact_validation.py::test_a_field_longer_than_its_column_is_refused[phone-33]": 0.04861770700017587, + "tests/test_node_contact_validation.py::test_a_field_that_is_only_whitespace_normalises_to_null": 0.04475113100033923, + "tests/test_node_contact_validation.py::test_a_full_document_passes_through_unchanged": 0.046652985000037006, + "tests/test_node_contact_validation.py::test_a_non_string_is_refused[3.5]": 0.05451489900042361, + "tests/test_node_contact_validation.py::test_a_non_string_is_refused[42]": 0.07352241699936712, + "tests/test_node_contact_validation.py::test_a_non_string_is_refused[True]": 0.15043868099974134, + "tests/test_node_contact_validation.py::test_a_non_string_is_refused[value3]": 0.07241504100011298, + "tests/test_node_contact_validation.py::test_a_non_string_is_refused[value4]": 0.10499759399999675, + "tests/test_node_contact_validation.py::test_a_number_is_kept_as_typed[(020) 7946-0000]": 0.09297466600037296, + "tests/test_node_contact_validation.py::test_a_number_is_kept_as_typed[+44 20 7946 0000]": 0.08699131299999863, + "tests/test_node_contact_validation.py::test_a_number_is_kept_as_typed[07700900123]": 0.11748205799995048, + "tests/test_node_contact_validation.py::test_a_phone_that_is_not_a_number_is_refused[()]": 0.08588835000000472, + "tests/test_node_contact_validation.py::test_a_phone_that_is_not_a_number_is_refused[+44-EXT]": 0.11693376900029762, + "tests/test_node_contact_validation.py::test_a_phone_that_is_not_a_number_is_refused[not a number]": 0.07220853000035277, + "tests/test_node_contact_validation.py::test_a_shallow_check_does_not_refuse_a_working_address[a.b@sub.example.com]": 0.07041716699995959, + "tests/test_node_contact_validation.py::test_a_shallow_check_does_not_refuse_a_working_address[ada+node@example.co.uk]": 0.052902465000443044, + "tests/test_node_contact_validation.py::test_a_well_formed_code_is_taken_on_trust": 0.057804205999673286, + "tests/test_node_contact_validation.py::test_an_absent_field_is_null_rather_than_missing": 0.04566240899976037, + "tests/test_node_contact_validation.py::test_an_address_that_cannot_be_one_is_refused[@example.com]": 0.046351215999493434, + "tests/test_node_contact_validation.py::test_an_address_that_cannot_be_one_is_refused[ada lovelace@example.com]": 0.04591845800041483, + "tests/test_node_contact_validation.py::test_an_address_that_cannot_be_one_is_refused[ada@@example.com]": 0.04815024900017306, + "tests/test_node_contact_validation.py::test_an_address_that_cannot_be_one_is_refused[ada@]": 0.04972663799981092, + "tests/test_node_contact_validation.py::test_an_address_that_cannot_be_one_is_refused[ada@example]": 0.05099564800002554, + "tests/test_node_contact_validation.py::test_an_address_that_cannot_be_one_is_refused[ada]": 0.04352161699989665, + "tests/test_node_contact_validation.py::test_an_empty_document_is_a_null_per_field": 0.04724809500021365, + "tests/test_node_contact_validation.py::test_an_unknown_field_is_named_back": 0.06355922000057035, + "tests/test_node_contact_validation.py::test_surrounding_whitespace_is_stripped": 0.04324634600061472, + "tests/test_node_contact_validation.py::test_the_country_pattern_published_is_the_one_enforced": 0.05672084600018934, + "tests/test_node_contact_validation.py::test_the_published_schema_matches_the_bounds": 0.07364474399992105, + "tests/test_node_contact_validation.py::test_the_schema_is_fresh_every_call": 0.05145648000006986, + "tests/test_node_error_taxonomy.py::test_a_bad_token_is_refused_in_the_taxonomy[POST-/v1/nodes/detection-body0]": 0.10386732499955542, + "tests/test_node_error_taxonomy.py::test_a_bad_token_is_refused_in_the_taxonomy[POST-/v1/nodes/heartbeat-body1]": 0.12102092000031917, + "tests/test_node_error_taxonomy.py::test_a_bad_token_is_refused_in_the_taxonomy[PUT-/v1/nodes/config-body2]": 0.11455530800003544, + "tests/test_node_error_taxonomy.py::test_a_bad_token_is_refused_in_the_taxonomy[PUT-/v1/nodes/contact-body3]": 0.1652331280006365, + "tests/test_node_error_taxonomy.py::test_a_body_that_cannot_even_be_read_is_a_400_in_the_taxonomy": 0.09262571599992953, + "tests/test_node_error_taxonomy.py::test_a_body_that_is_not_json_at_all_is_a_400": 0.09525785899995753, + "tests/test_node_error_taxonomy.py::test_a_frame_naming_a_node_is_refused_by_the_key_it_added": 0.11103319800031386, + "tests/test_node_error_taxonomy.py::test_a_long_field_path_is_truncated_to_the_contracts_bound": 0.107870002999789, + "tests/test_node_error_taxonomy.py::test_a_malformed_agreements_block_answers_like_a_bad_config": 0.06734913600030268, + "tests/test_node_error_taxonomy.py::test_a_malformed_frame_is_a_400_naming_the_field": 0.11281963200008249, + "tests/test_node_error_taxonomy.py::test_a_path_that_merely_starts_with_the_prefix_is_not_under_it": 0.07201115299949379, + "tests/test_node_error_taxonomy.py::test_an_invalid_configuration_still_says_so": 0.11400348900042445, + "tests/test_node_error_taxonomy.py::test_an_oversized_body_is_untouched": 0.09534451000035915, + "tests/test_node_error_taxonomy.py::test_an_unhandled_exception_answers_500_in_the_taxonomy": 0.11669691200040688, + "tests/test_node_error_taxonomy.py::test_an_unhandled_exception_outside_the_prefix_keeps_the_plain_text_500": 0.08447497799988923, + "tests/test_node_error_taxonomy.py::test_an_unknown_node_state_is_a_400": 0.11286051299975952, + "tests/test_node_error_taxonomy.py::test_an_unrouted_path_under_the_prefix_is_in_the_taxonomy": 0.08190757300008045, + "tests/test_node_error_taxonomy.py::test_no_credential_at_all_is_refused_the_same_way[POST-/v1/nodes/detection-body0]": 0.10560202900023796, + "tests/test_node_error_taxonomy.py::test_no_credential_at_all_is_refused_the_same_way[POST-/v1/nodes/heartbeat-body1]": 0.11105426700032694, + "tests/test_node_error_taxonomy.py::test_no_credential_at_all_is_refused_the_same_way[PUT-/v1/nodes/config-body2]": 0.12459213800002544, + "tests/test_node_error_taxonomy.py::test_no_credential_at_all_is_refused_the_same_way[PUT-/v1/nodes/contact-body3]": 0.10908287600068434, + "tests/test_node_error_taxonomy.py::test_the_500_names_no_detail_and_leaks_no_exception_text": 0.115559530999235, + "tests/test_node_error_taxonomy.py::test_the_field_path_carries_an_array_index": 0.1090554269999302, + "tests/test_node_error_taxonomy.py::test_the_refusal_names_the_field_and_nothing_else": 0.11221349000061309, + "tests/test_node_error_taxonomy.py::test_the_rest_of_the_api_keeps_fastapis_shape": 0.06519552700001441, + "tests/test_node_fixtures.py::test_accepted_in_mender_resolves_to_an_accepted_record": 0.07090710800002853, + "tests/test_node_fixtures.py::test_alerts_captures_a_call_time_import": 0.08711066999967443, + "tests/test_node_fixtures.py::test_alerts_is_empty_when_nothing_alerts": 0.07195045900016339, + "tests/test_node_fixtures.py::test_each_mender_fixture_is_undone_at_teardown": 0.07301216100086094, + "tests/test_node_fixtures.py::test_mender_down_raises_mender_unreachable": 0.08405049000020881, + "tests/test_node_fixtures.py::test_node_client_does_not_run_the_lifespan": 0.09369177699954889, + "tests/test_node_fixtures.py::test_node_client_installs_and_removes_the_override": 0.06605335099993681, + "tests/test_node_fixtures.py::test_node_client_reports_status_json_content_and_headers": 0.08971668799995314, + "tests/test_node_fixtures.py::test_node_client_requests_read_the_node_session_database": 0.11935762400025851, + "tests/test_node_fixtures.py::test_pending_in_mender_resolves_but_is_not_accepted": 0.07976978599981521, + "tests/test_node_fixtures.py::test_registered_node_unpacks_as_token_then_node_id": 0.14013442899977235, + "tests/test_node_fixtures.py::test_the_seed_survives_a_rollback": 0.11961384800042651, + "tests/test_node_fixtures.py::test_the_seeded_node_has_one_active_configuration": 0.1456729740002629, + "tests/test_node_fixtures.py::test_the_seeded_node_is_active_at_config_version_one": 0.18036338600040835, + "tests/test_node_fixtures.py::test_the_seeded_node_is_registered_with_the_pipeline": 0.12436201999980767, + "tests/test_node_fixtures.py::test_the_seeded_token_actually_authenticates": 0.13588754299962602, + "tests/test_node_fixtures.py::test_the_seeded_token_is_a_live_row_hashing_to_the_stored_hash": 0.17609822399981567, + "tests/test_node_fixtures.py::test_unknown_in_mender_resolves_to_none": 0.07598197199968126, + "tests/test_node_ids.py::test_a_clash_mints_again_and_keeps_the_callers_work": 0.12444701099957456, + "tests/test_node_ids.py::test_a_clash_on_the_first_statement_of_a_transaction_mints_again": 0.11492908899981558, + "tests/test_node_ids.py::test_a_fault_in_the_callers_own_rows_is_not_retried_as_a_clash": 0.13438123099967925, + "tests/test_node_ids.py::test_a_minted_id_is_the_prefix_and_eight_hex": 0.10489030899998397, + "tests/test_node_ids.py::test_every_system_prefix_is_three_lowercase_letters[bla]": 0.09645075399930647, + "tests/test_node_ids.py::test_every_system_prefix_is_three_lowercase_letters[ret]": 0.0725719939996452, + "tests/test_node_ids.py::test_fleet_ids_are_never_minted": 0.09314017899987448, + "tests/test_node_ids.py::test_no_system_prefix_overlaps_a_synthetic_one[e2e--bla]": 0.07999469300011697, + "tests/test_node_ids.py::test_no_system_prefix_overlaps_a_synthetic_one[e2e--ret]": 0.07277055299982749, + "tests/test_node_ids.py::test_no_system_prefix_overlaps_a_synthetic_one[realnode--bla]": 0.07946223799990548, + "tests/test_node_ids.py::test_no_system_prefix_overlaps_a_synthetic_one[realnode--ret]": 0.07225760099981926, + "tests/test_node_ids.py::test_no_system_prefix_overlaps_a_synthetic_one[synth--bla]": 0.07022055200059185, + "tests/test_node_ids.py::test_no_system_prefix_overlaps_a_synthetic_one[synth--ret]": 0.07850322700005563, + "tests/test_node_ids.py::test_no_system_prefix_overlaps_a_synthetic_one[test--bla]": 0.05894218599996748, + "tests/test_node_ids.py::test_no_system_prefix_overlaps_a_synthetic_one[test--ret]": 0.06626248600059625, + "tests/test_node_ids.py::test_system_of_reads_the_prefix_of_a_well_formed_id_only[-None]": 0.06557002399949852, + "tests/test_node_ids.py::test_system_of_reads_the_prefix_of_a_well_formed_id_only[bla1a2b3c4d-bla]": 0.07406627100044716, + "tests/test_node_ids.py::test_system_of_reads_the_prefix_of_a_well_formed_id_only[ret1A2B3C4D-None]": 0.07316491100027633, + "tests/test_node_ids.py::test_system_of_reads_the_prefix_of_a_well_formed_id_only[ret1a2b3c4-None]": 0.07125771499977418, + "tests/test_node_ids.py::test_system_of_reads_the_prefix_of_a_well_formed_id_only[ret1a2b3c4d-ret]": 0.06214402899968263, + "tests/test_node_ids.py::test_system_of_reads_the_prefix_of_a_well_formed_id_only[ret1a2b3c4d5-None]": 0.5936524689996077, + "tests/test_node_ids.py::test_system_of_reads_the_prefix_of_a_well_formed_id_only[synth-0a1b2c3d-None]": 0.06935230100043555, + "tests/test_node_ids.py::test_system_of_reads_the_prefix_of_a_well_formed_id_only[xyz1a2b3c4d-None]": 0.06537144400044781, + "tests/test_node_ids.py::test_the_last_clash_is_raised_once_the_attempts_run_out": 0.13164951899943844, + "tests/test_node_models.py::test_a_config_for_an_unknown_node_is_rejected": 0.10895041699950525, + "tests/test_node_models.py::test_a_config_missing_a_processing_parameter_is_rejected[cpi_s]": 0.10615410999980668, + "tests/test_node_models.py::test_a_config_missing_a_processing_parameter_is_rejected[delay_tolerance_us]": 0.10578602500027046, + "tests/test_node_models.py::test_a_config_missing_a_processing_parameter_is_rejected[doppler_tolerance_hz]": 0.12989800700006526, + "tests/test_node_models.py::test_a_node_ref_is_unique": 0.11411460299996179, + "tests/test_node_models.py::test_a_node_round_trips": 0.11669106199997259, + "tests/test_node_models.py::test_a_token_hash_is_unique": 0.12715407200039408, + "tests/test_node_models.py::test_a_zero_beam_azimuth_is_kept_as_zero": 0.16576879000012923, + "tests/test_node_models.py::test_beam_azimuth_null_survives_a_round_trip": 0.1331464509999023, + "tests/test_node_models.py::test_beam_width_null_survives_a_round_trip": 0.1472606150005049, + "tests/test_node_models.py::test_config_versions_are_unique_per_node": 0.11130164700034584, + "tests/test_node_models.py::test_the_processing_parameters_round_trip": 0.1047947000001841, + "tests/test_node_models.py::test_the_same_version_under_two_nodes_is_fine": 0.16214768600048046, + "tests/test_node_openapi.py::test_and_a_malformed_body_really_does_answer_400": 0.1276981720002368, + "tests/test_node_openapi.py::test_both_operations_reach_one_configuration_component": 0.08974757399982991, + "tests/test_node_openapi.py::test_every_bound_the_validator_enforces_reaches_the_schema": 0.06651126099995963, + "tests/test_node_openapi.py::test_every_endpoint_but_registration_requires_the_bearer": 0.0735209450003822, + "tests/test_node_openapi.py::test_every_field_the_validator_requires_is_published_and_required": 0.09715883399985614, + "tests/test_node_openapi.py::test_every_node_operation_publishes_its_body_as_a_component": 0.08438292999971964, + "tests/test_node_openapi.py::test_every_numeric_bound_the_models_enforce_reaches_the_schema": 0.06706691599993064, + "tests/test_node_openapi.py::test_every_refusal_carries_the_contracts_error_shape": 0.06617912499996237, + "tests/test_node_openapi.py::test_every_refusal_is_annotated_with_what_the_node_may_do": 0.07627113399985319, + "tests/test_node_openapi.py::test_every_retry_after_response_publishes_the_header": 0.07162628900005075, + "tests/test_node_openapi.py::test_it_describes_the_five_node_endpoints_and_nothing_else": 0.0584130749994074, + "tests/test_node_openapi.py::test_no_bound_is_published_as_a_pydantic_keyword": 0.06514231099981771, + "tests/test_node_openapi.py::test_no_operation_publishes_a_422": 0.07683795599996301, + "tests/test_node_openapi.py::test_only_a_refused_credential_is_terminal": 0.07962928999995711, + "tests/test_node_openapi.py::test_only_the_operations_that_cost_a_mailbox_or_the_pipeline_are_rate_limited": 0.06247341000016604, + "tests/test_node_openapi.py::test_the_bearer_scheme_is_published": 0.07453406800004814, + "tests/test_node_openapi.py::test_the_committed_contract_is_what_the_routes_generate": 0.2972315619995243, + "tests/test_node_openapi.py::test_the_committed_file_parses_as_yaml_and_matches_the_document": 0.40387162899969553, + "tests/test_node_openapi.py::test_the_contact_operation_reaches_its_own_component": 0.09114489200010212, + "tests/test_node_openapi.py::test_the_contract_carries_the_node_apis_own_version": 0.06902330899947628, + "tests/test_node_openapi.py::test_the_descriptions_are_written_for_a_node_author": 0.07679836100032844, + "tests/test_node_openapi.py::test_the_nullable_fields_publish_a_null_branch": 0.0739714979999917, + "tests/test_node_openapi.py::test_the_operation_ids_are_the_ones_the_node_client_was_built_against": 0.07083168399958595, + "tests/test_node_openapi.py::test_the_servers_are_origins_and_the_paths_carry_the_version": 0.07529488899945136, + "tests/test_node_openapi.py::test_the_timestamps_are_still_typed_as_datetimes": 0.07448615500061351, + "tests/test_node_pipeline.py::test_a_frame_reaches_the_queue_under_its_node_id": 0.05459794600028545, + "tests/test_node_pipeline.py::test_a_full_queue_drops_the_frame_and_bumps_the_counter": 0.0466969620006239, + "tests/test_node_pipeline.py::test_a_node_with_no_active_configuration_cannot_be_registered": 0.07355457099993146, + "tests/test_node_pipeline.py::test_a_node_with_no_azimuth_is_registered_broadside_not_due_north": 0.07938440800035096, + "tests/test_node_pipeline.py::test_a_registered_node_appears_in_connected_nodes": 0.09231604199976573, + "tests/test_node_pipeline.py::test_a_reserved_prefix_is_not_a_valid_v1_node_id[e2e-]": 0.06685018400003173, + "tests/test_node_pipeline.py::test_a_reserved_prefix_is_not_a_valid_v1_node_id[realnode-]": 0.07274268099945402, + "tests/test_node_pipeline.py::test_a_reserved_prefix_is_not_a_valid_v1_node_id[synth-]": 0.06308462199967835, + "tests/test_node_pipeline.py::test_a_reserved_prefix_is_not_a_valid_v1_node_id[test-]": 0.06517226999994818, + "tests/test_node_pipeline.py::test_a_row_with_no_position_registers_unplaced_and_keeps_its_nulls": 0.1314659060003578, + "tests/test_node_pipeline.py::test_a_wire_tag_is_a_path_1_claim": 0.051275032000376086, + "tests/test_node_pipeline.py::test_an_aimed_node_keeps_the_azimuth_it_was_configured_with": 0.07905206499981432, + "tests/test_node_pipeline.py::test_every_node_is_primed_from_the_database_at_startup": 0.13778722400002152, + "tests/test_node_pipeline.py::test_no_reserved_prefix_can_begin_a_v1_node_id[e2e-]": 0.09093780599960155, + "tests/test_node_pipeline.py::test_no_reserved_prefix_can_begin_a_v1_node_id[realnode-]": 0.073556419000397, + "tests/test_node_pipeline.py::test_no_reserved_prefix_can_begin_a_v1_node_id[synth-]": 0.06626219099962327, + "tests/test_node_pipeline.py::test_no_reserved_prefix_can_begin_a_v1_node_id[test-]": 0.06627944800038676, + "tests/test_node_pipeline.py::test_nodes_with_no_beam_width_are_registered_at_the_nominal_yagi_width": 0.10982291799973609, + "tests/test_node_pipeline.py::test_pipeline_frame_converts_the_wire_shape": 0.050514111000211415, + "tests/test_node_pipeline.py::test_pipeline_frame_files_position_tags_the_way_the_tcp_ingest_does": 0.05140404900021167, + "tests/test_node_pipeline.py::test_pipeline_frame_omits_the_tag_fields_the_node_left_null": 0.04698789800022496, + "tests/test_node_pipeline.py::test_pipeline_frame_takes_the_hexes_from_the_tags_when_adsb_hex_is_absent": 0.05175712700020085, + "tests/test_node_pipeline.py::test_priming_skips_a_node_with_no_active_config": 0.08088651900015975, + "tests/test_node_pipeline.py::test_priming_skips_a_retired_node": 0.08991656200032594, + "tests/test_node_pipeline.py::test_re_registering_evicts_the_cached_pipeline_so_the_next_frame_sees_the_new_geometry": 0.1312445290004689, + "tests/test_node_pipeline.py::test_re_registering_picks_up_the_new_active_configuration": 0.08854007799982355, + "tests/test_node_pipeline.py::test_registration_reaches_analytics_and_the_associator": 0.13255913600005442, + "tests/test_node_pipeline.py::test_startup_priming_loads_the_fleet_from_the_app_session": 0.09084069400023509, + "tests/test_node_pipeline.py::test_startup_priming_survives_a_database_failure": 0.04811384300046484, + "tests/test_node_pipeline.py::test_the_config_hash_is_computed_before_canonicalisation": 0.0867939669997213, + "tests/test_node_pipeline.py::test_the_pipeline_config_carries_the_defaults_the_wire_config_omits": 0.1308083980002266, + "tests/test_node_pipeline.py::test_the_priming_summary_is_logged_where_it_can_actually_be_seen": 0.07966689999966547, + "tests/test_node_pipeline.py::test_the_route_uses_the_shared_conversion": 0.04957586000000447, + "tests/test_node_rate_limits.py::test_a_crowded_map_reclaims_only_counters_whose_window_has_passed": 0.06893912000032287, + "tests/test_node_rate_limits.py::test_a_full_claim_map_refuses_an_identity_it_does_not_already_track": 0.04883241400057159, + "tests/test_node_rate_limits.py::test_a_full_map_admits_a_tracked_node_whose_hourly_key_expired_but_daily_key_is_live": 0.05426440700011881, + "tests/test_node_rate_limits.py::test_a_full_registration_map_refuses_a_node_id_it_has_never_seen": 0.0570774419998088, + "tests/test_node_rate_limits.py::test_a_full_registration_map_still_serves_a_node_id_it_already_tracks": 0.055881040999793186, + "tests/test_node_rate_limits.py::test_a_live_counter_survives_a_crowded_map": 0.06705478499998208, + "tests/test_node_rate_limits.py::test_a_live_registration_counter_survives_a_crowded_map": 0.05330329500020525, + "tests/test_node_rate_limits.py::test_a_map_above_the_expected_fleet_size_warns_rather_than_evicting": 0.05313878799961458, + "tests/test_node_rate_limits.py::test_a_previously_refused_node_id_is_admitted_once_its_window_is_reclaimed": 0.06312954400073068, + "tests/test_node_rate_limits.py::test_a_refusal_by_the_address_limit_does_not_spend_the_node_limit": 0.04769928099995013, + "tests/test_node_rate_limits.py::test_a_refusal_by_the_daily_cap_does_not_spend_the_hourly_allowance": 0.05302543200014043, + "tests/test_node_rate_limits.py::test_a_refusal_does_not_hand_out_the_modules_own_body_dict": 0.04972047299997939, + "tests/test_node_rate_limits.py::test_a_refused_request_is_not_counted": 0.04842964499948721, + "tests/test_node_rate_limits.py::test_a_registration_refusal_does_not_hand_out_the_modules_own_body_dict": 0.05319888099984382, + "tests/test_node_rate_limits.py::test_an_endpoint_with_no_configured_limit_is_a_programming_error": 0.054809651999676134, + "tests/test_node_rate_limits.py::test_eight_detection_frames_a_second_are_admitted_and_the_ninth_is_not": 0.051503849999789963, + "tests/test_node_rate_limits.py::test_five_nominations_an_hour_are_admitted_and_the_sixth_is_not": 0.06078382199984844, + "tests/test_node_rate_limits.py::test_five_registrations_an_hour_are_admitted_and_the_sixth_is_not": 0.051609076999739045, + "tests/test_node_rate_limits.py::test_one_node_nominating_a_second_address_still_spends_its_own_allowance": 0.04968905099985932, + "tests/test_node_rate_limits.py::test_resetting_the_registration_limiter_clears_an_exhausted_counter": 0.04558570700010023, + "tests/test_node_rate_limits.py::test_resetting_the_token_limiter_clears_an_exhausted_counter": 0.05269800700034466, + "tests/test_node_rate_limits.py::test_the_claim_daily_limit_outlives_the_hourly_one": 0.04801769499954389, + "tests/test_node_rate_limits.py::test_the_claim_hourly_window_resets": 0.042233468999711476, + "tests/test_node_rate_limits.py::test_the_claim_retry_after_is_never_zero": 0.04521852799962289, + "tests/test_node_rate_limits.py::test_the_daily_cap_holds_though_the_hourly_window_is_fresh": 0.08036597499949494, + "tests/test_node_rate_limits.py::test_the_daily_window_resets": 0.05995872099992994, + "tests/test_node_rate_limits.py::test_the_detection_window_resets_after_a_second": 0.05440060800037827, + "tests/test_node_rate_limits.py::test_the_documented_claim_rates_are_the_ones_configured": 0.05797759999995833, + "tests/test_node_rate_limits.py::test_the_documented_rates_are_the_ones_configured": 0.058256801000425185, + "tests/test_node_rate_limits.py::test_the_documented_registration_rates_are_the_ones_configured": 0.04967366199934986, + "tests/test_node_rate_limits.py::test_the_endpoints_do_not_share_a_counter": 0.052570749999631516, + "tests/test_node_rate_limits.py::test_the_hourly_window_resets": 0.057030839000162814, + "tests/test_node_rate_limits.py::test_the_overflow_warning_is_throttled_by_its_own_interval": 0.06106839700032651, + "tests/test_node_rate_limits.py::test_the_registration_refusal_carries_the_shared_jittered_retry_after": 0.06123176000028252, + "tests/test_node_rate_limits.py::test_the_retry_after_counts_down_the_window_and_is_never_zero": 0.07557402400016144, + "tests/test_node_rate_limits.py::test_the_token_limiter_keeps_growing_past_its_bound_rather_than_refusing": 0.05782985199994073, + "tests/test_node_rate_limits.py::test_thirty_a_minute_on_the_slow_endpoints[config]": 0.05609674700008327, + "tests/test_node_rate_limits.py::test_thirty_a_minute_on_the_slow_endpoints[heartbeat]": 0.04857415000014953, + "tests/test_node_rate_limits.py::test_two_node_ids_do_not_share_a_registration_counter": 0.05503960499981986, + "tests/test_node_rate_limits.py::test_two_nodes_do_not_share_a_counter": 0.07467932100007602, + "tests/test_node_rate_limits.py::test_two_nodes_nominating_one_address_share_its_allowance": 0.06036391299994648, + "tests/test_node_refs.py::TestBackoff::test_a_failed_first_load_does_not_requery_every_call": 0.05019388699975025, + "tests/test_node_refs.py::TestIdForRef::test_a_node_id_is_not_accepted_as_a_ref": 0.06794487200022559, + "tests/test_node_refs.py::TestIdForRef::test_a_ref_resolves_back_to_its_node_id": 0.05740236000065124, + "tests/test_node_refs.py::TestIdForRef::test_an_unknown_ref_resolves_to_none": 0.056581130000722624, + "tests/test_node_refs.py::TestMirroredRef::test_a_mirrored_node_reaches_the_published_feed": 0.0485443600000508, + "tests/test_node_refs.py::TestMirroredRef::test_a_mirrored_ref_is_published_when_the_registry_has_none": 0.04834992499991131, + "tests/test_node_refs.py::TestMirroredRef::test_the_registry_wins_over_a_mirrored_ref": 0.04590369199968336, + "tests/test_node_refs.py::TestMirroredRef::test_without_one_the_node_is_still_dropped": 0.049023367000245344, + "tests/test_node_refs.py::TestPublicRecords::test_a_node_id_inside_a_tuple_is_republished": 0.05235770899980707, + "tests/test_node_refs.py::TestPublicRecords::test_an_unresolvable_id_inside_a_tuple_loses_its_place": 0.052600559999973484, + "tests/test_node_refs.py::TestRefFor::test_a_missing_id_resolves_to_none": 0.055655162000221026, + "tests/test_node_refs.py::TestRefFor::test_a_registered_node_resolves_to_its_ref": 0.05962474500029202, + "tests/test_node_refs.py::TestRefFor::test_an_unregistered_node_resolves_to_none": 0.0567752439992546, + "tests/test_node_refs.py::TestRefToIdMap::test_a_mirrored_node_resolves_through_the_ids_it_is_given": 0.0483839580001586, + "tests/test_node_refs.py::TestRefToIdMap::test_a_node_with_no_handle_at_all_is_left_out": 0.04846744399992531, + "tests/test_node_refs.py::TestRefToIdMap::test_a_synthetic_node_maps_to_itself": 0.04788001299948519, + "tests/test_node_refs.py::TestRefToIdMap::test_it_names_the_node_behind_every_registered_ref": 0.048601753000184544, + "tests/test_node_refs.py::TestRefToIdMap::test_the_registry_wins_over_a_mirrored_ref": 0.04689968899992891, + "tests/test_node_refs.py::TestRefreshIsAtomic::test_a_reader_never_sees_a_partial_map_during_concurrent_refreshes": 1.1156258749997505, + "tests/test_node_refs.py::TestRefreshIsAtomic::test_a_successful_refresh_rebinds_rather_than_mutates": 0.06132290400000784, + "tests/test_node_refs.py::TestSubstituteIdentities::test_a_hex_left_with_no_nodes_loses_its_entry": 0.04874257900064549, + "tests/test_node_refs.py::TestSubstituteIdentities::test_a_null_node_id_is_published_as_a_null_ref": 0.05146837200027221, + "tests/test_node_refs.py::TestSubstituteIdentities::test_a_single_node_entry_carries_the_ref": 0.05272736600045391, + "tests/test_node_refs.py::TestSubstituteIdentities::test_a_synthetic_node_passes_through_unchanged": 0.05338108600017222, + "tests/test_node_refs.py::TestSubstituteIdentities::test_an_empty_contributor_list_is_renamed_not_dropped": 0.05116547300031016, + "tests/test_node_refs.py::TestSubstituteIdentities::test_an_unresolvable_real_node_is_dropped_not_published": 0.05101946000013413, + "tests/test_node_refs.py::TestSubstituteIdentities::test_arcs_and_detecting_nodes_are_substituted": 0.05095353300021088, + "tests/test_node_refs.py::TestSubstituteIdentities::test_contributing_ids_are_substituted": 0.05094623600052728, + "tests/test_node_refs.py::TestSubstituteIdentities::test_the_messages_count_follows_what_survives": 0.048361675000251125, + "tests/test_node_refs.py::TestUnresolvedLogging::test_a_different_unresolvable_id_still_logs_its_own_line": 0.05224819299974115, + "tests/test_node_refs.py::TestUnresolvedLogging::test_a_refresh_lets_it_log_again": 0.04870932000039829, + "tests/test_node_refs.py::TestUnresolvedLogging::test_a_repeated_unresolvable_id_logs_once": 0.05017097500012824, + "tests/test_node_refusals.py::test_the_retry_after_is_a_whole_number_of_seconds": 0.04555587899994862, + "tests/test_node_refusals.py::test_the_retry_after_is_jittered_rather_than_constant": 0.04817321999962587, + "tests/test_node_refusals.py::test_the_retry_after_stays_inside_the_jittered_range": 0.04123019300004671, + "tests/test_node_refusals.py::test_the_two_bodies_are_the_documented_ones": 0.038528044000031514, + "tests/test_node_register.py::TestRegistrationPublicationCache::test_failed_commit_does_not_invalidate_or_publish[False]": 0.09002310499954547, + "tests/test_node_register.py::TestRegistrationPublicationCache::test_failed_commit_does_not_invalidate_or_publish[True]": 0.11029751300020507, + "tests/test_node_register.py::TestRegistrationPublicationCache::test_new_private_registration_refreshes_policy_before_pipeline_publication": 0.08681795899974531, + "tests/test_node_register.py::TestRegistrationPublicationCache::test_pipeline_failure_keeps_committed_privacy_effective": 0.09991600600005768, + "tests/test_node_register.py::TestRegistrationPublicationCache::test_reregistration_refreshes_changed_choice[active-private-public]": 0.1207496940000965, + "tests/test_node_register.py::TestRegistrationPublicationCache::test_reregistration_refreshes_changed_choice[active-public-private]": 0.1205315650004195, + "tests/test_node_register.py::TestRegistrationPublicationCache::test_reregistration_refreshes_changed_choice[blocked-private-public]": 0.1530381130000933, + "tests/test_node_register.py::TestRegistrationPublicationCache::test_reregistration_refreshes_changed_choice[blocked-public-private]": 0.13698557899942898, + "tests/test_node_register.py::test_a_blocked_board_re_registers_without_returning_to_the_pipeline": 0.1273689280005783, + "tests/test_node_register.py::test_a_colliding_registration_is_refused_rather_than_a_500": 0.08202421799978765, + "tests/test_node_register.py::test_a_first_registration_raises_no_hold": 0.08402954800021689, + "tests/test_node_register.py::test_a_malformed_node_id_never_reaches_mender": 0.05087297000000035, + "tests/test_node_register.py::test_a_private_choice_is_recorded_as_private": 0.0921257500003776, + "tests/test_node_register.py::test_a_refused_registration_writes_nothing": 0.0757466539998859, + "tests/test_node_register.py::test_agreements_missing_publication_is_rejected": 0.051401357999566244, + "tests/test_node_register.py::test_an_acceptance_sent_with_an_offset_is_stored_as_the_instant": 0.09207303700031844, + "tests/test_node_register.py::test_an_accepted_device_registers": 0.08707203799986019, + "tests/test_node_register.py::test_an_invalid_config_is_a_400_only_after_identity_resolves": 0.06090971499997977, + "tests/test_node_register.py::test_an_over_long_unknown_config_key_is_still_a_400": 0.04964173800044591, + "tests/test_node_register.py::test_an_unknown_device_raises_no_alert": 0.05065221199993175, + "tests/test_node_register.py::test_every_refusal_class_shares_one_body": 0.25070208999977694, + "tests/test_node_register.py::test_mender_unreachable_raises_the_alert": 0.052491467999971064, + "tests/test_node_register.py::test_re_registration_clears_the_previous_owners_contact": 0.1376445160003641, + "tests/test_node_register.py::test_re_registration_keeps_the_node_ref_and_returns_the_held_version": 0.15331534500046473, + "tests/test_node_register.py::test_re_registration_records_a_withdrawn_publication_choice": 0.11087960499980909, + "tests/test_node_register.py::test_re_registration_revokes_the_previous_token": 0.11289932499948918, + "tests/test_node_register.py::test_the_agreement_records_are_stored": 0.0826682709994202, + "tests/test_node_register.py::test_the_configuration_is_stored_as_version_one": 0.10109521100002894, + "tests/test_node_register.py::test_the_hold_alert_fires_after_the_commit": 0.11132733399972494, + "tests/test_node_register.py::test_the_limiter_is_keyed_per_node_id": 0.21917680300020947, + "tests/test_node_register.py::test_the_node_reaches_the_pipeline": 0.07520866999993814, + "tests/test_node_register.py::test_the_rate_limiter_fires_before_the_mender_call": 0.1850010869993639, + "tests/test_node_register.py::test_the_registered_node_is_active_and_holds_a_live_token": 0.09517990299991652, + "tests/test_node_register.py::test_the_registration_is_committed_rather_than_left_pending": 0.08602851900013775, + "tests/test_node_registration_flag.py::TestPublishedPayload::test_the_declared_polygon_is_translated_rigidly": 0.05770349200020064, + "tests/test_node_registration_flag.py::TestPublishedPayload::test_the_manager_keeps_the_true_wedge": 0.05355518699980166, + "tests/test_node_registration_flag.py::TestPublishedPayload::test_the_source_survives_the_public_rewrite": 0.05552654899975096, + "tests/test_node_registration_flag.py::TestWhoseGeometryIsTruth::test_a_real_node_still_publishes_evidence_only": 0.04837050200012527, + "tests/test_node_registration_flag.py::TestWhoseGeometryIsTruth::test_a_synthetic_node_publishes_its_declared_cone": 0.04941862500027128, + "tests/test_node_registration_flag.py::TestWhoseGeometryIsTruth::test_it_is_published_before_any_traffic_has_flown": 0.0508405729997321, + "tests/test_node_registration_flag.py::TestWhoseGeometryIsTruth::test_the_cone_is_the_declared_one": 0.05421030800016524, + "tests/test_node_registration_flag.py::TestWhoseGeometryIsTruth::test_the_two_registries_still_agree_on_the_node": 0.05320971100036331, + "tests/test_node_retirement.py::TestAdminRoutes::test_a_sweep_that_partly_fails_returns_207": 0.1787780740000926, + "tests/test_node_retirement.py::TestAdminRoutes::test_a_sweep_that_retires_nothing_and_fails_returns_500": 0.18195999399995344, + "tests/test_node_retirement.py::TestAdminRoutes::test_delete_conflicts_on_a_connected_node": 0.18144139400010317, + "tests/test_node_retirement.py::TestAdminRoutes::test_delete_retires_the_node": 0.1935384280004655, + "tests/test_node_retirement.py::TestAdminRoutes::test_delete_with_force_retires_a_connected_node": 0.188387161999799, + "tests/test_node_retirement.py::TestAdminRoutes::test_retire_stale_sweeps_and_reports": 0.17561436100049832, + "tests/test_node_retirement.py::TestAdminRoutes::test_stale_listing_names_the_departed_node": 0.18309213600014118, + "tests/test_node_retirement.py::TestForceRetireAllowlist::test_an_unforced_retire_is_never_restricted": 0.05955584200000885, + "tests/test_node_retirement.py::TestForceRetireAllowlist::test_force_is_permitted_inside_the_allowlist": 0.051324222999937774, + "tests/test_node_retirement.py::TestForceRetireAllowlist::test_force_is_refused_outside_the_allowlist": 0.04662311999982194, + "tests/test_node_retirement.py::TestForceRetireAllowlist::test_force_is_unrestricted_when_no_prefixes_are_configured": 0.0520948289995431, + "tests/test_node_retirement.py::TestForceRetireAllowlist::test_force_on_a_node_already_absent_is_not_restricted": 0.03966676100026234, + "tests/test_node_retirement.py::TestForceRetireAllowlist::test_the_allowlist_gates_a_disconnected_node_too": 0.04178843199997573, + "tests/test_node_retirement.py::TestForceRetireAllowlist::test_the_route_permits_a_force_retire_inside_the_allowlist": 0.1710611199991945, + "tests/test_node_retirement.py::TestForceRetireAllowlist::test_the_route_refuses_with_403_and_names_the_prefixes": 0.17701883900053872, + "tests/test_node_retirement.py::TestParseCommaList::test_a_normal_two_prefix_value": 0.050171589000001404, + "tests/test_node_retirement.py::TestParseCommaList::test_a_trailing_comma_does_not_yield_an_empty_prefix": 0.041110097000455426, + "tests/test_node_retirement.py::TestParseCommaList::test_an_empty_string_yields_no_prefixes": 0.04307374800055186, + "tests/test_node_retirement.py::TestParseCommaList::test_whitespace_around_entries_is_stripped": 0.0389504479999232, + "tests/test_node_retirement.py::TestRetireNode::test_a_disconnected_node_is_still_held_and_still_refused": 0.04879775100016559, + "tests/test_node_retirement.py::TestRetireNode::test_a_failure_partway_re_raises_and_leaves_the_rest_retirable": 0.04773337500000707, + "tests/test_node_retirement.py::TestRetireNode::test_force_overrides_the_refusal": 0.04674457500004792, + "tests/test_node_retirement.py::TestRetireNode::test_it_clears_analytics_and_custody": 0.04811743900017973, + "tests/test_node_retirement.py::TestRetireNode::test_it_evicts_the_cached_pipeline": 0.04191761599940946, + "tests/test_node_retirement.py::TestRetireNode::test_it_evicts_the_node_from_the_fleet_registry": 0.0494504770003914, + "tests/test_node_retirement.py::TestRetireNode::test_it_refuses_a_connected_node": 0.04396184600000197, + "tests/test_node_retirement.py::TestRetireNode::test_retire_stale_clears_everything_absent": 0.04104198400000314, + "tests/test_node_retirement.py::TestRetireNode::test_retire_stale_records_a_failure_and_keeps_going": 0.04785282999955598, + "tests/test_node_retirement.py::TestRetireNode::test_retire_stale_skips_a_node_that_reconnected_and_finishes_the_rest": 0.04386128399983136, + "tests/test_node_retirement.py::TestRetireNode::test_retiring_a_node_that_was_never_registered_is_a_no_op": 0.05410130000018398, + "tests/test_node_retirement.py::TestStaleDetection::test_a_connected_node_is_not": 0.04528514200001155, + "tests/test_node_retirement.py::TestStaleDetection::test_a_departed_node_is_reported_stale": 0.05167719200017018, + "tests/test_node_retirement.py::TestStaleDetection::test_custody_alone_is_enough_to_be_held": 0.05079099099975792, + "tests/test_node_router_skeleton.py::test_a_body_at_the_cap_is_not_refused[/v1/nodes/claim/resend]": 0.0678729060009573, + "tests/test_node_router_skeleton.py::test_a_body_at_the_cap_is_not_refused[/v1/nodes/claim]": 0.056017520999830595, + "tests/test_node_router_skeleton.py::test_a_body_at_the_cap_is_not_refused[/v1/nodes/config]": 0.053857071000493306, + "tests/test_node_router_skeleton.py::test_a_body_at_the_cap_is_not_refused[/v1/nodes/contact]": 0.047865422000086255, + "tests/test_node_router_skeleton.py::test_a_body_at_the_cap_is_not_refused[/v1/nodes/detection]": 0.05233261399916955, + "tests/test_node_router_skeleton.py::test_a_body_at_the_cap_is_not_refused[/v1/nodes/heartbeat]": 0.06943027499983145, + "tests/test_node_router_skeleton.py::test_a_body_at_the_cap_is_not_refused[/v1/nodes/register]": 0.08037668799988751, + "tests/test_node_router_skeleton.py::test_a_non_node_path_is_not_capped_at_8_kib": 0.09713553300070998, + "tests/test_node_router_skeleton.py::test_a_non_node_path_over_the_global_cap_keeps_the_detail_shape": 0.03820432099973914, + "tests/test_node_router_skeleton.py::test_a_trailing_slash_does_not_escape_the_cap[/v1/nodes/claim/resend]": 0.050004881999484496, + "tests/test_node_router_skeleton.py::test_a_trailing_slash_does_not_escape_the_cap[/v1/nodes/claim]": 0.04911682700003439, + "tests/test_node_router_skeleton.py::test_a_trailing_slash_does_not_escape_the_cap[/v1/nodes/config]": 0.04270721400052935, + "tests/test_node_router_skeleton.py::test_a_trailing_slash_does_not_escape_the_cap[/v1/nodes/contact]": 0.04395513600002232, + "tests/test_node_router_skeleton.py::test_a_trailing_slash_does_not_escape_the_cap[/v1/nodes/detection]": 0.0590266729996074, + "tests/test_node_router_skeleton.py::test_a_trailing_slash_does_not_escape_the_cap[/v1/nodes/heartbeat]": 0.041667171000426606, + "tests/test_node_router_skeleton.py::test_a_trailing_slash_does_not_escape_the_cap[/v1/nodes/register]": 0.035675203000209876, + "tests/test_node_router_skeleton.py::test_detection_cap_is_larger_than_the_other_three": 0.05658381400007784, + "tests/test_node_router_skeleton.py::test_every_capped_path_has_a_method_and_vice_versa": 0.040017213000282936, + "tests/test_node_router_skeleton.py::test_main_wires_the_node_caps_into_the_middleware": 0.03454279600009613, + "tests/test_node_router_skeleton.py::test_one_byte_over_the_cap_is_refused[/v1/nodes/claim/resend]": 0.06263619999936054, + "tests/test_node_router_skeleton.py::test_one_byte_over_the_cap_is_refused[/v1/nodes/claim]": 0.05258174299979146, + "tests/test_node_router_skeleton.py::test_one_byte_over_the_cap_is_refused[/v1/nodes/config]": 0.0539086730004783, + "tests/test_node_router_skeleton.py::test_one_byte_over_the_cap_is_refused[/v1/nodes/contact]": 0.05175744699954521, + "tests/test_node_router_skeleton.py::test_one_byte_over_the_cap_is_refused[/v1/nodes/detection]": 0.04794865099984236, + "tests/test_node_router_skeleton.py::test_one_byte_over_the_cap_is_refused[/v1/nodes/heartbeat]": 0.04436275399984879, + "tests/test_node_router_skeleton.py::test_one_byte_over_the_cap_is_refused[/v1/nodes/register]": 0.04921078099960141, + "tests/test_node_router_skeleton.py::test_the_node_router_is_mounted_under_v1_nodes": 0.03681057299991153, + "tests/test_node_router_skeleton.py::test_the_skeleton_carries_all_three_endpoint_modules": 0.034557217999918066, + "tests/test_node_schemas.py::TestAdsbHexIsOptional::test_a_frame_without_either_column_is_valid": 0.029272688999753882, + "tests/test_node_schemas.py::TestAdsbHexIsOptional::test_a_hex_only_frame_is_still_accepted": 0.030762754000534187, + "tests/test_node_schemas.py::TestAdsbHexIsOptional::test_tags_alone_carry_the_association": 0.036053123000328924, + "tests/test_node_schemas.py::TestAdsbHexIsOptional::test_tags_alone_must_still_be_parallel": 0.03436332599994785, + "tests/test_node_schemas.py::TestAdsbHexIsOptional::test_the_contract_marks_it_deprecated": 0.03932048599972404, + "tests/test_node_schemas.py::TestAdsbTags::test_a_hex_beside_a_null_tag_is_accepted": 0.034303904999433144, + "tests/test_node_schemas.py::TestAdsbTags::test_a_tag_needs_only_hex_and_position": 0.032759422999333765, + "tests/test_node_schemas.py::TestAdsbTags::test_a_tag_on_an_unassociated_detection_is_refused": 0.03737263500033805, + "tests/test_node_schemas.py::TestAdsbTags::test_a_tagged_frame_round_trips": 0.03688181199959217, + "tests/test_node_schemas.py::TestAdsbTags::test_a_tags_hex_must_agree_with_adsb_hex": 0.030184499000370124, + "tests/test_node_schemas.py::TestAdsbTags::test_absent_is_none_and_the_documented_frame_still_round_trips": 0.03712158600046678, + "tests/test_node_schemas.py::TestAdsbTags::test_malformed_tag_values_are_refused[alt-ground]": 0.03889547699964169, + "tests/test_node_schemas.py::TestAdsbTags::test_malformed_tag_values_are_refused[hex-4CA1F2]": 0.029858008999781305, + "tests/test_node_schemas.py::TestAdsbTags::test_malformed_tag_values_are_refused[lat-90.5]": 0.035083536000001914, + "tests/test_node_schemas.py::TestAdsbTags::test_malformed_tag_values_are_refused[lon--180.5]": 0.03571698500036291, + "tests/test_node_schemas.py::TestAdsbTags::test_the_list_must_be_parallel": 0.03650474100049905, + "tests/test_node_schemas.py::TestAdsbTags::test_unknown_keys_in_a_tag_are_refused": 0.031042063999848324, + "tests/test_node_schemas.py::test_a_board_model_over_64_characters_is_rejected": 0.03739049200021327, + "tests/test_node_schemas.py::test_a_boolean_is_not_a_measurement[delay]": 0.037425638000058825, + "tests/test_node_schemas.py::test_a_boolean_is_not_a_measurement[doppler]": 0.04115533100002722, + "tests/test_node_schemas.py::test_a_boolean_is_not_a_measurement[snr]": 0.04246259399997143, + "tests/test_node_schemas.py::test_a_config_version_below_one_is_rejected": 0.0359325279996483, + "tests/test_node_schemas.py::test_a_detail_over_512_characters_is_rejected": 0.03047133500012933, + "tests/test_node_schemas.py::test_a_frame_below_a_documented_bound_is_rejected[override0]": 0.037631743000019924, + "tests/test_node_schemas.py::test_a_frame_below_a_documented_bound_is_rejected[override1]": 0.03898618000039278, + "tests/test_node_schemas.py::test_a_frame_below_a_documented_bound_is_rejected[override2]": 0.03578743000025497, + "tests/test_node_schemas.py::test_a_frame_carrying_a_node_identifier_is_rejected": 0.03499578500077405, + "tests/test_node_schemas.py::test_a_malformed_boot_id_is_rejected[K3N8V2QP71AB]": 0.0323013809997974, + "tests/test_node_schemas.py::test_a_malformed_boot_id_is_rejected[k3n8v2q]": 0.02982041300037963, + "tests/test_node_schemas.py::test_a_malformed_boot_id_is_rejected[kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk]": 0.03899108999985401, + "tests/test_node_schemas.py::test_a_malformed_icao_address_is_rejected[4CA1F2]": 0.03605020099939793, + "tests/test_node_schemas.py::test_a_malformed_icao_address_is_rejected[4ca1f22]": 0.02992845899962049, + "tests/test_node_schemas.py::test_a_malformed_icao_address_is_rejected[4ca1f]": 0.032452773000386514, + "tests/test_node_schemas.py::test_a_malformed_icao_address_is_rejected[zzzzzz]": 0.03811422800026776, + "tests/test_node_schemas.py::test_a_malformed_node_id_is_rejected[]": 0.02873126400027104, + "tests/test_node_schemas.py::test_a_malformed_node_id_is_rejected[nde4f2k9xq7m3b8]": 0.030698281000240968, + "tests/test_node_schemas.py::test_a_malformed_node_id_is_rejected[ret1A2B3C4D]": 0.036521285000617354, + "tests/test_node_schemas.py::test_a_malformed_node_id_is_rejected[ret1a2b3c4]": 0.040396154999598366, + "tests/test_node_schemas.py::test_a_malformed_node_ref_is_rejected[NDE4F2K9XQ7M3B8]": 0.03903444900015529, + "tests/test_node_schemas.py::test_a_malformed_node_ref_is_rejected[abc4f2k9xq7m3b8]": 0.0363828059998923, + "tests/test_node_schemas.py::test_a_malformed_node_ref_is_rejected[nde4f2k9xq7m3b]": 0.03559926899970378, + "tests/test_node_schemas.py::test_a_naive_server_time_is_rejected": 0.03189920400018309, + "tests/test_node_schemas.py::test_a_negative_uptime_is_rejected": 0.03546311300033267, + "tests/test_node_schemas.py::test_a_node_with_no_version_yet_sends_null": 0.03571683300015138, + "tests/test_node_schemas.py::test_a_non_finite_value_is_rejected_inside_snr[inf]": 0.039099218000046676, + "tests/test_node_schemas.py::test_a_non_finite_value_is_rejected_inside_snr[nan]": 0.0313232829998924, + "tests/test_node_schemas.py::test_a_non_finite_value_is_rejected_on_t[inf]": 0.04555052199975762, + "tests/test_node_schemas.py::test_a_non_finite_value_is_rejected_on_t[nan]": 0.048565976999725535, + "tests/test_node_schemas.py::test_a_numeric_string_is_not_a_count": 0.04811104000009436, + "tests/test_node_schemas.py::test_a_numeric_string_is_not_a_measurement": 0.034605981999902724, + "tests/test_node_schemas.py::test_a_private_choice_is_carried": 0.03611100499983877, + "tests/test_node_schemas.py::test_a_synthetic_node_ref_is_accepted": 0.03795563800031232, + "tests/test_node_schemas.py::test_a_third_choice_is_rejected": 0.03832801999988078, + "tests/test_node_schemas.py::test_a_token_outside_the_documented_length_is_rejected[kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk]": 0.03584494500000801, + "tests/test_node_schemas.py::test_a_token_outside_the_documented_length_is_rejected[kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk]": 0.040516720000141504, + "tests/test_node_schemas.py::test_a_versions_field_over_64_characters_is_rejected": 0.03574454399995375, + "tests/test_node_schemas.py::test_absent_adsb_means_disabled_rather_than_unknown": 0.0347330729996429, + "tests/test_node_schemas.py::test_agreements_missing_publication_are_rejected": 0.03406055599953106, + "tests/test_node_schemas.py::test_an_absent_health_field_is_rejected[blah2]": 0.03679400299961344, + "tests/test_node_schemas.py::test_an_absent_health_field_is_rejected[cpu_pct]": 0.040443496000079904, + "tests/test_node_schemas.py::test_an_absent_health_field_is_rejected[disk_free_mb]": 0.033917929000381264, + "tests/test_node_schemas.py::test_an_absent_health_field_is_rejected[temp_c]": 0.03729071399948225, + "tests/test_node_schemas.py::test_an_acceptance_timestamp_without_an_offset_is_rejected": 0.03737450099970374, + "tests/test_node_schemas.py::test_an_acceptance_version_over_32_characters_is_rejected": 0.03708742099979645, + "tests/test_node_schemas.py::test_an_empty_frame_is_valid": 0.04224317099942709, + "tests/test_node_schemas.py::test_an_error_body_may_name_the_condition": 0.03761361000033503, + "tests/test_node_schemas.py::test_an_error_body_omits_detail_when_there_is_none": 0.03334623399996417, + "tests/test_node_schemas.py::test_an_error_over_64_characters_is_rejected": 0.03426120300036928, + "tests/test_node_schemas.py::test_an_omitted_choice_is_rejected_rather_than_defaulted": 0.03670014499948593, + "tests/test_node_schemas.py::test_an_out_of_range_rx_lat_is_left_for_the_validator": 0.031682979999914096, + "tests/test_node_schemas.py::test_an_over_long_error_string_is_rejected": 0.043131168999479996, + "tests/test_node_schemas.py::test_an_unassociated_detection_is_null_rather_than_absent": 0.033840651999980764, + "tests/test_node_schemas.py::test_an_undocumented_state_is_rejected": 0.038712691999990057, + "tests/test_node_schemas.py::test_an_unknown_heartbeat_key_is_rejected": 0.03551329900028577, + "tests/test_node_schemas.py::test_an_unknown_top_level_key_is_rejected": 0.03264502199999697, + "tests/test_node_schemas.py::test_an_unrecognised_config_key_is_also_left_for_the_validator": 0.03477218600028209, + "tests/test_node_schemas.py::test_arrays_of_different_lengths_are_rejected[adsb_hex]": 0.03241331099980016, + "tests/test_node_schemas.py::test_arrays_of_different_lengths_are_rejected[delay]": 0.03767425799969715, + "tests/test_node_schemas.py::test_arrays_of_different_lengths_are_rejected[doppler]": 0.03745661100037978, + "tests/test_node_schemas.py::test_arrays_of_different_lengths_are_rejected[snr]": 0.033437048999530816, + "tests/test_node_schemas.py::test_every_documented_state_is_accepted[error]": 0.03298291300006895, + "tests/test_node_schemas.py::test_every_documented_state_is_accepted[paused]": 0.03295913300007669, + "tests/test_node_schemas.py::test_every_documented_state_is_accepted[stalled]": 0.0408285639996393, + "tests/test_node_schemas.py::test_every_documented_state_is_accepted[starting]": 0.03599013500024739, + "tests/test_node_schemas.py::test_every_documented_state_is_accepted[stopping]": 0.03722568700004558, + "tests/test_node_schemas.py::test_every_documented_state_is_accepted[streaming]": 0.03556343599984757, + "tests/test_node_schemas.py::test_every_frame_field_is_required[boot_id]": 0.031078930999683507, + "tests/test_node_schemas.py::test_every_frame_field_is_required[config_version]": 0.03005699999994249, + "tests/test_node_schemas.py::test_every_frame_field_is_required[delay]": 0.035650876999625325, + "tests/test_node_schemas.py::test_every_frame_field_is_required[doppler]": 0.03548958599958496, + "tests/test_node_schemas.py::test_every_frame_field_is_required[seq]": 0.038001348999841866, + "tests/test_node_schemas.py::test_every_frame_field_is_required[snr]": 0.0355869990003157, + "tests/test_node_schemas.py::test_every_frame_field_is_required[t]": 0.03505781500007288, + "tests/test_node_schemas.py::test_health_outside_a_documented_bound_is_rejected[override0]": 0.037161612999625504, + "tests/test_node_schemas.py::test_health_outside_a_documented_bound_is_rejected[override1]": 0.03827604000025531, + "tests/test_node_schemas.py::test_health_outside_a_documented_bound_is_rejected[override2]": 0.034071149999363115, + "tests/test_node_schemas.py::test_health_outside_a_documented_bound_is_rejected[override3]": 0.03633545499997126, + "tests/test_node_schemas.py::test_health_outside_a_documented_bound_is_rejected[override4]": 0.03625639499978206, + "tests/test_node_schemas.py::test_health_outside_a_documented_bound_is_rejected[override5]": 0.03734428699954151, + "tests/test_node_schemas.py::test_health_says_known_to_be_unknown_with_nulls": 0.03880476099993757, + "tests/test_node_schemas.py::test_the_acknowledgement_round_trips": 0.03450720299997556, + "tests/test_node_schemas.py::test_the_array_bound_is_512": 0.04319333100011136, + "tests/test_node_schemas.py::test_the_config_response_carries_the_active_version": 0.032980592000058095, + "tests/test_node_schemas.py::test_the_documented_frame_round_trips": 0.039799752999897464, + "tests/test_node_schemas.py::test_the_documented_heartbeat_round_trips": 0.029555758999777026, + "tests/test_node_schemas.py::test_the_documented_registration_body_round_trips": 0.03145822500027862, + "tests/test_node_schemas.py::test_the_error_body_documents_its_fields_on_the_serialisation_side": 0.03528933200004758, + "tests/test_node_schemas.py::test_the_error_body_still_honours_the_dump_arguments": 0.03692293799986146, + "tests/test_node_schemas.py::test_the_error_list_is_bounded_at_32": 0.04239762199995312, + "tests/test_node_schemas.py::test_the_four_required_heartbeat_fields_are_required[boot_id]": 0.032662049999999, + "tests/test_node_schemas.py::test_the_four_required_heartbeat_fields_are_required[config_version]": 0.03362111800015555, + "tests/test_node_schemas.py::test_the_four_required_heartbeat_fields_are_required[state]": 0.0367994300004284, + "tests/test_node_schemas.py::test_the_four_required_heartbeat_fields_are_required[uptime_s]": 0.03670382599966615, + "tests/test_node_schemas.py::test_the_heartbeat_refuses_to_be_built_without_a_claim_state": 0.033029725999767834, + "tests/test_node_schemas.py::test_the_heartbeat_response_round_trips_with_a_z_suffixed_time": 0.03880468499983181, + "tests/test_node_schemas.py::test_the_minimal_heartbeat_is_state_uptime_boot_id_and_version": 0.032772057999864046, + "tests/test_node_schemas.py::test_the_registration_response_round_trips_with_a_z_suffixed_time": 0.030372134000117512, + "tests/test_node_sites.py::TestAudit::test_a_near_miss_beyond_the_radius_is_reported_not_merged": 0.03455704199996035, + "tests/test_node_sites.py::TestAudit::test_a_shared_site_is_reported": 0.035427289999915956, + "tests/test_node_sites.py::TestAudit::test_a_zero_radius_is_the_exact_rule_alone": 0.058424620000096184, + "tests/test_node_sites.py::TestAudit::test_ordinary_neighbours_are_not_near_misses": 0.045689258999118465, + "tests/test_node_sites.py::TestAudit::test_the_audit_logs_once_per_change": 0.04698209200023484, + "tests/test_node_sites.py::TestAudit::test_the_radius_is_configurable_under_both_names": 0.051748472999861406, + "tests/test_node_sites.py::TestProximityJoin::test_a_chain_of_near_neighbours_does_not_become_one_site": 0.05341907899992293, + "tests/test_node_sites.py::TestProximityJoin::test_a_disconnected_anchor_does_not_move_the_joined_node": 0.041719076000845234, + "tests/test_node_sites.py::TestProximityJoin::test_a_lone_receiver_beyond_the_radius_keys_on_itself": 0.039708200999939436, + "tests/test_node_sites.py::TestProximityJoin::test_a_lone_receiver_joins_the_nearest_site": 0.03097271799970258, + "tests/test_node_sites.py::TestProximityJoin::test_a_receiver_16_m_from_a_pair_joins_it_even_with_a_lower_id": 0.042183251000551536, + "tests/test_node_sites.py::TestProximityJoin::test_a_receiver_56_m_from_a_site_joins_it": 0.05080344499947387, + "tests/test_node_sites.py::TestProximityJoin::test_the_declared_uncertainty_widens_for_the_whole_site": 0.04916819599975497, + "tests/test_node_sites.py::TestProximityJoin::test_the_join_does_not_depend_on_connection_order": 0.03824395299989192, + "tests/test_node_sites.py::TestProximityJoin::test_the_joined_node_is_published_at_the_site_point": 0.04730271200014613, + "tests/test_node_sites.py::TestProximityJoin::test_the_joined_node_lands_on_the_anchor_as_configured_not_as_rounded": 0.04085085400038224, + "tests/test_node_sites.py::TestProximityJoin::test_the_joined_nodes_artefacts_move_with_its_marker": 0.048706397999922046, + "tests/test_node_sites.py::TestProximityJoin::test_two_lone_receivers_within_the_radius_become_one_site": 0.05468479700039097, + "tests/test_node_sites.py::TestSharedOffset::test_a_lone_node_is_not_re_fuzzed_by_this_module": 0.03401527299956797, + "tests/test_node_sites.py::TestSharedOffset::test_arc_and_trail_deltas_agree_with_the_shared_anchor": 0.04221771999982593, + "tests/test_node_sites.py::TestSharedOffset::test_co_located_nodes_publish_the_same_point": 0.038159069000357704, + "tests/test_node_sites.py::TestSharedOffset::test_the_centroid_attack_gains_nothing": 0.03942323800038139, + "tests/test_node_sites.py::TestSharedOffset::test_the_shared_point_is_still_displaced": 0.03927657200028989, + "tests/test_node_sites.py::TestSiteIdentity::test_a_bad_position_is_not_a_site": 0.03782116799993673, + "tests/test_node_sites.py::TestSiteIdentity::test_a_disconnected_site_mate_does_not_dissolve_the_site": 0.03259489699985352, + "tests/test_node_sites.py::TestSiteIdentity::test_a_lone_node_keys_on_itself": 0.03756941999972696, + "tests/test_node_sites.py::TestSiteIdentity::test_a_node_with_no_known_position_keys_on_itself": 0.03800572000045577, + "tests/test_node_sites.py::TestSiteIdentity::test_a_third_node_joins_the_same_site": 0.03732593599943357, + "tests/test_node_sites.py::TestSiteIdentity::test_co_located_nodes_key_on_the_lowest_id": 0.037894119000156934, + "tests/test_node_sites.py::TestSiteIdentity::test_positions_differing_below_the_rounding_are_one_site": 0.0345741240003008, + "tests/test_node_sites.py::TestSources::test_a_failing_source_does_not_break_the_others": 0.04557068599979175, + "tests/test_node_sites.py::TestSources::test_a_file_defined_node_is_a_site": 0.04237582699988707, + "tests/test_node_sites.py::TestSources::test_a_site_is_not_invented_from_a_missing_source": 0.040054880999832676, + "tests/test_node_sites.py::test_km_between_is_the_real_distance": 0.042176947000371, + "tests/test_node_streaming.py::test_a_blocked_node_is_not_recovered_into_the_pipeline": 0.08679495900059919, + "tests/test_node_streaming.py::test_a_blocked_node_is_told_to_pause_on_the_heartbeat": 0.08990989200037802, + "tests/test_node_streaming.py::test_a_blocked_node_is_told_to_pause_rather_than_refused": 0.09396616799949697, + "tests/test_node_streaming.py::test_a_blocked_node_s_frames_stay_out_of_the_pipeline": 0.09342379800000344, + "tests/test_node_streaming.py::test_a_declined_frame_is_not_offered": 0.08449754200000825, + "tests/test_node_streaming.py::test_a_dropped_frame_is_counted_rather_than_only_logged": 0.08808506000013949, + "tests/test_node_streaming.py::test_a_frame_from_a_node_absent_from_the_pipeline_is_not_filed": 0.12470222199954151, + "tests/test_node_streaming.py::test_a_frame_is_accepted_whole_and_reaches_the_queue": 0.13787570400018012, + "tests/test_node_streaming.py::test_a_frame_without_adsb_hex_is_accepted": 0.1678056050000123, + "tests/test_node_streaming.py::test_a_full_queue_is_a_dropped_frame_rather_than_an_error": 0.08695252999950753, + "tests/test_node_streaming.py::test_a_heartbeat_carries_a_bounced_address": 0.10023519499964095, + "tests/test_node_streaming.py::test_a_heartbeat_carries_a_pending_claim": 0.10256192800034114, + "tests/test_node_streaming.py::test_a_heartbeat_carries_the_claim_state": 0.09913955199999691, + "tests/test_node_streaming.py::test_a_heartbeat_on_an_owned_node_names_the_bound_address": 0.10450989800028765, + "tests/test_node_streaming.py::test_a_heartbeat_recovers_a_node_missing_from_the_pipeline": 0.0913173500002813, + "tests/test_node_streaming.py::test_a_heartbeat_restores_filing_after_frames_were_dropped": 0.11946051299992178, + "tests/test_node_streaming.py::test_a_heartbeat_returns_the_whole_downlink": 0.08676335600057428, + "tests/test_node_streaming.py::test_a_node_holding_no_config_version_is_heard_and_told_it_is_stale": 0.1388948559997516, + "tests/test_node_streaming.py::test_a_node_with_no_active_configuration_still_gets_its_beat_answered": 0.11353909999979805, + "tests/test_node_streaming.py::test_a_recovered_node_is_stamped_on_the_same_beat_that_recovered_it": 0.09644058000048972, + "tests/test_node_streaming.py::test_a_release_reaches_the_node_on_the_next_beat": 0.11394362300006833, + "tests/test_node_streaming.py::test_a_stale_config_version_is_reported_the_same_on_both_endpoints": 0.137098856999728, + "tests/test_node_streaming.py::test_a_superseded_config_version_is_accepted_and_reported_stale": 0.12084776400024566, + "tests/test_node_streaming.py::test_an_accepted_frame_is_offered_to_the_mirror": 0.0871140819995162, + "tests/test_node_streaming.py::test_an_empty_frame_is_valid_and_still_reaches_the_queue": 0.08709825400001137, + "tests/test_node_streaming.py::test_an_unknown_config_version_is_409": 0.10240325600079814, + "tests/test_node_streaming.py::test_both_paths_need_a_live_bearer[no-header-/v1/nodes/detection]": 0.07524277099992105, + "tests/test_node_streaming.py::test_both_paths_need_a_live_bearer[no-header-/v1/nodes/heartbeat]": 0.07266829900027005, + "tests/test_node_streaming.py::test_both_paths_need_a_live_bearer[unknown-token-/v1/nodes/detection]": 0.08648623699991731, + "tests/test_node_streaming.py::test_both_paths_need_a_live_bearer[unknown-token-/v1/nodes/heartbeat]": 0.10896563599999354, + "tests/test_node_streaming.py::test_both_paths_need_a_live_bearer[wrong-scheme-/v1/nodes/detection]": 0.08152766800048994, + "tests/test_node_streaming.py::test_both_paths_need_a_live_bearer[wrong-scheme-/v1/nodes/heartbeat]": 0.08224491900045905, + "tests/test_node_streaming.py::test_ingest_path_does_no_io_even_with_the_mirror_armed": 0.09065095400001155, + "tests/test_node_streaming.py::test_parallel_arrays_of_different_lengths_are_rejected[empty-adsb-hex]": 0.08125928699973883, + "tests/test_node_streaming.py::test_parallel_arrays_of_different_lengths_are_rejected[long-delay]": 0.08460743400019055, + "tests/test_node_streaming.py::test_parallel_arrays_of_different_lengths_are_rejected[short-snr]": 0.08393490999969799, + "tests/test_node_streaming.py::test_server_time_is_rfc3339_utc_with_a_z": 0.09134686700008388, + "tests/test_node_streaming.py::test_the_ack_is_unchanged_with_the_mirror_unarmed": 0.11854030799986504, + "tests/test_node_streaming.py::test_the_association_is_not_filed_as_a_position": 0.08285211900056311, + "tests/test_node_streaming.py::test_the_capture_time_is_converted_to_milliseconds": 0.08836442299980263, + "tests/test_node_streaming.py::test_the_detection_path_writes_nothing_to_the_database": 0.11654234399975394, + "tests/test_node_streaming.py::test_the_frame_carries_no_node_identifier": 0.08453007099979004, + "tests/test_node_streaming.py::test_the_heartbeat_stamps_last_seen_and_the_node_list": 0.08886240899983022, + "tests/test_node_streaming.py::test_the_node_absent_from_the_pipeline_is_not_told_to_stop": 0.1189485350000723, + "tests/test_node_streaming.py::test_the_per_token_detection_limit_fires": 0.17396072499968795, + "tests/test_node_streaming.py::test_the_per_token_heartbeat_limit_fires": 0.5423921680007879, + "tests/test_node_streaming.py::test_the_queued_frame_is_attributed_from_the_token": 0.10216632199990272, + "tests/test_node_streaming.py::test_the_restart_local_counter_travels_with_the_frame": 0.0852345110006354, + "tests/test_node_streaming.py::test_the_route_binds_the_shared_limiter": 0.04105604599953949, + "tests/test_node_streaming.py::test_the_two_endpoints_do_not_share_one_allowance": 0.17125383500024327, + "tests/test_output_routes.py::TestApiDocs::test_docs_returns_html": 0.19544387100040694, + "tests/test_output_routes.py::TestApiDocs::test_the_documented_fields_are_the_published_ones": 0.18628242399972805, + "tests/test_output_routes.py::TestApiDocs::test_the_worked_example_names_no_real_node": 0.18764946200008126, + "tests/test_output_routes.py::TestFormatAircraft::test_format_defaults": 0.046974732000307995, + "tests/test_output_routes.py::TestFormatAircraft::test_format_includes_expected_keys": 0.049804347999724996, + "tests/test_output_routes.py::TestFormatAircraft::test_the_private_field_names_are_not_emitted": 0.048983323999436834, + "tests/test_output_routes.py::TestGroundTruth::test_ground_truth_empty": 0.1813848699994196, + "tests/test_output_routes.py::TestGroundTruth::test_ground_truth_meta_defaults_for_old_payloads": 0.18771819199992024, + "tests/test_output_routes.py::TestGroundTruth::test_ground_truth_real_empty": 0.17802955499973905, + "tests/test_output_routes.py::TestGroundTruth::test_ground_truth_real_with_data": 0.17877774000044155, + "tests/test_output_routes.py::TestGroundTruth::test_ground_truth_with_trails": 0.1841337939999903, + "tests/test_output_routes.py::TestRealNodeIds::test_real_node_ids": 0.04593706600053338, + "tests/test_output_routes.py::TestSolverAircraft::test_real_only_matches_a_registered_node_by_its_ref": 0.18768209699965155, + "tests/test_output_routes.py::TestSolverAircraft::test_solver_aircraft_empty": 0.16838859900008174, + "tests/test_output_routes.py::TestSolverAircraft::test_solver_aircraft_multinode_real": 0.19028062100005627, + "tests/test_output_routes.py::TestSolverAircraft::test_solver_aircraft_real_only": 0.6198578430003181, + "tests/test_output_routes.py::TestSolverAircraft::test_solver_aircraft_with_data": 0.17391039899985117, + "tests/test_parquet_writer.py::test_adsb_match_populated_when_present": 0.0612120139999206, + "tests/test_parquet_writer.py::test_custody_columns_default_null_when_absent": 0.06037516899959883, + "tests/test_parquet_writer.py::test_empty_frames_returns_none": 0.04859701499981384, + "tests/test_parquet_writer.py::test_failed_write_leaves_no_partial_file_or_damaged_previous_batch[False]": 0.047588185999757115, + "tests/test_parquet_writer.py::test_failed_write_leaves_no_partial_file_or_damaged_previous_batch[True]": 0.052125741000054404, + "tests/test_parquet_writer.py::test_geometry_columns_default_null_when_no_cfg": 0.06274028200004977, + "tests/test_parquet_writer.py::test_legacy_FC_Fs_keys_in_node_cfg": 0.07782969299933029, + "tests/test_parquet_writer.py::test_multiple_frames_concatenate": 0.0570800969994707, + "tests/test_parquet_writer.py::test_round_trip_via_storage_module": 0.06860720400027276, + "tests/test_parquet_writer.py::test_same_second_batches_do_not_replace_previous_detections": 0.06645699499995317, + "tests/test_parquet_writer.py::test_schema_includes_custody_and_ingest_columns": 0.06307450899976175, + "tests/test_parquet_writer.py::test_schema_includes_geometry_and_rf_columns": 0.06612322299952211, + "tests/test_parquet_writer.py::test_schema_is_per_detection_with_required_columns": 0.05714191100014432, + "tests/test_parquet_writer.py::test_uses_zstd_compression": 0.06414623900036531, + "tests/test_parquet_writer.py::test_writes_hive_partitioned_path": 0.05724483899984989, + "tests/test_periodic_adsb_bbox.py::test_a_positionless_node_does_not_cost_the_fleet_its_regions": 0.05593764099967302, + "tests/test_periodic_adsb_bbox.py::test_all_nodes_positionless_skips_the_fetch": 0.05658804599988798, + "tests/test_pipeline.py::TestGeolocatedTrack::test_alt_ft": 0.049776751999615954, + "tests/test_pipeline.py::TestGeolocatedTrack::test_hex_id_format": 0.04830877799940936, + "tests/test_pipeline.py::TestGeolocatedTrack::test_speed_knots": 0.052347644999827025, + "tests/test_pipeline.py::TestGeolocatedTrack::test_track_angle": 0.048425548000068375, + "tests/test_pipeline.py::TestGeolocatedTrack::test_track_angle_north": 0.0511868069997945, + "tests/test_pipeline.py::TestInMemoryEventWriter::test_anomaly_fields_propagated": 0.05597139600013179, + "tests/test_pipeline.py::TestInMemoryEventWriter::test_dirty_tracking": 0.06147201600015251, + "tests/test_pipeline.py::TestInMemoryEventWriter::test_lazy_write_defers_detection_resolution": 0.08347045099981187, + "tests/test_pipeline.py::TestInMemoryEventWriter::test_resolve_idempotent": 0.06095380600027056, + "tests/test_pipeline.py::TestInMemoryEventWriter::test_write_and_get_events": 0.05121464100011508, + "tests/test_pipeline.py::TestPipelineInit::test_creates_with_default_config": 0.06199870400041618, + "tests/test_pipeline.py::TestPipelineInit::test_custom_config": 0.05821184899969012, + "tests/test_pipeline.py::TestPipelineInit::test_drone_profile_overrides_bounds": 0.05746863199965446, + "tests/test_pipeline.py::TestPipelineProcessFrame::test_empty_frame_no_crash": 0.05778829700011556, + "tests/test_pipeline.py::TestPipelineProcessFrame::test_frame_with_adsb_data": 0.06573854100042809, + "tests/test_pipeline.py::TestPipelineProcessFrame::test_generate_aircraft_json": 0.06837986299979093, + "tests/test_pipeline.py::TestPipelineProcessFrame::test_generate_receiver_json": 0.07354214400038472, + "tests/test_pipeline.py::TestPipelineProcessFrame::test_mismatched_array_lengths": 0.062063104000117164, + "tests/test_pipeline.py::TestPipelineProcessFrame::test_process_multiple_frames_creates_tracks": 0.29608418999987407, + "tests/test_pipeline.py::TestPipelineProcessFrame::test_process_single_frame": 0.05407238999987385, + "tests/test_polled_endpoint.py::test_a_body_at_the_cap_is_accepted": 0.06537685800003601, + "tests/test_polled_endpoint.py::test_a_compressed_response_is_refused": 0.06698884100023861, + "tests/test_polled_endpoint.py::test_a_declared_oversized_body_is_refused": 0.06220220200020776, + "tests/test_polled_endpoint.py::test_a_dropped_connection_is_unreachable": 0.07602453100025741, + "tests/test_polled_endpoint.py::test_a_fragment_is_refused[http://radar.example.com/#top]": 0.040477609999925335, + "tests/test_polled_endpoint.py::test_a_fragment_is_refused[radar.example.com#]": 0.046154958000443, + "tests/test_polled_endpoint.py::test_a_host_ending_in_a_number_must_be_a_dotted_quad[01.02.03.04]": 0.05029624500002683, + "tests/test_polled_endpoint.py::test_a_host_ending_in_a_number_must_be_a_dotted_quad[0x7f.0.0.1]": 0.04989320399999997, + "tests/test_polled_endpoint.py::test_a_host_ending_in_a_number_must_be_a_dotted_quad[127.1]": 0.044884023999657074, + "tests/test_polled_endpoint.py::test_a_host_ending_in_a_number_must_be_a_dotted_quad[192.0.2]": 0.0492693149999468, + "tests/test_polled_endpoint.py::test_a_host_ending_in_a_number_must_be_a_dotted_quad[2130706433]": 0.05131245500024306, + "tests/test_polled_endpoint.py::test_a_host_ending_in_a_number_must_be_a_dotted_quad[radar.0x10]": 0.04878574000031222, + "tests/test_polled_endpoint.py::test_a_malformed_deny_list_raises": 0.05923724800004493, + "tests/test_polled_endpoint.py::test_a_malformed_deny_list_refuses_everything": 0.06253277899986642, + "tests/test_polled_endpoint.py::test_a_path_prefix_is_refused[http://radar.example.com/blah2/]": 0.04509736299951328, + "tests/test_polled_endpoint.py::test_a_path_prefix_is_refused[radar.example.com//]": 0.048503944000003685, + "tests/test_polled_endpoint.py::test_a_path_prefix_is_refused[radar.example.com/api]": 0.04567188399960287, + "tests/test_polled_endpoint.py::test_a_private_literal_is_refused": 0.07030146099987178, + "tests/test_polled_endpoint.py::test_a_public_name_is_vetted": 0.05908282900008999, + "tests/test_polled_endpoint.py::test_a_query_is_refused[http://radar.example.com/?]": 0.05729093600029955, + "tests/test_polled_endpoint.py::test_a_query_is_refused[http://radar.example.com/?x=1]": 0.048519825000767014, + "tests/test_polled_endpoint.py::test_a_query_is_refused[radar.example.com?x]": 0.04689290800024537, + "tests/test_polled_endpoint.py::test_a_read_timeout_is_timed_out": 0.05477591200042298, + "tests/test_polled_endpoint.py::test_a_real_request_carries_the_name_to_the_pinned_address": 0.11331540800028961, + "tests/test_polled_endpoint.py::test_a_redirect_is_refused_and_not_followed": 0.06688407699994059, + "tests/test_polled_endpoint.py::test_a_resolver_failure_is_unresolvable": 0.05852695200019298, + "tests/test_polled_endpoint.py::test_a_scheme_without_a_port_takes_the_schemes_default": 0.05532259299934594, + "tests/test_polled_endpoint.py::test_a_slow_resolver_is_cut_off": 0.09828557800028648, + "tests/test_polled_endpoint.py::test_a_trickling_body_is_cut_off_by_the_deadline": 0.26041559199984476, + "tests/test_polled_endpoint.py::test_a_user_without_a_secret_keeps_the_secret_none": 0.08073450600022625, + "tests/test_polled_endpoint.py::test_an_answer_that_is_not_http_is_a_bad_response": 0.0601708500003042, + "tests/test_polled_endpoint.py::test_an_empty_answer_is_unresolvable": 0.05423298599998816, + "tests/test_polled_endpoint.py::test_an_error_status_is_refused": 0.053321814999435446, + "tests/test_polled_endpoint.py::test_an_injected_policy_replaces_the_default": 0.060889782999765885, + "tests/test_polled_endpoint.py::test_an_injected_policy_still_refuses_what_it_refuses": 0.06591292200027965, + "tests/test_polled_endpoint.py::test_an_ip_literal_skips_dns": 0.06602760200075863, + "tests/test_polled_endpoint.py::test_an_ipv6_address_is_bracketed_in_the_url": 0.058220223999342124, + "tests/test_polled_endpoint.py::test_an_ipv6_literal_endpoint_brackets_the_host_header": 0.052028314000381215, + "tests/test_polled_endpoint.py::test_an_undeclared_oversized_body_is_refused": 0.06907696499956728, + "tests/test_polled_endpoint.py::test_any_non_public_answer_refuses_the_whole_name": 0.09534828200003176, + "tests/test_polled_endpoint.py::test_bad_ports_are_refused[http://radar.example.com:\\u0663\\u0660\\u0660\\u0660]": 0.043421621000106825, + "tests/test_polled_endpoint.py::test_bad_ports_are_refused[radar.example.com:+80]": 0.04593185900057506, + "tests/test_polled_endpoint.py::test_bad_ports_are_refused[radar.example.com:-1]": 0.04608699000027627, + "tests/test_polled_endpoint.py::test_bad_ports_are_refused[radar.example.com:0]": 0.044062250000024505, + "tests/test_polled_endpoint.py::test_bad_ports_are_refused[radar.example.com:65536]": 0.04283767999959309, + "tests/test_polled_endpoint.py::test_bad_ports_are_refused[radar.example.com:http]": 0.04359048999958759, + "tests/test_polled_endpoint.py::test_bare_host_takes_blah2s_default_port_over_http": 0.04441536000013002, + "tests/test_polled_endpoint.py::test_compression_is_declined": 0.0736877720000848, + "tests/test_polled_endpoint.py::test_cookies_are_not_carried_between_requests": 0.08711853700015126, + "tests/test_polled_endpoint.py::test_credentials_are_separated_from_the_key": 0.04779391800002486, + "tests/test_polled_endpoint.py::test_credentials_go_as_basic_auth": 0.05580626100027075, + "tests/test_polled_endpoint.py::test_credentials_never_appear_in_the_repr": 0.046544242999971175, + "tests/test_polled_endpoint.py::test_deny_list_accepts_host_bits": 0.05018758400046863, + "tests/test_polled_endpoint.py::test_deny_list_is_empty_by_default": 0.05121546500004115, + "tests/test_polled_endpoint.py::test_deny_list_is_read_from_the_environment": 0.04920821500036254, + "tests/test_polled_endpoint.py::test_duplicate_answers_are_collapsed": 0.06217579900021519, + "tests/test_polled_endpoint.py::test_empty_or_oversized_input_is_refused[ ]": 0.044560721999914676, + "tests/test_polled_endpoint.py::test_empty_or_oversized_input_is_refused[]": 0.043618180000521534, + "tests/test_polled_endpoint.py::test_empty_or_oversized_input_is_refused[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.example.com]": 0.047643540000080975, + "tests/test_polled_endpoint.py::test_endpoint_is_immutable": 0.05740109799990023, + "tests/test_polled_endpoint.py::test_explicit_port_wins": 0.04905040399989957, + "tests/test_polled_endpoint.py::test_fullwidth_digits_normalise_to_the_ipv4_key": 0.04742733000011867, + "tests/test_polled_endpoint.py::test_https_verifies_against_the_name_through_sni": 0.07034108399966499, + "tests/test_polled_endpoint.py::test_ipv4_embedded_in_ipv6_is_judged_as_ipv4[2002:7f00:1::]": 0.05777206399989154, + "tests/test_polled_endpoint.py::test_ipv4_embedded_in_ipv6_is_judged_as_ipv4[2002:a9fe:a9fe::1]": 0.06089745400004176, + "tests/test_polled_endpoint.py::test_ipv4_embedded_in_ipv6_is_judged_as_ipv4[64:ff9b::7f00:1]": 0.05860195100012788, + "tests/test_polled_endpoint.py::test_ipv4_embedded_in_ipv6_is_judged_as_ipv4[64:ff9b::a00:1]": 0.056660551999812014, + "tests/test_polled_endpoint.py::test_ipv4_embedded_in_ipv6_is_judged_as_ipv4[64:ff9b::a9fe:a9fe]": 0.05282246299975668, + "tests/test_polled_endpoint.py::test_ipv4_embedded_in_ipv6_is_judged_as_ipv4[::7f00:1]": 0.04810847199996715, + "tests/test_polled_endpoint.py::test_ipv4_embedded_in_ipv6_is_judged_as_ipv4[::a9fe:a9fe]": 0.055975649999709276, + "tests/test_polled_endpoint.py::test_ipv4_embedded_in_ipv6_is_judged_as_ipv4[::ffff:10.0.0.1]": 0.06498871199937639, + "tests/test_polled_endpoint.py::test_ipv4_embedded_in_ipv6_is_judged_as_ipv4[::ffff:100.64.0.1]": 0.05261909299997569, + "tests/test_polled_endpoint.py::test_ipv4_embedded_in_ipv6_is_judged_as_ipv4[::ffff:127.0.0.1]": 0.06067906399994172, + "tests/test_polled_endpoint.py::test_ipv4_embedded_in_ipv6_is_judged_as_ipv4[::ffff:169.254.169.254]": 0.05374105300006704, + "tests/test_polled_endpoint.py::test_ipv6_host_is_compressed_and_unbracketed_outside_the_key": 0.05346705799956908, + "tests/test_polled_endpoint.py::test_later_requests_stay_on_the_address_that_answered": 0.05928752199952214, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[-bad.example.com]": 0.04822929199963255, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[[2001:db8::1]": 0.04679021400033889, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[[2001:db8::1]x]": 0.04827528700025141, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[[fe80::1%25eth0]]": 0.044342338999740605, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[[radar.example.com]]": 0.05062428700057353, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[a..b.example.com]": 0.05338258500023585, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[ex%61mple.com]": 0.04829859699975714, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[fe80::1%eth0]": 0.047948459000053845, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[http://:3000]": 0.04540819899966664, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[http://user:pw@]": 0.047373163000429486, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[my_host.example.com]": 0.04140658899996197, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[radar example.com]": 0.04364130799967825, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[radar.exa\\tmple.com]": 0.04418527899952096, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[radar.example.com..]": 0.05059759000005215, + "tests/test_polled_endpoint.py::test_malformed_hosts_are_refused[radar.example.com\\x00]": 0.044737117999829934, + "tests/test_polled_endpoint.py::test_metadata_addresses_are_refused": 0.09014024800035259, + "tests/test_polled_endpoint.py::test_no_address_connecting_is_unreachable": 0.05937520699990273, + "tests/test_polled_endpoint.py::test_no_credentials_means_no_authorization_header": 0.05548181599988311, + "tests/test_polled_endpoint.py::test_no_credentials_means_none": 0.0458484870000575, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[0.0.0.0]": 0.04840832699983366, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[10.0.0.1]": 0.051500310000392346, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[100.127.255.254]": 0.04664677899972958, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[100.64.0.1]": 0.054394924999996874, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[127.0.0.1]": 0.05273170999953436, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[169.254.169.254]": 0.057632612000361405, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[172.16.0.1]": 0.04948461899994072, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[192.0.2.1]": 0.050610111999503715, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[192.168.1.1]": 0.05500678699991113, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[198.18.0.1]": 0.05697665500019866, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[2001::1]": 0.05528398299975379, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[2001:db8::1]": 0.05495059899976695, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[224.0.0.1]": 0.0476241750002373, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[239.255.255.250]": 0.04622532599978513, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[240.0.0.1]": 0.053982979000011255, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[255.255.255.255]": 0.055777490000309626, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[64:ff9b:1::808:808]": 0.05090057100051126, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[::1]": 0.04953222299945992, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[::]": 0.06719506699982958, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[fc00::1]": 0.05151207900007648, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[fd00:ec2::254]": 0.05741346200011321, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[fe80::1]": 0.05543799199995192, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[fec0::1]": 0.053081947000464424, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[ff02::1]": 0.05407995900031892, + "tests/test_polled_endpoint.py::test_non_public_addresses_are_refused[ff0e::1]": 0.0652730300002986, + "tests/test_polled_endpoint.py::test_proxy_environment_is_ignored": 0.08999738199963758, + "tests/test_polled_endpoint.py::test_public_addresses_are_permitted[1.1.1.1]": 0.0531896290003715, + "tests/test_polled_endpoint.py::test_public_addresses_are_permitted[2606:4700:4700::1111]": 0.04725782600007733, + "tests/test_polled_endpoint.py::test_public_addresses_are_permitted[64:ff9b::808:808]": 0.04816217199959283, + "tests/test_polled_endpoint.py::test_public_addresses_are_permitted[8.8.8.8]": 0.04685370800052624, + "tests/test_polled_endpoint.py::test_public_addresses_are_permitted[::808:808]": 0.05123299800015957, + "tests/test_polled_endpoint.py::test_public_addresses_are_permitted[::ffff:8.8.8.8]": 0.05060537099961948, + "tests/test_polled_endpoint.py::test_raw_input_is_kept": 0.059620740999889676, + "tests/test_polled_endpoint.py::test_refusal_messages_never_echo_the_secret": 0.047456141999646206, + "tests/test_polled_endpoint.py::test_schemes_other_than_http_and_https_are_refused[file:///etc/passwd]": 0.04292936500041833, + "tests/test_polled_endpoint.py::test_schemes_other_than_http_and_https_are_refused[ftp://radar.example.com]": 0.04713196400007291, + "tests/test_polled_endpoint.py::test_schemes_other_than_http_and_https_are_refused[gopher://radar.example.com:70]": 0.044880771999942226, + "tests/test_polled_endpoint.py::test_spelling_variants_of_one_box_share_a_key[spellings0-radar.example.com:3000]": 0.05854548800016346, + "tests/test_polled_endpoint.py::test_spelling_variants_of_one_box_share_a_key[spellings1-radar.example.com:80]": 0.04788593000057517, + "tests/test_polled_endpoint.py::test_spelling_variants_of_one_box_share_a_key[spellings2-radar.example.com:443]": 0.04469849499992051, + "tests/test_polled_endpoint.py::test_spelling_variants_of_one_box_share_a_key[spellings3-xn--bcher-kva.example:3000]": 0.125155031000304, + "tests/test_polled_endpoint.py::test_spelling_variants_of_one_box_share_a_key[spellings4-[2001:db8::1]:3000]": 0.04121092899958967, + "tests/test_polled_endpoint.py::test_spelling_variants_of_one_box_share_a_key[spellings5-192.0.2.10:3000]": 0.04351713300002302, + "tests/test_polled_endpoint.py::test_spelling_variants_of_one_box_share_a_key[spellings6-radar.example.com:3000]": 0.04326983500004644, + "tests/test_polled_endpoint.py::test_the_default_policy_reads_the_deny_list_per_call": 0.07187660099998538, + "tests/test_polled_endpoint.py::test_the_default_port_is_left_out_of_host": 0.06456945299987638, + "tests/test_polled_endpoint.py::test_the_deny_list_refuses_otherwise_public_addresses": 0.0549812289991678, + "tests/test_polled_endpoint.py::test_the_next_vetted_address_is_tried_when_one_will_not_connect": 0.05194062499958818, + "tests/test_polled_endpoint.py::test_the_request_goes_to_the_vetted_address_with_the_name_in_host": 0.05724236900005053, + "tests/test_polled_endpoint.py::test_the_system_resolver_path_refuses_localhost": 0.07127404599941656, + "tests/test_polled_endpoint.py::test_tls_to_a_name_the_certificate_does_not_cover_is_refused": 0.07089762099985819, + "tests/test_polled_endpoint.py::test_tls_verifies_the_certificate_against_the_name_not_the_address": 0.07896975199992085, + "tests/test_polled_endpoint.py::test_unicode_host_is_stored_in_its_ascii_form": 0.050347782000699226, + "tests/test_polled_endpoint.py::test_vetting_happens_before_any_request": 0.05409092699937901, + "tests/test_polled_radars.py::test_a_radar_without_credentials_gives_the_poller_none": 0.10292257200035237, + "tests/test_polled_radars.py::test_a_second_registration_of_the_endpoint_is_refused_whole": 0.12760275199934767, + "tests/test_polled_radars.py::test_an_unknown_publication_is_refused": 0.10244830999999976, + "tests/test_polled_radars.py::test_credentials_typed_into_the_address_are_not_kept": 0.13296110899955238, + "tests/test_polled_radars.py::test_history_goes_with_the_registration": 0.14988965100019414, + "tests/test_polled_radars.py::test_no_piece_of_a_secret_survives_in_the_address[admin:p@ss@radar.example.com:3000-radar.example.com:3000]": 0.08515230099965265, + "tests/test_polled_radars.py::test_no_piece_of_a_secret_survives_in_the_address[http://admin:p@ss@radar.example.com:3000-http://radar.example.com:3000]": 0.12038521399972524, + "tests/test_polled_radars.py::test_no_piece_of_a_secret_survives_in_the_address[http://radar.example.com:3000/?next=a@b-http://radar.example.com:3000/?next=a@b]": 0.1051261920001707, + "tests/test_polled_radars.py::test_no_piece_of_a_secret_survives_in_the_address[radar.example.com:3000-radar.example.com:3000]": 0.09426762800057986, + "tests/test_polled_radars.py::test_registration_writes_all_five_rows": 0.1349043140003232, + "tests/test_polled_radars.py::test_storing_a_secret_without_the_key_is_refused_before_anything_is_written": 0.08102611600043019, + "tests/test_polled_radars.py::test_the_caller_transaction_survives_an_endpoint_clash": 0.14401094000004377, + "tests/test_polled_radars.py::test_the_repr_names_neither_the_address_nor_the_secret": 0.10043178299974898, + "tests/test_polled_radars.py::test_the_secret_is_encrypted_at_rest": 0.10965581599975849, + "tests/test_positionless_node.py::test_position_status_reaches_the_nodes_payload": 0.060078312999849004, + "tests/test_positionless_node.py::test_positionless_node_builds_no_solver_pipeline": 0.05738848400005736, + "tests/test_positionless_node.py::test_positionless_node_is_counted_but_not_placed": 0.057765919999837934, + "tests/test_positionless_node.py::test_ten_positionless_nodes_form_no_overlap_zones": 0.061646612000458845, + "tests/test_probation.py::TestDetectionMirror::test_a_graduated_or_fleet_frame_is": 0.07393507099959606, + "tests/test_probation.py::TestDetectionMirror::test_a_probation_frame_is_not_mirrored": 0.06835562900005243, + "tests/test_probation.py::TestFenceSwitchedOff::test_a_fleet_round_naming_a_polled_node_is_solved": 0.10926111600065269, + "tests/test_probation.py::TestFenceSwitchedOff::test_a_polled_frame_is_mirrored": 0.08468754100067599, + "tests/test_probation.py::TestFenceSwitchedOff::test_a_polled_frame_marks_the_feed_dirty": 0.13099751800018566, + "tests/test_probation.py::TestFenceSwitchedOff::test_a_polled_node_follows_its_owners_choice": 0.10052351400008774, + "tests/test_probation.py::TestFenceSwitchedOff::test_a_polled_node_registered_private_is_private": 0.09176299999990079, + "tests/test_probation.py::TestFenceSwitchedOff::test_a_probation_frame_flows_like_a_fleet_frame": 0.12123352099979456, + "tests/test_probation.py::TestFenceSwitchedOff::test_no_polled_node_is_on_probation_and_the_trust_table_is_not_read": 0.07491366400063271, + "tests/test_probation.py::TestFenceSwitchedOff::test_switching_it_back_on_gates_the_next_frame_without_a_restart": 0.10849552999980006, + "tests/test_probation.py::TestFenceSwitchedOff::test_the_public_payload_carries_it_unchanged": 0.11146227299968814, + "tests/test_probation.py::TestFrameGate::test_a_fleet_frame_is_untouched_and_never_reads_the_trust_table": 0.0887032900000122, + "tests/test_probation.py::TestFrameGate::test_a_fleet_round_naming_a_probation_node_is_not_solved": 0.09144581600003221, + "tests/test_probation.py::TestFrameGate::test_a_graduated_polled_frame_flows_like_a_fleet_frame": 0.09165992999987793, + "tests/test_probation.py::TestFrameGate::test_a_probation_frame_feeds_its_own_analytics_and_tracker": 0.10758489900035784, + "tests/test_probation.py::TestFrameGate::test_a_probation_frame_feeds_nothing_shared": 0.09106501200039929, + "tests/test_probation.py::TestFrameGate::test_a_probation_frames_adsb_list_stays_out_of_the_shared_cache": 0.08778175499946883, + "tests/test_probation.py::TestFrameGate::test_a_probation_read_failure_gates_a_graduated_node": 0.08989492000046084, + "tests/test_probation.py::TestFrameGate::test_an_unregistered_polled_id_is_gated": 0.07964945499998066, + "tests/test_probation.py::TestFrameGate::test_re_entry_gates_the_next_frame_without_a_restart": 0.09994338200021957, + "tests/test_probation.py::TestFrameLoop::test_a_fleet_frame_still_does": 0.11319442999956664, + "tests/test_probation.py::TestFrameLoop::test_a_probation_frame_does_not_mark_the_feed_dirty": 0.11871773900020344, + "tests/test_probation.py::TestHealthReportsTheSwitch::test_off_when_switched_off": 0.2021272060001138, + "tests/test_probation.py::TestHealthReportsTheSwitch::test_on_by_default": 0.1990433999999368, + "tests/test_probation.py::TestInProbation::test_a_cold_failure_gates_every_polled_node": 0.07557614799998191, + "tests/test_probation.py::TestInProbation::test_a_failure_after_a_good_read_gates_every_polled_node": 0.07853874800002814, + "tests/test_probation.py::TestInProbation::test_a_failure_backs_off_rather_than_querying_every_call": 0.05914283799984332, + "tests/test_probation.py::TestInProbation::test_a_fleet_node_is_never_on_probation_and_costs_no_query": 0.04788245300005656, + "tests/test_probation.py::TestInProbation::test_a_graduated_polled_node_is_not": 0.06683905199997753, + "tests/test_probation.py::TestInProbation::test_a_polled_id_with_no_row_is_gated": 0.06666304200052764, + "tests/test_probation.py::TestInProbation::test_a_polled_node_on_probation_is_gated": 0.07069552999973894, + "tests/test_probation.py::TestInProbation::test_any_state_but_graduated_is_gated": 0.07511588600027608, + "tests/test_probation.py::TestInProbation::test_invalidate_re_applies_the_gate_without_a_restart": 0.12246694299983574, + "tests/test_probation.py::TestInProbation::test_the_answer_is_cached_within_the_ttl": 0.10553179399994406, + "tests/test_probation.py::TestInProbation::test_the_cache_expires_on_its_own": 0.10125950899964664, + "tests/test_probation.py::TestProbationIsPrivate::test_a_fleet_node_with_no_row_stays_public": 0.058234601999629376, + "tests/test_probation.py::TestProbationIsPrivate::test_a_graduated_node_its_owner_registered_private_stays_private": 0.08027799399997093, + "tests/test_probation.py::TestProbationIsPrivate::test_a_graduated_polled_node_is_public": 0.06910506500025804, + "tests/test_probation.py::TestProbationIsPrivate::test_a_polled_id_with_no_row_is_private": 0.06813026500003616, + "tests/test_probation.py::TestProbationIsPrivate::test_a_polled_node_on_probation_is_private": 0.07731852100005199, + "tests/test_probation.py::TestProbationIsPrivate::test_a_probation_read_failure_keeps_it_private": 0.0703359679996538, + "tests/test_probation.py::TestProbationIsPrivate::test_an_unregistered_polled_id_is_dropped_from_the_payload": 0.06568684300009409, + "tests/test_probation.py::TestProbationIsPrivate::test_analytics_summaries_drop_it": 0.07381718199985698, + "tests/test_probation.py::TestProbationIsPrivate::test_it_is_listed_for_an_owner_merge": 0.07036901600031342, + "tests/test_probation.py::TestProbationIsPrivate::test_re_entry_makes_it_private_without_a_restart": 0.09147093299998232, + "tests/test_probation.py::TestProbationIsPrivate::test_the_aircraft_payload_drops_it_when_nothing_else_is_private": 0.06266870199988261, + "tests/test_probation.py::TestProbationIsPrivate::test_the_node_listing_leaves_it_out": 0.07554046400036896, + "tests/test_probation.py::TestTheSwitch::test_any_value_but_zero_means_on[ 0]": 0.06040969000059704, + "tests/test_probation.py::TestTheSwitch::test_any_value_but_zero_means_on[00]": 0.062378861000070174, + "tests/test_probation.py::TestTheSwitch::test_any_value_but_zero_means_on[1]": 0.05529754600001979, + "tests/test_probation.py::TestTheSwitch::test_any_value_but_zero_means_on[]": 0.06648460700034775, + "tests/test_probation.py::TestTheSwitch::test_any_value_but_zero_means_on[false]": 0.06344480699999622, + "tests/test_probation.py::TestTheSwitch::test_any_value_but_zero_means_on[no]": 0.06768761100011034, + "tests/test_probation.py::TestTheSwitch::test_any_value_but_zero_means_on[off]": 0.06847396900047897, + "tests/test_probation.py::TestTheSwitch::test_unset_means_on": 0.06698364199974094, + "tests/test_probation.py::TestTheSwitch::test_zero_switches_it_off": 0.05897915799960174, + "tests/test_public_geometry.py::TestHowItWalks::test_a_payload_with_nothing_withheld_is_unchanged": 0.06850953999992271, + "tests/test_public_geometry.py::TestHowItWalks::test_a_tuple_comes_back_as_a_list": 0.05185173100016982, + "tests/test_public_geometry.py::TestHowItWalks::test_a_withheld_field_goes_at_any_depth": 0.055548598999848764, + "tests/test_public_geometry.py::TestHowItWalks::test_the_input_is_not_edited": 0.062187519000417524, + "tests/test_public_geometry.py::TestNodeScoped::test_it_stays_when_not_scoped": 0.05225037100035479, + "tests/test_public_geometry.py::TestNodeScoped::test_scoping_still_withholds_everything_else": 0.06125461500005258, + "tests/test_public_geometry.py::TestNodeScoped::test_the_nodes_own_solve_goes_when_scoped": 0.06283080499997595, + "tests/test_public_geometry.py::TestTheDetectionAreaSummary::test_only_furthest_detections_collides": 0.06841452699927686, + "tests/test_public_geometry.py::TestTheDetectionAreaSummary::test_so_the_pass_drops_that_and_nothing_else": 0.05646915499983152, + "tests/test_public_geometry.py::TestTheRoutesApplyIt::test_a_nodes_verification_withholds_its_own_solve_too": 0.07383495600015522, + "tests/test_public_geometry.py::TestTheRoutesApplyIt::test_an_unknown_node_still_answers_empty": 0.07885405300021375, + "tests/test_public_geometry.py::TestTheRoutesApplyIt::test_one_markers_solves_withhold": 0.0876325980002548, + "tests/test_public_geometry.py::TestTheRoutesApplyIt::test_the_multinode_verification_withholds_on_write": 0.07083697300004133, + "tests/test_public_geometry.py::TestTheRoutesApplyIt::test_the_nearby_rejects_withhold": 0.09476866899967717, + "tests/test_public_geometry.py::TestTheRoutesApplyIt::test_the_resolve_skips_dump_withholds": 0.08668359900002542, + "tests/test_public_geometry.py::TestTheRoutesApplyIt::test_the_whole_window_dump_withholds": 0.0914465820001169, + "tests/test_public_geometry.py::TestWhatIsWithheld::test_a_beam_margin_goes_and_its_envelope_stays": 0.0633758230001149, + "tests/test_public_geometry.py::TestWhatIsWithheld::test_the_contamination_verdict_goes": 0.0559527740001613, + "tests/test_public_geometry.py::TestWhatIsWithheld::test_the_furthest_detections_go": 0.05502037700034634, + "tests/test_public_geometry.py::TestWhatIsWithheld::test_the_learned_fov_read_outs_go": 0.059297899000284815, + "tests/test_public_geometry.py::TestWhatIsWithheld::test_the_per_node_delays_go": 0.05098665799960145, + "tests/test_public_geometry.py::TestWhatIsWithheld::test_the_shadow_verdicts_go": 0.06003936299930501, + "tests/test_public_location.py::TestArchiveRows::test_rows_carry_the_published_receiver": 0.072083037000084, + "tests/test_public_location.py::TestCachedAnalyticsPayload::test_suggestions_are_empty_in_both_variants": 0.08386325500032399, + "tests/test_public_location.py::TestDetectionRangeRoute::test_furthest_detections_are_gone": 0.21108639200065227, + "tests/test_public_location.py::TestDetectionRangeRoute::test_receiver_and_polygon_are_displaced": 0.2524111059997267, + "tests/test_public_location.py::TestFrameRekey::test_a_bounds_change_defeats_the_attack": 0.06560915899990505, + "tests/test_public_location.py::TestFrameRekey::test_a_bounds_change_moves_the_bearing": 0.07288055499975599, + "tests/test_public_location.py::TestFrameRekey::test_setting_the_defaults_explicitly_is_not_a_change_of_frame": 0.07589849400073945, + "tests/test_public_location.py::TestFrameRekey::test_the_attack_works_on_a_shared_bearing": 0.055116278999776114, + "tests/test_public_location.py::TestFrameRekey::test_the_frame_label_is_canonical": 0.05714602699936222, + "tests/test_public_location.py::TestFrameRekey::test_the_original_frame_is_frozen": 0.060198958000455605, + "tests/test_public_location.py::TestFuzzDisabled::test_latlon_is_identity_not_even_rounded": 0.06543895699951463, + "tests/test_public_location.py::TestFuzzDisabled::test_node_cfg_is_the_same_object": 0.06644158900007824, + "tests/test_public_location.py::TestFuzzDisabled::test_offset_is_zero": 0.08225731100037592, + "tests/test_public_location.py::TestFuzzDisabled::test_polygon_is_identity": 0.06946150600015244, + "tests/test_public_location.py::TestGroundTruthTrailRoute::test_disabled_serves_the_solved_trail_either_way": 0.20770422399982635, + "tests/test_public_location.py::TestGroundTruthTrailRoute::test_ground_truth_present_serves_the_comparison": 0.25515713799995865, + "tests/test_public_location.py::TestGroundTruthTrailRoute::test_solved_trail_alone_is_not_served": 0.22025469999971392, + "tests/test_public_location.py::TestGroundTruthTrailRoute::test_unknown_hex_still_404s": 0.2020465490004426, + "tests/test_public_location.py::TestNodesPayload::test_altitude_is_untouched": 0.06023081900048055, + "tests/test_public_location.py::TestNodesPayload::test_receiver_is_displaced_and_transmitter_is_not": 0.07126834600012444, + "tests/test_public_location.py::TestNodesPayload::test_uncertainty_is_declared": 0.057324765999965166, + "tests/test_public_location.py::TestNodesPayload::test_uncertainty_is_zero_when_disabled": 0.06498606000013751, + "tests/test_public_location.py::TestOffset::test_bearings_cover_the_circle": 0.06484071199975006, + "tests/test_public_location.py::TestOffset::test_different_nodes_get_different_offsets": 0.06603391999988162, + "tests/test_public_location.py::TestOffset::test_displacement_honours_custom_bounds": 0.07187698899997486, + "tests/test_public_location.py::TestOffset::test_displacement_within_configured_bounds": 0.09724472900006731, + "tests/test_public_location.py::TestOffset::test_inverted_bounds_do_not_escape_the_floor": 0.06363691599972299, + "tests/test_public_location.py::TestOffset::test_missing_node_id_is_still_displaced": 0.06199251099997127, + "tests/test_public_location.py::TestOffset::test_salt_changes_the_offset": 0.05653296200034674, + "tests/test_public_location.py::TestOffset::test_same_node_same_offset_across_calls": 0.06011988799991741, + "tests/test_public_location.py::TestOffset::test_same_node_same_offset_across_process_restarts": 0.09969846100011637, + "tests/test_public_location.py::TestPerNodeAnalyticsRoute::test_coverage_polygon_apex_is_displaced": 0.3165291079999406, + "tests/test_public_location.py::TestPerNodeAnalyticsRoute::test_detection_area_receiver_is_displaced": 0.2403644009996242, + "tests/test_public_location.py::TestPerNodeAnalyticsRoute::test_furthest_detections_are_not_published": 0.20760321000079784, + "tests/test_public_location.py::TestPerNodeAnalyticsRoute::test_no_polygon_vertex_sits_on_the_true_receiver": 0.19796583000015744, + "tests/test_public_location.py::TestPerNodeAnalyticsRoute::test_the_manager_keeps_the_truth": 0.21952406499985955, + "tests/test_public_location.py::TestPerNodeAnalyticsRoute::test_transmitter_survives": 0.3737387840001247, + "tests/test_public_location.py::TestPerNodeAnalyticsRoute::test_uncertainty_is_absent_when_disabled": 0.22025081599986152, + "tests/test_public_location.py::TestPerNodeAnalyticsRoute::test_uncertainty_travels_with_the_receiver_coordinate": 0.2060854900000777, + "tests/test_public_location.py::TestPublicCrossNode::test_a_non_dict_is_returned_unchanged": 0.07236316299986356, + "tests/test_public_location.py::TestPublicCrossNode::test_no_test_point_survives_anywhere": 0.05623190699998304, + "tests/test_public_location.py::TestPublicCrossNode::test_overlaps_and_blocked_nodes_survive": 0.08468214999993506, + "tests/test_public_location.py::TestPublicCrossNode::test_pass_through_when_disabled": 0.08311278799965294, + "tests/test_public_location.py::TestPublicCrossNode::test_suggestions_are_emptied": 0.08211902300035945, + "tests/test_public_location.py::TestPublicCrossNode::test_the_input_is_not_mutated": 0.06703497800026526, + "tests/test_public_location.py::TestPublicCrossNode::test_the_shape_is_unchanged": 0.07791482699985863, + "tests/test_public_location.py::TestPublicLatLon::test_longitude_scales_with_latitude": 0.06692807399940648, + "tests/test_public_location.py::TestPublicLatLon::test_non_numeric_passes_through": 0.06807101799995507, + "tests/test_public_location.py::TestPublicLatLon::test_published_point_is_at_least_the_floor_away": 0.05714471599958415, + "tests/test_public_location.py::TestPublicLatLon::test_rounded_to_four_decimals": 0.06535416899987467, + "tests/test_public_location.py::TestPublishedArc::test_arc_geometry_is_unchanged_when_disabled": 0.05903766999972504, + "tests/test_public_location.py::TestPublishedArc::test_arc_is_solved_around_the_published_receiver": 0.07166887399989719, + "tests/test_public_location.py::TestSaltPersistence::test_generated_salt_survives_a_restart": 0.08457377700005964, + "tests/test_public_location.py::TestTranslatePolygon::test_apex_lands_on_the_published_receiver": 0.07017188899999383, + "tests/test_public_location.py::TestTranslatePolygon::test_empty_and_none": 0.12567928599992229, + "tests/test_public_location.py::TestTranslatePolygon::test_shape_is_unchanged": 0.072662054999455, + "tests/test_public_location.py::TestTranslatePolygon::test_translation_is_rigid": 0.06290533600031267, + "tests/test_publication.py::TestAnalyticsPayloadIdentities::test_a_node_id_written_into_prose_is_rewritten_not_dropped": 0.06667530799995802, + "tests/test_publication.py::TestAnalyticsPayloadIdentities::test_cross_node_carries_refs_and_drops_the_unresolvable": 0.09918983599982312, + "tests/test_publication.py::TestAnalyticsPayloadIdentities::test_no_node_id_reaches_the_published_bytes": 0.0739604049999798, + "tests/test_publication.py::TestAnalyticsPayloadIdentities::test_the_entry_names_the_node_once_and_by_ref": 0.06269735599926207, + "tests/test_publication.py::TestAnalyticsPayloadIdentities::test_the_fuzz_still_keys_on_the_node_id": 0.10230398499970761, + "tests/test_publication.py::TestAnalyticsPayloadIsSynthetic::test_full_variant_carries_the_flag_per_node": 0.07237336600019262, + "tests/test_publication.py::TestAnalyticsPayloadIsSynthetic::test_matches_the_nodes_payload_for_the_same_node": 0.09278257799996936, + "tests/test_publication.py::TestAnalyticsPayloadIsSynthetic::test_real_only_variant_also_carries_the_flag": 0.08289332899948931, + "tests/test_publication.py::TestAnalyticsPayloadIsSynthetic::test_the_flag_is_not_derived_from_the_published_ref": 0.08826601400005529, + "tests/test_publication.py::TestArchiveKeyParsing::test_node_id_comes_out_of_the_key[-]": 0.06389146499986964, + "tests/test_publication.py::TestArchiveKeyParsing::test_node_id_comes_out_of_the_key[2026/08/27/ret01/part-120000.json-ret01]": 0.11559110800044436, + "tests/test_publication.py::TestArchiveKeyParsing::test_node_id_comes_out_of_the_key[part-120000.parquet-]": 0.10640946800003803, + "tests/test_publication.py::TestArchiveKeyParsing::test_node_id_comes_out_of_the_key[year=2026/month=08/day=27/node_id=ret01/part-120000.parquet-ret01]": 0.06909985199990842, + "tests/test_publication.py::TestArchiveRoutes::test_a_private_nodes_file_does_not_download": 0.32269168099992385, + "tests/test_publication.py::TestArchiveRoutes::test_a_private_nodes_file_is_not_listed": 0.3340422410001338, + "tests/test_publication.py::TestArchiveRoutes::test_a_public_nodes_file_still_downloads": 0.2171737519997805, + "tests/test_publication.py::TestAssociationStatusPayload::test_no_node_id_reaches_the_response": 0.304329996999968, + "tests/test_publication.py::TestAssociationStatusPayload::test_pending_tracks_is_keyed_on_refs_and_drops_the_unresolvable": 0.20637984599989068, + "tests/test_publication.py::TestAssociationStatusPayload::test_the_pairs_carry_refs_and_the_half_named_zone_goes": 0.21769750699968426, + "tests/test_publication.py::TestEffectivePrivacy::test_an_override_alone_needs_no_registration": 0.0590676669999084, + "tests/test_publication.py::TestEffectivePrivacy::test_an_override_wins_over_the_registration_choice": 0.10596429499992155, + "tests/test_publication.py::TestEffectivePrivacy::test_with_neither_the_node_is_public_by_default": 0.074799030000122, + "tests/test_publication.py::TestEffectivePrivacy::test_without_an_override_the_registration_choice_stands": 0.08435051399965232, + "tests/test_publication.py::TestFurthestDetectionsClassification::test_stripped_at_any_depth": 0.06622479000043313, + "tests/test_publication.py::TestFurthestDetectionsClassification::test_the_walk_matches_the_name_not_the_shape": 0.0580763689995365, + "tests/test_publication.py::TestFuzzDoesNotGateThis::test_a_private_node_is_still_withheld_with_fuzzing_off": 0.0735199079999802, + "tests/test_publication.py::TestInvalidate::test_invalidate_does_not_blank_the_answer_it_is_dropping": 0.07004721200064523, + "tests/test_publication.py::TestInvalidate::test_invalidate_makes_the_next_call_re_query": 0.059252180000385124, + "tests/test_publication.py::TestLocationPrivacyStorage::test_an_override_is_reported_with_its_provenance": 0.08916717300007804, + "tests/test_publication.py::TestLocationPrivacyStorage::test_an_unknown_node_reports_the_default_with_no_rows": 0.06248849900021014, + "tests/test_publication.py::TestLocationPrivacyStorage::test_clearing_a_node_with_no_override_is_not_an_error": 0.08862001100033012, + "tests/test_publication.py::TestLocationPrivacyStorage::test_setting_twice_corrects_the_row_rather_than_adding_one": 0.10440710700049749, + "tests/test_publication.py::TestLocationPrivacyStorage::test_the_registration_choice_is_reported_raw_beside_the_effective_state": 0.07000619700011157, + "tests/test_publication.py::TestMlatHistoryPayload::test_a_node_with_no_handle_loses_its_place_in_the_listing": 0.31053551900004095, + "tests/test_publication.py::TestMlatHistoryPayload::test_no_node_id_reaches_the_response": 0.3897300539997559, + "tests/test_publication.py::TestMlatHistoryPayload::test_no_receiver_relative_geometry_at_any_depth": 0.20442412500005958, + "tests/test_publication.py::TestMlatHistoryPayload::test_one_markers_solves_are_published_the_same_way": 0.19471340699965367, + "tests/test_publication.py::TestMlatHistoryPayload::test_the_beam_entry_keeps_the_verdict_and_loses_the_geometry": 0.3174608110002737, + "tests/test_publication.py::TestMlatHistoryPayload::test_the_contamination_stamp_goes_with_the_geometry_it_measures": 0.29995858199936265, + "tests/test_publication.py::TestMlatHistoryPayload::test_the_identity_fields_move_with_their_values": 0.333235732999583, + "tests/test_publication.py::TestMlatHistoryPayload::test_the_shadow_verdicts_go_and_the_refusal_stays": 0.19220914499919672, + "tests/test_publication.py::TestMlatHistoryPayload::test_the_skip_store_goes_through_the_same_boundary_intact": 0.1953656749997208, + "tests/test_publication.py::TestMlatVerificationPayload::test_the_bistatic_angle_is_computed_and_not_published": 0.0817028879996542, + "tests/test_publication.py::TestNodeVerificationPayload::test_no_true_frame_position_at_any_depth": 0.31908701900010783, + "tests/test_publication.py::TestNodeVerificationPayload::test_the_published_entry_is_the_stored_one_minus_those_fields": 0.19667913600005704, + "tests/test_publication.py::TestNodeVerificationPayload::test_the_store_keeps_what_the_route_must_not_publish": 0.07618282600014936, + "tests/test_publication.py::TestOverlapsPayload::test_pairs_and_the_registry_carry_refs_and_drop_the_unresolvable": 0.06585852300031547, + "tests/test_publication.py::TestOwnerSeesTheirOwnPrivateNodeInAnalytics::test_a_logged_in_non_owner_does_not": 0.29912067200029924, + "tests/test_publication.py::TestOwnerSeesTheirOwnPrivateNodeInAnalytics::test_a_public_fleet_costs_no_identity_check_at_all": 0.2402941379996264, + "tests/test_publication.py::TestOwnerSeesTheirOwnPrivateNodeInAnalytics::test_an_owner_gets_their_private_nodes_summary_back": 0.28708086600045135, + "tests/test_publication.py::TestOwnerSeesTheirOwnPrivateNodeInAnalytics::test_an_unauthenticated_caller_gets_the_cached_bytes_verbatim": 0.3369445420003103, + "tests/test_publication.py::TestOwnerSeesTheirOwnPrivateNodeInAnalytics::test_the_owners_copy_is_the_same_fuzzed_frame_the_public_would_get": 0.3544661630007795, + "tests/test_publication.py::TestOwnerSeesTheirOwnPrivateNodeInAnalytics::test_the_owners_private_node_carries_a_node_ref_too": 0.28668196199987506, + "tests/test_publication.py::TestOwnerSeesTheirOwnPrivateNodeInAnalytics::test_the_per_node_route_answers_the_owner": 0.30971348699949885, + "tests/test_publication.py::TestOwnerSeesTheirOwnPrivateNodeInAnalytics::test_the_per_node_route_is_still_404_for_everyone_else": 0.3337220290004552, + "tests/test_publication.py::TestOwnerSeesTheirOwnPrivateNodeInAnalytics::test_the_real_only_variant_merges_the_same_way": 0.31217711199951736, + "tests/test_publication.py::TestPerNodeAnalyticsRoute::test_a_miss_does_not_quote_what_was_asked_for": 0.3083302770000955, + "tests/test_publication.py::TestPerNodeAnalyticsRoute::test_a_private_node_is_404": 0.29127550000021074, + "tests/test_publication.py::TestPerNodeAnalyticsRoute::test_a_public_node_still_answers": 0.19642158400029075, + "tests/test_publication.py::TestPerNodeAnalyticsRoute::test_the_private_node_id_is_not_accepted_as_a_path_parameter": 0.18422045100032847, + "tests/test_publication.py::TestPerNodeAnalyticsRoute::test_the_value_carries_no_node_id": 0.35113499600038267, + "tests/test_publication.py::TestPrecedenceOverTheFleet::test_a_private_override_hides_a_node_that_never_registered": 0.06918354299978091, + "tests/test_publication.py::TestPrecedenceOverTheFleet::test_a_private_override_hides_a_publicly_registered_node": 0.06691489900003944, + "tests/test_publication.py::TestPrecedenceOverTheFleet::test_a_private_registration_with_no_override_is_private": 0.08490606099985598, + "tests/test_publication.py::TestPrecedenceOverTheFleet::test_a_public_override_unhides_a_private_registration": 0.08001802000035241, + "tests/test_publication.py::TestPrecedenceOverTheFleet::test_deleting_an_override_on_an_unregistered_node_leaves_it_public": 0.07577977199980523, + "tests/test_publication.py::TestPrecedenceOverTheFleet::test_deleting_the_override_returns_the_registration_choice": 0.09401011999943876, + "tests/test_publication.py::TestPrivateNodeIds::test_a_failed_query_serves_the_last_known_set": 0.07763470200052325, + "tests/test_publication.py::TestPrivateNodeIds::test_a_failure_backs_off_rather_than_querying_every_call": 0.06869583000025159, + "tests/test_publication.py::TestPrivateNodeIds::test_a_failure_before_any_answer_withholds_publication": 0.06684981400030665, + "tests/test_publication.py::TestPrivateNodeIds::test_a_missing_node_id_is_public": 0.08150378299978911, + "tests/test_publication.py::TestPrivateNodeIds::test_a_node_that_never_registered_is_public": 0.07891249200019956, + "tests/test_publication.py::TestPrivateNodeIds::test_a_private_registration_is_listed": 0.08098164899956828, + "tests/test_publication.py::TestPrivateNodeIds::test_a_public_registration_is_not": 0.06567083399977491, + "tests/test_publication.py::TestPrivateNodeIds::test_cold_failure_recovers_after_backoff": 0.07447349100038991, + "tests/test_publication.py::TestPrivateNodeIds::test_the_answer_is_cached_within_the_ttl": 0.07235362099982012, + "tests/test_publication.py::TestPrivateNodeIds::test_the_cache_expires": 0.07577547800019602, + "tests/test_publication.py::TestPublicAircraftPayload::test_a_multinode_solve_survives_without_the_private_member": 0.07287270000006174, + "tests/test_publication.py::TestPublicAircraftPayload::test_a_private_nodes_pending_arc_is_dropped": 0.09444156299969109, + "tests/test_publication.py::TestPublicAircraftPayload::test_a_private_nodes_single_node_entry_is_dropped": 0.07583545299985417, + "tests/test_publication.py::TestPublicAircraftPayload::test_an_all_private_multinode_solve_is_dropped": 0.06355473799976608, + "tests/test_publication.py::TestPublicAircraftPayload::test_detecting_nodes_loses_private_ids_and_empty_hexes": 0.08958783199977916, + "tests/test_publication.py::TestPublicAircraftPayload::test_messages_follows_what_is_served": 0.07051635200014061, + "tests/test_publication.py::TestPublicAircraftPayload::test_no_private_nodes_returns_the_same_object": 0.1119717399997171, + "tests/test_publication.py::TestPublicAircraftPayload::test_the_source_entry_is_not_mutated": 0.05686757400007991, + "tests/test_publication.py::TestPublicAircraftPayload::test_untouched_keys_ride_along": 0.11355220499990537, + "tests/test_publication.py::TestPublicOwnerSplit::test_the_owner_feed_still_shows_the_owner_their_own_node": 0.0775899790000949, + "tests/test_publication.py::TestPublicOwnerSplit::test_the_public_bytes_have_no_private_entry": 0.09016887500001758, + "tests/test_publication.py::TestPublicOwnerSplit::test_the_unredacted_dict_is_kept_for_that_purpose": 0.06574783699988984, + "tests/test_publication.py::TestPublicPathParameters::test_a_404_does_not_quote_what_was_asked_for": 0.2152143490002345, + "tests/test_publication.py::TestPublicPathParameters::test_custody_chain_does_not_take_the_node_id": 0.2088588240003446, + "tests/test_publication.py::TestPublicPathParameters::test_custody_chain_takes_a_ref": 0.32298744599984275, + "tests/test_publication.py::TestPublicPathParameters::test_custody_status_is_keyed_on_refs": 0.21385481499964953, + "tests/test_publication.py::TestPublicPathParameters::test_custody_verify_issues_carry_no_node_id": 0.31760214200039627, + "tests/test_publication.py::TestPublicPathParameters::test_custody_verify_takes_a_ref_and_not_the_node_id": 0.31093029200019373, + "tests/test_publication.py::TestPublicPathParameters::test_detection_range_takes_a_ref_and_not_the_node_id": 0.19459463700059132, + "tests/test_publication.py::TestPublicPathParameters::test_node_verification_takes_a_ref_and_not_the_node_id": 0.21347324199996365, + "tests/test_publication.py::TestPublicPathParameters::test_the_custody_chain_carries_no_node_id_at_any_depth": 0.19700894200013863, + "tests/test_publication.py::TestPublicPathParameters::test_the_hardcoded_radar3_routes_are_gone": 0.21156077599971468, + "tests/test_publication.py::TestPublicPathParameters::test_the_signed_entry_bodies_are_withheld": 0.2038986819998172, + "tests/test_publication.py::TestPublicSummaries::test_a_private_node_has_no_summary": 0.06674799800020992, + "tests/test_publication.py::TestPublicSummaries::test_nothing_private_returns_the_same_object": 0.06784600700075316, + "tests/test_publication.py::TestRadarNodesPayload::test_a_name_that_is_a_node_id_is_replaced_by_the_ref": 0.09581800000023577, + "tests/test_publication.py::TestRadarNodesPayload::test_a_name_that_is_not_a_node_id_is_published_unchanged": 0.11333350399991104, + "tests/test_publication.py::TestRadarNodesPayload::test_a_node_with_no_registry_row_is_dropped": 0.08052208200024324, + "tests/test_publication.py::TestRadarNodesPayload::test_a_private_node_is_absent_from_the_listing_and_the_counts": 0.08927152199976263, + "tests/test_publication.py::TestRadarNodesPayload::test_the_fuzzed_position_does_not_move_when_the_key_changes": 0.0774243259998002, + "tests/test_publication.py::TestRadarNodesPayload::test_the_listing_is_keyed_on_refs_and_names_fall_back_to_them": 0.0904278279999744, + "tests/test_publication.py::TestRadarNodesPayload::test_the_real_only_analytics_variant_is_keyed_on_refs": 0.0820784099996672, + "tests/test_publication.py::TestSingleNodeSurfaces::test_radar_status_names_no_node": 0.32336571700034256, + "tests/test_publication.py::TestSingleNodeSurfaces::test_radar_status_withholds_a_private_nodes_config_block": 0.34910009000032005, + "tests/test_publication.py::TestSingleNodeSurfaces::test_receiver_json_publishes_a_public_nodes_position": 0.17712960300059422, + "tests/test_publication.py::TestSingleNodeSurfaces::test_receiver_json_withholds_a_private_nodes_position": 0.1067189330005931, + "tests/test_publication.py::TestUnavailablePublicationPolicy::test_broadcast_withholds_public_data_but_keeps_owner_source": 0.05783214900066014, + "tests/test_publication.py::TestUnavailablePublicationPolicy::test_policy_dependent_requests_return_retryable_503[/api/data/archive/a/b/c]": 0.06839977100025862, + "tests/test_publication.py::TestUnavailablePublicationPolicy::test_policy_dependent_requests_return_retryable_503[/api/data/archive]": 0.1018760070001008, + "tests/test_publication.py::TestUnavailablePublicationPolicy::test_policy_dependent_requests_return_retryable_503[/api/radar/analytics]": 0.07342960500000117, + "tests/test_publication.py::TestUnavailablePublicationPolicy::test_receiver_withholds_coordinates": 0.07375717800005077, + "tests/test_r2_client.py::TestR2Client::test_delete_key_exception_returns_false": 0.08300035399952321, + "tests/test_r2_client.py::TestR2Client::test_delete_key_nonexistent_returns_true": 0.4045375079999758, + "tests/test_r2_client.py::TestR2Client::test_delete_key_noop_when_disabled": 0.05479003499976898, + "tests/test_r2_client.py::TestR2Client::test_delete_key_removes_object": 0.3469609659996422, + "tests/test_r2_client.py::TestR2Client::test_delete_keys_bulk": 1.1729787219996979, + "tests/test_r2_client.py::TestR2Client::test_delete_keys_empty_list": 0.29221267900038583, + "tests/test_r2_client.py::TestR2Client::test_delete_keys_exception_returns_zero": 0.05626614100037841, + "tests/test_r2_client.py::TestR2Client::test_delete_keys_noop_when_disabled": 0.055472447000283864, + "tests/test_r2_client.py::TestR2Client::test_download_bytes_exception_returns_none": 0.05216904000008071, + "tests/test_r2_client.py::TestR2Client::test_download_bytes_noop_when_disabled": 0.053717106000021886, + "tests/test_r2_client.py::TestR2Client::test_download_bytes_returns_none_for_missing_key": 0.287760936000268, + "tests/test_r2_client.py::TestR2Client::test_download_bytes_round_trip": 0.3338318119995165, + "tests/test_r2_client.py::TestR2Client::test_get_client_exception_returns_none": 0.10282819899975948, + "tests/test_r2_client.py::TestR2Client::test_is_enabled_false_when_no_creds": 0.07903484500002378, + "tests/test_r2_client.py::TestR2Client::test_is_enabled_true": 0.07884544499984258, + "tests/test_r2_client.py::TestR2Client::test_list_keys_empty_bucket": 0.4804936179998549, + "tests/test_r2_client.py::TestR2Client::test_list_keys_exception_returns_empty": 0.0663303259998429, + "tests/test_r2_client.py::TestR2Client::test_list_keys_no_prefix": 0.42985704899956545, + "tests/test_r2_client.py::TestR2Client::test_list_keys_noop_when_disabled": 0.09285508700031642, + "tests/test_r2_client.py::TestR2Client::test_list_keys_with_prefix": 0.7763855950001926, + "tests/test_r2_client.py::TestR2Client::test_upload_bytes_content_is_stored": 1.1444572219998008, + "tests/test_r2_client.py::TestR2Client::test_upload_bytes_exception_returns_false": 0.04677299199966001, + "tests/test_r2_client.py::TestR2Client::test_upload_bytes_noop_when_disabled": 0.08005556300031458, + "tests/test_r2_client.py::TestR2Client::test_upload_bytes_success": 0.32759161600006337, + "tests/test_r2_client.py::TestR2Client::test_upload_file_exception_returns_false": 0.06433262300015485, + "tests/test_r2_client.py::TestR2Client::test_upload_file_noop_when_disabled": 0.05410051900025792, + "tests/test_r2_client.py::TestR2Client::test_upload_file_success": 0.35047193699983836, + "tests/test_radar3_truth_units.py::TestGroundTruthAltitudeUnits::test_gt_altitude_is_metres_not_reconverted_feet": 0.062359770000057324, + "tests/test_radar3_truth_units.py::TestGroundTruthAltitudeUnits::test_gt_speed_comes_from_meta_not_zero": 0.0647741669995412, + "tests/test_radar3_truth_units.py::TestGroundTruthAltitudeUnits::test_unknown_gt_speed_is_excluded_from_velocity_stats": 0.06085554999935994, + "tests/test_radar_routes.py::TestBulkRecordsTheMirroredRef::test_a_malformed_ref_is_refused": 0.2124300749997019, + "tests/test_radar_routes.py::TestBulkRecordsTheMirroredRef::test_a_ref_arriving_at_registration_is_recorded": 0.22273767700016833, + "tests/test_radar_routes.py::TestBulkRecordsTheMirroredRef::test_a_ref_arriving_later_is_still_recorded": 0.3217173340003683, + "tests/test_radar_routes.py::TestBulkRecordsTheMirroredRef::test_a_ref_shaped_like_a_node_id_is_refused": 0.22315869600015503, + "tests/test_radar_routes.py::TestBulkRecordsTheMirroredRef::test_a_ref_the_registry_gives_to_another_node_is_refused": 0.22028340899987597, + "tests/test_radar_routes.py::TestCheckRateLimit::test_exceeding_rate_limit_raises_429": 0.0638029609995101, + "tests/test_radar_routes.py::TestCheckRateLimit::test_expired_timestamps_cleaned_up": 0.07030296899984023, + "tests/test_radar_routes.py::TestCheckRateLimit::test_first_call_succeeds": 0.062329644999863376, + "tests/test_radar_routes.py::TestRadarDetectionsAuth::test_correct_api_key_returns_200": 0.2518382799999017, + "tests/test_radar_routes.py::TestRadarDetectionsAuth::test_missing_api_key_returns_401": 0.20066863100009869, + "tests/test_radar_routes.py::TestRadarDetectionsAuth::test_wrong_api_key_returns_401": 0.31213981099972443, + "tests/test_radar_routes.py::TestRadarDetectionsBulk::test_bulk_auth_wrong_key_returns_401": 0.21264559399969585, + "tests/test_radar_routes.py::TestRadarDetectionsBulk::test_bulk_changed_config_re_registers_the_node": 0.33089924900059486, + "tests/test_radar_routes.py::TestRadarDetectionsBulk::test_bulk_does_not_overwrite_a_node_registered_by_another_path": 0.2060422340000514, + "tests/test_radar_routes.py::TestRadarDetectionsBulk::test_bulk_first_registration_of_a_new_node_is_unaffected": 0.2124393770000097, + "tests/test_radar_routes.py::TestRadarDetectionsBulk::test_bulk_frame_without_timestamp_skipped": 0.21687220500007243, + "tests/test_radar_routes.py::TestRadarDetectionsBulk::test_bulk_missing_config_on_a_known_node_does_not_re_register": 0.20436006900035864, + "tests/test_radar_routes.py::TestRadarDetectionsBulk::test_bulk_two_nodes_registered_and_frames_queued": 0.23954883599981258, + "tests/test_radar_routes.py::TestRadarDetectionsBulk::test_bulk_unchanged_config_does_not_re_register": 0.21358930599990344, + "tests/test_radar_routes.py::TestRadarDetectionsIngestion::test_existing_node_status_updated_not_duplicated": 0.19497064300048805, + "tests/test_radar_routes.py::TestRadarDetectionsIngestion::test_frame_with_timestamp_is_queued": 0.2135012200001256, + "tests/test_radar_routes.py::TestRadarDetectionsIngestion::test_frame_without_timestamp_not_queued": 0.21336724700040577, + "tests/test_radar_routes.py::TestRadarDetectionsIngestion::test_new_node_registered_in_connected_nodes": 0.19895140800008448, + "tests/test_reputation_penalty_scale.py::TestDefaultScaleRecordsNoPenalty::test_a_100km_mismatch_costs_nothing": 0.051202907000060804, + "tests/test_reputation_penalty_scale.py::TestDefaultScaleRecordsNoPenalty::test_rewards_still_work_at_zero_scale": 0.05506142700005512, + "tests/test_reputation_penalty_scale.py::TestDefaultScaleRecordsNoPenalty::test_the_same_mismatch_does_land_with_penalties_on": 0.04310436900004788, + "tests/test_reputation_penalty_scale.py::TestPenaltyScaleParsing::test_a_value_that_is_not_a_scale_falls_back_to_zero[-1]": 0.04991173999997045, + "tests/test_reputation_penalty_scale.py::TestPenaltyScaleParsing::test_a_value_that_is_not_a_scale_falls_back_to_zero[-inf]": 0.052890940999986924, + "tests/test_reputation_penalty_scale.py::TestPenaltyScaleParsing::test_a_value_that_is_not_a_scale_falls_back_to_zero[1,0]": 0.05211101100030646, + "tests/test_reputation_penalty_scale.py::TestPenaltyScaleParsing::test_a_value_that_is_not_a_scale_falls_back_to_zero[banana]": 0.06421698599979209, + "tests/test_reputation_penalty_scale.py::TestPenaltyScaleParsing::test_a_value_that_is_not_a_scale_falls_back_to_zero[nan]": 0.05404119599961632, + "tests/test_reputation_penalty_scale.py::TestPenaltyScaleParsing::test_infinity_is_refused": 0.050464022000141995, + "tests/test_reputation_penalty_scale.py::TestPenaltyScaleParsing::test_one_restores_the_historical_behaviour": 0.05523196299964184, + "tests/test_reputation_penalty_scale.py::TestPenaltyScaleParsing::test_the_deployed_default_is_zero": 0.05029713799967794, + "tests/test_reputation_penalty_scale.py::TestPenaltyScaleParsing::test_unset_is_zero": 0.05239318599979015, + "tests/test_reputation_penalty_scale.py::TestRestoredBlocksSurvive::test_a_restored_block_is_unchanged_by_an_evaluator_pass": 0.05070578899994871, + "tests/test_reputation_penalty_scale.py::TestRestoredBlocksSurvive::test_the_same_pass_would_have_charged_it_with_penalties_on": 0.05407631899970511, + "tests/test_reputation_penalty_scale.py::test_set_penalty_scale_refuses_a_nonsense_value": 0.05926452199992127, + "tests/test_rollback_script.py::test_a_container_created_after_the_tag_is_restarted": 0.0889968950000366, + "tests/test_rollback_script.py::test_a_container_older_than_the_tag_that_answers_is_left_alone": 0.08692622899980051, + "tests/test_rollback_script.py::test_a_container_that_does_not_answer_is_restarted": 0.09042576100000588, + "tests/test_rollback_script.py::test_an_abort_partway_says_the_rollback_did_not_complete": 0.08446537000008902, + "tests/test_rollback_script.py::test_health_wait_matches_the_deploys": 0.05997977599963633, + "tests/test_rollback_script.py::test_lookup_picks_the_newest_tag": 0.7180336890000945, + "tests/test_rollback_script.py::test_lookup_survives_a_listing_larger_than_a_pipe_buffer": 12.700898273000348, + "tests/test_rollback_script.py::test_no_running_container_means_the_full_restart": 0.09203840199961633, + "tests/test_rollback_script.py::test_the_same_second_as_the_tag_counts_as_after": 0.08480678800060559, + "tests/test_routes.py::TestArchiveAPI::test_archive_list": 0.18434279100029016, + "tests/test_routes.py::TestArchiveAPI::test_existing_archive_file_returns_content": 0.1960121230004006, + "tests/test_routes.py::TestArchiveAPI::test_missing_archive_file_returns_404": 0.18681277299947396, + "tests/test_routes.py::TestCORS::test_cors_allows_configured_origin": 0.1931887089999691, + "tests/test_routes.py::TestCORS::test_cors_rejects_unknown_origin": 0.1841276929999367, + "tests/test_routes.py::TestCORS::test_cors_restricts_methods": 0.19378660399979708, + "tests/test_routes.py::TestDetections::test_bulk_accepts_valid": 0.2036379760006639, + "tests/test_routes.py::TestDetections::test_bulk_endpoint_validates_shape": 0.20297728200011989, + "tests/test_routes.py::TestDetections::test_missing_api_key_returns_401": 0.18876734600007694, + "tests/test_routes.py::TestDetections::test_no_timestamp_frame_skipped": 0.19508191600061764, + "tests/test_routes.py::TestDetections::test_valid_detection_accepted": 0.20384267100052966, + "tests/test_routes.py::TestHealth::test_health_returns_ok": 0.1870660519998637, + "tests/test_routes.py::TestRadarData::test_aircraft_json": 0.18178011300005892, + "tests/test_routes.py::TestRadarData::test_receiver_json": 0.18213220899997395, + "tests/test_routes.py::TestRequestSizeLimit::test_oversized_body_rejected": 0.184222318999673, + "tests/test_routes.py::TestTowerStats::test_get_summary": 0.18256576500016308, + "tests/test_routes.py::TestTowerStats::test_missing_fields_returns_400": 0.183657072999722, + "tests/test_routes.py::TestTowerStats::test_post_selection": 0.18409555600010208, + "tests/test_routes.py::TestWebSocketAuth::test_ws_accepted_with_valid_token": 0.1795606709997628, + "tests/test_routes.py::TestWebSocketAuth::test_ws_open_when_no_token_configured": 0.19557830299982015, + "tests/test_routes.py::TestWebSocketAuth::test_ws_rejected_with_bad_token": 0.17603185500001928, + "tests/test_runtime_config.py::TestWriteRuntimeFile::test_a_failed_write_does_not_touch_the_target": 0.045170953999786434, + "tests/test_runtime_config.py::TestWriteRuntimeFile::test_each_call_uses_its_own_temp_file": 0.04421788999979981, + "tests/test_runtime_config.py::TestWriteRuntimeFile::test_leaves_no_temp_file_behind": 0.046373068999855604, + "tests/test_runtime_config.py::TestWriteRuntimeFile::test_replaces_the_target": 0.05218204499942658, + "tests/test_secrets.py::test_a_secret_round_trips_under_the_key": 0.04603555499988943, + "tests/test_secrets.py::test_an_invalid_key_is_refused_by_name": 0.052719297999828996, + "tests/test_secrets.py::test_another_key_cannot_read_it": 0.042999937000331556, + "tests/test_secrets.py::test_encrypting_without_a_key_is_refused[ ]": 0.04882696599997871, + "tests/test_secrets.py::test_encrypting_without_a_key_is_refused[None]": 0.05094204799979707, + "tests/test_secrets.py::test_encrypting_without_a_key_is_refused[]": 0.0434634289999849, + "tests/test_sim_ingest.py::TestAdsbPush::test_icao_hex_accepted": 0.18825340499961385, + "tests/test_sim_ingest.py::TestAdsbPush::test_object_id_rejected": 0.19713266899998416, + "tests/test_sim_ingest.py::TestAdsbPush::test_source_real_push_is_real_world": 0.18650072800028283, + "tests/test_sim_ingest.py::TestAdsbPush::test_tisb_tilde_hex_accepted": 0.17994141000008312, + "tests/test_sim_ingest.py::TestAdsbPush::test_untagged_push_is_sim_world": 0.19324880700014546, + "tests/test_sim_ingest.py::TestGroundTruthPush::test_adsb_silent_defaults_false_for_older_fleets": 0.18502382199994827, + "tests/test_sim_ingest.py::TestGroundTruthPush::test_anomalous_push_flags_hex_and_logs_event": 0.18762554800014186, + "tests/test_sim_ingest.py::TestGroundTruthPush::test_invalid_latlon_skipped": 0.20060841100030302, + "tests/test_sim_ingest.py::TestGroundTruthPush::test_missing_api_key_rejected": 0.2086068069997964, + "tests/test_sim_ingest.py::TestGroundTruthPush::test_non_anomalous_push_clears_hex": 0.19234795999955168, + "tests/test_sim_ingest.py::TestGroundTruthPush::test_non_list_aircraft_rejected": 0.1979138020001301, + "tests/test_sim_ingest.py::TestGroundTruthPush::test_old_payload_without_new_keys_defaults": 0.1831997159997627, + "tests/test_sim_ingest.py::TestGroundTruthPush::test_stores_adsb_silent_flag": 0.1858136780001587, + "tests/test_sim_ingest.py::TestGroundTruthPush::test_stores_trail_and_full_meta": 0.18079883499967764, + "tests/test_sim_ingest.py::TestSimulationConfig::test_adsb_outage_accepted_and_echoed": 0.18610624299981282, + "tests/test_sim_ingest.py::TestSimulationConfig::test_adsb_outage_default_is_off": 0.17759505900039585, + "tests/test_sim_ingest.py::TestSimulationConfig::test_adsb_outage_is_outside_the_frac_sum_constraint": 0.17904619100045238, + "tests/test_sim_ingest.py::TestSimulationConfig::test_adsb_outage_out_of_range_rejected": 0.18263217499998063, + "tests/test_sim_ingest.py::TestSimulationConfig::test_config_put_needs_no_session": 0.1864657109995278, + "tests/test_sim_ingest.py::TestSimulationConfig::test_counts_report_silent_transponders_alongside_their_type": 0.18452642799957175, + "tests/test_sim_ingest.py::TestSimulationConfig::test_counts_split_live_feed_aircraft_by_cast": 0.1819697430000815, + "tests/test_sim_ingest.py::TestSimulationConfig::test_counts_split_out_dark_aircraft": 0.17911271500042858, + "tests/test_sim_ingest.py::TestSimulationConfig::test_defaults_are_boot_stamped": 0.1811226899999383, + "tests/test_sim_ingest.py::TestSimulationConfig::test_dual_fraction_above_range_rejected": 0.19211502400003155, + "tests/test_sim_ingest.py::TestSimulationConfig::test_dual_fraction_below_range_rejected": 0.18768496899974707, + "tests/test_sim_ingest.py::TestSimulationConfig::test_frac_live_dark_is_outside_the_frac_sum_constraint": 0.19305008300034388, + "tests/test_sim_ingest.py::TestSimulationConfig::test_live_knobs_accepted_and_echoed": 0.1763895799999773, + "tests/test_sim_ingest.py::TestSimulationConfig::test_live_knobs_default_on_with_dark_share": 0.18849594899984368, + "tests/test_sim_ingest.py::TestSimulationConfig::test_live_knobs_validated": 0.18232612699921447, + "tests/test_sim_ingest.py::TestSimulationConfig::test_max_range_km_above_400_rejected": 0.17975377199945797, + "tests/test_sim_ingest.py::TestSimulationConfig::test_max_range_km_below_10_but_nonzero_rejected": 0.17956100399987918, + "tests/test_sim_ingest.py::TestSimulationConfig::test_max_range_km_boundary_values_accepted": 0.18962587700025324, + "tests/test_sim_ingest.py::TestSimulationConfig::test_max_range_km_zero_accepted": 0.18406069100046807, + "tests/test_sim_ingest.py::TestSimulationConfig::test_n_nodes_above_range_rejected": 0.17624470399960046, + "tests/test_sim_ingest.py::TestSimulationConfig::test_n_nodes_below_range_rejected": 0.17992201800052499, + "tests/test_sim_ingest.py::TestSimulationConfig::test_n_nodes_bool_rejected": 0.1800452660004339, + "tests/test_sim_ingest.py::TestSimulationConfig::test_n_nodes_float_rejected": 0.18537053300042317, + "tests/test_sim_ingest.py::TestSimulationConfig::test_partial_put_leaves_scene_keys_absent": 0.19549471800019091, + "tests/test_sim_ingest.py::TestSimulationConfig::test_scene_keys_absent_by_default": 0.1923174020002989, + "tests/test_sim_ingest.py::TestSimulationConfig::test_scene_keys_accepted_and_echoed": 0.19764258599980167, + "tests/test_sim_ingest.py::TestStationaryPush::test_meta_and_anomaly_update_while_stationary": 0.22529309599985936, + "tests/test_sim_ingest.py::TestStationaryPush::test_moved_push_still_appends": 0.18471868599999652, + "tests/test_sim_ingest.py::TestStationaryPush::test_refreshes_liveness_without_duplicate_point": 0.21500319599999784, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_no_environment_name_opens_the_gate[dev]": 0.04453339700012293, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_no_environment_name_opens_the_gate[production]": 0.04487267400008932, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_no_environment_name_opens_the_gate[staging]": 0.03728391000049669, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_no_environment_name_opens_the_gate[test]": 0.038547713000298245, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_only_the_literal_one_opens_it[ 1]": 0.04509500999984084, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_only_the_literal_one_opens_it[0]": 0.047916677000102936, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_only_the_literal_one_opens_it[1 ]": 0.036636353999256244, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_only_the_literal_one_opens_it[True]": 0.05218703699983962, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_only_the_literal_one_opens_it[]": 0.04772987800015471, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_only_the_literal_one_opens_it[on]": 0.05599651000011363, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_only_the_literal_one_opens_it[true]": 0.05223317500031044, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_only_the_literal_one_opens_it[yes]": 0.05137500699993325, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_the_flag_opens_it_in_any_environment[dev]": 0.04186594900011187, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_the_flag_opens_it_in_any_environment[production]": 0.046170389000508294, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_the_flag_opens_it_in_any_environment[staging]": 0.05385874600005991, + "tests/test_sim_ingest_mount.py::TestSyntheticFleetGate::test_the_flag_opens_it_in_any_environment[test]": 0.049563554000087606, + "tests/test_sim_ingest_mount.py::test_main_consults_the_gate": 8.123458665999806, + "tests/test_simulation.py::TestSimulationWorld::test_aircraft_populated": 0.06621175699956439, + "tests/test_simulation.py::TestSimulationWorld::test_aircraft_summary": 0.0528622289998566, + "tests/test_simulation.py::TestSimulationWorld::test_beam_width_preserved": 0.053361322000000655, + "tests/test_simulation.py::TestSimulationWorld::test_generate_frames": 0.05885960299974613, + "tests/test_simulation.py::TestSyntheticNodeConfig::test_config_hash_format": 0.049914097000055335, + "tests/test_simulation.py::TestSyntheticNodeConfig::test_different_config_different_hash": 0.053718345999641315, + "tests/test_simulation.py::TestSyntheticNodeConfig::test_node_id_prefix": 0.047477479000008316, + "tests/test_simulation.py::TestSyntheticNodeConfig::test_same_config_same_hash": 0.05851080400043429, + "tests/test_simulation.py::TestSyntheticNodeGenerator::test_generate_frame_has_fields": 0.051368182999794954, + "tests/test_simulator_only_on_test.py::test_health_serialises_the_flag_the_smoke_suite_greps_for": 0.20217302999981257, + "tests/test_simulator_only_on_test.py::test_no_simulator_flag_off_the_test_droplet[prod]": 0.06513312500010215, + "tests/test_simulator_only_on_test.py::test_no_simulator_flag_off_the_test_droplet[staging]": 0.06566200099996422, + "tests/test_simulator_only_on_test.py::test_the_fleet_is_behind_an_unenabled_profile[prod]": 0.061453732999780186, + "tests/test_simulator_only_on_test.py::test_the_fleet_is_behind_an_unenabled_profile[staging]": 0.07397676700020384, + "tests/test_simulator_only_on_test.py::test_the_smoke_job_no_longer_waits_for_a_fleet": 0.0914583329999914, + "tests/test_simulator_only_on_test.py::test_the_smoke_suite_asserts_the_simulator_is_absent": 0.053106211999875086, + "tests/test_simulator_only_on_test.py::test_the_staging_deploy_starts_the_server_alone": 0.10418137999977262, + "tests/test_simulator_only_on_test.py::test_the_test_droplet_still_sets_the_flag": 0.06844320799973502, + "tests/test_simulator_only_on_test.py::test_the_test_droplets_fleet_starts_by_default": 0.07339312100020834, + "tests/test_smoke_tally_shared.py::test_each_suite_sources_the_shared_tally[ci.yml (production smoke)]": 0.06790904799981945, + "tests/test_smoke_tally_shared.py::test_each_suite_sources_the_shared_tally[staging-smoke-test.sh]": 0.05670655699987037, + "tests/test_smoke_tally_shared.py::test_no_suite_declares_its_own_counters[ci.yml (production smoke)]": 0.05677016499930687, + "tests/test_smoke_tally_shared.py::test_no_suite_declares_its_own_counters[staging-smoke-test.sh]": 0.05059103199982928, + "tests/test_smoke_tally_shared.py::test_the_summary_takes_no_arguments": 0.04537062400004288, + "tests/test_smoke_tally_shared.py::test_the_tally_owns_all_three_counters": 0.05524825600014083, + "tests/test_solve_uncertainty.py::TestClamp::test_ceiling_of_the_clamp_binds": 0.057093239999630896, + "tests/test_solve_uncertainty.py::TestClamp::test_floor_of_the_clamp_binds": 0.05533188000026712, + "tests/test_solve_uncertainty.py::TestClamp::test_returns_a_float": 0.065747709000334, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_dark_floor_per_node_count[2-2100.0]": 0.052079155999763316, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_dark_floor_per_node_count[3-850.0]": 0.04735206500026834, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_dark_floor_per_node_count[4-240.0]": 0.056238126000607735, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_dark_floor_per_node_count[9-240.0]": 0.04999092300022312, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_dark_floors_are_env_tunable": 0.05568759700008741, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_dark_floors_replace_the_known_ones_rather_than_scaling_them": 0.05800395300002492, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_formal_sigma_still_adds_in_quadrature_on_the_dark_lane": 0.052343351999752485, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_gain_is_env_tunable_and_multiplies_the_dark_floor": 0.05987295699924289, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_the_capped_worst_case_stays_off_the_clamp": 0.05619631399986247, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_the_gain_defaults_to_unit": 0.05498037799998201, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_the_gain_does_not_touch_the_known_lane": 0.05782910600009927, + "tests/test_solve_uncertainty.py::TestDarkFloors::test_the_legacy_gain_still_applies_when_set": 0.050977658000192605, + "tests/test_solve_uncertainty.py::TestFloors::test_floor_per_node_count[2-650.0]": 0.06767244699949515, + "tests/test_solve_uncertainty.py::TestFloors::test_floor_per_node_count[3-210.0]": 0.05733869799905733, + "tests/test_solve_uncertainty.py::TestFloors::test_floor_per_node_count[4-180.0]": 0.053737358000034874, + "tests/test_solve_uncertainty.py::TestFloors::test_floor_per_node_count[7-180.0]": 0.053964706000442675, + "tests/test_solve_uncertainty.py::TestFloors::test_known_lane_floors_are_the_2026_09_05_values": 0.05383551900013117, + "tests/test_solve_uncertainty.py::TestFloors::test_n_nodes_explicit_none_returns_none": 0.060553924000032566, + "tests/test_solve_uncertainty.py::TestFloors::test_n_nodes_missing_returns_none": 0.06067804600024829, + "tests/test_solve_uncertainty.py::TestFormalTerm::test_absent_formal_matches_zero_formal": 0.05393040199942334, + "tests/test_solve_uncertainty.py::TestFormalTerm::test_formal_adds_in_quadrature": 0.0562999070002661, + "tests/test_solve_uncertainty.py::TestFormalTerm::test_formal_gain_scales_only_the_formal_term": 0.05992272599905846, + "tests/test_solve_uncertainty.py::TestFormalTerm::test_formal_is_capped_before_it_is_used": 0.05240727099999276, + "tests/test_solve_uncertainty.py::TestFormalTerm::test_unusable_formal_degrades_to_the_floor[-1.0]": 0.06096353099974294, + "tests/test_solve_uncertainty.py::TestFormalTerm::test_unusable_formal_degrades_to_the_floor[0.0]": 0.051359742999920854, + "tests/test_solve_uncertainty.py::TestFormalTerm::test_unusable_formal_degrades_to_the_floor[None]": 0.058004567000352836, + "tests/test_solve_uncertainty.py::TestFormalTerm::test_unusable_formal_degrades_to_the_floor[inf]": 0.0535393620002651, + "tests/test_solve_uncertainty.py::TestFormalTerm::test_unusable_formal_degrades_to_the_floor[nan]": 0.0760223440001937, + "tests/test_solve_uncertainty.py::TestGrownSigma::test_growth_adds_in_quadrature": 0.05445450300067023, + "tests/test_solve_uncertainty.py::TestGrownSigma::test_growth_is_capped_at_the_growth_horizon": 0.06115486899989264, + "tests/test_solve_uncertainty.py::TestGrownSigma::test_growth_is_monotonic_up_to_the_cap": 0.05182241800002885, + "tests/test_solve_uncertainty.py::TestGrownSigma::test_negative_age_does_not_shrink_or_grow": 0.05091777000052389, + "tests/test_solve_uncertainty.py::TestGrownSigma::test_zero_age_is_the_solve_sigma": 0.053641811999568745, + "tests/test_solve_uncertainty.py::TestVelocitySigma::test_default_is_env_tunable": 0.047718626000005315, + "tests/test_solve_uncertainty.py::TestVelocitySigma::test_kf_sigma_is_clamped[0.5-5.0]": 0.04921819899982438, + "tests/test_solve_uncertainty.py::TestVelocitySigma::test_kf_sigma_is_clamped[4.9-5.0]": 0.048657964000085485, + "tests/test_solve_uncertainty.py::TestVelocitySigma::test_kf_sigma_is_clamped[42.0-42.0]": 0.05502336699919397, + "tests/test_solve_uncertainty.py::TestVelocitySigma::test_kf_sigma_is_clamped[900.0-150.0]": 0.046167579000211845, + "tests/test_solve_uncertainty.py::TestVelocitySigma::test_kf_state_supplies_the_sigma": 0.0468811759997152, + "tests/test_solve_uncertainty.py::TestVelocitySigma::test_non_finite_kf_sigma_falls_back": 0.06391678199997841, + "tests/test_solve_uncertainty.py::TestVelocitySigma::test_unknown_key_falls_back_to_the_default": 0.051013531999615225, + "tests/test_solver.py::TestBistaticModels::test_delay_increases_with_offset": 0.0545900380002422, + "tests/test_solver.py::TestBistaticModels::test_delay_symmetric": 0.0501253010002074, + "tests/test_solver.py::TestBistaticModels::test_delay_target_on_baseline_is_zero": 0.05768994899972313, + "tests/test_solver.py::TestBistaticModels::test_doppler_nonzero_for_moving_target": 0.045050289000300836, + "tests/test_solver.py::TestBistaticModels::test_doppler_stationary_is_zero": 0.046960849999777565, + "tests/test_solver.py::TestCoordinateConversions::test_lla_to_enu_north_offset": 0.05091371399976197, + "tests/test_solver.py::TestCoordinateConversions::test_lla_to_enu_origin_is_zero": 0.06095882600084224, + "tests/test_solver.py::TestCoordinateConversions::test_roundtrip_lla_enu_lla": 0.05302730900029928, + "tests/test_solver.py::TestResidualFunction::test_perfect_state_has_small_residuals": 0.044321190000118804, + "tests/test_solver.py::TestResidualFunction::test_snr_weighting": 0.050061887000083516, + "tests/test_solver.py::TestResidualFunction::test_z_fixed_is_used_not_state": 0.047451292999539874, + "tests/test_solver.py::TestSolveMultinode::test_contributing_node_ids_returned": 0.12841173000060735, + "tests/test_solver.py::TestSolveMultinode::test_empty_measurements_returns_none": 0.058707692000552925, + "tests/test_solver.py::TestSolveMultinode::test_fc_fallback_to_FC_key": 0.11964479100015524, + "tests/test_solver.py::TestSolveMultinode::test_happy_path_two_nodes": 0.08561874599990915, + "tests/test_solver.py::TestSolveMultinode::test_missing_node_config_returns_none": 0.05449348399997689, + "tests/test_solver.py::TestSolveMultinode::test_result_has_fit_quality_metrics": 0.08774329800007763, + "tests/test_solver.py::TestSolveMultinode::test_result_has_velocity": 0.09944735900035084, + "tests/test_solver.py::TestSolveMultinode::test_single_measurement_returns_none": 0.047410017999936827, + "tests/test_solver.py::TestVelUntrustedDerivation::test_solve_source_n_nodes_3_is_untrusted": 0.06969346600044446, + "tests/test_solver.py::TestVelUntrustedDerivation::test_solve_source_n_nodes_4_is_trusted": 0.06352979499979483, + "tests/test_solver.py::TestVelUntrustedDerivation::test_unsaturated_cv_fit_n_nodes_2_is_trusted": 0.057072394999977405, + "tests/test_solver.py::TestVelUntrustedDerivation::test_vz_saturated_with_cv_fit_adopted_is_untrusted": 0.05432314000017868, + "tests/test_solver_alt_mode.py::TestConfigsForSolverInput::test_no_measurements_gives_nothing": 0.03970615199978056, + "tests/test_solver_alt_mode.py::TestConfigsForSolverInput::test_pool_measurement_nodes_travel_too": 0.03590750700050194, + "tests/test_solver_alt_mode.py::TestConfigsForSolverInput::test_restricted_to_the_measurement_nodes": 0.037240301000110776, + "tests/test_solver_alt_mode.py::TestConfigsForSolverInput::test_unknown_measurement_nodes_are_simply_absent": 0.03918472700024722, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_an_adsb_altitude_in_the_ladder_is_the_start": 0.0638655539996762, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_fewer_than_one_start_still_starts_somewhere[-3]": 0.03957067800047298, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_fewer_than_one_start_still_starts_somewhere[0]": 0.061030610000671004, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_more_starts_than_layers_is_every_layer": 0.04944315900002039, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_no_layers_gives_no_starts": 0.04699118799953794, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_one_start_at_the_nearest_layer_by_default[0.4-expected4]": 0.06074812099996052, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_one_start_at_the_nearest_layer_by_default[1.5-expected3]": 0.0775634669998908, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_one_start_at_the_nearest_layer_by_default[40.0-expected5]": 0.05721182800061797, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_one_start_at_the_nearest_layer_by_default[7.0-expected1]": 0.05136792899975262, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_one_start_at_the_nearest_layer_by_default[8.2-expected2]": 0.06615498700057287, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_one_start_at_the_nearest_layer_by_default[9.0-expected0]": 0.0587599860004957, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_three_starts_are_the_window_around_the_nearest_layer[0.4-expected4]": 0.06031508700016275, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_three_starts_are_the_window_around_the_nearest_layer[1.5-expected3]": 0.057665723000354774, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_three_starts_are_the_window_around_the_nearest_layer[11.0-expected5]": 0.05414607900002011, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_three_starts_are_the_window_around_the_nearest_layer[40.0-expected6]": 0.047174711999559804, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_three_starts_are_the_window_around_the_nearest_layer[7.0-expected1]": 0.055188483000165434, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_three_starts_are_the_window_around_the_nearest_layer[8.2-expected2]": 0.048910805999639706, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_three_starts_are_the_window_around_the_nearest_layer[9.0-expected0]": 0.06440635500030112, + "tests/test_solver_alt_mode.py::TestFreeAltStarts::test_three_starts_window_the_spliced_adsb_altitude": 0.0372657199995956, + "tests/test_solver_alt_mode.py::TestFreeMode::test_a_failed_multistart_is_a_failed_solve": 0.05022352799960572, + "tests/test_solver_alt_mode.py::TestFreeMode::test_a_single_start_still_records_its_residual": 0.0437953139999081, + "tests/test_solver_alt_mode.py::TestFreeMode::test_an_adsb_guess_altitude_is_the_start": 0.04887872800009063, + "tests/test_solver_alt_mode.py::TestFreeMode::test_an_unrecognised_mode_would_sweep": 0.04366045299957477, + "tests/test_solver_alt_mode.py::TestFreeMode::test_history_carries_the_mode_and_the_per_start_residuals": 0.04394009400039067, + "tests/test_solver_alt_mode.py::TestFreeMode::test_n2_keeps_the_sweep": 0.043884155999876384, + "tests/test_solver_alt_mode.py::TestFreeMode::test_one_multistart_call_with_one_start": 0.04689404500004457, + "tests/test_solver_alt_mode.py::TestFreeMode::test_the_start_count_is_configurable": 0.04277299699970172, + "tests/test_solver_alt_mode.py::TestFreeMode::test_trimming_re_solves_through_the_multistart": 0.03672639500064179, + "tests/test_solver_alt_mode.py::TestFreeMode::test_z_saturation_reaches_the_history": 0.036265617000026396, + "tests/test_solver_alt_mode.py::TestSweepIsTheDefault::test_sweep_calls_the_lm_once_per_layer_and_never_the_multistart": 0.04780241100024796, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_a_fresh_close_entry_beats_an_old_far_one": 0.04207245099951251, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_a_widened_base_is_never_narrowed_by_the_cap": 0.04228411699978096, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_an_anchor_inside_the_flat_radius_still_reports_its_distance": 0.0425826729997425, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_eight_km_from_a_30s_old_entry_rekeys_onto_it": 0.04219469899953765, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_gate_grows_by_the_measured_drift_rate": 0.0417093299993212, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_gate_is_capped_and_stays_capped_to_the_age_limit": 0.04181501900029616, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_gate_starts_at_the_flat_radius": 0.03860092700006135, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_learned_velocity_is_preferred_when_the_filter_has_it": 0.03792728399957923, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_no_learned_velocity_falls_back_to_the_entrys_own": 0.04170678900027269, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_normalising_by_the_gate_beats_ranking_on_raw_kilometres": 0.03454197300015949, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_the_age_window_itself_is_unchanged": 0.041982099000051676, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_the_anchor_branch_keeps_the_flat_radius": 0.07616010699985054, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_the_cap_holds_at_the_age_limit": 0.036954220999632525, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_the_same_eight_km_from_a_2s_old_entry_mints": 0.04430700500006424, + "tests/test_solver_anchor.py::TestAgeScaledProximityGate::test_track_dr_source_solve_pins_the_entrys_own_velocity": 0.04422240700023394, + "tests/test_solver_anchor.py::TestMultinodeKeyDecision::test_adsb_takes_precedence_over_an_anchor": 0.03407047699965915, + "tests/test_solver_anchor.py::TestMultinodeKeyDecision::test_anchor_beyond_max_dist_km_falls_back": 0.048442886999964685, + "tests/test_solver_anchor.py::TestMultinodeKeyDecision::test_anchor_hit_when_close_and_still_live": 0.03882759399994029, + "tests/test_solver_anchor.py::TestMultinodeKeyDecision::test_mints_a_new_key_with_no_anchor_and_no_claimant": 0.04581778000010672, + "tests/test_solver_anchor.py::TestMultinodeKeyDecision::test_missing_anchor_key_falls_back_to_mint": 0.04075249000061376, + "tests/test_solver_anchor.py::TestMultinodeKeyDecision::test_non_dark_anchor_key_is_refused": 0.04011647199968138, + "tests/test_solver_anchor.py::TestMultinodeKeyDecision::test_non_transponder_adsb_hex_cannot_take_the_adsb_branch": 0.05155559900049411, + "tests/test_solver_anchor.py::TestMultinodeKeyDecision::test_tisb_tilde_adsb_hex_still_takes_the_adsb_branch": 0.04141668900001605, + "tests/test_solver_anchor.py::TestOutOfOrderMeasurementEpochs::test_a_negative_dt_candidate_gets_no_drift_allowance": 0.034136557999772776, + "tests/test_solver_anchor.py::TestOutOfOrderMeasurementEpochs::test_a_solve_far_older_than_the_entry_still_mints": 0.03247085300017716, + "tests/test_solver_anchor.py::TestOutOfOrderMeasurementEpochs::test_a_solve_two_seconds_older_than_the_entry_joins_it": 0.03152859200054081, + "tests/test_solver_anchor.py::TestOutOfOrderMeasurementEpochs::test_the_entry_is_dead_reckoned_backwards_not_forwards": 0.032261072999972384, + "tests/test_solver_anchor.py::TestProcessSolverItemAnchorHonoring::test_anchor_key_is_recorded_on_rejects_too": 0.04399951100003818, + "tests/test_solver_anchor.py::TestProcessSolverItemAnchorHonoring::test_anchored_n2_without_cv_epochs_is_withheld": 0.03634023500035255, + "tests/test_solver_anchor.py::TestProcessSolverItemAnchorHonoring::test_anchored_publish_lands_on_the_anchor_key": 0.040166391000184376, + "tests/test_solver_anchor.py::TestProcessSolverItemAnchorHonoring::test_fallback_still_publishes_and_counts_as_a_fallback": 0.039890403999834234, + "tests/test_solver_anchor.py::TestProcessSolverItemAnchorHonoring::test_history_carries_the_anchor_key": 0.042834682999455254, + "tests/test_solver_anchor.py::TestProcessSolverItemAnchorHonoring::test_supersession_merges_a_proximity_minted_fragment_into_the_anchor": 0.038012679999610555, + "tests/test_solver_anchor.py::TestProcessSolverItemAnchorHonoring::test_supersession_refuses_a_far_fragment_that_only_partially_shares_inputs": 0.039594153000052756, + "tests/test_solver_consensus.py::TestConsensusDisabledAndN2::test_mode_off_never_calls_select_fn": 0.037584718000289286, + "tests/test_solver_consensus.py::TestConsensusDisabledAndN2::test_n2_never_calls_select_fn_even_when_active": 0.041026066999620525, + "tests/test_solver_consensus.py::TestConsensusFallbacks::test_abstain_falls_back_to_full_set": 0.037340585000492865, + "tests/test_solver_consensus.py::TestConsensusFallbacks::test_raising_select_fn_falls_back": 0.04262527900027635, + "tests/test_solver_consensus.py::TestConsensusFallbacks::test_too_few_selected_falls_back": 0.03656403000013597, + "tests/test_solver_consensus.py::TestConsensusFiltersAndPublishes::test_filters_to_selection_and_publishes": 0.03909783499966579, + "tests/test_solver_consensus.py::TestConsensusMetaOnReject::test_rejected_rms_delay_still_carries_consensus_meta": 0.0426549209996665, + "tests/test_solver_consensus.py::TestConsensusShadow::test_shadow_mode_records_meta_without_filtering": 0.04181424399939715, + "tests/test_solver_consensus.py::TestConsensusThenTrim::test_consensus_selection_then_trim_both_recorded": 0.04640971000026184, + "tests/test_solver_consensus.py::TestDisplacementAnchor::test_active_selected_anchors_to_centroid_and_publishes": 0.035446324000076856, + "tests/test_solver_consensus.py::TestDisplacementAnchor::test_active_selected_rejects_when_off_both_anchors": 0.03346115899967117, + "tests/test_solver_consensus.py::TestDisplacementAnchor::test_fallback_abstained_keeps_guess_anchor": 0.036568289999650005, + "tests/test_solver_consensus.py::TestDisplacementAnchor::test_shadow_mode_keeps_guess_anchor": 0.03814751799973237, + "tests/test_solver_consensus.py::TestFilterHelperProvenance::test_filters_measurements_and_recomputes_n_nodes": 0.04180429100006222, + "tests/test_solver_consensus.py::TestFilterHelperProvenance::test_no_track_ids_by_node_leaves_track_ids_unchanged": 0.03383581299976868, + "tests/test_solver_consensus.py::TestFilterHelperProvenance::test_original_s_in_is_not_mutated": 0.034939619000397215, + "tests/test_solver_consensus.py::TestFilterHelperProvenance::test_rebuilds_track_ids_by_node_and_track_ids": 0.03944554000008793, + "tests/test_solver_lifecycle.py::test_start_builds_and_prewarms_the_pool_and_stop_shuts_it": 0.13925625400042918, + "tests/test_solver_lifecycle.py::test_start_is_idempotent_and_stop_joins_workers": 0.25008505600044373, + "tests/test_solver_lifecycle.py::test_stop_closes_pool_and_does_not_recreate_it": 0.038581296000302245, + "tests/test_solver_lifecycle.py::test_stop_is_bounded_and_refuses_overlap_with_unfinished_generation": 0.04988491199992495, + "tests/test_solver_pool_adoption.py::TestAdoptDeclines::test_pool_node_outside_the_delay_gate_is_not_adopted": 0.038751344999582216, + "tests/test_solver_pool_adoption.py::TestAdoptDeclines::test_pool_node_outside_the_doppler_gate_is_not_adopted": 0.038773310000124184, + "tests/test_solver_pool_adoption.py::TestAdoptDeclines::test_second_chance_drops_the_worst_adopted_node": 0.04672727700017276, + "tests/test_solver_pool_adoption.py::TestAdoptDeclines::test_wide_solve_failing_rms_keeps_the_narrow_one": 0.037920783000572555, + "tests/test_solver_pool_adoption.py::TestAdoptDeclines::test_wide_solve_that_walks_away_is_refused": 0.0412095099995895, + "tests/test_solver_pool_adoption.py::TestAdoptScope::test_anchored_input_is_skipped": 0.039367082999888225, + "tests/test_solver_pool_adoption.py::TestAdoptScope::test_input_already_as_wide_as_its_pool_is_skipped": 0.04804333999982191, + "tests/test_solver_pool_adoption.py::TestAdoptScope::test_kill_switch_disables_the_stage": 0.037363367000125436, + "tests/test_solver_pool_adoption.py::TestAdoptWidens::test_adopted_node_track_joins_the_provenance": 0.03616524900007789, + "tests/test_solver_pool_adoption.py::TestAdoptWidens::test_agreeing_pool_node_is_adopted_and_resolved_wider": 0.03899104099946271, + "tests/test_solver_report.py::TestMedianP90::test_empty_is_none_for_both": 0.03187394799988397, + "tests/test_solver_report.py::TestMedianP90::test_input_order_does_not_matter": 0.04064107599970157, + "tests/test_solver_report.py::TestMedianP90::test_single_value_is_both": 0.03699867400018775, + "tests/test_solver_report.py::TestMedianP90::test_ten_values": 0.03677825799968559, + "tests/test_solver_report.py::TestMedianP90::test_two_values_take_the_upper_median_and_the_lower_p90": 0.037726781999936065, + "tests/test_solver_stats.py::TestClaimingPassthrough::test_claiming_mode_defaults_to_off_in_tests": 0.03704147700000249, + "tests/test_solver_stats.py::TestClaimingPassthrough::test_claiming_reflects_the_associator_and_solver_counters": 0.03437553100002333, + "tests/test_solver_stats.py::TestConsensusAndCounters::test_consensus_and_counters_reflect_state": 0.03282830999978614, + "tests/test_solver_stats.py::TestContaminationBlock::test_empty_window_abstains_rather_than_reporting_zero": 0.03695593700012978, + "tests/test_solver_stats.py::TestContaminationBlock::test_known_lane_records_are_not_counted": 0.04591104299970539, + "tests/test_solver_stats.py::TestContaminationBlock::test_pct_and_mean_over_judged_records": 0.03478283899994494, + "tests/test_solver_stats.py::TestContaminationBlock::test_unstamped_records_are_out_of_the_denominator": 0.02979475900065154, + "tests/test_solver_stats.py::TestDarkFollowBlock::test_an_empty_lane_reports_zeroes_not_a_missing_block": 0.029502413999580313, + "tests/test_solver_stats.py::TestDarkFollowBlock::test_counts_published_solves_narrower_than_their_pool": 0.02918944500015641, + "tests/test_solver_stats.py::TestDarkFollowBlock::test_ineligibility_reasons_are_reported_per_reason": 0.030423470000641828, + "tests/test_solver_stats.py::TestDarkFollowBlock::test_no_stamped_records_reports_null_not_zero": 0.03529065999964587, + "tests/test_solver_stats.py::TestDarkFollowBlock::test_the_manoeuvre_reprieve_is_reported_beside_the_bucket_it_empties": 0.03168143199991391, + "tests/test_solver_stats.py::TestDarkFollowBlock::test_the_two_n2_sparings_are_reported_beside_the_funnel": 0.03925039299974742, + "tests/test_solver_stats.py::TestDarkFollowBlock::test_unstamped_and_unpublished_records_stay_out_of_the_denominator": 0.03276196299975709, + "tests/test_solver_stats.py::TestEmptyState::test_empty_state_no_division_errors": 0.03321489600011773, + "tests/test_solver_stats.py::TestEndpoint::test_claiming_and_fragmentation_blocks_present": 0.036782705999939935, + "tests/test_solver_stats.py::TestEndpoint::test_default_window": 0.03580437200025699, + "tests/test_solver_stats.py::TestEndpoint::test_display_filter_block_present": 0.03901294300021618, + "tests/test_solver_stats.py::TestEndpoint::test_known_lane_and_known_claims_blocks_present": 0.03695392899999206, + "tests/test_solver_stats.py::TestEndpoint::test_minutes_clamp_high": 0.035216542000398476, + "tests/test_solver_stats.py::TestEndpoint::test_minutes_clamp_low": 0.03564301799997338, + "tests/test_solver_stats.py::TestFovStatsPassthrough::test_fov_mode_defaults_to_off_in_tests": 0.03691863799986095, + "tests/test_solver_stats.py::TestFovStatsPassthrough::test_fov_reflects_state_counters": 0.03194927899994582, + "tests/test_solver_stats.py::TestFragmentation::test_anchored_pct_reads_anchor_key_regardless_of_outcome_scope": 0.032606882999971276, + "tests/test_solver_stats.py::TestFragmentation::test_dark_key_decision_counters_are_surfaced": 0.037104467999597546, + "tests/test_solver_stats.py::TestFragmentation::test_dark_key_decision_counters_reset_with_state": 0.030538743000306567, + "tests/test_solver_stats.py::TestFragmentation::test_distinct_keys_and_solves_per_key": 0.034382798000024195, + "tests/test_solver_stats.py::TestFragmentation::test_empty_window_no_division_errors": 0.03456939900024736, + "tests/test_solver_stats.py::TestFragmentation::test_rejects_do_not_count_toward_fragmentation": 0.031033667999963654, + "tests/test_solver_stats.py::TestFragmentation::test_stale_coast_counters_are_reported": 0.030965440000272793, + "tests/test_solver_stats.py::TestFragmentation::test_supersession_counters_are_surfaced": 0.029354575000525074, + "tests/test_solver_stats.py::TestFunnelAndRejects::test_funnel_splits_n2_vs_n3plus": 0.04142372899968905, + "tests/test_solver_stats.py::TestFunnelAndRejects::test_reject_reason_without_prefix_kept_as_is": 0.03473279399986495, + "tests/test_solver_stats.py::TestFunnelAndRejects::test_rejected_prefix_is_stripped": 0.03737449400023252, + "tests/test_solver_stats.py::TestFunnelAndRejects::test_window_excludes_old_records": 0.035848175000410265, + "tests/test_solver_stats.py::TestGhosts::test_live_adsb_associated_by_key_prefix": 0.03840308200051368, + "tests/test_solver_stats.py::TestGhosts::test_live_adsb_associated_by_result_field": 0.03682070200011367, + "tests/test_solver_stats.py::TestGhosts::test_live_close_to_fresh_adsb_is_not_a_ghost": 0.03933023800027513, + "tests/test_solver_stats.py::TestGhosts::test_live_close_to_ground_truth_is_matched_not_ghost": 0.037735087999863026, + "tests/test_solver_stats.py::TestGhosts::test_live_dark_partition_adds_up": 0.04467685899953722, + "tests/test_solver_stats.py::TestGhosts::test_live_far_from_everything_is_a_ghost": 0.040343282999856456, + "tests/test_solver_stats.py::TestGhosts::test_live_positionless_dark_track_is_out_of_the_denominator": 0.037293054000201664, + "tests/test_solver_stats.py::TestGhosts::test_live_precision_is_none_with_no_dark_tracks": 0.04028547600046295, + "tests/test_solver_stats.py::TestGhosts::test_live_precision_pct_denominator_is_dark_only": 0.036367788999996264, + "tests/test_solver_stats.py::TestGhosts::test_live_stale_adsb_entry_does_not_rescue": 0.03973027900019588, + "tests/test_solver_stats.py::TestGhosts::test_one_shot_ghosts_are_counted_separately": 0.03949754099994607, + "tests/test_solver_stats.py::TestGhosts::test_precision_is_none_with_nothing_judged": 0.040454073999626416, + "tests/test_solver_stats.py::TestGhosts::test_real_world_node_solve_is_not_judged": 0.032564876999913395, + "tests/test_solver_stats.py::TestGhosts::test_synthetic_node_solve_is_judged": 0.034934251999857224, + "tests/test_solver_stats.py::TestGhosts::test_unstamped_record_is_not_judged": 0.04249730499986981, + "tests/test_solver_stats.py::TestGhosts::test_window_excludes_old_ghosts": 0.03526800899999216, + "tests/test_solver_stats.py::TestGhosts::test_windowed_counts_dark_lane_only": 0.03701152599978741, + "tests/test_solver_stats.py::TestGhosts::test_windowed_ghost_is_a_published_dark_solve_past_the_gate": 0.03691236900021977, + "tests/test_solver_stats.py::TestKnownLaneAndClaimsPassthrough::test_both_blocks_zero_on_a_fresh_process": 0.0329240769997341, + "tests/test_solver_stats.py::TestKnownLaneAndClaimsPassthrough::test_known_claims_reflects_the_claiming_counters": 0.03306726099981461, + "tests/test_solver_stats.py::TestKnownLaneAndClaimsPassthrough::test_known_lane_reflects_the_lane_counters": 0.03179236299956756, + "tests/test_solver_stats.py::TestLaneSplit::test_adsb_lane_records_are_counted_but_not_funnelled": 0.035227283000494936, + "tests/test_solver_stats.py::TestLaneSplit::test_follow_records_leave_the_dark_funnel": 0.0334104729995488, + "tests/test_solver_stats.py::TestLaneSplit::test_known_lane_window_position_error": 0.03452475799986132, + "tests/test_solver_stats.py::TestLaneSplit::test_known_records_leave_the_funnel_and_land_in_lane_split": 0.03188418999980058, + "tests/test_solver_stats.py::TestLaneSplit::test_lane_split_sums_to_the_whole_window": 0.0324097669999901, + "tests/test_solver_stats.py::TestLaneSplit::test_position_error_and_fragmentation_are_dark_only": 0.03339954300008685, + "tests/test_solver_stats.py::TestLiveStateSnapshots::test_concurrent_adsb_insert_does_not_raise": 0.03140033499994388, + "tests/test_solver_stats.py::TestLiveStateSnapshots::test_concurrent_ground_truth_trail_insert_does_not_raise": 0.030157199999393924, + "tests/test_solver_stats.py::TestLiveStateSnapshots::test_concurrent_track_insert_does_not_raise": 0.035328173999914725, + "tests/test_solver_stats.py::TestLiveStateSnapshots::test_duplicated_dark_follow_counters_come_from_the_locked_snapshot": 0.03439756900024804, + "tests/test_solver_stats.py::TestLiveStateSnapshots::test_multinode_tracks_iterated_under_the_track_lock": 0.03711125700010598, + "tests/test_solver_stats.py::TestNodePool::test_a_record_with_no_node_count_is_kept_not_dropped": 0.03484582999954, + "tests/test_solver_stats.py::TestNodePool::test_buckets_sum_back_to_the_funnel": 0.03352620600026057, + "tests/test_solver_stats.py::TestNodePool::test_gt_error_beyond_the_gate_is_excluded_like_the_top_level_median": 0.03165031900016402, + "tests/test_solver_stats.py::TestNodePool::test_only_the_top_four_reject_reasons_are_listed": 0.03089546799992604, + "tests/test_solver_stats.py::TestNodePool::test_published_and_rejected_land_in_their_own_buckets": 0.04067878900013966, + "tests/test_solver_stats.py::TestNodePool::test_the_known_lane_gets_its_own_table": 0.033084658999541716, + "tests/test_solver_stats.py::TestPositionErrorGate::test_empty_position_error_is_none": 0.04036679599994386, + "tests/test_solver_stats.py::TestPositionErrorGate::test_error_gate_inclusion_and_exclusion": 0.0356688909996592, + "tests/test_solver_stats.py::TestPositionErrorGate::test_exact_median_and_p90": 0.03532567399997788, + "tests/test_solver_stats.py::TestRecordLane::test_key_prefix_decides_a_published_record": 0.034595843000261084, + "tests/test_solver_stats.py::TestRecordLane::test_keyless_reject_falls_back_to_the_input_identity": 0.033998487000189925, + "tests/test_solver_stats.py::TestRecordLane::test_known_flag_wins_over_everything": 0.03287896699976045, + "tests/test_solver_stats.py::TestRecordLane::test_non_transponder_id_is_dark": 0.03124870200008445, + "tests/test_solver_stats.py::TestResolveSkipBlock::test_a_skip_is_not_an_attempt_or_a_reject": 0.030778363999615976, + "tests/test_solver_stats.py::TestResolveSkipBlock::test_attempts_ratio_is_none_without_attempts": 0.03421710099928532, + "tests/test_solver_stats.py::TestResolveSkipBlock::test_attempts_ratio_is_skips_over_dark_attempts": 0.02931551700066848, + "tests/test_solver_stats.py::TestResolveSkipBlock::test_totals_split_by_lane": 0.03227616899948771, + "tests/test_solver_stats.py::TestResolveSkipBlock::test_window_effective_minutes_exposes_a_truncated_deque": 0.03156885100042928, + "tests/test_solver_stats.py::TestResolveSkipBlock::test_window_excludes_old_skips": 0.03197278500010725, + "tests/test_solver_stats.py::TestWindowEffectiveMinutes::test_counts_the_known_deque_too": 0.06600020900032177, + "tests/test_solver_stats.py::TestWindowEffectiveMinutes::test_never_exceeds_the_requested_window": 0.032170687000416365, + "tests/test_solver_stats.py::TestWindowEffectiveMinutes::test_reports_the_age_of_the_oldest_record_held": 0.032511289000012766, + "tests/test_solver_trimming.py::TestBeamGateNSplit::test_a_node_with_no_receiver_is_skipped_rather_than_gated_on": 0.030031452999537578, + "tests/test_solver_trimming.py::TestBeamGateNSplit::test_n2_omni_node_skips_bearing_but_enforces_range": 0.03448184799935916, + "tests/test_solver_trimming.py::TestBeamGateNSplit::test_n2_publishes_when_in_wedge_and_in_range": 0.02946924100024262, + "tests/test_solver_trimming.py::TestBeamGateNSplit::test_n2_rejected_beam_outside_wedge_rule_is_bearing": 0.03080537900041236, + "tests/test_solver_trimming.py::TestBeamGateNSplit::test_n3_publishes_outside_wedge_but_in_range": 0.03300328400064245, + "tests/test_solver_trimming.py::TestBeamGateNSplit::test_n3_rejected_beam_beyond_bistatic_range_rule_is_range": 0.03015925000045172, + "tests/test_solver_trimming.py::TestBeamInstrumentation::test_out_of_beam_records_per_node_diagnostics": 0.028419072999895434, + "tests/test_solver_trimming.py::TestFovGateActive::test_n2_closed_bin_rejects_even_though_the_wedge_would_pass": 0.03585445999988224, + "tests/test_solver_trimming.py::TestFovGateActive::test_n2_learned_bin_rescues_a_wedge_reject": 0.02942021500030023, + "tests/test_solver_trimming.py::TestFovGateActive::test_n3_or_semantics_never_loses_a_solve_kept_today": 0.03285913999980039, + "tests/test_solver_trimming.py::TestFovGateActive::test_shadow_agree_when_both_reject": 0.032001040000068315, + "tests/test_solver_trimming.py::TestFovGateActive::test_shadow_counts_verdicts_and_tags_history_without_changing_outcome": 0.036505858000055014, + "tests/test_solver_trimming.py::TestTrimEnvKnob::test_raised_threshold_publishes_untrimmed": 0.03437035399974775, + "tests/test_solver_trimming.py::TestTrimFloor::test_floor_keeps_three_lowest_residual_nodes": 0.032413540999641555, + "tests/test_solver_trimming.py::TestTrimGivesUp::test_persistent_bad_rms_ends_in_reject_with_trim_metadata": 0.03145669000014095, + "tests/test_solver_trimming.py::TestTrimPrunesSourceTracks::test_track_ids_by_node_prunes_the_dropped_node": 0.03036460099974647, + "tests/test_solver_trimming.py::TestTrimPrunesSourceTracks::test_without_track_ids_by_node_track_ids_are_unchanged": 0.03207977600004597, + "tests/test_solver_trimming.py::TestTrimRecoversPublish::test_trim_drops_bad_node_and_publishes": 0.03252136300034181, + "tests/test_solver_trimming.py::TestTrimResolveFailure::test_failed_resolve_falls_back_to_pre_trim_result": 0.030354708000231767, + "tests/test_solver_trimming.py::TestTrimSkippedWithoutResiduals::test_missing_residuals_disables_trimming": 0.0308633239997107, + "tests/test_solver_trimming.py::TestTrimmedTracksAreNotClaimed::test_a_candidate_built_on_the_dropped_track_still_runs": 0.028654689000177314, + "tests/test_solver_trimming.py::TestTrimmedTracksAreNotClaimed::test_the_dropped_nodes_track_is_left_unclaimed": 0.030127549000098952, + "tests/test_solver_worker.py::TestBeamCoverageFilter::test_ghost_outside_beam_rejected": 0.053422301999944466, + "tests/test_solver_worker.py::TestBeamCoverageFilter::test_result_inside_beam_accepted": 0.052786484000080236, + "tests/test_solver_worker.py::TestCollectTrackAnomalies::test_adsb_solve_keeps_all_types": 0.026771503999952984, + "tests/test_solver_worker.py::TestCollectTrackAnomalies::test_dark_solve_allowlisted": 0.032071692000045005, + "tests/test_solver_worker.py::TestCollectTrackAnomalies::test_dark_solve_disallowed_types_unflag": 0.03127277999965372, + "tests/test_solver_worker.py::TestCollectTrackAnomalies::test_flag_latches_across_solves": 0.02959190599995054, + "tests/test_solver_worker.py::TestCollectTrackAnomalies::test_unrelated_tracks_ignored": 0.026436401999035297, + "tests/test_solver_worker.py::TestCoverageCalibration::test_dark_solve_records_nothing": 0.026862744000027305, + "tests/test_solver_worker.py::TestCoverageCalibration::test_null_island_adsb_still_records_nothing": 0.02784226799985845, + "tests/test_solver_worker.py::TestCoverageCalibration::test_published_solve_with_a_fresh_adsb_match_records_no_calibration": 0.03354357299986077, + "tests/test_solver_worker.py::TestCoverageCalibration::test_stale_adsb_fix_still_records_nothing": 0.029329642000448075, + "tests/test_solver_worker.py::TestDarkSolveSmoothing::test_adsb_velocity_is_preferred_over_solved": 0.028591400000095746, + "tests/test_solver_worker.py::TestDarkSolveSmoothing::test_moving_dark_target_is_dead_reckoned_not_lagged": 0.03842882299977646, + "tests/test_solver_worker.py::TestDarkSolveSmoothing::test_stationary_noise_is_averaged": 0.02803531599965936, + "tests/test_solver_worker.py::TestFitRunsOnThisSideOfTheQueue::test_an_already_fitted_input_is_not_refitted": 0.02892944700033695, + "tests/test_solver_worker.py::TestFitRunsOnThisSideOfTheQueue::test_deferred_fit_is_run_here": 0.026919330000055197, + "tests/test_solver_worker.py::TestFitRunsOnThisSideOfTheQueue::test_no_epochs_means_no_confirmation": 0.03218731000015396, + "tests/test_solver_worker.py::TestInNodeBeam::test_no_beam_direction_returns_true_within_range": 0.05088390199944115, + "tests/test_solver_worker.py::TestInNodeBeam::test_out_of_range_returns_false_regardless_of_beam": 0.05677287500020611, + "tests/test_solver_worker.py::TestInNodeBeam::test_tx_lat_lon_derives_beam_azimuth_aircraft_inside": 0.06091922399991745, + "tests/test_solver_worker.py::TestInNodeBeam::test_tx_lat_lon_derives_beam_azimuth_aircraft_outside": 0.05906410299940035, + "tests/test_solver_worker.py::TestN2ConfirmationGate::test_an_unknown_anchor_key_admits_nothing": 0.03674395200005165, + "tests/test_solver_worker.py::TestN2ConfirmationGate::test_anchored_follow_of_a_young_key_is_still_gated": 0.04408478900040791, + "tests/test_solver_worker.py::TestN2ConfirmationGate::test_anchored_follow_of_an_established_key_publishes": 0.04713049400015734, + "tests/test_solver_worker.py::TestN2ConfirmationGate::test_confirmed_pairing_is_published": 0.05161197799952788, + "tests/test_solver_worker.py::TestN2ConfirmationGate::test_failing_chi2_is_withheld": 0.046900052999717445, + "tests/test_solver_worker.py::TestN2ConfirmationGate::test_n3_is_unaffected": 0.03568967299997894, + "tests/test_solver_worker.py::TestN2ConfirmationGate::test_the_bypass_can_be_switched_off": 0.04694179399939458, + "tests/test_solver_worker.py::TestN2ConfirmationGate::test_unfitted_pairing_is_withheld": 0.03974939799945787, + "tests/test_solver_worker.py::TestN2FitPositionPublish::test_a_free_fits_altitude_is_never_published": 0.04419682199977615, + "tests/test_solver_worker.py::TestN2FitPositionPublish::test_an_earlier_fit_epoch_is_propagated_to_the_solve_epoch": 0.03519707900022695, + "tests/test_solver_worker.py::TestN2FitPositionPublish::test_an_unconfirmed_pairing_never_reaches_the_swap": 0.029288249999808613, + "tests/test_solver_worker.py::TestN2FitPositionPublish::test_an_unusable_fit_keeps_the_solve_position": 0.03127286000017193, + "tests/test_solver_worker.py::TestN2FitPositionPublish::test_fit_position_is_published_and_the_solve_kept_alongside": 0.038949535000028845, + "tests/test_solver_worker.py::TestN2FitPositionPublish::test_the_pin_can_be_switched_off_without_losing_the_swap": 0.03479407100030585, + "tests/test_solver_worker.py::TestN2FitPositionPublish::test_the_swap_can_be_switched_off": 0.03365862999999081, + "tests/test_solver_worker.py::TestN2GateShipsDisabled::test_flag_is_off_by_default": 0.03277179500037164, + "tests/test_solver_worker.py::TestN2GateShipsDisabled::test_unfitted_n2_publishes_when_the_gate_is_off": 0.027136902999700396, + "tests/test_solver_worker.py::TestProcessSolverItem::test_exception_increments_failures": 0.035659397000017634, + "tests/test_solver_worker.py::TestProcessSolverItem::test_high_latency_triggers_alert": 0.030303543999707472, + "tests/test_solver_worker.py::TestProcessSolverItem::test_missing_enqueued_at_skips_latency": 0.036098710999340256, + "tests/test_solver_worker.py::TestProcessSolverItem::test_success_updates_state": 0.03137246500000401, + "tests/test_solver_worker.py::TestProcessSolverItem::test_unsuccessful_result_not_stored": 0.027968665000116744, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_2_node_candidate_never_refreshes": 0.029618855999615334, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_3_node_candidate_refreshes_an_aged_claim": 0.02863890199932939, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_candidate_carrying_an_unpublished_track_runs": 0.0339683040001546, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_fresh_claim_still_covers_a_3_node_candidate": 0.03375556899982257, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_narrow_publish_does_not_lower_the_bar": 0.030438663000040833, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_narrower_view_after_a_wider_one_is_skipped": 0.028552683000270918, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_rejected_candidate_does_not_block_an_identical_twin": 0.03277973999956885, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_second_copy_of_a_published_candidate_is_skipped": 0.03136907299995073, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_skip_is_recorded_with_the_claim_that_blocked_it": 0.03269065199992838, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_skipped_item_never_reaches_the_solver": 0.029397947999768803, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_subset_for_another_aircraft_survives_a_rejected_superset": 0.028764909000074113, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_tagged_candidate_is_counted_but_not_as_dark": 0.03183810399968934, + "tests/test_solver_worker.py::TestResolveSuppression::test_a_wider_view_of_the_same_tracks_runs": 0.032869219000076555, + "tests/test_solver_worker.py::TestResolveSuppression::test_an_admitted_candidate_reports_no_blockers": 0.032358763000047475, + "tests/test_solver_worker.py::TestResolveSuppression::test_an_input_without_track_provenance_always_runs": 0.029619837000154803, + "tests/test_solver_worker.py::TestResolveSuppression::test_claims_expire": 0.030060272999435256, + "tests/test_solver_worker.py::TestResolveSuppression::test_every_blocking_claim_must_be_aged_to_refresh": 0.03523239299966008, + "tests/test_solver_worker.py::TestResolveSuppression::test_only_the_published_width_is_claimed": 0.03096426399952179, + "tests/test_solver_worker.py::TestResolveSuppression::test_only_the_refreshed_admission_sets_the_flag": 0.026823910000075557, + "tests/test_solver_worker.py::TestResolveSuppression::test_skips_never_enter_the_solve_history": 0.02924055099947509, + "tests/test_solver_worker.py::TestResolveSuppression::test_the_check_alone_claims_nothing": 0.029391768000095908, + "tests/test_solver_worker.py::TestResolveSuppression::test_the_check_names_every_blocking_claim": 0.02847677899944756, + "tests/test_solver_worker.py::TestResolveSuppression::test_zero_interval_disables_suppression": 0.03390557099965008, + "tests/test_solver_worker.py::TestResolveSuppression::test_zero_refresh_restores_the_width_rule": 0.028245152999716083, + "tests/test_solver_worker.py::TestRmsDelayFilter::test_high_rms_delay_rejected": 0.02925350099985735, + "tests/test_solver_worker.py::TestRmsDelayFilter::test_high_rms_doppler_rejected": 0.03177373200060174, + "tests/test_solver_worker.py::TestRmsDelayFilter::test_low_rms_delay_accepted": 0.030720750999989832, + "tests/test_solver_worker.py::TestRmsDelayFilter::test_low_rms_doppler_accepted": 0.02913329899956807, + "tests/test_solver_worker.py::TestRmsDelayFilter::test_n3_rms_doppler_has_its_own_tighter_ceiling": 0.04147978000037256, + "tests/test_solver_worker.py::TestRmsDelayFilter::test_n4_keeps_the_physical_rms_doppler_ceiling": 0.03063331399971503, + "tests/test_solver_worker.py::TestSolveBestAltitude::test_anchored_input_keeps_the_anchor_altitude": 0.053301976999591716, + "tests/test_solver_worker.py::TestSolveBestAltitude::test_n2_does_not_inherit_from_a_two_node_key": 0.054789903000255435, + "tests/test_solver_worker.py::TestSolveBestAltitude::test_n2_inherits_altitude_from_an_established_key": 0.04521783400014101, + "tests/test_solver_worker.py::TestSolveBestAltitude::test_n2_keeps_the_grid_altitude_with_no_key_in_range": 0.06144038699949306, + "tests/test_solver_worker.py::TestSolveBestAltitude::test_n2_uses_initial_guess_altitude_directly": 0.05708052200043312, + "tests/test_solver_worker.py::TestSolveBestAltitude::test_n3_picks_minimum_rms_altitude": 0.03045747400028631, + "tests/test_solver_worker.py::TestSolveBestAltitude::test_nearest_qualifying_key_wins": 0.05535425500011115, + "tests/test_solver_worker.py::TestSolveBestAltitude::test_stale_key_is_not_a_donor": 0.054219442999965395, + "tests/test_solver_worker.py::TestSolveBestAltitudeDirect::test_adsb_altitude_already_in_layers_not_duplicated": 0.0527971719998277, + "tests/test_solver_worker.py::TestSolveBestAltitudeDirect::test_adsb_altitude_outside_layers_is_included_in_sweep": 0.04485929100019348, + "tests/test_solver_worker.py::TestSolverProcessPool::test_broken_pool_falls_back_inline_and_recreates": 0.033137568999791256, + "tests/test_solver_worker.py::TestSolverProcessPool::test_hung_child_times_out_counts_and_falls_back_inline": 0.08345841699929224, + "tests/test_solver_worker.py::TestSolverProcessPool::test_pool_call_is_inline_without_a_pool": 0.027090215000043827, + "tests/test_solver_worker.py::TestSolverProcessPool::test_round_trip_through_a_real_spawn_pool": 1.021786925000015, + "tests/test_solver_worker.py::TestStaleItemSkip::test_fresh_item_is_solved": 0.034079708000263054, + "tests/test_solver_worker.py::TestStaleItemSkip::test_stale_item_is_skipped": 0.03077684899972155, + "tests/test_solver_worker.py::TestSweepAltitudes::test_all_altitudes_raise_reraises_last_exception": 0.04906733999996504, + "tests/test_solver_worker.py::TestSweepAltitudes::test_no_successful_result_and_no_exception_returns_none": 0.04631970699983867, + "tests/test_solver_worker.py::TestSweepAltitudes::test_one_fails_one_succeeds_returns_good_result": 0.051289055999859556, + "tests/test_solver_worker.py::TestTrackPairExclusivity::test_a_pairing_keeps_its_own_claim_when_re_solved": 0.030072478999500163, + "tests/test_solver_worker.py::TestTrackPairExclusivity::test_a_worse_incumbent_is_displaced": 0.035180291999949986, + "tests/test_solver_worker.py::TestTrackPairExclusivity::test_better_fit_wins_a_shared_track": 0.028472321000208467, + "tests/test_solver_worker.py::TestTrackPairExclusivity::test_claims_expire": 0.035988023999834695, + "tests/test_solver_worker.py::TestTrackPairExclusivity::test_detection_level_input_is_unaffected": 0.03687910999997257, + "tests/test_solver_worker.py::TestTrackPairExclusivity::test_disjoint_pairings_both_claim": 0.029753878999599692, + "tests/test_solver_worker.py::TestWorkerLoopResilience::test_poison_item_is_swallowed_counted_and_loop_continues": 0.087524558000041, + "tests/test_stage2_durability.py::TestArchiveBufferReclamation::test_a_successful_write_clears_the_failure_clock": 0.030357190000813716, + "tests/test_stage2_durability.py::TestArchiveBufferReclamation::test_connected_node_keeps_its_frames_however_long_the_outage": 0.028950107999662578, + "tests/test_stage2_durability.py::TestArchiveBufferReclamation::test_departed_node_buffer_is_abandoned_after_the_ttl": 0.026414384999952745, + "tests/test_stage2_durability.py::TestArchiveFlushExclusivity::test_concurrent_flushes_neither_duplicate_nor_lose_frames": 0.19950620999998137, + "tests/test_stage2_durability.py::TestArchiveFlushExclusivity::test_inflight_marker_is_cleared_on_write_failure": 0.032116911000230175, + "tests/test_stage2_durability.py::TestSnapshotAtomicity::test_corrupt_payload_is_rejected": 0.026015893000021606, + "tests/test_stage2_durability.py::TestSnapshotAtomicity::test_legacy_bare_payload_still_restores": 0.02717937500028711, + "tests/test_stage2_durability.py::TestSnapshotAtomicity::test_payload_and_checksum_are_one_file": 0.02799178699933691, + "tests/test_stage2_durability.py::TestSnapshotAtomicity::test_round_trip_restores": 0.0289329189995442, + "tests/test_stage2_durability.py::TestSnapshotAtomicity::test_stale_side_file_is_ignored": 0.02652224200028286, + "tests/test_start_script_guards.py::test_a_box_with_no_destination_is_not_also_told_about_the_token[staging]": 0.07248922100006894, + "tests/test_start_script_guards.py::test_a_box_with_no_destination_is_not_also_told_about_the_token[test]": 0.0702516000005744, + "tests/test_start_script_guards.py::test_a_missing_digitalocean_token_never_refuses_a_boot[production]": 0.0695089719997668, + "tests/test_start_script_guards.py::test_a_missing_digitalocean_token_never_refuses_a_boot[staging]": 0.06933571699983077, + "tests/test_start_script_guards.py::test_production_boots_when_both_are_set": 0.06854711400046654, + "tests/test_start_script_guards.py::test_production_refuses_to_boot_without_an_alert_destination[ALERT_WEBHOOK_AUTH]": 0.06427127799997834, + "tests/test_start_script_guards.py::test_production_refuses_to_boot_without_an_alert_destination[ALERT_WEBHOOK_URL]": 0.06353572499983784, + "tests/test_start_script_guards.py::test_production_treats_an_empty_or_blank_value_as_absent[ALERT_WEBHOOK_AUTH- ]": 0.06651983400024619, + "tests/test_start_script_guards.py::test_production_treats_an_empty_or_blank_value_as_absent[ALERT_WEBHOOK_AUTH-]": 0.068112924000161, + "tests/test_start_script_guards.py::test_production_treats_an_empty_or_blank_value_as_absent[ALERT_WEBHOOK_URL- ]": 0.08752404300003036, + "tests/test_start_script_guards.py::test_production_treats_an_empty_or_blank_value_as_absent[ALERT_WEBHOOK_URL-]": 0.06723687600060657, + "tests/test_start_script_guards.py::test_the_other_environments_warn_about_a_destination_they_cannot_authenticate[staging- ]": 0.06356200100026399, + "tests/test_start_script_guards.py::test_the_other_environments_warn_about_a_destination_they_cannot_authenticate[staging-]": 0.0646113510001669, + "tests/test_start_script_guards.py::test_the_other_environments_warn_about_a_destination_they_cannot_authenticate[test- ]": 0.07098551299941391, + "tests/test_start_script_guards.py::test_the_other_environments_warn_about_a_destination_they_cannot_authenticate[test-]": 0.0645005109995509, + "tests/test_start_script_guards.py::test_the_other_environments_warn_rather_than_refuse[staging]": 0.07355463499970938, + "tests/test_start_script_guards.py::test_the_other_environments_warn_rather_than_refuse[test]": 0.06888623899976665, + "tests/test_state_counters.py::test_reset_zeroes_every_counter_and_keeps_its_type": 0.0269249480002145, + "tests/test_state_counters.py::test_roster_covers_every_counter_declared_in_the_source": 0.48866176199999245, + "tests/test_state_snapshot.py::TestSimulationConfigPersistence::test_env_change_since_snapshot_beats_saved_config": 0.024561783000535797, + "tests/test_state_snapshot.py::TestSimulationConfigPersistence::test_fractions_and_counts_survive_round_trip": 0.03337399599968194, + "tests/test_state_snapshot.py::TestSimulationConfigPersistence::test_pre_env_snapshot_discarded_when_env_overrides": 0.023752528000841266, + "tests/test_state_snapshot.py::TestSimulationConfigPersistence::test_pre_env_snapshot_restores_when_env_is_default": 0.024217672999839124, + "tests/test_state_snapshot.py::TestSimulationConfigPersistence::test_retired_keys_are_not_resurrected": 0.030283307999980025, + "tests/test_state_snapshot.py::TestSimulationConfigPersistence::test_scene_keys_survive_round_trip": 0.028567653999743925, + "tests/test_state_snapshot.py::TestSimulationConfigPersistence::test_unchanged_env_lets_runtime_put_win": 0.0257797379999829, + "tests/test_state_snapshot.py::TestSimulationConfigPersistence::test_updated_at_restored_verbatim_not_restamped": 0.027988582000034512, + "tests/test_state_snapshot.py::TestSimulationEnvSeeding::test_env_values_are_read": 0.02438566399996489, + "tests/test_state_snapshot.py::TestSimulationEnvSeeding::test_garbage_value_falls_back_without_raising": 0.023974885999905382, + "tests/test_state_snapshot.py::TestSimulationEnvSeeding::test_out_of_range_value_falls_back": 0.025414663000447035, + "tests/test_state_snapshot.py::TestSimulationEnvSeeding::test_over_budget_mix_is_refused_whole": 0.024603369000033126, + "tests/test_state_snapshot.py::TestSimulationEnvSeeding::test_unset_env_uses_fallbacks": 0.02762328599965258, + "tests/test_state_snapshot.py::TestSnapshotEdgeCases::test_full_round_trip_with_all_fields": 0.030675790999794117, + "tests/test_state_snapshot.py::TestSnapshotEdgeCases::test_restore_handles_corrupted_json": 0.02910235699982877, + "tests/test_state_snapshot.py::TestSnapshotEdgeCases::test_restore_handles_empty_snapshot": 0.026529011000548053, + "tests/test_state_snapshot.py::TestSnapshotEdgeCases::test_restore_returns_false_when_no_file": 0.02661246099978598, + "tests/test_state_snapshot.py::TestSnapshotEdgeCases::test_save_uses_atomic_write": 0.028382871000303567, + "tests/test_state_snapshot.py::TestSnapshotRoundTrip::test_accuracy_samples_survive_round_trip": 0.02508502699993187, + "tests/test_state_snapshot.py::TestSnapshotRoundTrip::test_anomaly_log_survives_round_trip": 0.027439976000096067, + "tests/test_state_snapshot.py::TestSnapshotRoundTrip::test_chain_entries_survive_round_trip": 0.026733298000181094, + "tests/test_state_snapshot.py::TestSnapshotRoundTrip::test_reputations_survive_round_trip": 0.02851481400011835, + "tests/test_state_snapshot.py::TestSnapshotRoundTrip::test_trust_scores_survive_round_trip": 0.02680852799994682, + "tests/test_state_snapshot_r2.py::TestStateSnapshotR2::test_restore_falls_back_to_r2_when_local_missing": 0.1663067829999818, + "tests/test_state_snapshot_r2.py::TestStateSnapshotR2::test_restore_prefers_local_over_r2": 0.1756544819991177, + "tests/test_state_snapshot_r2.py::TestStateSnapshotR2::test_restore_returns_false_when_no_snapshot_anywhere": 0.1472434729998895, + "tests/test_state_snapshot_r2.py::TestStateSnapshotR2::test_restore_returns_false_when_r2_disabled_and_no_local": 0.02489867900021636, + "tests/test_state_snapshot_r2.py::TestStateSnapshotR2::test_restore_returns_false_when_r2_has_corrupt_json": 0.1786414130006051, + "tests/test_state_snapshot_r2.py::TestStateSnapshotR2::test_save_snapshot_atomic_no_tmp_file_left_behind": 0.14893248199996378, + "tests/test_state_snapshot_r2.py::TestStateSnapshotR2::test_save_snapshot_local_content_matches_r2": 0.18599825199953557, + "tests/test_state_snapshot_r2.py::TestStateSnapshotR2::test_save_snapshot_local_written_even_if_r2_fails": 0.14196122700013802, + "tests/test_state_snapshot_r2.py::TestStateSnapshotR2::test_save_snapshot_local_written_when_r2_disabled": 0.028364687000248523, + "tests/test_state_snapshot_r2.py::TestStateSnapshotR2::test_save_snapshot_replicates_to_r2": 0.6614187240002138, + "tests/test_storage.py::TestArchiveStorage::test_a_legacy_spelled_node_archives_its_real_position": 0.036563623999427364, + "tests/test_storage.py::TestArchiveStorage::test_archive_returns_key": 0.03146210900013102, + "tests/test_storage.py::TestArchiveStorage::test_list_finds_archived": 0.03007364300037807, + "tests/test_storage.py::TestArchiveStorage::test_path_traversal_blocked": 0.055973813999571576, + "tests/test_storage.py::TestArchiveStorage::test_read_archived_file": 0.032449403000100574, + "tests/test_storage_listing.py::TestListArchivedFiles::test_date_prefix_node_filter": 0.037829634999980044, + "tests/test_storage_listing.py::TestListArchivedFiles::test_date_prefix_nonexistent_returns_empty": 0.024015156000132265, + "tests/test_storage_listing.py::TestListArchivedFiles::test_date_prefix_pagination_offset": 0.02731961599965871, + "tests/test_storage_listing.py::TestListArchivedFiles::test_date_prefix_returns_files_in_range": 0.03389305000018794, + "tests/test_storage_listing.py::TestListArchivedFiles::test_date_prefix_sort_desc": 0.02684192099968641, + "tests/test_storage_listing.py::TestListArchivedFiles::test_file_entry_has_required_fields": 0.026162235000356304, + "tests/test_storage_listing.py::TestListArchivedFiles::test_no_date_prefix_missing_base_returns_empty": 0.024816031999762345, + "tests/test_storage_listing.py::TestListArchivedFiles::test_no_date_prefix_returns_files": 0.025848442000551586, + "tests/test_storage_refresh.py::TestBuildStorageResult::test_archive_mb_matches_bytes": 0.025223085999641626, + "tests/test_storage_refresh.py::TestBuildStorageResult::test_days_until_full_is_zero_when_no_write_rate": 0.023372685000140336, + "tests/test_storage_refresh.py::TestBuildStorageResult::test_per_node_write_rate_computed_from_first_seen_ts": 0.023975743999471888, + "tests/test_storage_refresh.py::TestBuildStorageResult::test_returns_json_bytes_with_required_keys": 0.02613776999987749, + "tests/test_storage_refresh.py::TestScanArchiveDirBytes::test_du_exception_triggers_fallback": 0.023125207000248338, + "tests/test_storage_refresh.py::TestScanArchiveDirBytes::test_node_day_entry_sets_per_node_bytes": 0.027130982000016957, + "tests/test_storage_refresh.py::TestScanArchiveDirBytes::test_root_line_sets_total_bytes": 0.024815367000428523, + "tests/test_storage_refresh.py::TestScanArchiveDirBytes::test_total_bytes_zero_falls_back_to_sum": 0.026791290999881312, + "tests/test_storage_refresh.py::TestScanArchiveDirInodes::test_inode_entry_sets_per_node_files": 0.02525320500080852, + "tests/test_storage_refresh.py::TestScanArchiveDirInodes::test_inode_root_line_sets_total_files": 0.024990789000185032, + "tests/test_storage_refresh.py::TestScanArchiveDirNonExistent::test_returns_zeros_when_dir_missing": 0.023657085000195366, + "tests/test_streaming_routes.py::TestAircraftWSInitialSnapshot::test_initial_snapshot_sent_if_aircraft_present": 0.1459334759997546, + "tests/test_streaming_routes.py::TestAircraftWSInitialSnapshot::test_no_initial_send_when_empty": 0.1504026019997582, + "tests/test_streaming_routes.py::TestLiveWebSocket::test_live_ws_accepts_no_token": 0.144549447999907, + "tests/test_streaming_routes.py::TestLiveWebSocket::test_live_ws_accepts_valid_token": 0.15110393599979943, + "tests/test_streaming_routes.py::TestLiveWebSocket::test_live_ws_rejects_invalid_token": 0.15090780400078074, + "tests/test_streaming_routes.py::TestLiveWebSocket::test_live_ws_sends_initial_snapshot": 0.15048279200027537, + "tests/test_task_executor.py::test_cancellation_waits_for_running_work": 0.04369983000015054, + "tests/test_task_executor.py::test_each_context_has_a_fresh_executor_and_propagates_work_errors": 0.026764621999973315, + "tests/test_task_executor.py::test_failed_executor_creation_does_not_prevent_retry": 0.027317805999700795, + "tests/test_task_executor.py::test_shutdown_deadline_reports_work_that_cannot_be_interrupted": 0.04362878700021611, + "tests/test_task_helpers.py::TestBistaticDelayUs::test_aircraft_off_path_has_positive_delay": 0.02846269800011214, + "tests/test_task_helpers.py::TestBistaticDelayUs::test_aircraft_on_direct_path_has_zero_delay": 0.026546594999217632, + "tests/test_task_helpers.py::TestBistaticDelayUs::test_delay_increases_with_distance": 0.02473929899997529, + "tests/test_task_helpers.py::TestBistaticDelayUs::test_delay_unit_is_microseconds": 0.02494014000012612, + "tests/test_task_helpers.py::TestHaversineKm::test_equator_one_degree_lon": 0.025840429000254517, + "tests/test_task_helpers.py::TestHaversineKm::test_known_city_pair": 0.02431487100011509, + "tests/test_task_helpers.py::TestHaversineKm::test_nonnegative": 0.02628510299973641, + "tests/test_task_helpers.py::TestHaversineKm::test_one_degree_lat": 0.024208871999690018, + "tests/test_task_helpers.py::TestHaversineKm::test_same_point_returns_zero": 0.031238381999628473, + "tests/test_task_helpers.py::TestHaversineKm::test_symmetry": 0.023821048999707273, + "tests/test_tcp_custody_protocol.py::TestChainEntry::test_chain_entry_appended_to_state": 0.027329450999786786, + "tests/test_tcp_custody_protocol.py::TestChainEntry::test_chain_entry_cap_enforced": 0.024577809999755118, + "tests/test_tcp_custody_protocol.py::TestChainEntry::test_chain_entry_sends_ack": 0.024806766000438074, + "tests/test_tcp_custody_protocol.py::TestChainEntry::test_chain_entry_unregistered_node_not_verified": 0.02619917299989538, + "tests/test_tcp_custody_protocol.py::TestIQCommitment::test_iq_commitment_appended_to_state": 0.024639467999804765, + "tests/test_tcp_custody_protocol.py::TestIQCommitment::test_iq_commitment_cap_enforced": 0.02957371200000125, + "tests/test_tcp_custody_protocol.py::TestIQCommitment::test_iq_commitment_sends_ack": 0.025651171999925282, + "tests/test_tcp_custody_protocol.py::TestRegisterKey::test_register_key_sends_key_ack": 0.02647706500010827, + "tests/test_tcp_custody_protocol.py::TestRegisterKey::test_register_key_stores_identity": 0.02558089300055144, + "tests/test_tcp_custody_protocol.py::TestRegisterKey::test_register_key_with_custom_signing_mode": 0.025290103000315867, + "tests/test_tcp_handler.py::TestApplySyntheticAdsb::test_no_adsb_field_is_noop": 0.024296315000356117, + "tests/test_tcp_handler.py::TestApplySyntheticAdsb::test_skips_invalid_entries": 0.0272366050007804, + "tests/test_tcp_handler.py::TestApplySyntheticAdsb::test_stores_adsb_positions": 0.025464322000516404, + "tests/test_tcp_handler.py::TestConfigReplacementEvictsCachedPipeline::test_a_reconnect_config_rebuilds_the_pipeline_with_the_new_geometry": 0.047628780999730225, + "tests/test_tcp_handler.py::TestEnqueueDetection::test_enqueue_no_timestamp_skipped": 0.0247495470002832, + "tests/test_tcp_handler.py::TestEnqueueDetection::test_enqueue_valid_detection": 0.026092024999798014, + "tests/test_tcp_handler.py::TestHandshake::test_config_ack_sent": 0.02614562000053411, + "tests/test_tcp_handler.py::TestHandshake::test_disconnection_marks_status": 0.026371477999873605, + "tests/test_tcp_handler.py::TestHandshake::test_hello_config_registers_node": 0.032034674999522395, + "tests/test_tcp_handler.py::TestHandshake::test_malformed_json_skipped": 0.02652833499951157, + "tests/test_tcp_handler.py::TestHandshake::test_synthetic_node_flag": 0.027915471000142134, + "tests/test_tcp_handler.py::TestHandshake::test_the_stored_config_is_canonical": 0.03335465000009208, + "tests/test_tcp_handler.py::TestIsSyntheticNode::test_a_hardware_node_id": 0.026055318000089756, + "tests/test_tcp_handler.py::TestIsSyntheticNode::test_e2e_prefix": 0.029085163000672765, + "tests/test_tcp_handler.py::TestIsSyntheticNode::test_empty": 0.026205353000023024, + "tests/test_tcp_handler.py::TestIsSyntheticNode::test_non_synthetic": 0.026323170000068785, + "tests/test_tcp_handler.py::TestIsSyntheticNode::test_realnode_prefix": 0.023851927000123396, + "tests/test_tcp_handler.py::TestIsSyntheticNode::test_synthetic_prefix": 0.024942151000232116, + "tests/test_tcp_handler.py::TestIsSyntheticNode::test_test_prefix": 0.025727490999997826, + "tests/test_tcp_heartbeat.py::TestTCPHeartbeat::test_heartbeat_config_drift_preserves_node_registration": 0.034183106999535084, + "tests/test_tcp_heartbeat.py::TestTCPHeartbeat::test_heartbeat_config_drift_sends_config_request": 0.036203049000505416, + "tests/test_tcp_heartbeat.py::TestTCPHeartbeat::test_heartbeat_for_unknown_node_is_silently_ignored": 0.030239117999826703, + "tests/test_tcp_heartbeat.py::TestTCPHeartbeat::test_heartbeat_no_config_drift_sends_no_config_request": 0.028394630000548204, + "tests/test_tcp_heartbeat.py::TestTCPHeartbeat::test_heartbeat_records_in_analytics": 0.029760150999663892, + "tests/test_tcp_heartbeat.py::TestTCPHeartbeat::test_heartbeat_updates_last_heartbeat": 0.029844488999970054, + "tests/test_tcp_heartbeat.py::TestTCPHeartbeat::test_heartbeat_updates_node_status": 0.026316012000279443, + "tests/test_tcp_validate_config.py::TestBeamWidthValidation::test_beam_width_exceeds_upper_bound": 0.1143254770004205, + "tests/test_tcp_validate_config.py::TestBeamWidthValidation::test_beam_width_list_type": 0.06956126400018547, + "tests/test_tcp_validate_config.py::TestBeamWidthValidation::test_beam_width_negative": 0.08748639200030084, + "tests/test_tcp_validate_config.py::TestBeamWidthValidation::test_beam_width_non_numeric_string": 0.046684257999913825, + "tests/test_tcp_validate_config.py::TestBeamWidthValidation::test_beam_width_zero": 0.06540933799988125, + "tests/test_tcp_validate_config.py::TestEdgeCases::test_exact_boundary_values": 0.05846112599965636, + "tests/test_tcp_validate_config.py::TestEdgeCases::test_extra_fields_ignored": 0.05929740200008382, + "tests/test_tcp_validate_config.py::TestEdgeCases::test_floats_with_many_decimals": 0.07561754400012433, + "tests/test_tcp_validate_config.py::TestEdgeCases::test_large_valid_max_range": 0.07587587599982726, + "tests/test_tcp_validate_config.py::TestEdgeCases::test_lat_lon_as_integers": 0.0485162360000686, + "tests/test_tcp_validate_config.py::TestEdgeCases::test_rx_lat_out_of_range_ignores_valid_flat": 0.06568766000009418, + "tests/test_tcp_validate_config.py::TestEdgeCases::test_rx_variants_take_precedence_over_flat": 0.08702297299942074, + "tests/test_tcp_validate_config.py::TestEdgeCases::test_scientific_notation_lat_lon": 0.07893211700002212, + "tests/test_tcp_validate_config.py::TestEdgeCases::test_very_small_positive_beam_width": 0.11654814500025168, + "tests/test_tcp_validate_config.py::TestEdgeCases::test_very_small_positive_max_range": 0.12766497799975696, + "tests/test_tcp_validate_config.py::TestExplicitNullIsPositionless::test_explicit_null_rx_lat_rx_lon_is_accepted": 0.07566713500000333, + "tests/test_tcp_validate_config.py::TestExplicitNullIsPositionless::test_flat_lat_lon_null_is_not_treated_as_positionless": 0.08477345300025263, + "tests/test_tcp_validate_config.py::TestExplicitNullIsPositionless::test_other_fields_are_still_validated": 0.1536911909997798, + "tests/test_tcp_validate_config.py::TestExplicitNullIsPositionless::test_rx_lat_null_alone_is_still_missing": 0.08902656899954309, + "tests/test_tcp_validate_config.py::TestMaxRangeKmValidation::test_max_range_negative": 0.05370142300034786, + "tests/test_tcp_validate_config.py::TestMaxRangeKmValidation::test_max_range_non_numeric_string": 0.07600514099976863, + "tests/test_tcp_validate_config.py::TestMaxRangeKmValidation::test_max_range_zero": 0.12866273100007675, + "tests/test_tcp_validate_config.py::TestMissingLatLon::test_empty_config": 0.05769392400043216, + "tests/test_tcp_validate_config.py::TestMissingLatLon::test_neither_lat_lon_nor_rx_variants_present": 0.059837230000084674, + "tests/test_tcp_validate_config.py::TestMissingLatLon::test_only_lat_present": 0.07538173299963091, + "tests/test_tcp_validate_config.py::TestMissingLatLon::test_only_lon_present": 0.05884633899995606, + "tests/test_tcp_validate_config.py::TestMissingLatLon::test_only_rx_lat_present": 0.05404917299983936, + "tests/test_tcp_validate_config.py::TestMissingLatLon::test_only_rx_lon_present": 0.05929452400005175, + "tests/test_tcp_validate_config.py::TestNonNumericLatLon::test_both_non_numeric": 0.05242975900046076, + "tests/test_tcp_validate_config.py::TestNonNumericLatLon::test_lat_non_numeric_string": 0.04278591399997822, + "tests/test_tcp_validate_config.py::TestNonNumericLatLon::test_lon_list_type": 0.0595703889998731, + "tests/test_tcp_validate_config.py::TestNonNumericLatLon::test_rx_lat_string_non_numeric": 0.08822255199993378, + "tests/test_tcp_validate_config.py::TestNonNumericLatLon::test_rx_lon_string_non_numeric": 0.07222667399946658, + "tests/test_tcp_validate_config.py::TestOptionalFieldsAbsent::test_beam_width_none_explicitly": 0.047803982999539585, + "tests/test_tcp_validate_config.py::TestOptionalFieldsAbsent::test_both_optional_fields_none": 0.06936722800037387, + "tests/test_tcp_validate_config.py::TestOptionalFieldsAbsent::test_max_range_none_explicitly": 0.052408145999379485, + "tests/test_tcp_validate_config.py::TestOptionalFieldsAbsent::test_no_beam_width_no_max_range": 0.05677950099970985, + "tests/test_tcp_validate_config.py::TestOutOfRangeLatLon::test_both_out_of_range": 0.05807553000022381, + "tests/test_tcp_validate_config.py::TestOutOfRangeLatLon::test_lat_exceeds_lower_bound": 0.05813617300009355, + "tests/test_tcp_validate_config.py::TestOutOfRangeLatLon::test_lat_exceeds_upper_bound": 0.09125788500023191, + "tests/test_tcp_validate_config.py::TestOutOfRangeLatLon::test_lon_exceeds_lower_bound": 0.05085495799994533, + "tests/test_tcp_validate_config.py::TestOutOfRangeLatLon::test_lon_exceeds_upper_bound": 0.05609887799982971, + "tests/test_tcp_validate_config.py::TestStringNumberConversion::test_beam_width_as_numeric_string": 0.04412111100009497, + "tests/test_tcp_validate_config.py::TestStringNumberConversion::test_lat_as_integer_string": 0.06661295300000347, + "tests/test_tcp_validate_config.py::TestStringNumberConversion::test_lat_lon_as_numeric_strings": 0.04331745799981945, + "tests/test_tcp_validate_config.py::TestStringNumberConversion::test_max_range_as_numeric_string": 0.0643589050000628, + "tests/test_tcp_validate_config.py::TestValidNodeConfigHappyPath::test_valid_beam_width_at_boundary_360": 0.033142781000151444, + "tests/test_tcp_validate_config.py::TestValidNodeConfigHappyPath::test_valid_beam_width_near_lower_boundary": 0.034218551000321895, + "tests/test_tcp_validate_config.py::TestValidNodeConfigHappyPath::test_valid_config_with_beam_width_deg": 0.03087929899993469, + "tests/test_tcp_validate_config.py::TestValidNodeConfigHappyPath::test_valid_config_with_both_optional_fields": 0.03027507799970408, + "tests/test_tcp_validate_config.py::TestValidNodeConfigHappyPath::test_valid_config_with_lat_lon": 0.030000105999533844, + "tests/test_tcp_validate_config.py::TestValidNodeConfigHappyPath::test_valid_config_with_max_range_km": 0.028641879999668163, + "tests/test_tcp_validate_config.py::TestValidNodeConfigHappyPath::test_valid_config_with_rx_lat_rx_lon": 0.029238155000257393, + "tests/test_tcp_validate_config.py::TestValidNodeConfigHappyPath::test_valid_lat_lon_boundaries": 0.08329636199960078, + "tests/test_tcp_validate_config.py::TestValidNodeConfigHappyPath::test_valid_lat_lon_negative_boundaries": 0.0670433850000336, + "tests/test_towers_vhost_coverage.py::test_no_exact_match_location_outranks_the_proxied_paths": 0.0417532910000773, + "tests/test_towers_vhost_coverage.py::test_the_shared_snippet_proxies_every_deduplicated_path": 0.048094098000092345, + "tests/test_towers_vhost_coverage.py::test_the_smoke_test_defines_every_url_it_is_expected_to_probe": 0.04907290900018779, + "tests/test_towers_vhost_coverage.py::test_the_smoke_test_probes_every_routed_vhost": 0.054365129999496276, + "tests/test_towers_vhost_coverage.py::test_the_template_routes_the_roles_we_think_it_does": 0.09093205799990756, + "tests/test_track_archive.py::test_directory_failure_retains_batch": 0.11482047500021508, + "tests/test_track_archive.py::test_failed_flush_does_not_advance_success_health": 0.052809589999924356, + "tests/test_track_archive.py::test_repeated_failures_do_not_grow_pending_batch": 0.0775535799998579, + "tests/test_track_archive.py::test_write_failure_retries_old_batch_before_new_records": 0.06345232600006057, + "tests/test_track_claim.py::TestClusterCoverage::test_only_the_first_pair_of_a_cluster_is_claimed": 0.09138213600044764, + "tests/test_track_claim.py::TestCompetition::test_a_better_competitor_takes_the_track": 0.06700605400010318, + "tests/test_track_claim.py::TestCompetition::test_a_detection_level_input_is_not_arbitrated": 0.05957158899991555, + "tests/test_track_claim.py::TestCompetition::test_a_worse_competitor_is_refused": 0.05457031099967935, + "tests/test_track_claim.py::TestCompetition::test_an_unclaimed_pairing_wins": 0.05571242299993173, + "tests/test_track_claim.py::TestCompetition::test_disjoint_pairings_do_not_contend": 0.0638870090006094, + "tests/test_track_claim.py::TestExpiry::test_a_claim_expires": 0.12352954800007865, + "tests/test_track_claim.py::TestExpiry::test_expiry_sweeps_every_stale_entry": 0.08743310500040025, + "tests/test_track_claim.py::TestSelfContention::test_a_drifting_rescore_loses_to_its_own_high_water_mark": 0.11280433799993261, + "tests/test_track_claim.py::TestSelfContention::test_an_identical_rescore_keeps_its_claim": 0.07075748899933387, + "tests/test_track_claim.py::TestSelfContention::test_the_high_water_mark_is_not_reset_by_a_refusal": 0.08207636899987847, + "tests/test_track_filter.py::TestEnuRoundTrip::test_round_trip_within_1e9_deg[-33.9-151.2-8432.1--2001.7]": 0.12083359499956714, + "tests/test_track_filter.py::TestEnuRoundTrip::test_round_trip_within_1e9_deg[0.0-0.0-50000.0--50000.0]": 0.10281075500006409, + "tests/test_track_filter.py::TestEnuRoundTrip::test_round_trip_within_1e9_deg[35.0--82.0-0.0-0.0]": 0.09005232599974988, + "tests/test_track_filter.py::TestEnuRoundTrip::test_round_trip_within_1e9_deg[35.0--82.0-1234.5--876.3]": 0.1037512049997531, + "tests/test_track_filter.py::TestEnuRoundTrip::test_round_trip_within_1e9_deg[65.0-178.0--12000.0-30000.0]": 0.10616634800044267, + "tests/test_track_filter.py::TestHeldSameEpochPassthrough::test_a_burst_right_after_init_holds_the_init_position": 0.15139234700063753, + "tests/test_track_filter.py::TestHeldSameEpochPassthrough::test_same_epoch_second_solve_keeps_the_published_position": 0.145559783999488, + "tests/test_track_filter.py::TestIndefiniteCovariance::test_a_correlated_but_psd_cov_is_still_accepted": 0.13102783500016812, + "tests/test_track_filter.py::TestIndefiniteCovariance::test_indefinite_cov_falls_back_to_the_base_floor": 0.13741265599946928, + "tests/test_track_filter.py::TestIndefiniteCovariance::test_indefinite_cov_keeps_the_filter_psd_and_learned_velocity_alive[1.4]": 0.3647701570002937, + "tests/test_track_filter.py::TestIndefiniteCovariance::test_indefinite_cov_keeps_the_filter_psd_and_learned_velocity_alive[20.0]": 0.44127742599994235, + "tests/test_track_filter.py::TestIndefiniteCovariance::test_negative_velocity_variance_degrades_to_zero_sigma": 0.1354211650000252, + "tests/test_track_filter.py::TestIndefiniteCovariance::test_repeated_updates_at_a_tiny_r_stay_psd": 0.35422946999960914, + "tests/test_track_filter.py::TestIndefiniteCovariance::test_tiny_position_sigma_cannot_produce_a_tight_r": 0.14576327599979777, + "tests/test_track_filter.py::TestJosephCovariance::test_repeated_ill_conditioned_updates_stay_psd_and_symmetric": 0.15383821700015687, + "tests/test_track_filter.py::TestKFBasics::test_drop_key_and_reset_clear_state": 0.11378247699985877, + "tests/test_track_filter.py::TestKFBasics::test_duplicate_and_out_of_order_hold_the_filter_position": 0.11972852299959413, + "tests/test_track_filter.py::TestKFBasics::test_first_solve_is_raw_passthrough": 0.11529179499984821, + "tests/test_track_filter.py::TestKFBasics::test_innovation_gate_reanchors_on_large_jump": 0.08079937999991671, + "tests/test_track_filter.py::TestKFBasics::test_large_gap_reinits_then_next_solve_behaves_like_second_ever": 0.10648605599999428, + "tests/test_track_filter.py::TestKFBasics::test_smoothed_output_shape": 0.13812426499998764, + "tests/test_track_filter.py::TestKFReducesError::test_filtered_rmse_beats_raw_by_20_percent": 0.46616147399981855, + "tests/test_track_filter.py::TestKFWeighting::test_adsb_velocity_preferred_over_solved": 0.10576593399991907, + "tests/test_track_filter.py::TestKFWeighting::test_junk_solved_velocity_does_not_drag_position": 0.09594036199996481, + "tests/test_track_filter.py::TestKFWeighting::test_tight_covariance_trusts_measurement_more_than_loose": 0.10472338599947761, + "tests/test_track_filter.py::TestKfActionStamp::test_a_manoeuvre_rescue_is_stamped_as_such": 0.19745100599993748, + "tests/test_track_filter.py::TestKfActionStamp::test_a_reanchor_is_stamped_with_the_breaching_innovation": 0.13445270099964546, + "tests/test_track_filter.py::TestKfActionStamp::test_off_and_ewma_modes_do_not_stamp": 0.11917281800015189, + "tests/test_track_filter.py::TestKfActionStamp::test_stamped_on_every_path": 0.14494844999990164, + "tests/test_track_filter.py::TestLearnedVelocity::test_drop_key_and_reset_clear_learned_velocity": 0.12687326800005394, + "tests/test_track_filter.py::TestLearnedVelocity::test_learns_velocity_from_position_sequence_not_init_prior": 0.1796896559999368, + "tests/test_track_filter.py::TestLearnedVelocity::test_unknown_key_returns_none": 0.1320258690002447, + "tests/test_track_filter.py::TestManoeuvreAdaptiveQ::test_a_breach_inside_the_manoeuvre_envelope_is_rescued_not_reanchored": 0.1403527939992273, + "tests/test_track_filter.py::TestManoeuvreAdaptiveQ::test_a_ten_kilometre_jump_still_reanchors": 0.2093728319996444, + "tests/test_track_filter.py::TestManoeuvreAdaptiveQ::test_manoeuvre_engagement_decays_after_the_turn": 0.13688444299987168, + "tests/test_track_filter.py::TestManoeuvreAdaptiveQ::test_standard_rate_turn_does_not_reanchor[12.0]": 0.12594326099997488, + "tests/test_track_filter.py::TestManoeuvreAdaptiveQ::test_standard_rate_turn_does_not_reanchor[4.6]": 0.11682889700023225, + "tests/test_track_filter.py::TestManoeuvreAdaptiveQ::test_straight_flight_never_engages_the_manoeuvre_path": 0.2246297289998438, + "tests/test_track_filter.py::TestManoeuvreAdaptiveQ::test_the_reported_velocity_sigma_grows_while_manoeuvring": 0.1602369630004432, + "tests/test_track_filter.py::TestManoeuvreAdaptiveQ::test_the_same_turn_reanchors_with_the_adaptive_path_disabled": 0.15378732199997103, + "tests/test_track_filter.py::TestManoeuvreLevelAccessor::test_a_turn_engages_the_level": 0.11897555299992746, + "tests/test_track_filter.py::TestManoeuvreLevelAccessor::test_straight_flight_reads_zero": 0.1335437899997487, + "tests/test_track_filter.py::TestManoeuvreLevelAccessor::test_the_combined_accessor_agrees_with_both_halves": 0.12173665799991795, + "tests/test_track_filter.py::TestManoeuvreLevelAccessor::test_the_level_goes_with_the_entry": 0.12382064800021908, + "tests/test_track_filter.py::TestManoeuvreLevelAccessor::test_unknown_key_returns_none": 0.12487084299982598, + "tests/test_track_filter.py::TestModes::test_ewma_delegates_to_supplied_fn": 0.09105037500012259, + "tests/test_track_filter.py::TestModes::test_ewma_without_fn_is_raw_passthrough": 0.11401126200053113, + "tests/test_track_filter.py::TestModes::test_off_is_raw_passthrough": 0.12032467400013047, + "tests/test_track_filter.py::TestModes::test_unknown_value_falls_back_to_kf": 0.16561120599999413, + "tests/test_track_filter.py::TestN2WeakUpdate::test_adsb_identified_n2_keeps_the_default_sigma": 0.20861469400051647, + "tests/test_track_filter.py::TestN2WeakUpdate::test_default_n2_sigma": 0.1024724799995056, + "tests/test_track_filter.py::TestN2WeakUpdate::test_n2_moves_the_state_less_than_n4": 0.131509222999739, + "tests/test_track_filter.py::TestN2WeakUpdate::test_n2_sigma_is_tunable": 0.12973860599959153, + "tests/test_track_filter.py::TestN2WeakUpdate::test_n3_and_above_keep_the_default_sigma": 0.13333100900035788, + "tests/test_track_filter.py::TestN2WeakUpdate::test_simulator_object_id_is_judged_dark": 0.10761016700007531, + "tests/test_track_filter.py::TestOutcomeCounters::test_counters_track_each_outcome": 0.27392721900014294, + "tests/test_track_filter.py::TestOutcomeCounters::test_every_call_increments_exactly_one_counter": 0.17305286200007686, + "tests/test_track_filter.py::TestOutcomeCounters::test_off_and_ewma_modes_count_nothing": 0.1145483229997808, + "tests/test_track_filter.py::TestOutcomeCounters::test_reset_clears_the_counters": 0.1411750260003828, + "tests/test_track_filter.py::TestPoisonedCovariance::test_negative_covariance_diagonal_never_raises": 0.1516444760000013, + "tests/test_track_filter.py::TestRInflation::test_cov_derived_r_is_inflated_and_added_to_base_then_clamped": 0.2013659400004144, + "tests/test_track_filter.py::TestRInflation::test_fallback_r_is_exactly_the_base_floor": 0.10158135899973786, + "tests/test_track_filter.py::TestStoneSoupOracle::test_matches_stonesoup_kalman_at_every_step": 0.1019240880000325, + "tests/test_track_gates.py::TestDetectionIdentityGate::test_mismatched_detection_tag_records_neither": 0.1913449729995591, + "tests/test_track_gates.py::TestDetectionIdentityGate::test_tag_comparison_is_case_insensitive": 0.15773557500051538, + "tests/test_track_gates.py::TestDetectionIdentityGate::test_untagged_detection_records_neither": 0.35939793900024597, + "tests/test_track_gates.py::TestFixDetectionSkewGate::test_a_matching_fix_and_detection_age_still_records": 0.29130373499992857, + "tests/test_track_gates.py::TestFixDetectionSkewGate::test_a_track_coasting_past_its_detection_with_a_live_fix_records_nothing": 0.1884526270000606, + "tests/test_track_gates.py::TestFixDetectionSkewGate::test_emit_path_forwards_fix_ts_and_detection_ts": 0.293287648000387, + "tests/test_track_gates.py::TestFixDetectionSkewGate::test_record_verified_detection_is_not_called_when_the_recorder_returns_zero": 0.22976876800021273, + "tests/test_track_gates.py::TestFreshDetectionRecordsCalibration::test_fewer_than_three_detections_records_neither": 0.23608371899945269, + "tests/test_track_gates.py::TestFreshDetectionRecordsCalibration::test_fresh_stamp_and_n_detections_records_calibration_and_verified_detection": 0.1924558750001779, + "tests/test_track_gates.py::TestFreshDetectionRecordsCalibration::test_missing_last_detection_wall_ts_treated_as_never_fresh": 0.44026239400045597, + "tests/test_track_gates.py::TestFreshDetectionRecordsCalibration::test_stamp_aged_past_the_budget_records_neither_but_still_emits_and_still_scores_accuracy": 0.13593524299949422, + "tests/test_track_gates.py::TestFreshDetectionRecordsCalibration::test_stamp_exactly_at_the_budget_still_counts": 0.28714246900017315, + "tests/test_track_gates.py::TestGateStoreReclamation::test_prune_does_not_touch_entries_inside_the_gate_window": 0.1724083539993444, + "tests/test_track_gates.py::TestGateStoreReclamation::test_stale_entries_are_pruned_and_fresh_ones_kept": 0.23150841599999694, + "tests/test_track_gates.py::TestKnownLaneSilencesThisPath::test_a_fresh_tagged_detection_records_nothing[binding]": 0.13007286300035048, + "tests/test_track_gates.py::TestKnownLaneSilencesThisPath::test_a_fresh_tagged_detection_records_nothing[shadow]": 0.1241868379997868, + "tests/test_track_gates.py::TestKnownLaneSilencesThisPath::test_mode_off_is_unchanged": 0.2714662020002834, + "tests/test_track_gates.py::TestUnassociatedEntryHonesty::test_adsb_backed_track_keeps_altitude_and_identity": 0.40769106200013994, + "tests/test_track_gates.py::TestUnassociatedEntryHonesty::test_unassociated_track_publishes_no_altitude_or_callsign": 0.1432191049998437, + "tests/test_track_writer.py::test_batches_written_in_same_second_are_both_retained": 0.20007060399984766, + "tests/test_track_writer.py::test_contributing_nodes_serialized_as_csv": 0.2050030450000122, + "tests/test_track_writer.py::test_empty_records_returns_none": 0.11470432700025412, + "tests/test_track_writer.py::test_failed_write_never_publishes_partial_parquet": 0.13667272699967725, + "tests/test_track_writer.py::test_flush_track_archive_buffer_drains_state": 0.148670463999224, + "tests/test_track_writer.py::test_flush_track_archive_buffer_no_op_when_empty": 0.1253343670000504, + "tests/test_track_writer.py::test_nullable_fields_round_trip": 0.2001803369994377, + "tests/test_track_writer.py::test_schema_columns_present": 0.1490923840005962, + "tests/test_track_writer.py::test_solver_hook_appends_to_track_archive_buffer": 0.1521435160002511, + "tests/test_track_writer.py::test_writes_hive_partitioned_path": 0.13720025299971894, + "tests/test_tracker_env_overrides.py::TestApplyTrackerEnvOverrides::test_missing_process_noise_section_is_created": 0.1759714290001284, + "tests/test_tracker_env_overrides.py::TestApplyTrackerEnvOverrides::test_no_env_leaves_config_untouched": 0.13335343199923955, + "tests/test_tracker_env_overrides.py::TestApplyTrackerEnvOverrides::test_null_process_noise_section_is_replaced": 0.14119747299992014, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_delay_override_reaches_the_filter": 0.16526210599977276, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_doppler_override_reaches_the_filter": 0.1485672529997828, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_invalid_values_are_ignored_with_a_warning[ ]": 0.1694457489998058, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_invalid_values_are_ignored_with_a_warning[-3]": 0.16315235699994446, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_invalid_values_are_ignored_with_a_warning[0]": 0.17208282399997188, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_invalid_values_are_ignored_with_a_warning[]": 0.23532182100007049, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_invalid_values_are_ignored_with_a_warning[abc]": 0.20489887800067663, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_invalid_values_are_ignored_with_a_warning[inf]": 0.278558270999838, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_invalid_values_are_ignored_with_a_warning[nan]": 0.14213590300005308, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_logged_once_per_process": 0.24924234500031162, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_no_env_keeps_packaged_defaults": 0.21526926600063234, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_no_override_without_a_packaged_config_leaves_singleton": 0.1405821600001218, + "tests/test_tracker_env_overrides.py::TestPipelineProcessNoise::test_override_applies_without_a_packaged_config": 0.16016862800051967, + "tests/test_unblock_nodes.py::test_a_corrupt_snapshot_is_refused_unless_forced": 0.10266042900002503, + "tests/test_unblock_nodes.py::test_a_legacy_schema_1_snapshot_is_upgraded": 0.18801522100011425, + "tests/test_unblock_nodes.py::test_a_missing_snapshot_exits_non_zero": 0.10925821700038796, + "tests/test_unblock_nodes.py::test_a_named_node_is_reset_and_the_rest_are_untouched": 0.13471845599997323, + "tests/test_unblock_nodes.py::test_all_blocked_resets_every_block_and_nothing_else": 0.11962133299948619, + "tests/test_unblock_nodes.py::test_an_unknown_node_exits_non_zero": 0.09449353699938001, + "tests/test_unblock_nodes.py::test_dry_run_writes_nothing": 0.19540006799979892, + "tests/test_unblock_nodes.py::test_selecting_nothing_is_an_error": 0.17886213300062082, + "tests/test_unblock_nodes.py::test_the_result_still_restores_as_a_NodeReputation": 0.11194892599951345, + "tests/test_unpositioned_registration.py::TestUnpositionedNodesStayOutOfTheGraph::test_a_fleet_registered_over_http_builds_no_overlap_zones": 0.30538353900010407, + "tests/test_unpositioned_registration.py::TestUnpositionedNodesStayOutOfTheGraph::test_a_positioned_fleet_still_pairs": 0.22026500099991608, + "tests/test_unpositioned_registration.py::TestUnpositionedNodesStayOutOfTheGraph::test_the_nodes_are_still_registered": 0.14088001200025246, + "tests/test_users_backup.py::TestUsersBackup::test_idempotent_within_same_day": 0.9038203220002288, + "tests/test_users_backup.py::TestUsersBackup::test_retention_drops_old_backups": 0.8005920130003688, + "tests/test_users_backup.py::TestUsersBackup::test_skipped_when_db_missing": 1.7381584279996787, + "tests/test_users_backup.py::TestUsersBackup::test_skipped_when_r2_disabled": 0.12075264999975843, + "tests/test_users_backup.py::TestUsersBackup::test_uploaded_blob_is_a_valid_sqlite_db": 0.7792776420005794, + "tests/test_users_backup.py::TestUsersBackup::test_uploads_today_backup": 0.775524151999889, + "tests/test_velocity_direction.py::TestDerivedVelocityError::test_heading_err_none_when_truth_near_hover": 0.08363563900002191, + "tests/test_velocity_direction.py::TestDerivedVelocityError::test_heading_err_wraps_across_0_360": 0.09425660800025071, + "tests/test_velocity_direction.py::TestDerivedVelocityError::test_vel_err_ms_on_perpendicular_case": 0.10130602899971564, + "tests/test_velocity_direction.py::TestNearestGtVelocity::test_no_gt_returns_all_four_keys_none": 0.10409427199965648, + "tests/test_velocity_direction.py::TestNearestGtVelocity::test_single_point_trail_falls_back_to_meta": 0.08708247200002006, + "tests/test_velocity_direction.py::TestNearestGtVelocity::test_speed_and_heading_derived_from_straight_trail": 0.11184015400067437, + "tests/test_velocity_direction.py::TestVelocityAccuracyDirection::test_heading_and_vector_stats_on_a_perpendicular_track": 0.10038393800050471, + "tests/test_velocity_direction.py::TestVelocityAdoptionN2SharesPoolCall::test_gate_and_adoption_share_one_pool_call": 0.09813860600024782, + "tests/test_velocity_direction.py::TestVelocityAdoptionN3::test_good_fit_is_adopted_and_recorded": 0.11832540200020958, + "tests/test_velocity_direction.py::TestVelocityAdoptionRejectionFallbacks::test_chi2_above_adoption_threshold_keeps_raw_velocity": 0.09996248799961904, + "tests/test_velocity_direction.py::TestVelocityAdoptionRejectionFallbacks::test_fit_raises_keeps_raw_velocity": 0.12567756099997496, + "tests/test_velocity_direction.py::TestVelocityAdoptionRejectionFallbacks::test_fit_returns_none_keeps_raw_velocity": 0.10995926999976291, + "tests/test_velocity_direction.py::TestVelocityAdoptionRejectionFallbacks::test_too_few_epochs_keeps_raw_velocity": 0.09994239199977528, + "tests/test_wgs84_equivalence.py::TestEcefLlaAgreement::test_lla2ecef_agrees_across_libraries": 0.09950815599995622, + "tests/test_wgs84_equivalence.py::TestEcefLlaAgreement::test_round_trip_agrees_across_libraries": 0.18008343100018465, + "tests/test_wgs84_equivalence.py::TestSpeedOfLightSingleSource::test_analytics_agrees": 0.11070013700054915, + "tests/test_wgs84_equivalence.py::TestSpeedOfLightSingleSource::test_geolocator_constants_are_consistent": 0.1152681839998877, + "tests/test_workflow_lint_configured.py::test_actionlint_is_configured": 0.12799021099999663, + "tests/test_workflow_lint_configured.py::test_the_actionlint_repo_is_pinned": 0.13965995399985331, + "tests/test_workflow_lint_configured.py::test_there_are_workflows_for_it_to_check": 0.193388839999443 +} \ No newline at end of file diff --git a/backend/pyproject.toml b/backend/pyproject.toml index dad6788a9..1b97059de 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -39,6 +39,16 @@ omit = [ ] [tool.coverage.report] +# Fixtures a test wrote into its own tmp_path. pytest-cov exports +# COVERAGE_PROCESS_START, so a subprocess a test spawns measures under this +# config too, and `source = ["."]` then resolves against that subprocess's cwd: +# tests/test_deploy_scope.py runs deploy-scope.py inside a throwaway git repo, +# and that repo's app.py lands in the data as an unrun file. Harmless while the +# report runs beside the tests that made it, fatal to backend-coverage, which +# reports on a runner where the path never existed and stops at "No source for +# code". Here rather than in [run] omit, which filters what is measured and so +# never sees a file the source walk adds back at report time. +omit = ["*/pytest-of-*/*"] exclude_lines = [ "pragma: no cover", "if TYPE_CHECKING:", diff --git a/backend/requirements-dev.txt b/backend/requirements-dev.txt index a00522ea8..cd455e5b4 100644 --- a/backend/requirements-dev.txt +++ b/backend/requirements-dev.txt @@ -4,6 +4,7 @@ pytest==8.3.5 pytest-cov==6.1.0 pytest-asyncio==0.23.8 pytest-timeout==2.4.0 +pytest-split==0.11.0 pytest-xdist==3.6.1 moto[s3]==5.1.4 ruff==0.16.2 diff --git a/backend/tests/test_backend_coverage_gate.py b/backend/tests/test_backend_coverage_gate.py new file mode 100644 index 000000000..66ad5831f --- /dev/null +++ b/backend/tests/test_backend_coverage_gate.py @@ -0,0 +1,105 @@ +"""The coverage threshold is enforced in a different place from where it is +measured: the shards of `backend-tests` each override it away, and the separate +`backend-coverage` job applies it to the three combined. That split is invisible +in either half on its own, and a mistake in it does not fail anything — it just +reports a figure over part of the suite, or over none. These pin the seams. +""" + +import re +import tomllib +from pathlib import Path + +import pytest +import yaml + +BACKEND = Path(__file__).resolve().parents[1] +CI = BACKEND.parent / ".github" / "workflows" / "ci.yml" + + +@pytest.fixture(scope="module") +def jobs() -> dict: + return yaml.safe_load(CI.read_text())["jobs"] + + +@pytest.fixture(scope="module") +def pytest_step(jobs) -> str: + runs = [step["run"] for step in jobs["backend-tests"]["steps"] if step.get("run", "").startswith("pytest ")] + assert len(runs) == 1, f"backend-tests has {len(runs)} pytest steps" + return runs[0] + + +def _threshold(flag: str, text: str) -> int: + found = re.search(rf"{re.escape(flag)}[= ](\d+)", text) + assert found, f"no {flag} in {text!r}" + return int(found.group(1)) + + +def test_the_shards_do_not_apply_the_threshold_to_their_own_third(pytest_step): + assert _threshold("--cov-fail-under", pytest_step) == 0 + + +def _declared_threshold() -> int: + """The number addopts names, which every other check here is measured + against. Zero is not a lower threshold but no threshold at all: pytest-cov + skips the check when the value is not above zero, so a 0 here and a 0 in the + combine job would agree with each other and enforce nothing.""" + addopts = tomllib.loads((BACKEND / "pyproject.toml").read_text())["tool"]["pytest"]["ini_options"]["addopts"] + declared = [_threshold("--cov-fail-under", opt) for opt in addopts if opt.startswith("--cov-fail-under=")] + assert len(declared) == 1, f"addopts names {len(declared)} coverage thresholds" + assert declared[0] > 0, "addopts sets --cov-fail-under=0, which enforces nothing" + return declared[0] + + +def test_addopts_still_enforces_the_threshold_for_a_local_run(): + assert _declared_threshold() > 0 + + +def test_the_combine_job_enforces_the_same_threshold_addopts_names(jobs): + declared = _declared_threshold() + reports = [step["run"] for step in jobs["backend-coverage"]["steps"] if "coverage report" in step.get("run", "")] + assert len(reports) == 1, f"backend-coverage has {len(reports)} report steps" + assert _threshold("--fail-under", reports[0]) == declared + + +def test_every_shard_that_runs_is_a_shard_the_combine_job_waits_for(jobs, pytest_step): + shards = jobs["backend-tests"]["strategy"]["matrix"]["shard"] + assert _threshold("--splits", pytest_step) == len(shards) + counted = [step["run"] for step in jobs["backend-coverage"]["steps"] if "fragments" in step.get("run", "")] + assert len(counted) == 1, f"backend-coverage has {len(counted)} fragment counts" + assert f"-ne {len(shards)} " in counted[0] + + +def test_a_shards_data_file_survives_the_artifact_round_trip(jobs): + """Coverage writes dotfiles and upload-artifact@v4 drops those by default, + which empties the download rather than failing the upload.""" + uploads = [step for step in jobs["backend-tests"]["steps"] if "upload-artifact" in step.get("uses", "")] + assert len(uploads) == 1, f"backend-tests has {len(uploads)} uploads" + assert uploads[0]["with"]["include-hidden-files"] is True + assert jobs["backend-tests"]["env"]["COVERAGE_FILE"].startswith(".coverage.") + + +def test_a_deploy_waits_on_the_threshold_and_not_only_on_the_tests(jobs): + assert "backend-coverage" in jobs["staging"]["needs"] + + +def test_the_combine_job_reads_with_the_coverage_the_shards_wrote_with(jobs): + """A data file's format belongs to the version that wrote it, and the two + pins live in different files: the shards get theirs from requirements-dev + through pytest-cov, the combine job installs its own.""" + installs = [step["run"] for step in jobs["backend-coverage"]["steps"] if "coverage==" in step.get("run", "")] + assert len(installs) == 1, f"backend-coverage installs coverage {len(installs)} times" + reader = re.search(r"coverage==(\S+)", installs[0]).group(1) + requirements = (BACKEND / "requirements-dev.txt").read_text().splitlines() + writer = [line.split("==")[1] for line in requirements if line.startswith("coverage==")] + assert writer == [reader], f"combine job reads with coverage {reader}, shards write with {writer}" + + +def test_a_tmp_path_fixture_is_omitted_from_the_report(): + """Without this the combine job dies on a path only the shard runner had. + Checked against a real filename rather than by matching the string, because + a glob's `*` does not cross a separator and the near misses look right.""" + from coverage.files import GlobMatcher + + omit = tomllib.loads((BACKEND / "pyproject.toml").read_text())["tool"]["coverage"]["report"]["omit"] + fixture = "/tmp/pytest-of-runner/pytest-0/test_a_comment_beside_a_change0/app.py" + assert GlobMatcher(omit, "omit").match(fixture), f"{omit} does not omit {fixture}"