From ac23650692ec993604f7a26346106857af430eb3 Mon Sep 17 00:00:00 2001 From: hdelplan <129242887+hdelplan@users.noreply.github.com> Date: Sun, 18 Oct 2026 14:08:23 +0800 Subject: [PATCH] Prepare OLC 0.5.0: CDJ profiles, automatic load diagnostics and release cleanup --- .github/workflows/check.yml | 7 +- .github/workflows/release.yml | 2 +- .gitignore | 9 +- AGENTS.md | 1 + Cargo.lock | 2 +- README.md | 146 +-- SOURCE-MANIFEST.sha256 | 121 +- docs/architecture.md | 13 +- docs/cdj-configurations.md | 43 + docs/compatibility.md | 9 +- docs/configuration.md | 35 +- docs/development.md | 12 +- docs/distribution.md | 23 +- docs/hardware-testing.md | 58 +- docs/release-notes.md | 50 +- docs/screenshots.md | 4 +- docs/screenshots/browse.png | Bin 154085 -> 166384 bytes docs/screenshots/set-history.png | Bin 93667 -> 122105 bytes scripts/build-linux.sh | 1 + scripts/build-macos.sh | 16 +- scripts/build-pi-cross.sh | 1 + scripts/check-app.sh | 4 + scripts/check-distribution.py | 11 +- scripts/check-docs.py | 89 +- scripts/check-node.cjs | 5 + scripts/prepare-distribution.py | 26 +- scripts/setup.sh | 3 +- scripts/smoke-host.py | 19 +- scripts/tests/test_publication.py | 44 + source/desktop/macos/Info.plist | 4 +- source/desktop/macos/MakeIcon.swift | 18 +- source/host/Cargo.toml | 2 +- source/host/examples/cdj_settings_probe.rs | 432 +++++++ source/host/src/bug_report.rs | 93 +- source/host/src/cdj_config.rs | 1076 +++++++++++++++++ source/host/src/cdj_settings_command.rs | 79 ++ source/host/src/direct_live.rs | 60 +- source/host/src/discovered_local.rs | 15 + source/host/src/lib.rs | 86 +- source/host/src/live.rs | 102 +- source/host/src/load_diagnostics.rs | 256 ++++ source/ui/package-lock.json | 4 +- source/ui/package.json | 2 +- source/ui/src/BugReport.tsx | 9 +- source/ui/src/CdjConfigurations.tsx | 700 +++++++++++ source/ui/src/Configuration.tsx | 410 +++++-- source/ui/src/Library.tsx | 19 +- source/ui/src/LibraryArtwork.tsx | 6 +- source/ui/src/LibraryFilterBar.tsx | 556 ++++++--- source/ui/src/LibraryFilterConfiguration.tsx | 195 +-- source/ui/src/SetHistory.tsx | 494 ++++---- source/ui/src/cdjConfigurations.css | 155 +++ source/ui/src/library.css | 288 +++++ source/ui/src/library.test.ts | 60 + source/ui/src/libraryPreferences.ts | 21 +- source/ui/src/main.tsx | 1 + source/ui/src/settings.ts | 2 +- source/ui/src/studio.css | 609 ++++++++++ source/ui/src/waveform.ts | 2 +- source/ui/src/waveformDownload.ts | 2 +- source/ui/vite.config.ts | 14 +- third-party-licenses/Prolink-PROVENANCE.md | 5 + vendor/prolink/Cargo.lock | 957 +++++++++++++++ vendor/prolink/PROVENANCE.md | 5 + .../crates/prolink/src/serve/diagnostics.rs | 35 +- .../prolink/crates/prolink/src/serve/nfs.rs | 5 +- .../crates/prolink/src/serve/nfs/answer.rs | 7 + 67 files changed, 6666 insertions(+), 874 deletions(-) create mode 100644 docs/cdj-configurations.md create mode 100644 scripts/check-node.cjs create mode 100644 scripts/tests/test_publication.py create mode 100644 source/host/examples/cdj_settings_probe.rs create mode 100644 source/host/src/cdj_config.rs create mode 100644 source/host/src/cdj_settings_command.rs create mode 100644 source/host/src/load_diagnostics.rs create mode 100644 source/ui/src/CdjConfigurations.tsx create mode 100644 source/ui/src/cdjConfigurations.css create mode 100644 source/ui/src/studio.css create mode 100644 vendor/prolink/Cargo.lock diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 863a902..14dd414 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -21,5 +21,8 @@ jobs: - run: ./scripts/setup.sh - run: ./scripts/check-app.sh - run: cargo test --workspace --locked --features experiments - - run: python3 -m unittest discover -s scripts/tests - - run: python3 scripts/check-distribution.py + - run: cargo test --manifest-path vendor/prolink/Cargo.toml --locked -p prolink-proto + - run: cargo test --manifest-path vendor/prolink/Cargo.toml --locked -p prolink serve::diagnostics --lib + - run: cargo test --manifest-path vendor/prolink/Cargo.toml --locked -p prolink serve::nfs --lib + - run: cd source/ui && node node_modules/vite/bin/vite.js build --mode experiments + - run: python3 scripts/check-distribution.py --experimental-ui source/ui/dist-experiments diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e88425a..e871f9f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,7 @@ on: release_tag: description: Version tag matching source/host/Cargo.toml type: string - default: v0.4.0 + default: v0.5.0 pull_request: paths: - source/host/Cargo.toml diff --git a/.gitignore b/.gitignore index 248e9f9..e313510 100644 --- a/.gitignore +++ b/.gitignore @@ -39,7 +39,12 @@ third-party/ docs/setup/ docs/research/initial-tree.txt -# Platform-local caches and alternate build assets -dist-*/ +# Platform-local caches and separate iPad assets +dist-ipad/ __pycache__/ com.apple.DeveloperTools/ + +# Generated review artifacts and alternate UI builds +output/ +tmp/ +dist-experiments/ diff --git a/AGENTS.md b/AGENTS.md index d601bd2..29057db 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,4 +2,5 @@ - Keep UI and feature improvements shared across Mac and Raspberry Pi. Implement shared behavior in source/ui and source/host. - Keep the UI in English. Preserve existing workspace changes. +- Consult the user before material changes to CDJ-facing source identity, metadata selection or serving behavior. - Keep distribution documentation focused on supported Mac and Raspberry Pi functionality and current behavior. Document only implemented features and known limitations; exclude future plans, proposed features and roadmaps. diff --git a/Cargo.lock b/Cargo.lock index 51813c3..aa71beb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -552,7 +552,7 @@ dependencies = [ [[package]] name = "pioneer-companion-host" -version = "0.4.0" +version = "0.5.0" dependencies = [ "axum", "futures-util", diff --git a/README.md b/README.md index 25bf3ca..7bcec8a 100644 --- a/README.md +++ b/README.md @@ -1,94 +1,78 @@ # OneLibraryCompanion (OLC) -Give your old CDJs a makeover! OneLibraryCompanion (OLC) reads Rekordbox One Library drives (from your CDJs or locally on your Mac/Raspberry Pi), shows your CDJ status in a modern user interface, remotely load tracks to your CDJs even if they don't support new formats (when the USB is mounted on the OLC host), navigates in your library at blazing speed, records your sets' tracklists, and more.. - -OLC runs on Mac or Raspberry Pi, alongside your players. You keep playback, cueing and mixing on the CDJs. You can use an iPad as the display or any other tablet by connecting to your Mac or RPi via the local network. - -## What's new in 0.4.0 - -- **Flexible display sizing:** automatic window fitting and five resolution presets. -- **Extra-wide CDJ STATUS:** side-by-side decks with switchable beat phase or reference waveform comparisons. -- **Clearer track information:** My Tag chips near the top, full metadata and a scrollable panel that fits the screen. -- **Sharper scaled waveforms:** rendering follows the display scale and window resizing. -- **Browse recovery:** temporary library-source connection errors clear after a successful retry. - -[Detailed 0.4.0 release notes](docs/release-notes.md). - -## Key features - -- **Follow both decks:** live three-band waveforms, track overviews, BPM, pitch, key, master and sync status. -- **Plan transitions:** see beat and phrase structure, saved cues, loops and the countdown to the next hot cue when the export provides them. -- **Find your next track:** browse USB libraries and playlists; search, sort and combine BPM, key, genre, rating, color and My Tag filters. Save your favourite filter combinations. -- **Keep track of your selections:** harmonic-key highlighting helps find compatible tracks, and played-track marks help avoid repeats. -- **Load from your library:** send a track to a stopped CDJ from a CDJ-mounted USB or a OneLibrary USB connected to the Mac/Pi. Your original music stays unchanged. -- **Use more tracks on older CDJs:** built-in audio transcoding prepares supported files such as FLAC and ALAC as compatible WAV or AIFF when the destination needs it. No separate converter is required. -- **Record and reuse sets:** capture your tracklist, edit it, import supported rekordbox histories, revisit past sets as playlists, and export text, CSV or PDF. -- **Choose your setup:** use the standalone app or a browser on the same network, with mouse, keyboard or touch. Adjust the waveform display, visible filters and track-list size to suit you. - -## CDJ status — follow the mix - -Compare both decks at a glance and see how the tracks fit together. Zoom into the waveforms for the next transition, follow approaching cues and phrases, and switch between elapsed and remaining time. Open track information for artwork and fuller library details. - -![CDJ status with two active decks and three-band waveforms](docs/screenshots/cdj-status.png?v=2) - -## Browse — find and load the next track in your OneLibrary - -Explore playlists, narrow your choices with combined filters and save useful searches. Currently playing titles are bright green; previously played titles use softer green. Harmonic key highlighting helps with selection. Press **CDJ1** or **CDJ2** to load a stopped player; OLC blocks loads when the player is playing or unavailable. - -For music attached to the Mac/Pi, both players can use different tracks from the same local USB library. When conversion is needed, OLC prepares the track before loading and shows progress. [Local USB and transcoding guide](docs/local-usb.md). - -![Library with playlists, filters and track-loading controls](docs/screenshots/browse.png) - -## Set history — keep and share your tracklist - -OLC captures your tracklist automatically while you play. Edit and share saved sets, or reopen them in BROWSE as playlists. [Set history guide](docs/set-history.md). - -![Set history with a saved performance tracklist](docs/screenshots/set-history.png) - -*Screenshots illustrate active sessions. CDJ status uses real exported waveform data; connection and playback states are illustrative.* +Browse your rekordbox libraries, follow two CDJs and keep a record of your sets. +OLC runs on a Mac or Raspberry Pi and shares its interface with browsers on the +same network. Playback, cueing and mixing stay on your CDJs. + +[Download OLC](https://github.com/hdelplan/OneLibraryCompanion/releases) · +[Installation](docs/distribution.md) · [Using OLC](docs/screenshots.md) · +[0.5.0 release notes](docs/release-notes.md) + +## Features + +- **Follow the mix:** live three-band waveforms, track overviews, BPM, pitch, + key, master/sync status, exported beats, phrases, cues and loops. +- **Find your next track:** browse USB libraries and playlists; search, sort, + combine metadata and My Tag filters, and save filter presets. Harmonic key + highlighting and played-track marks help with selection. +- **Preview tracks:** listen through the browser or desktop window before + loading a player, with artwork, waveforms and seeking. +- **Load either deck:** send a track to a stopped CDJ from a player-mounted USB + or a OneLibrary USB attached to the Mac/Pi. Both decks can use the same local + library. Compatible originals remain unchanged; built-in transcoding prepares + eligible unsupported audio as WAV or AIFF. +- **Record and reuse sets:** capture tracklists automatically, edit saved sets, + import supported rekordbox histories, browse past sets as playlists, and export + text, CSV or PDF. +- **Manage CDJ settings:** import saved My Settings, edit reusable profiles, + push them to stopped CDJ-2000nexus players, and optionally apply profiles on + connection. +- **Adjust the display:** automatic sizing, resolution presets, stacked or + extra-wide side-by-side decks, beat-phase/reference-waveform comparisons, + configurable filters and track-list sizes. + +![CDJ status](docs/screenshots/cdj-status.png?v=2) + +![Browse](docs/screenshots/browse.png) + +![Set history](docs/screenshots/set-history.png) + +*Screenshots illustrate active sessions; connection and playback states are illustrative.* ## Get started -[Download OLC](https://github.com/hdelplan/OneLibraryCompanion/releases) · [Installation guide](docs/distribution.md) - -- **Mac:** Apple Silicon or Intel, macOS 13 or later. -- **Raspberry Pi 4 / 5:** Raspberry Pi OS Bookworm or later, 64-bit. - -1. Install OLC and connect the computer and CDJs to the same network. -2. Set up the player connection in MENU and select a library in BROWSE. Local USB loading supports automatic discovery or **Manual IP connections**, with player number 4 free for OLC; Mac also requires the included **Local USB Support** installation. -3. Keep OLC running and the USB attached while playing. To use OLC from a tablet or any web browser, open the network address shown in MENU in your browser. No login or pairing is needed. - -### Headless Raspberry Pi - -1. Set up a Pi 4 or 5 with **64-bit Raspberry Pi OS Lite Bookworm or later**, network access and SSH. Set its hostname to **OLC** to use the address below. -2. Download the **0.4.0 ARM64 host package** from Releases. In its download folder, run these commands over SSH as the ordinary account that will run OLC: - - ```sh - sudo apt install ./onelibrarycompanion-host_0.4.0_arm64.deb - sudo loginctl enable-linger "$(id -un)" - systemctl --user enable --now olc-host.service - hostname -I - ``` - -3. On another device on the same network, open **[http://OLC.local:8787](http://OLC.local:8787)**. If you chose another hostname, use that name followed by `.local:8787`. If the hostname does not resolve, use the Pi’s LAN IP printed by `hostname -I`, followed by `:8787`. Configure CDJ connections in MENU and choose your library in BROWSE. -4. If using a local music USB, configure it to mount at boot at a stable path readable by that account. Reboot and confirm OLC and the library are available before logging in over SSH. - -Use either the desktop app or the headless service on a Pi. [Full headless setup, USB mounting and troubleshooting](docs/distribution.md#raspberry-pi-headless). +Use **macOS 13+** on Apple Silicon or Intel, or a **Raspberry Pi 4/5 with +64-bit Raspberry Pi OS Bookworm or later**. -The interface uses a fixed 1280 × 800 layout scaled to the display. Downloads are available from the public Releases page. +1. Install OLC and connect the host and CDJs to the same local network. +2. Select the CDJ network connection in MENU. Use physical player numbers 1 and 2; + leave number 4 free for OLC when serving a local USB. +3. Select a library in BROWSE. Stop the destination player, then press **CDJ1** or + **CDJ2** to load a track. Mac local USB serving requires the included + **Local USB Support** installation. +4. Keep OLC running and the music USB attached during playback. For a remote + screen, open the network address shown in MENU. -## Know before a set - a few limitations +A Pi can start without a monitor or desktop login. Follow the +[headless setup](docs/distribution.md#raspberry-pi-headless). -- **Paused non-master waveform tracking is limited.** Due to ProDJ Link protocol limitations, the non master player position is updated less often than the master player (1 beat precision). Workarounds: Use the CDJ's display and audio for precise cueing. Temporarily making that player the tempo master can improve tracking. -- **One local USB library per connection session.** Stop both players and reconnect in OLC before switching local libraries. -- Physical Raspberry Pi, Intel Mac and minimum-OS testing is incomplete. Check [compatibility and operating limits](docs/compatibility.md) before relying on a setup. +## Guides and limits -## Help +[Display and filters](docs/configuration.md) · +[Local USB and transcoding](docs/local-usb.md) · +[Set history](docs/set-history.md) · +[CDJ configuration profiles](docs/cdj-configurations.md) -[Using OLC](docs/screenshots.md) · [Display and filters](docs/configuration.md) · [Local USB and transcoding](docs/local-usb.md) · [Set history](docs/set-history.md) +Fine waveform tracking is limited on a paused non-master player; use the CDJ's +own display and audio for precise cueing. One local USB library is served per +connection session. Platform/model coverage and other current limits are listed +in [compatibility](docs/compatibility.md). -For contributors: [Build guide](docs/development.md) · [Architecture](docs/architecture.md). +For contributors: [Build and checks](docs/development.md) · +[Architecture](docs/architecture.md) · [Hardware verification](docs/hardware-testing.md). -## License and acknowledgments +## License -OLC is GPL-3.0-only and independent of Pioneer DJ, AlphaTheta and rekordbox. See [acknowledgments](THIRD_PARTY_NOTICES.md) and [source credits](third-party-licenses/SOURCE-CREDITS.md). Source and application packages include the applicable licenses. +OLC is GPL-3.0-only and independent of Pioneer DJ, AlphaTheta and rekordbox. +See [acknowledgments](THIRD_PARTY_NOTICES.md) and +[source credits](third-party-licenses/SOURCE-CREDITS.md). diff --git a/SOURCE-MANIFEST.sha256 b/SOURCE-MANIFEST.sha256 index bf46ed6..a8c3e0d 100644 --- a/SOURCE-MANIFEST.sha256 +++ b/SOURCE-MANIFEST.sha256 @@ -1,28 +1,29 @@ -630f48170d5f432e2c6a3c06496fba7055e0c4f917737eb467ec8af6346e8f5c .github/workflows/check.yml -4b6ba89fa2049f542b8cdc293f3dd7ae88635371aa86d71b402692a3d5c6a296 .github/workflows/release.yml -2a21bd43e4c34b3e47029b03b347074133a777fe9266f569fd560d90225d0acf .gitignore -d81fcdcd476394c6c088c3518c68127e087cdef021283ed6ba35fb3188c21cbb AGENTS.md -edc1956a0cc18490d08414976cb543beaa2535c86b5119db4f33117e1cf93db8 Cargo.lock +03f5c95883b5eeb06cab3a148cdadd9f927ef559ac76a406ead3cea1f9ab44a7 .github/workflows/check.yml +ff37ad8e1e560832bba65d61e79fdcdfc8cd895f2a4d2163f8ccae51d1008ab1 .github/workflows/release.yml +a2a882d3bb0f4e3d7d749dfc3cfe37943b1f3f6bf1e0fd78b45977c1a2c28eac .gitignore +021d2085da3a39e084eda2a9e126bd9743409e5f046f189fda9e3390014de884 AGENTS.md +43f1fb1cfe4f3082bae445a3f7326a6464510b05e42a3237b6541ea123f2aa09 Cargo.lock f6c0c1760e083137e37a4637ff8aa77fcbf9f157fde5bbcd02ae7bfbe11bbcaa Cargo.toml 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986 LICENSE -2fbc70c04d606676edaaf6e3be6b3bb3c641e70f0690df785788c58e9f5b111b README.md +5c23e50e0526cd402a6b130a438632cdf534320cfe7f51be5c8670c1acd39ff6 README.md cdd83203fb0ad6c780ba6d35c657a277f44178dfa576bd387a9433840b323c27 THIRD_PARTY_NOTICES.md -3e9a2262238b7d59134fa7b0d23ac0fa274ccb8b6a9a3a7563e700b86eebaa5c docs/architecture.md -b1c6ec6f8939be4ef2251ef7dd37274f7e748be3c8bb066555763c94f709c244 docs/compatibility.md -3df0000ad0bd856d3b24ba8a62495df92586a76fb83fff5c55ba52d626d90a8b docs/configuration.md -c0e9cb68db0198bb6a5e9477b7eb45de419da320e642e6035cad22226467c60c docs/development.md -b720f3c7888510c46fc36bbd2c8ec3222ec7a3654f9a099125f3e2cc81910ff0 docs/distribution.md -dde10694356d76d144d2a2873ea9649777310e6a6726220c74bcffd03b71052c docs/hardware-testing.md +d6f6c714608d27b225c4806c7a17f1c0f46150c0403a17c6561b8ebc0ef85326 docs/architecture.md +ace6f17b75866837683020234f5b85522ccbbcfaef8d9f79a39ca495729b9a24 docs/cdj-configurations.md +57b0ef90900c57bc5bc3acb542b1d9621152a1f529ccb8137af7224761629d46 docs/compatibility.md +cba35128bcea343798852f194fbe494eaf7598b52649f3d314e00d1347e05a81 docs/configuration.md +d3e3b8eaf5ba4ccc1f84698a800d4e6344185394aca1c88a33b26b5dab34f6a5 docs/development.md +d446c90d38c39f4b1f99cfdbe676307a34ae5ecf0a79e57a32d36be7eb64b2fe docs/distribution.md +2cd4e0fc2ce77b30839d5c2cacba651f2fd82a0e8c4cefad1d3fa3e98fbe60e8 docs/hardware-testing.md 0cb573347c716dc1872d546d014eb9ed875ceeb4e433c72092bb62ed3663b5b8 docs/local-usb.md -b1aa87f7bdffbf15af229e4a3290d4283634e33467b9d910d56b2ef8c2533824 docs/release-notes.md -87cd03b1649797d4235d8e80462773f004d7fac7529dd12996d4959404a53762 docs/screenshots/browse.png +833ceb6ed8387aa924a4d659eadfdeeb59fd0fc07ef31db6a665f96c1eff7a5f docs/release-notes.md +2ae879193a78d964f3c915f513359150db921696bff79e35de7b49cb3fe96eaf docs/screenshots/browse.png 7608611ac47f9f97fe88cc46679e5d1217572ba8e189f617d0ec89bdbc296be3 docs/screenshots/cdj-status.png e58c4dcb473aefdf13944743b99dc0acb12197a2ff81d82a56ed5048d68fc3e7 docs/screenshots/menu-audio.png f67eb74695e30700626c312f253bff7112d541de9b78bd87e3df9e6cffd6598b docs/screenshots/menu-connections.png 152ab9a5bdc7bfeb9f645f4c957b62831d64aa163faed6505d781265c1780661 docs/screenshots/menu-display.png 8c1810dfb189b6de84754a2bbe30c0eda559170a647d7a55c91d12fe8370e2ae docs/screenshots/menu-library-filters.png -470f2e0e394163996d4f62b67e6d2b83513afed02ba8a5790d223af86055d91f docs/screenshots/set-history.png -6aaf260383f14b57ba5cc2da02355b48d46104e220acabe5eada76dc50f558a2 docs/screenshots.md +628adc579f61883f96ee2af7882cec185d40746bafa3b8eb87e9e2ac9629155c docs/screenshots/set-history.png +99d64a54a7c069549de565b463d70e984c51b94564e4da598550f59c8eabc235 docs/screenshots.md 471e4304726e567c73fb7e1f9ceba20e48bfa8da322f0cec77b19a33e64ea7bd docs/set-history.md 3a6103c4dd0d87da2d3e8a55a657af4de0b5ee05fa821bbd18884254f2f1948f packaging/olc-host.postinst 8c100a046b11772a3f300e389cc28781352110718f049f9789468e6992de8561 packaging/olc-host.service @@ -30,28 +31,30 @@ f67eb74695e30700626c312f253bff7112d541de9b78bd87e3df9e6cffd6598b docs/screensho 71ab75335b1986cfb1287056486539a2003ec2814cacfba1c78ea0b16c09073a packaging/olc.svg de9f3ccf0d7f57753690521460e04e3074106f3eb8a8957622e7b7490352f610 packaging/onelibrarycompanion.desktop c498cde217c314b673b916fae7a17b87fb5233ec593f4d13c90b40235d34aac1 scripts/bootstrap-mac.sh -3ce5d35b363e33cc2d925f28f4f583de6a753e5c39e53fd3cda8180acc54b46a scripts/build-linux.sh -2123e92e257ab811ef568de3fdefede7704f1a31de621098d10625f1fb870655 scripts/build-macos.sh -828a551a77311d66273362864d36c439640faf4db080384e6283fcf24e948f33 scripts/build-pi-cross.sh -578d7011dee5b9cb26f44d3ac5b2f5827a61458cecc6176b1df6f07e5e99e067 scripts/check-app.sh -94f1a7df40b20ed6af5bdbe2f6edc8c7015a99003f41e77d2d997c8b604311eb scripts/check-distribution.py -e1f529e9f89668b674080943ade66397dada81f146bdf2a41b91f2f0361e7039 scripts/check-docs.py +047f5a9fb7853f103549b10ccbf29036691aeb4a9acef69c4d9b2db07929fe70 scripts/build-linux.sh +0d4140ec295e3cc553588e104ef4cc7280d1bdc74cb215343bd9c68e120a4c5b scripts/build-macos.sh +67381c0931c68377ecee63936bb9ab94915b38eb4e29bb2b3de3e9c2cc4506eb scripts/build-pi-cross.sh +eaee3a31268dba5913fee6851b374854169cc9655b294bd97a4eee61b60bb72a scripts/check-app.sh +ebb6f457b99d4f2da571bc581cad3e4c8c27e40f242cc9c66e457ff7dbe68b40 scripts/check-distribution.py +2382d3883e8af9a0b586d39c37bae5aea919ef476181700c95bd0df71151c0b1 scripts/check-docs.py +19da40fbfffcd1ee408e8710d392df6bd3ac2bdead9204f7d1b62dfe58f89f0c scripts/check-node.cjs 88192f3b4ad653a4bed7ad022619052a17f7de451453b9d457aa9cb849971098 scripts/collect-third-party-notices.py 25e72fc600225e570b1c49e0984e8b374c338f2a24b1ad632847e3a36f1c2d60 scripts/package-linux.py a914b6b35a76b3b5e3534528cc4c8285f3631a7ca3f18454ed913e8c88ab889e scripts/package-mac-networking.sh 77bb171cf57bdeaa537dac42f9284c77474bbfe200c881d0da680760a02ca3ab scripts/position_signals.py -abd077771abd6b7f58187a2c1b318dd08a86ca4ac1abc6402882a29fb3422852 scripts/prepare-distribution.py -a886e4fbd9ca4ad9b8e1b5a1e64b178a05a95a551d90113e1f5e9940f2aa188d scripts/setup.sh -8e71de425eff05a1279e74ec7c1735399b27ff8a9983878e1923acdcc5f998dc scripts/smoke-host.py +df17a14317adfbe94fd7f0e177219a3e626a7bae9117225654bf79e7dbc558ec scripts/prepare-distribution.py +d00a501beeeed39fea9de24fd55056b5516617bdc19cc97520072b6ffca5768e scripts/setup.sh +1333d7c48eb31a478f3962933a7643d6da1710db00625a88075800cd0f4516de scripts/smoke-host.py 3c6734eb87e1bd38364dac80eb9cb0610b6e3a16a2df1fe33437e93b2922b975 scripts/test-mac-networking.py 60f4824e5da38acb9852a7cd3522063c866a9c80516084f2d9cf2fe7c2d36edd scripts/test_position_signals.py +f02708528cb410f17a3557672595c6b9e8abe1a4814e58be5140b4b5f7ebdf4a scripts/tests/test_publication.py 9eb805af6bdace749f78985bf5349be1ddd80413e213175e720a22635d046e1c scripts/tests/test_usb_unmount.py 80fae4f8f8aed359c28a2d7dbb13a447e2318b45eeeeb702b585390b881158de scripts/trace-bar-position.py bc0e03dec5e77bf1e18f615f07d1d4289319c07ea3f94ac0b283ba43db5e56ad source/core/Cargo.toml d7a76e58c570ade89dcec43bcd208d6e67056a6e2abf3eda7bac22d2f2b0a5e9 source/core/src/lib.rs ecb0eade1ae5d53f36e495886821fd379f33229795db6948c161b856c540852f source/desktop/linux/olc.py -367b56012635efab3e8dec611637ea5dc99dbde40289c69a9823799875b25da2 source/desktop/macos/Info.plist -69aa1800cf715330bde60014348fc497198e69372548fc0e62441c5876d45d68 source/desktop/macos/MakeIcon.swift +da84e9815caf53a11565bfe068d09b7a1b0fe01dbcc8bdbf51a3115e8a732f41 source/desktop/macos/Info.plist +d69d2faec2a78ffec8267cf3730d47b7bdebb1e8c888fc9bb330aa8800e0c263 source/desktop/macos/MakeIcon.swift c722acf013afc1a352e832710d1d53f37803be5c1d863c95f68d08e6af83f001 source/desktop/macos/OLC.swift dc53d14771301574175144eb1f9eecac9d8e1df5cfb4d9225fbcc6286abf2420 source/desktop/macos/networking/helper.c 4d9da931a9144b070d1be29ac49d5ba6e4cca17f8b5c1f32da94d757daa4cc2d source/desktop/macos/networking/installer/postinstall @@ -60,7 +63,8 @@ a2466e957ee6339d2234fd5c1cad50f7df4e9836c645db4e3d5d23b6bb022f0d source/desktop bd956ea99d01308f1b1bb7151d1630016a6b154b176360f448dab565b76cee5b source/desktop/macos/networking/tests/auth-client.c 1a35f415ea665036ec63d7b366343eb4a28c2848bb90f4c52729f1999927fc9e source/desktop/macos/networking/tests/auth-server.c 8a08e32db795f80e918dccbd6fa5eb484b14fa714526176cb610fae4dd65a1d7 source/desktop/macos/networking/uninstall.command -e978c5469be63db2b7e0842bb9d5c877fbec1e4f17d457ad050a44cd50746048 source/host/Cargo.toml +d3b1a4f7254e9e936d2e77d322ebce8f9fcdd8c4d7b5dcac2634f790d66500a3 source/host/Cargo.toml +26a737d04b55fb3d784167afd062c5ca9bc02a20fd948603b9c4d5551fa5c65c source/host/examples/cdj_settings_probe.rs 981be11d374fa01b30149f7bafccc872f171336e918860c06eaa4168de6f1425 source/host/examples/cdj_usb_probe.rs ee8482a233f436bca0faf55f2d43bdd2d2c6e7ff324f32c1f375e2d75bb8bdd4 source/host/examples/import_set_history.rs 2841e6e8e81473887721d24ad68ddaafb56323c11e859b5602fb5c204b3354e0 source/host/examples/inspect_cdj_cues.rs @@ -74,27 +78,30 @@ c83e0d6f9c7cbe77d08ca9f992b2eb21c54e943c0c145d0bd7786e968174816b source/host/sr 0a2a0e7098474ed10e8418a7235a1b01db9d2ad7530dd3e156cc6f639e87572b source/host/src/bar_position.rs 7027d8fc3a53c5d7360e282e29f4e7e5ea96d66d652f36e4ca7d81f6b8b6b239 source/host/src/beat_position.rs 0f53950b6505be7c3b13a71f2165c39506f096b65ffcae8fa55d2a0ad7284ced source/host/src/bridge_probe.rs -3f671144a2e3ef70abcc50e428d3e3a10c02881119f3a4c860114c0b844758fa source/host/src/bug_report.rs +c9656d397cec7c1b213665ee93fa6a33777cd3a3a38371dcdc2a6c53e6d24fae source/host/src/bug_report.rs +2336f399b871a5a77a025a711aa00c3ce58c65ebf446cc20a09c7e3951339443 source/host/src/cdj_config.rs +148eba5f3f94bdc50d07690df0a8f9b6ddc2e4a754e3e4266b89ccc1a318b45f source/host/src/cdj_settings_command.rs 91443a514ff3d6541abd13553bad93c0a8854be91661ef0175be0eedfccc9020 source/host/src/cdj_usb_load.rs 7f59b4a147048d7d59d327013d5f999f67dbcd84a836519c10688aad52b64984 source/host/src/cue_diagnostics.rs 251ae52075eadb19acc27cd77b5eacade6c92b2c560bedcdf16f53b3bd923360 source/host/src/cue_window.rs fcb18001c70c944115495aa02293b9eaa08307111ff83630bcfe911e54382918 source/host/src/cues.rs 5f31f8e786cba2ffa86b46da6b75839af8b870e713ea7758e9bc471be5b2cbf0 source/host/src/direct_ip.html f682d839ce4abc798abe460442d31b2f5c676379b4eeb86a21737ef50638a6e7 source/host/src/direct_ip.rs -cf82d8d5c8b71854934e275d9134403bddc2dad425fb3e13104e1b9f39836244 source/host/src/direct_live.rs +006c30dadf717f696a26c6c3489ab18e951e2558719dc9c1b2531201ed7477b5 source/host/src/direct_live.rs 90c2f90ba9494c3f7ac0c66c721c45eabcde64666d4328575f1858c7bb964a32 source/host/src/direct_status.rs -7045d716ddc2e630977e3805b08e44dce7acef93e9a0a8b3f1c0c1b7bbe18ed4 source/host/src/discovered_local.rs +cfb903eee3cae03903ea0c71f4568b1182305df9701f5732dfedf111bc1e2349 source/host/src/discovered_local.rs 1f8ab4322f07c0e1f7be9b257a2d297fc5f2c6148eee5b54e7c988f6552e0eeb source/host/src/distribution.rs 9bc03318c68b6f815b89e60ce510929fad1073bb15ec039bb052880afedead53 source/host/src/embedded.rs d7ac47fac069c995088cc1d87de2dbdef7ad21c19615b15e178d9ce887d2c029 source/host/src/handoff_capture.rs 657431018379a40964c9774037f898763a57c286a9af3c8b6ece2af4bd6c18f2 source/host/src/host_controls.rs f6204c59a516931c57f22650f021deaf6bc985814f2339ece8a077c7e59e9b35 source/host/src/jog_trace.rs -f98321d2f152276eac095ee1afe066d8ce4a0ea3df6391967e9b63db64473344 source/host/src/lib.rs +36276844c6b846edee664c01a3f0f4453bab7f91f138614ac56f1eaa73252b62 source/host/src/lib.rs b0f7f66e8119016e6c2685e8683501eb37427bb7075b06473fc49d2221bceea1 source/host/src/library.rs 4d0417ad974cb2402e2a589b44c96e552cf0fa4238b07746e683144cb19336a1 source/host/src/library_audio.rs 42c285076e864776263ca133dde827df097ee70652856fbaa082c9ab322e84bc source/host/src/library_mood.rs 8c0bc3600c45e552617635e684ec61b16e14ce0a35f7e300e413fe64245cf728 source/host/src/library_preview.rs -8becb607d0a175657de1948524f48e30f8ede4e8778b99f8b4234c76700253cd source/host/src/live.rs +8fda6f4f4d5af4c157ffc7f5df1441b745bcf79cac70dbac9149807703dbabc3 source/host/src/live.rs +499efc1923b5fe18e0a0f0c1c545aeecdb3a2b0538b6b08319b42dae82a2706a source/host/src/load_diagnostics.rs 3004294925bb88a9a1be3aa096920442992e6874411e2e77be5fd18b435c5274 source/host/src/loading.rs 7dc7208f4ef3a26a499fa250069065f5bee898dd1d641acb0ad604eb85c30b2c source/host/src/local_media.rs bc0ef4a85246cb9fbbb86989844ff6938ea7c07f079c635bca011856a5338d62 source/host/src/local_serving.rs @@ -122,13 +129,14 @@ baa2705b98262623dea90b3360335448ff177972b5e3c5aa766b4d4c118c08ef source/host/te d2dacd1889311ef2bd911c693f45e8f909d2746abab98afb57080036c9aeb105 source/host/tests/playlist_rows.rs db0e313f30825bf351858e6b84ad537930628dd6d5de5d4d937571405fb02ad1 source/host/tests/synced_transport.rs 7e91712671d1ba69d7c88affd8f2dc60e2278874ea0a060d4ae8f3248faf9843 source/ui/index.html -b4d61e9132af681bcb8069f86899f57471658f27f3ca8b9f8ca8547d64233189 source/ui/package-lock.json -52a44ed71eccc5cdd3422ad953674cf83b8a893a36c9edeac2b77fac1222ff9d source/ui/package.json +53959d1c715a5fbee4fd0272b7ba37e30ff03200ee200302ca0c6c972b47d712 source/ui/package-lock.json +67a10bc39a7917796d8cdb16ff330af94b991f7a8f3483e6e7aaf855332504b5 source/ui/package.json 095bf97d18f4590983f16cae958a285c3d1433db6c272008e569d1372d386925 source/ui/replay-beat-position.ts 330d2579fae7fe07a2f65738081b22b03d7cc1474cf2d44b932742763736a631 source/ui/replay-jog-browser.ts 02328cd63211fb7234c7459778778b7389bc5783c9828593e1326573a04c5278 source/ui/replay-jog.ts -d3a3885b0a0074a3997a3ab871b4d955e10ddc7ee39b82d22206433c4ccc6a50 source/ui/src/BugReport.tsx -503bed97b4ff42e18be9ff658ecf920e8d079a75acff8bfcf65260e3af9eece8 source/ui/src/Configuration.tsx +a6b3ec639c42749a1845c29aff4568de007dc7afce3d26e8579e344c891bb79c source/ui/src/BugReport.tsx +bb02c0cc98df79ec7a8c88c54cb35d245028a0e60044428ad286517bdae84a3f source/ui/src/CdjConfigurations.tsx +e15fdb5bd92db32a2cd359fe470dab7af6737db82e6aac48bf15ec5638a9ffd3 source/ui/src/Configuration.tsx 730233cc334b4406e846cfc67180e8c990fd5e09dfbe829465b3b4176db2400d source/ui/src/CueCountdown.tsx 2b626c6268e31fd8d51c623577f6caf5ccd750eff13da3a623c89b6c759e89ce source/ui/src/CueDiagnostics.tsx 5c4d6e923dff785644220242af2deeb6a14ab2c013f3737f56bd0abd86c6c094 source/ui/src/CueWindow.tsx @@ -136,10 +144,10 @@ d3a3885b0a0074a3997a3ab871b4d955e10ddc7ee39b82d22206433c4ccc6a50 source/ui/src/ 7e84ef50cf32ab41f6ba511e8f92d8153d46ed6d2627a05a9c035229d7ad5a4b source/ui/src/Experiments.tsx aa20637e6d6e5dc71e104cc0cbf018fd3a7258caa7fa59a6af1b19b55236c92e source/ui/src/HostSettings.tsx 4308ad178f28e8ec8816018ded48d5e1c3903118249a6f70dd47ac450c7a2cd1 source/ui/src/JogDiagnostics.tsx -93ac2d21d9f32ad0d2028bb93162bf6242222721fe9eb41825a47bbbc33f4751 source/ui/src/Library.tsx -bbfe8f38ef8926d3c9397454d36bc31eb786fd625f4621f74649f155981150b4 source/ui/src/LibraryArtwork.tsx -e772a43d5276f0502bf14b23310d53ea23421aebd70427ac808a0429cd1c61cc source/ui/src/LibraryFilterBar.tsx -8a1244520729d787a59aac8192431cb798a27ab394fa114eac96d4befef8bf6c source/ui/src/LibraryFilterConfiguration.tsx +fbc3b78dbbd4ae14e6b963f360ae89e60aa15f96236204fca3bdb9f168a82fe3 source/ui/src/Library.tsx +a4ad2cfcddc61f4532165f2c671e119566770322f2c4c5fdc200c232d13a5756 source/ui/src/LibraryArtwork.tsx +83e4e61c6e12ab5e8d28e1ac348f83b94b5766f88bfadc704d87587f4757f6fa source/ui/src/LibraryFilterBar.tsx +7cd53261e86cf5c4aa0e7b0f155b43b84de97549049a6ac3fd3b8416d2d6222d source/ui/src/LibraryFilterConfiguration.tsx 4febb4166e8a18975c871ba2ac4982ff9187bfa68cb7c5c956c55c4adeee7708 source/ui/src/LibraryFilters.tsx c2dfd7deff01db81fe919e3e8994ced469c0e930c96d8a77d651081f752a134d source/ui/src/LibraryPlayer.tsx 4d654dae549e2d51d8d6b4b90de34bbd2fabf1fdda80e210fb59239ab97140ed source/ui/src/LoadControls.tsx @@ -148,7 +156,7 @@ c58c4a00b1e71df5c253a138ff6fb1bc45971d14802e719ca34c0e225e5b6fb9 source/ui/src/ 222c7c05a1abf15f80c60e867688bdf75dc23985ba2ba996db5ad472df051e3b source/ui/src/ManualLibrary.tsx 692924730b88b9d554bf580ae1c36c50de461c11d2b5c8052b78a89b52b067af source/ui/src/OfflinePreview.tsx dd5cbe6d37f05e963c0f3159a7a80382241787e746d15384deba4f0bdc76ca25 source/ui/src/PlayerTime.tsx -69bd0a0b371b701ab86ece0421a5174188b823fe0d5c47046e24c7401cc5b900 source/ui/src/SetHistory.tsx +ed65c069b0c54ea8962ac37410a7e47f6301b3c1a5bbdebb3d7f016f5188b230 source/ui/src/SetHistory.tsx 1efff22fe939b2d0e34e2631dcd99fe0ae5c48d9425ddfb52a190d7e3fc11422 source/ui/src/Signal.tsx 27059fd2b5b03c96878c889af4002c1e61bdc4a3a43db5a8cb1c274907659326 source/ui/src/StatusDisplay.tsx 59070d9f7166df9b5d95e4d9d277798185f90e88da38f7b230f62a1c97ead0ed source/ui/src/SubnetSearch.tsx @@ -162,6 +170,7 @@ e55f6f613890106dc043bb10134ba09af104eaf993b632158036fc89bda0f394 source/ui/src/ da0ef30162115daba501262d03b704d75a6382eba6d43f0d90425ed10de53263 source/ui/src/bandGeometry.test.ts b33abdd84d3ece73853beaa94137f67d211cbb8e8256ca77f098cd0d609a6a56 source/ui/src/bandGeometry.ts ad237002a7174932599afb56db4afc6a32326bf418ce3f60bf5d77fb6c1247fb source/ui/src/build.d.ts +6614154e488230dfe285695799c756f0421bf477b6adc0116a374ab9c3c2b60b source/ui/src/cdjConfigurations.css 4bf1cbe7cf0ac9dc8f5b1a19544b0c7b740ebbdc9a075ca1e583ac49b882d824 source/ui/src/cueCountdown.test.ts 166ea6edfcd7f30f2fb716d99a81d0c38808aeeb01949d78ab43445e9b2a711f source/ui/src/cueCountdownModel.ts a09f72cef31c90f5d123c255fd4aa856a042f55f4866ee25284acdbd4f10ea61 source/ui/src/display.test.ts @@ -172,15 +181,15 @@ da2e1987d951993bc18aec293f18db31e4af9cd7e7e6c84f80eac679a1227033 source/ui/src/ 9cd03f78e18751fa3bed1000873d39f791ab5f65ecb789d353e68e5ae53ce5f8 source/ui/src/jogTrace.ts 966d372b665e277ce86bbaee97f517ad8eb67598effc2fcd84276713792282f9 source/ui/src/keyCompatibility.test.ts af5c06fd811365410fd72eb7ac72fc7cf48274fbc0cb3285d199cac922d4b506 source/ui/src/keyCompatibility.ts -4b91208816851f5a2e02b4cbfed67706b4aef176d028f0b88016d64f524ac9ee source/ui/src/library.css -055425fbfb6659640cd5a18cde45fb83dcd0ad501d4ec2aa68ba1da7c55ada48 source/ui/src/library.test.ts +20fed8d6bab02e8a7041efefed1b0771bd42c77666b0ded923c83fbe5e5d56f7 source/ui/src/library.css +4d2bd58378266768d957badd7dd7b200430f1f9dc9f9dd15d50658a60569acfe source/ui/src/library.test.ts df77dc5512202edfa69ebcf741548dd1edfbce9304d89c0e13a401f870b1f990 source/ui/src/libraryDensity.ts c30911216aa1bf02c7d49f0b3188ee0565d01d59197f846f71f6e5696b7a7815 source/ui/src/libraryLoading.ts 0ccea972c00195464ce3f022e1a6e9bd007bdfdfe47c987c8ddfa5a79dddc2c1 source/ui/src/libraryModel.ts -666c2d79e0055e35930fa2bbe699f510f711cb72dcb97271430a51196422ddf2 source/ui/src/libraryPreferences.ts +d7011067a136e6baae97dd1a4a85baa9e2334377e96faca77bfa4e060b3678ce source/ui/src/libraryPreferences.ts 33a3476c38f9d51876612f160e1d7131b8bcf6d96a7880e8bd788bec579ea6e7 source/ui/src/live.test.ts 462e3e58a5ef97dc63d71f4fe12fef0b38ad757a2d3f4ded550077334f6d5e78 source/ui/src/localUsb.test.ts -27d42d25a8a2d93294826b15687a98b5837d562d30cb8b7ba26b73661c316c41 source/ui/src/main.tsx +aa2375436838ac63c98ca9b872dc7f675bdeec255db5a6a3c6f39735cd0f1e49 source/ui/src/main.tsx c1e05ce93ba9a7e6f754eb27b106920807ce6515809f2e1b4c098edcbf55df20 source/ui/src/model.ts c2fcd464735688a617680de2ce170e6e249def1f5d0f0240582c00f3effae60a source/ui/src/phaseMeter.test.ts fe1e2ef144bc9678c5599532c384bbc6783f6f8cec0168601332232f58b77f45 source/ui/src/phaseMeter.ts @@ -192,7 +201,8 @@ b8c6a8643a67d23a02b7e27fd4bcab3d826feacbad27cc63493771d3793a0858 source/ui/src/ a68d2be44562b3269bc8ff2307eee0796b916466c6ce41fbbe76a727f006c658 source/ui/src/setHistoryExport.ts 6bbe408612b3240cb72749d9cc3594ebbf3904939be1df7dbdbda450c80c47f8 source/ui/src/setHistoryModel.ts 77cf56289d03f1a3d3fe5e5134361f57cc5b2076344c9a849f5c20e87012d2f5 source/ui/src/settings.test.ts -f84f439a63944ea3ac648cbfd20fc23323f465a046307975aadb3fa6a53511a4 source/ui/src/settings.ts +8f2bef4c0f8d09d3abf1b5f238ec14765e90686fa587ab575ec40ed5c1d7a5c5 source/ui/src/settings.ts +abe9e293d72caa30a95e06e3943732c8ec3b1e90f2d1ee406416f4de6235d33c source/ui/src/studio.css 4c506d3599775a0866a5e53df3560e812aa2142d51f75c7fcc2101e489498f7a source/ui/src/style.css 17c75af7578a0a78bda3113ffc534f16fb28b4746db2c8485e0050153600a4d1 source/ui/src/syncPhase.test.ts b1d9c916c07239a61f59221392e7034bbd155945c4e51b8d52a1f7c10ca8fdae source/ui/src/syncPhase.ts @@ -201,17 +211,17 @@ a0878bf2c8869a679e3f8d9a0165abaf195aa62ec00c6b30fa2476ad2735aa1b source/ui/src/ d6f2f952a26ed1a95b57c3bf9177f1bdad5c29ea63696b28b83671f4723c2e39 source/ui/src/useLiveDecks.ts 22ef2308be5782340ff44a36d868ea601b198e81418c68fb6cdd3a46fb0ac193 source/ui/src/useTrackWindow.ts c5630f3796dd4ca39fd6ae7be419f00c2a4dcee4f2dee7d4955d563ba90e6cfc source/ui/src/waveform.test.ts -658c488a20ffec1cb666532ac7281128ae1a511da53729c8d1b05150dfc4fe5c source/ui/src/waveform.ts +e6246eff3804aac9de38d6f70222dee97961f41dbf9259fdbb75ec45e2cd8ed6 source/ui/src/waveform.ts d6e290c36b0562cb939d43ada3220be8e1f5e6b2afbcb7086610ebc3f748b91b source/ui/src/waveformDownload.test.ts -b94dbf4fce99695e71eb5c5bdef19887f4c9e25d7b6394c11f4e3b66de145d23 source/ui/src/waveformDownload.ts +66d211a557d9f17dc33beb972e6cdedb43480449715ff767084c9f37bed8e80c source/ui/src/waveformDownload.ts d520b7485594edc61ad108bbd6864b0003b06d7dfd19ed8c4761f3507c54e1b8 source/ui/tsconfig.json -ff810e399770c5fffaf7cbdab316fe3511de272b7b9f6ef2cb1dfed1a278db01 source/ui/vite.config.ts +1bdbe885694ecf8e06a3c8341c19325533d1e31880fe1e3450c6813f01e19886 source/ui/vite.config.ts 22434b1655cd21f021e5b443fc5e071afc836def5e0b1dde1c01bf2a892296f7 third-party-licenses/CARGO-NOTICES.txt 60a943366f9d896969031949ce139042655055d4cfa5fa5c23b3a1b9b6416379 third-party-licenses/NPM-NOTICES.txt 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986 third-party-licenses/NauticMixxx-LICENSE.txt e0210963031a8b2e0a61ab999b177af2a3f0f5422340da2bb5c6fdcd388730bc third-party-licenses/NauticMixxx-THIRD-PARTY-NOTICES.md 7d5450cb2d142651b8afa315b5f238efc805dad827d91ba367d8516bc9d49e7a third-party-licenses/OpenSSL.txt -dd3ca34b2bff51af7a66f130ddba5b4606015c467a663c75bfa142257b5a3d6f third-party-licenses/Prolink-PROVENANCE.md +4a38fefe7bc331c5a1c0e7e27f1c508a1d43ba658141ee0d99cae50c9319fdd3 third-party-licenses/Prolink-PROVENANCE.md 022a84d9d8198478c4d07ddd1b3f9d3256ea730eab8e67969db1873b2e4e043b third-party-licenses/SOURCE-CREDITS.md ea4fcb309f14a22065e1ea45362d494d320012249ed865fe9c7c0946db754131 third-party-licenses/SQLCipher.txt 08159509fe99d146416fe110053a7360ddfccbba5f0c8f955bdbda025d4d2a20 third-party-licenses/binrw-LICENSE-MIT.txt @@ -219,9 +229,10 @@ e4fe5496320ca8345449d4ce1f8c46589d09267f27d44c3d382041b7c1a58eda third-party-li f8dffd1b26b0caf761f79fc89456a11f1c64a3c46c3d97ed08382a6eaf4009b6 third-party-licenses/dependency-inventory.json b71592f004e94816c438b800d0753c60ba78dc2bb52387224c74c3c562bf151c third-party-licenses/realfft-NOTICE.txt f59ba65550f2a5adff98ec6478d783402c8e0a3eb515025c0b3438f3d30dc39e third-party-licenses/rusqlite.txt +410cf6947d03c4da79be92cb540bc8547074cd93d35c363bbdec4f9b017ddc04 vendor/prolink/Cargo.lock e8017643158cc12ac26a2b8f1d42a207fc6b702e74b8b36e9bd8ab9bc04d1f07 vendor/prolink/Cargo.toml 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986 vendor/prolink/LICENSE -dd3ca34b2bff51af7a66f130ddba5b4606015c467a663c75bfa142257b5a3d6f vendor/prolink/PROVENANCE.md +4a38fefe7bc331c5a1c0e7e27f1c508a1d43ba658141ee0d99cae50c9319fdd3 vendor/prolink/PROVENANCE.md f5e80d8d1015230061c1ec46ca41e2ed8ae4c9544c72d0da06a2845971faeaeb vendor/prolink/crates/prolink/Cargo.toml a2553752ed447e1147617c1b0bc46775232bbc2c9bf4654516721f9d488191d2 vendor/prolink/crates/prolink/LICENSE f8a538bd5a6fb56cd5e8947babf870c71f99959cf76ec47a059b6162188301db vendor/prolink/crates/prolink/README.md @@ -249,10 +260,10 @@ e91a5ff0d86a52e758b83053d86a0f04f213d20db8576dd7ae8146fab6fea482 vendor/prolink 59af1b9b14b6d9e93797a5dd822ff5af4de41edccff516810397f7abb3940955 vendor/prolink/crates/prolink/src/serve/dbserver/menu.rs 5443bf8feac0959babb22e9d20fbb5536d1ff8d4734e1613c24b693cc4cf20c7 vendor/prolink/crates/prolink/src/serve/dbserver/tests.rs 0137f39bc43aee006dad3e5f496d599a3718e9149b6dd0bb8b2afee530dec162 vendor/prolink/crates/prolink/src/serve/dbserver.rs -837a0e7259560258d9b9a32e8a1749faf8811a7e74b6cd11ab7ca6fd3560a5a9 vendor/prolink/crates/prolink/src/serve/diagnostics.rs +a8673985213b912c0ff67612023037d497dfc200d4a34f1604a226f0e8e2c761 vendor/prolink/crates/prolink/src/serve/diagnostics.rs 0c4d31ccd6e9b20100160ab9d4e5a52e7b75f1571460244366d96f1215d20522 vendor/prolink/crates/prolink/src/serve/medium.rs -e4468817ade2009eb44eef78e4075432340c1e0ca7a40231409a208b93fc98f5 vendor/prolink/crates/prolink/src/serve/nfs/answer.rs -5bff4fa32811aa2dfc6d352d5b894b5504e6654925d76d3a4ba25fe5fb0c670d vendor/prolink/crates/prolink/src/serve/nfs.rs +434af55f0e63f24cc26d19caed93a1a4bc470dfe401493ece06d506e30b51030 vendor/prolink/crates/prolink/src/serve/nfs/answer.rs +a3a2888444c9e2f87956364fcbc39d60606e44b313f3d3db936f26bac41229dc vendor/prolink/crates/prolink/src/serve/nfs.rs 5b9214153f72ebefaefe9e81d5faac2993390d1c51eaec334360c14eefbd6185 vendor/prolink/crates/prolink/src/serve/player.rs 0e1f9ca2124d911f15e7398a1b1602faf75df64fa2edd879f8aa799b2667ee92 vendor/prolink/crates/prolink/src/serve/preserve.rs 2871d55f283c14bdaeac2201b00590898f41ace07d5c71dcf4df1ae37c7cf95e vendor/prolink/crates/prolink/src/serve/vfs.rs diff --git a/docs/architecture.md b/docs/architecture.md index bc2ace1..140d49c 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -31,7 +31,7 @@ Every library request includes its source generation. Media removal/replacement `POST /api/live/load` accepts `{source, generation, trackId, target}`, with target 1 or 2. The host resolves the source and rejects stale/missing tracks, disconnected targets and protected playback states. It sends at most one load command. Confirmation checks the player's reported source/track identity; timeout or disconnection yields an unknown result without retrying. -For a host-attached USB, `local_serving.rs` prepares the original file and exported metadata/analysis off the observation loop. The manual-IP session announces virtual source 4 through its existing discovery/status sockets; NFS/dbserver provide file and metadata access. The target must query the source before a load can proceed. Fresh stopped status and source identity are checked again before sending. +For a host-attached USB, `local_serving.rs` prepares the original file and exported metadata/analysis off the observation loop. The discovery or manual-IP session announces virtual source 4 through its existing discovery/status sockets; NFS/dbserver provide file and metadata access. The target must query the source before a load can proceed. Fresh stopped status and source identity are checked again before sending. One local USB library is selected for each serving session. Requested tracks retain the USB database's original track IDs, and compatible audio retains its original exported path. Converted audio uses a separate cache path with the same track ID. Their files remain available while another track is selected. Source paths are confined to the USB root, and file/analysis sizes are bounded. Compatible originals are served unchanged; known incompatible local tracks are decoded and resampled into a host-owned PCM cache before loading. The serving session retains each converted file for as long as it is needed. NFS returns full hardware-sized audio reads within the UDP payload limit, with a dedicated send buffer. OLC does not send a remote play command. @@ -57,3 +57,14 @@ The library subpaths in the table are relative to `/api/library/{id}`. The route `set_history.rs` owns qualification and archive changes. Normal playback/active looping must continue for more than 45 seconds; a pause, track change or observation gap resets the timer. Metadata is copied into recorded events. Edited order is separate from original events so restoration does not depend on the source USB. History writes use a temporary file, flush, rename and directory flush. Unsupported or corrupt stores are preserved and block writes. Browser display settings and filter presets use local storage; host settings, history and retained artwork use the application data directory. No operation writes history or metadata back to a USB. + +## Profiles and diagnostics + +`cdj_config.rs` stores versioned CDJ configuration profiles and automatic +connection rules on the host. The owning observation session validates the +player and stopped state before sending a native settings command. + +`load_diagnostics.rs` captures bounded player history and serving evidence for +failed loads. Reports use a bounded background writer in the application data +directory. The optional browser Bug report adds a one-minute display/timing +capture on explicitly configured hosts. Neither recorder stores music payloads. diff --git a/docs/cdj-configurations.md b/docs/cdj-configurations.md new file mode 100644 index 0000000..bfa3265 --- /dev/null +++ b/docs/cdj-configurations.md @@ -0,0 +1,43 @@ +# CDJ configuration management + +Open **MENU → CDJ configurations → Manage profiles & automatic application** in the normal OLC application. Profiles are saved on the OLC host and shared by browsers using that host. + +## Capture and edit + +1. On the CDJ, use **MY SETTINGS → SAVE** to save your current choices to its USB or SD card. +2. In OLC, choose the connected source player and media, then **Read saved My Settings**. +3. Rename the imported profile, edit options, and press **Save profile**. + +OLC reads `/PIONEER/MYSETTING.DAT` through the player's media service. This imports the saved file, not a live readback of the player's current controls. A direct MYSETTING.DAT file import is also available. File checksums are reported; unknown enumerations and unedited bytes are preserved. Settings from MYSETTING2.DAT and mixer settings are outside this module. + +The editor covers 17 core settings for the original **CDJ-2000nexus**: LCD brightness, time display, language, on-air display, jog-ring brightness and indicator, disc-slot illumination, slip flashing, play mode, eject/load lock, Auto Cue and threshold, jog mode, tempo range, Master Tempo, Quantize, and Sync. The profile includes all 32 original My Settings bytes; unsupported fields remain unchanged when editing. + +Use **New profile**, **Duplicate**, and **Delete profile** to manage profiles. Export/import OLC profile JSON to transfer a profile between hosts. Exported profiles include the original imported file for preservation; editing changes the settings block used for remote push. OLC does not write edited profiles back to the USB. + +## Push + +Select a saved profile and press its **Push … to CDJ …** button beside a connected compatible player. The host rechecks player identity, address, profile revision, fresh status and stopped state immediately before sending. Track loads and diagnostics can block a push. Playing, stale, disconnected and unvalidated models cannot receive a configuration through this module. + +OLC sends the native 116-byte Pro DJ Link **0x34 Load Settings** command over its existing connection. It reuses an already announced local USB source when ready, otherwise the existing observer identity. Configuration management does not claim an additional player number or change served library identity. + +**Sent** means UDP transmission succeeded. A settings-application acknowledgement is not known, so check the CDJ screen. No retries are sent automatically. Native push and reconnect application were observed on the original CDJ-2000nexus in the hardware feasibility test; brightness was the visible test setting. The integrated application and remaining options need normal hardware acceptance testing. + +## Automatic connection rules + +Automatic application is **off by default**. Choose a default profile for compatible players, optionally assign different profiles to individual players, enable automatic application, then **Save automatic settings**. + +- Applies once per connection, after a two-second settling period, including connected players detected when OLC starts. +- Requires fresh stopped status at send time. If busy, playing, stale or otherwise unavailable, the attempt is skipped and recorded; stopping later does not trigger a retry. +- A player must be observed absent for at least ten seconds before a reconnect counts as a new connection. Short network gaps and delayed polling do not cause repeat pushes. +- Saving rules does not push immediately to existing connections. Use the manual push button to apply now. +- Changing or disabling a rule, editing/deleting its profile, or replacing the target connection cancels a pending automatic command. + +Discovered player rules follow their MAC identity. Manual Direct IP rules follow the configured IP address; update assignments if those addresses change. Recent commands are retained for the current host run and show manual/automatic attempts separately. + +## Storage and compatibility + +Profiles and rules live in `cdj-configurations.json` inside the host application data directory (`OLC_DATA` when overridden). Writes are atomic; stale profile/rule revisions are rejected. Unreadable archives are preserved and shown as an error instead of being overwritten. + +My Settings is separate from the music-library database: traditional exports and OneLibrary do not change this settings format or native push command. Player media still needs to expose a saved MYSETTING.DAT file for import. Remote rekordbox collection browsing is a separate feature. + +Protocol reference: [Deep Symmetry, Loading Settings](https://djl-analysis.deepsymmetry.org/djl-analysis/loading_tracks.html#_loading_settings). diff --git a/docs/compatibility.md b/docs/compatibility.md index 41b2862..dd572cb 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -14,8 +14,8 @@ Do not rely on OLC’s waveform for precise cue positioning in this state; use t | --- | --- | --- | | Apple Silicon Mac | macOS 13+, ARM64 | Application startup, native window and host smoke checks exercised on a development Mac; minimum-OS coverage incomplete | | Intel Mac | macOS 13+, x86-64 | Native CI build and host smoke checks; physical Intel/minimum-OS coverage incomplete | -| Raspberry Pi 4 / 5 | Raspberry Pi OS Bookworm 64-bit; Desktop for native UI, Lite for host-only use | ARM64 Bookworm build and host smoke checks; physical Pi runtime and touchscreen operation are unverified | -| LAN clients | A current Safari, Chrome, Firefox or Edge browser | Fixed 1280 × 800 layout scales to fit; browser/device coverage incomplete | +| Raspberry Pi 4 / 5 | Raspberry Pi OS Bookworm 64-bit; Desktop for native UI, Lite for host-only use | ARM64 Bookworm build, headless runtime, local USB loading, browser/kiosk operation and CDJ-2000nexus sessions exercised on one Pi; broader hardware coverage incomplete | +| LAN clients | A current Safari, Chrome, Firefox or Edge browser | Automatic sizing and resolution presets; browser/device coverage incomplete | A successful build does not certify USB discovery, network operation, touch performance or sustained playback on every device. The release workflow runs application checks and host smoke tests before publishing installers; its logs are available in [GitHub Actions](https://github.com/hdelplan/OneLibraryCompanion/actions). @@ -33,6 +33,11 @@ Built-in transcoding prepares eligible unsupported local audio as 16-/24-bit PCM Loading requires fresh telemetry and a stopped target. Playing, looping, busy, stale and disconnected states block requests. A load confirmation reflects the player's reported selection, not proof of audible playback. There is no automatic retry or remote play command. +CDJ configuration push is enabled for the original CDJ-2000nexus. Native push and +reconnect application have hardware evidence for brightness; the integrated +workflow and remaining settings need acceptance testing. Other player models +are not enabled for settings push. + ## Network, storage and history Any device that can reach the OLC HTTP port has access to its controls and history. Local-network access has no accounts, password or pairing. Keep it on a trusted LAN; internet-facing deployment is not supported. Client isolation, a firewall or VPN routing may prevent connections. diff --git a/docs/configuration.md b/docs/configuration.md index f6e8e88..0079a55 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -4,7 +4,7 @@ Open MENU to connect your players and adjust the display and library filters. ## Navigation -Click **CDJ STATUS / BROWSE** to switch between the two screens. From MENU or SET HISTORY, it returns to your last performance screen. Its text matches the other navigation buttons. BROWSE keeps your previous list position when you return. +Click **CDJ STATUS / BROWSE** to switch between the two screens. From MENU or SET HISTORY, it returns to your last performance screen. BROWSE keeps your previous list position when you return. ## CDJ connections @@ -16,7 +16,7 @@ To use another device, open one of the network addresses shown in MENU. Everyone ## Headless host controls -When running the packaged Pi/Linux user service, MENU offers **Restart OLC** and **Shut down host**, each with a confirmation popup. Restart disconnects all screens briefly; refresh after a few seconds. Shutdown powers off the computer and requires manually restoring power to start it again. Stop playback from the host's USB before either action. Restart and shutdown are blocked until fresh CDJ status confirms those players are stopped. Interrupting OLC USB playback can cause an emergency loop and require reloading the track. Shutdown requires the account's configured administrator permission; unavailable permission is reported without scheduling shutdown. These controls are hidden on installations without the service integration, including the standalone iPad app. +When running the packaged Pi/Linux user service, MENU offers **Restart OLC** and **Shut down host**, each with a confirmation popup. Restart disconnects all screens briefly; refresh after a few seconds. Shutdown powers off the computer and requires manually restoring power to start it again. Stop playback from the host's USB before either action. Restart and shutdown are blocked until fresh CDJ status confirms those players are stopped. Interrupting OLC USB playback can cause an emergency loop and require reloading the track. Shutdown requires the account's configured administrator permission; unavailable permission is reported without scheduling shutdown. These controls appear on installations with the service integration. ## Display @@ -40,7 +40,7 @@ Tap the **i** button on a deck waveform to open track information. My Tags appea ## Library filters and track size -Choose which filters appear in BROWSE and arrange them in your preferred order. Set the BPM choices and include My Tag categories from your export. +Choose which filters appear in BROWSE. Standard metadata and personal My Tag categories have separate ordering controls. Set the BPM choices and include categories from the selected library. For My Tags, **ANY** accepts any selected tag, **ALL** requires every selected tag and **NONE** excludes those tags. Active filter chips show what is restricting the list; use **Clear filters** to start again. @@ -50,7 +50,7 @@ Choose small, medium or large track rows for more tracks or larger touch targets Choose **Automatic**, **WAV 16-bit**, **WAV 24-bit**, **AIFF 16-bit** or **AIFF 24-bit**. Automatic preserves supported source quality while preparing a format the destination can use. Compatible originals are always left unchanged. -OLC shows conversion progress and offers cancellation during preparation. CDJ STATUS identifies the converted output once loaded. The conversion benchmark has been removed. No separate audio software is required. [Local USB and conversion limits](local-usb.md). +OLC shows conversion progress and offers cancellation during preparation. CDJ STATUS identifies the converted output once loaded. No separate audio software is required. [Local USB and conversion limits](local-usb.md). ## Local USB panel @@ -59,3 +59,30 @@ Open **Local USB** in MENU to check attached libraries, connected players and an ## Preference storage Display choices and filter presets are saved separately on each device or browser. Connections and transcoding settings apply to the shared host. History and host settings are stored in the [application data directory](distribution.md#data-and-backups). + +## CDJ configuration profiles + +Use MENU → CDJ configurations to import saved My Settings, edit profiles, push to stopped CDJ-2000nexus players and configure automatic connection rules. Profiles and rules are saved on the OLC host. [Configuration manager guide](cdj-configurations.md). + +## Automatic load diagnostics + +The shared host keeps the last two minutes of player status in memory, sampled +once per second, alongside bounded serving events and per-player/file read +summaries. Read summaries include maximum disk-read latency and the number of +reads taking at least 100 ms. They do not contain audio payloads. + +Failed or unconfirmed load requests automatically save a JSON incident under +`load-incidents` in the application data directory. Observed file-read errors, +failed network replies and serving overload drops also trigger a save, at most +once every 30 seconds for these serving events. A serving incident includes the +most recent load request as context; it does not prove that request caused it. +Successful load confirmation alone does not save an incident. + +The newest 20 incidents are retained, with a 2 MiB limit per report and a bounded +background save queue. Save failures are reported in the host log. Reports contain +local paths, player addresses and track identifiers; keep them private. Copy the +incident files before reinstalling or clearing application data. This recorder +works independently of the optional one-minute browser Bug report. It does not +capture browser network failures, packet payloads or CDJ errors that the player +does not expose through its status, and it cannot establish that a UDP reply +reached a player. It sends no retries and does not reconnect or restart players. diff --git a/docs/development.md b/docs/development.md index 1810e0e..33640eb 100644 --- a/docs/development.md +++ b/docs/development.md @@ -12,7 +12,7 @@ cargo run --locked -p pioneer-companion-host Open `http://127.0.0.1:8787`. Set `OLC_BIND=127.0.0.1:8787` for local-only development; the default permits LAN access. Use a separate port and data directory for isolated checks. Only one service should own a physical CDJ network session. -`check-app.sh` checks application Rust formatting, tests, strict Clippy, compilation, UI formatting, TypeScript including unused declarations, UI tests and the production UI build. Tests use synthetic data rather than private music or exports. Socket-based checks need local TCP/UDP permissions. +`check-app.sh` checks application documentation/publication contracts, Python helper checks, Rust formatting, tests, strict Clippy, compilation, UI formatting, TypeScript including unused declarations, UI tests and the production UI build. Tests use synthetic data rather than private music or exports. Socket-based checks need local TCP/UDP permissions. Format application packages with `cargo fmt -p pioneer-companion-core -p pioneer-companion-host` and UI sources with `npm --prefix source/ui run format`. Avoid formatting the entire vendored tree. Preserve source provenance and third-party notices. @@ -30,6 +30,10 @@ Mac apps are written under `builds/macos-`; DMGs, ZIPs, Debian packages an The Pi package grants `CAP_NET_BIND_SERVICE` for CDJ portmapper access on UDP 111 and `CAP_NET_RAW` for binding Pro DJ Link sockets to the selected network interface. Its install hook and capability are checked by CI. Mac builds include a Local USB Support installer that pins the hardened host executable signature. `scripts/test-mac-networking.py` checks live-process authentication without installing a system service. After administrator-approved installation, run the packaged `olc-host --check-local-usb-helper` to verify port handoff as an ordinary user. +CI also runs the self-contained protocol, NFS and serving-diagnostic regressions +using the vendored workspace lockfile. Tests needing the upstream export fixture +are separate from these release checks. + The GitHub distribution workflow builds both Mac architectures and ARM64 Debian packages, runs application checks and host smoke checks, and packages source and checksums. A version tag creates a draft prerelease. A manual run with **publish** selected publishes the completed prerelease. The chosen tag must match `source/host/Cargo.toml`; retain that version in the Mac bundle and release guide as well. Linux release builds use a Debian Bookworm container. This establishes the glibc baseline; packages built on a newer Linux host must not be assumed Bookworm-compatible. @@ -50,7 +54,7 @@ The cross-build targets glibc 2.36. Packaging verifies ELF architecture and requ | Variable | Purpose | | --- | --- | | `OLC_BIND` | HTTP listen address; default `0.0.0.0:8787`. Desktop launchers require a fixed nonzero port. | -| `OLC_INTERFACE` | CDJ discovery adapter; overrides the saved setting. Without a selected adapter, use Manual IP connections. | +| `OLC_INTERFACE` | CDJ discovery adapter; overrides the saved setting. Use `auto` for automatic selection; without a selected adapter, use Manual IP connections. | | `OLC_HOST_CONTROLS` | `systemd-user` enables confirmed restart/shutdown controls on Linux; supplied by the packaged headless service. Shutdown requires passwordless permission for `/usr/bin/systemctl poweroff`. | | `OLC_DATA` | Persistent writable directory for history, artwork and host settings. | | `OLC_UI_ROOT` | Directory containing `index.html` and assets; desktop launchers supply the bundled location. | @@ -62,9 +66,9 @@ Use absolute paths. The corresponding `PIONEER_COMPANION_*` variables are compat ## Source snapshots and documentation -`scripts/prepare-distribution.py ` creates an allowlisted source snapshot and `SOURCE-MANIFEST.sha256`. It excludes private exports, captures, credentials, dependencies and generated build output. Publication documentation is explicitly selected, including the screenshot gallery. Platform source roots and build scripts are allowlisted. Optional `.local/distribution-overrides` files replace matching allowlisted paths during export; they cannot add files outside that selection. It refuses to overwrite an existing destination. +`scripts/prepare-distribution.py ` creates an allowlisted source snapshot and `SOURCE-MANIFEST.sha256`. It excludes private exports, captures, credentials, dependencies and generated build output. Publication documentation is explicitly selected, including the screenshot gallery. Platform source roots and build scripts are allowlisted. Diagnostic UI builds use `vite build --mode experiments` and write `dist-experiments`, leaving production assets intact. The snapshot copies current source directly; private replacement files are never applied. It refuses to overwrite an existing destination. -Keep shared changes in `source/ui`, `source/host` and the native launchers. Review the snapshot and manifest before publishing. Read the remote branch before updating it so edits made on GitHub are retained. Documentation describes current behaviour: feature explanations belong in README and user guides; implementation contracts belong in architecture. Document only implemented features, current behaviour and known limitations. Do not include future plans, proposed features, roadmaps, development diaries or completed-work checklists. +Keep application behavior in `source/ui` and `source/host`; native launchers own window and host lifecycle only. Review the snapshot and manifest before publishing. Read the remote branch before updating it so edits made on GitHub are retained. Documentation describes current behaviour: feature explanations belong in README and user guides; implementation contracts belong in architecture. Document only implemented features, current behaviour and known limitations. Do not include future plans, proposed features, roadmaps, development diaries or completed-work checklists. The root license, source credits and dependency notices must accompany source and binaries. After dependency changes, install the locked dependencies, populate the Cargo cache with `cargo metadata --locked`, then run `python3 scripts/collect-third-party-notices.py`. The collector fails when notices are missing. Review manually maintained source credits when adapting new code or protocol references. diff --git a/docs/distribution.md b/docs/distribution.md index b951ccd..1810f62 100644 --- a/docs/distribution.md +++ b/docs/distribution.md @@ -15,10 +15,10 @@ Closing the window keeps OLC running. **Quit OLC** stops it. **Open at Login** i ## Raspberry Pi Desktop -Use a **Pi 4 or 5 with Raspberry Pi OS Bookworm or later, 64-bit**. Download both ARM64 `.deb` packages from the same release into one folder. For version 0.4.0, run this command in that folder: +Use a **Pi 4 or 5 with Raspberry Pi OS Bookworm or later, 64-bit**. Download both ARM64 `.deb` packages from the same release into one folder. For version 0.5.0, run this command in that folder: ```sh -sudo apt install ./onelibrarycompanion-host_0.4.0_arm64.deb ./onelibrarycompanion_0.4.0_arm64.deb +sudo apt install ./onelibrarycompanion-host_0.5.0_arm64.deb ./onelibrarycompanion_0.5.0_arm64.deb ``` Open OneLibraryCompanion from the applications menu. It has its own desktop window, with full-screen and login-startup options. A compatible touchscreen is supported; use the system's on-screen keyboard for typing. Mount the music USB through the operating system before selecting it in OLC. @@ -43,7 +43,7 @@ To use a Pi without a monitor or a logged-in user, use 64-bit Raspberry Pi OS Li Log in once over SSH as the ordinary Pi account that will run OLC. Quit any running OLC desktop app and disable its login-startup option before switching to the service. Download the host `.deb` from the release, then run the following in its folder (replace the version in the filename with your downloaded version): ```sh -sudo apt install ./onelibrarycompanion-host_0.4.0_arm64.deb +sudo apt install ./onelibrarycompanion-host_0.5.0_arm64.deb sudo loginctl enable-linger "$(id -un)" systemctl --user enable --now olc-host.service loginctl show-user "$(id -un)" --property=Linger @@ -54,6 +54,11 @@ Expect `Linger=yes` and an `active (running)` service. [Systemd lingering](https If the Pi's hostname is **OLC**, open [http://OLC.local:8787](http://OLC.local:8787) on another device on the same network. For another hostname, use `http://your-hostname.local:8787`. If the hostname does not resolve, find the Pi's LAN address with `hostname -I` and open that address with port `8787`. Configure your CDJ connections and library in MENU/BROWSE. A router DHCP reservation is useful to keep this address stable. Keep access on your local network. +An iPad can act as the headless Pi's display: open that address in Safari and +choose **Share → Add to Home Screen** for a full-screen shortcut. The shortcut +may store its own display preferences separately from the Safari tab. Music and +USB access stay on the Pi. + Verify unattended startup: 1. Run `sudo reboot` from SSH. Wait for the Pi to reconnect to the network. @@ -67,6 +72,8 @@ loginctl show-user "$(id -un)" --property=Linger systemctl --user is-enabled olc-host.service systemctl --user status olc-host.service --no-pager journalctl --user -u olc-host.service -b -n 100 --no-pager +# If the user journal is empty, inspect the system journal: +sudo journalctl _SYSTEMD_USER_UNIT=olc-host.service -b -n 100 --no-pager hostname -I ``` @@ -115,7 +122,7 @@ Quit OLC before copying the complete application data folder: | Mac | `~/Library/Application Support/OneLibraryCompanion` | | Pi | `~/.local/share/onelibrarycompanion`, or the configured XDG data location | -This preserves saved sets, artwork and host settings. Display preferences and filter presets are stored separately in each browser or app window. The Mac folder also contains `host.log` for startup troubleshooting. +This preserves saved sets, artwork, CDJ profiles, host settings and saved load incidents. Display preferences and filter presets are stored separately in each browser or app window. The Mac folder also contains `host.log` for startup troubleshooting. ## Remove Mac Local USB Support @@ -123,7 +130,7 @@ Stop playback and quit OLC. In Finder, show the application's package contents a ### Safely removing a USB on the headless Pi -In MENU, use **Unmount USB · volume name**, then confirm. Turn off or disconnect the CDJs first. OLC briefly stops, unmounts the selected external USB volume through UDisks, then starts again. Keep the USB connected until the page says it is safe to remove. A busy volume is never forcibly unmounted; close other applications using it and retry. For USBs with multiple mounted partitions, the button unmounts all of them. USB devices containing system mounts are excluded. The controls appear only on the packaged Linux systemd host; iPad folder access does not provide an OS unmount operation. +In MENU, use **Unmount USB · volume name**, then confirm. Turn off or disconnect the CDJs first. OLC briefly stops, unmounts the selected external USB volume through UDisks, then starts again. Keep the USB connected until the page says it is safe to remove. A busy volume is never forcibly unmounted; close other applications using it and retry. For USBs with multiple mounted partitions, the button unmounts all of them. USB devices containing system mounts are excluded. The controls appear on the packaged Linux systemd host. The headless USB helper uses non-interactive sudo so it works without a desktop login. The Pi setup account already has passwordless sudo. For a restricted service account, grant only the required UDisks unmount command with `sudo visudo` (replace `your_pi_user`): @@ -133,12 +140,6 @@ your_pi_user ALL=(root) NOPASSWD: /usr/bin/udisksctl unmount --no-user-interacti The packaged helper independently restricts operations to mounted external USB devices with no system mounts; it never forces an unmount. -### iPad Safari display and waveform diagnostics - -Open OLC in Safari, reload after a UI update, and use Share → Add to Home Screen. Launch the new Home Screen icon to open OLC without Safari tabs or its address bar. Standalone support uses the iPadOS 17-compatible Apple web-app meta tag; no OS update or service worker is required. A Home Screen web app can keep its own preferences separately from the Safari tab. - -For scrolling stutter, reproduce it in CDJ STATUS, then open MENU → Waveforms → Show waveform performance. The report retains the last two scrolling canvases’ measurements before MENU replaced them. Frame median/P95 and drawing cost measure the display device, while position-jump counts measure deviations from steady predicted playback (including seeks or unreported wraps). These figures do not establish the cause alone. No report is uploaded automatically. - ### Updating a Pi while using CDJs Before replacing the host package or restarting its service, stop CDJs using diff --git a/docs/hardware-testing.md b/docs/hardware-testing.md index 9a6d488..3fd2ffc 100644 --- a/docs/hardware-testing.md +++ b/docs/hardware-testing.md @@ -1,16 +1,52 @@ # Hardware verification -Run these checks with a supported Mac or Raspberry Pi host, representative exports and two CDJs on the same LAN. Record OS, player models/firmware, connection mode and results with the release being evaluated. +Use two CDJs and a supported Mac or Raspberry Pi host on the same LAN. Record +OS, player models/firmware, connection mode and results for the release tested. +Build success does not establish hardware coverage; see [compatibility](compatibility.md). -1. Install, launch, close/reopen and quit the native app. Check optional login startup and that only one host owns the session. Connect a LAN browser at the same time. -2. Connect players by manual IP and by automatic discovery. Compare playback state, BPM, pitch, master/sync, metadata and artwork with the physical players. -3. Check three-band waveforms, beat/cue markers, next-cue countdown, phrases and timing while playing, pausing, seeking and looping. Account for estimated position on older players. -4. Browse linked USBs and up to three host-attached OneLibrary drives. Check playlists, My Tags, filters, presets, sorting and touch row sizes. Unplug/reconnect idle drives and replace exports; stale selections must not be loaded. -5. In manual-IP mode, load original MP3, WAV and AIFF files from a local USB onto a stopped deck. Compare audible playback and speed with native USB playback. Check cold-start discovery, LINK prompts, cue positions and the visible load result. Load different tracks from the same USB to both decks and verify the first remains playable. Confirm a second local library requires stopping playback and restarting the connection session. -6. Verify loading is blocked for playing, looping, busy or stale targets and for formats without an available conversion path. For eligible unsupported files, check conversion progress, cache reuse, cancellation and WAV/AIFF output. Verify compatible audio remains unchanged and check hot A/B/C and memory cues, including coincident positions. An unknown result must not resend a command automatically. -7. Record, finish, edit, restore, reopen and export sets. Check the strict playback-duration threshold, interrupted-session recovery, imports and past-set browsing against available/missing tracks. -8. Disconnect/reconnect players and network links. Confirm stale state clears and that recovery does not attach old assets to a new track. -9. On Pi, check USB permissions, full screen, touchscreen gestures, on-screen keyboard, display rotation and sustained rendering/serving performance. Exercise Desktop and headless modes separately. +## Startup and connection -Current coverage is described in [compatibility](compatibility.md). Build success alone is not a hardware pass. +- Install, launch, close/reopen and quit the desktop app. Check full screen, + optional login startup and a simultaneous LAN browser. +- Test automatic discovery and Manual IP connections. Confirm that only one host + owns the session. Compare player numbers, metadata, BPM, pitch and master/sync + with the physical players. Check unplug/reconnect and stale-state handling. +- On Pi, exercise Desktop and headless operation separately, including boot + without login, mounted USB availability, touch gestures and text entry. +## Browse and playback + +- Browse linked USBs and up to three host-attached OneLibrary drives. Check + playlists, My Tags, search, filter presets, sorting and row sizes. Replace an + idle export and verify stale selections cannot load. +- Load original MP3, WAV and AIFF tracks onto stopped decks using both connection + modes. Check cold-start LINK discovery, audible playback, seeking, loops and + hot/memory cues, including coincident positions. Load different tracks on both + decks and verify the first remains playable. +- Verify playing, looping, busy, disconnected and stale targets reject loads. + An uncertain result must not resend the command. Stop both decks before + switching the local library or restarting the serving session. +- Test eligible unsupported audio, conversion progress, cancellation, cache reuse + and WAV/AIFF outputs. Compare playback with the original; compatible files + should remain unchanged. +- Check waveform detail, overview, beats, phrases and cue countdowns during play, + pause, seek and loops. Account for paused non-master tracking limits. +- Preview local and linked tracks through the browser. Check play/pause, seeking, + closing the popup and changing source; previews must not enter set history. + +## Profiles, history and diagnostics + +- Import saved My Settings, edit/duplicate profiles and transfer their JSON. + Push to a stopped supported player and visually confirm settings. Verify + playing/stale players reject commands and automatic rules apply once per + connection with no automatic retry of skipped attempts. +- Capture, split, finish, join, edit, restore and export sets. Check duration/idle + thresholds, restart recovery, imports and missing tracks in past-set playlists. +- In an isolated test, cause a load failure and verify a private incident report + is saved with recent player states and serving evidence. Check bounded report + retention and the optional one-minute browser report separately. +- On headless Pi, test guarded restart, shutdown and USB unmount with players + disconnected. A busy volume must not be forcibly unmounted. + +Finish with a sustained two-deck session while browsing, previewing and using a +remote screen. Keep failures and raw captures outside public source snapshots. diff --git a/docs/release-notes.md b/docs/release-notes.md index 4edcba6..8ef0fe2 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -1,34 +1,36 @@ -# OneLibraryCompanion 0.4.0 +# OneLibraryCompanion 0.5.0 -Changes since the published Mac/Raspberry Pi 0.3.0 preview. +## CDJ configuration profiles -## Flexible display sizing +Import saved My Settings from connected media or a file, edit profiles, and +transfer profiles between OLC hosts. Push settings to a stopped CDJ-2000nexus or +optionally apply a default/per-player profile once on connection. Automatic +application is off by default. A sent command requires visual confirmation on +the player. [Configuration guide](cdj-configurations.md). -- Automatic sizing follows the available window or fullscreen space. Presets offer 1280 × 800, 1920 × 720, 1920 × 1080, 1280 × 720 and 1024 × 768, preserving proportions while fitting the window. -- Extra-wide screens support side-by-side decks or the existing stacked layout. Browse, MENU and Set History adapt to the available space. -- Waveform canvas resolution follows the actual display scale and refreshes after window resizing. +## Browse, settings and set history -## Deck comparison +Browse, MENU and Set History use the updated shared layout. Standard metadata +filters and personal My Tag categories have separate ordering controls. Selected +library categories are available directly in settings. Display sizing, waveform +comparisons, audio preview, transcoding and automatic set capture are available +through the shared desktop/browser interface. -- Above each main waveform in the extra-wide side-by-side layout, switch between beat phase and the other deck's reference waveform by tapping the comparison header or changing MENU → Display. -- The phase meter shows orange/cyan lanes, white beat ticks, red downbeats and the master player. Each lane follows its own beat grid and tempo. -- Comparisons show unavailable when timing is stale, unreliable or under manual control. These displays do not establish hardware-validated phase accuracy. +## Automatic load diagnostics -## Track information +Failed or unconfirmed loads save bounded incident reports with recent player +states and file-serving evidence. Reports also record observed serving failures, +file-read latency and overload drops. No audio payloads are saved. +[Diagnostic details](configuration.md#automatic-load-diagnostics). -- My Tags appear as individual chips near the top of the CDJ track-information panel, with category tooltips. -- Long metadata is fully readable instead of being limited to two lines. -- The panel fits the available screen height and scrolls when needed. +## Installation -## Reliability and diagnostics +Mac downloads support Apple Silicon and Intel on macOS 13+. Raspberry Pi packages +support ARM64 Raspberry Pi OS Bookworm or later, with desktop and headless setup. +Mac packages are ad-hoc signed and not notarized. Reinstall **Local USB Support** +after updating the Mac app. -- Temporary Browse source-refresh errors clear after a successful retry, with a clearer reconnecting message. -- Explicitly configured diagnostic hosts can record a one-minute bug report covering CDJ timing, browser errors and waveform performance. Browser capture continues when leaving MENU, retries failed uploads and offers a local download fallback. Reports remain on the configured host; recording is disabled by default. +Stop players using OLC-served tracks before updating or restarting the host; +loaded tracks may need reloading afterward. -## Downloads and setup - -Apple Silicon and Intel Mac downloads include DMG and ZIP packages. Raspberry Pi downloads include ARM64 host and desktop Debian packages. Mac requires macOS 13+; Pi requires 64-bit Raspberry Pi OS Bookworm or later. Mac packages are ad-hoc signed and not notarized. Reinstall **Local USB Support** after updating the Mac app. - -Stop players using OLC-served tracks before updating packages or restarting the host; loaded tracks may require reloading afterward. - -[Installation and headless setup](distribution.md) · [Display settings](configuration.md#display) · [Compatibility and limits](compatibility.md). +[Install OLC](distribution.md) · [Compatibility](compatibility.md). diff --git a/docs/screenshots.md b/docs/screenshots.md index e7f7912..baa4df7 100644 --- a/docs/screenshots.md +++ b/docs/screenshots.md @@ -1,6 +1,6 @@ # Using OLC -Use **CDJ STATUS / BROWSE** to switch screens; its font matches the other navigation buttons. BROWSE remembers the list position when you return. +Use **CDJ STATUS / BROWSE** to switch screens. BROWSE remembers the list position when you return. Follow the mix, choose your next track and keep a record of the set. Playback and cueing stay on your CDJs. @@ -16,7 +16,7 @@ Fine waveform tracking is limited on a paused non-master player. Use the CDJ's d ## Library — choose the next track -In BROWSE, choose a USB and playlist, then search or combine filters. Save useful filter combinations, use key highlighting to find compatible selections and check played-track marks before repeating a track. Currently playing track titles are bright green on either deck; previously played titles use softer green independently of set recording. Conversion-capable load buttons remain white. +In BROWSE, choose a USB and playlist, then search or combine filters. Save useful filter combinations, use key highlighting to find compatible selections and check played-track marks before repeating a track. Currently playing track titles are bright green on either deck; previously played titles use softer green independently of set recording. Press **CDJ1** or **CDJ2** to load a stopped player. diff --git a/docs/screenshots/browse.png b/docs/screenshots/browse.png index e1b07a2e7275c2a6853be7d5062851b65a85b158..1d4b96b78550ad9bd04b25a7c5ddebc25d062982 100644 GIT binary patch literal 166384 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 literal 154085 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

(NQr@0r{(0V z!)ehON;{z`vdP>h+0-%ekfMgic~5j3p%zmW*dtkAVVC{&Yr6OFuy@T7`$?@0URQ~i zucoG5(m0Cq@?;P>iHQP;JC7ic_GL`zC<+x-jCEV3lw%3J{BR{Z460@^06>SBZ=R&0Um0TI^ zupdasBnnteM0YAu3Qjm8;TtJDznPC!q(W{D5~6O zrOhJU{x%CE8>_yQ#a#5BqVlJmk)f0IeWl$Q(MJI|I8Z2B207^CO$KKdOpV@%SwK8! zTyO8IS2ig2?8(^#OpOx0Pq!hEoX1Qp@*?uLFwed>1>taj8|IB@>x)m|PjC&sczSd5 zfa^_!H{||5KS4g;zJ2pDaB*YbYx(Dg|A#Mp4Bn;1qE9pKpZ7?K{h9hE>-Ej2Xdyp7 z9tYC_$UMPUrBrZ^1y`!%8wjWz;PR%sbqhTBH&^_fJ9_{805N_15Uk$K^?!ZgU!xVG zC*Js~8XBst^-|qZUD*4*{$`VTnbNu>1WFNqzy6(>(RwQax}#TaX&}uf!D| z7S+-cVr0yX_86^|Het44cK%&aQIVKPvAHZ|pLF?Z7za3ZrKhEt>xiHK>3>kB8c zaQf77GdDdSq+ErkqzpL2Ur$d=y%&G4$^ySE6iby<7#`_oxZb~64sWv5+xJtjyf9GM z5p)eW?qY5S31SG_TCLxjR#R1+HdfZtzg1luw6O$DNKC2Ot5AWX3yr(FViIb`DTF$+i^ zqqa%u*A}claVd1e6Q=aQsp10JU~~PAAZ!ZYRmAM-AnKlFVhxRPsf1bd>2EH0)^4uR z2tCMaEHF3*r9v)6DDw+ax;f^L&7@0tv&$(Jkv6rk>x*?3X6E#~jW{Kf*aO24>^-po zWIVKR6S?G}=lDA!X9lCx%5R9-CW`-N($*2N!Fl8vQZ(?1NUCN{n_V80*T>aVo zrl%6=Iyy4ST?vLGn~@0-nxYp*-2+L+79ihR2a4WyV?7O!N#HE3`3k#zvWl0GTPKYt zwM0NC*Eui%J6~M+=0Gx6i>X>}+_xV1d6@lI!SpW!tl#y@9Vdr}3A_$do6V{(|5-eF znmc-DLh`A=)zudyTLmZeeU&5_E7D1Ln9>rNV#&ft%fGdy9{E)ptAS6PsCTzD-# zORsOfWBCWSp1j6CncZfj)oF4(-$B;TQq%zpUk04*% z#Tv1(FtLVZ0d?T|{;B z+4jh8b9hpDHh8VFC(0Qqvc)9C#y%k?Ymb!k?TuKRt#$IB8d4Zy^U^+w-%t=OAsn?~ ze5SOzj5S~8V);%@?sOah%M>?!|3XZvDk9u`-1;hSgdmiDZ6LY0Pp8y)AWr+N5=HbM zvj9bncfmCNA@YRm%*=-;C+Ph(>Rc!@J@Y97eGR^EA1lqOzBBW7ZyyX`tYJnQHSo8; zw->k)pOq}MK7p9B$cD%QF$@+yrQz!;B4*XW-8w*czu6}D*gkJgy%KnEoLWH5EueKdnr5QY#=&rL?p_+9e|oPm~C~8s&IP@|D&hQO}@ZTvd6%JzSI5 z4$;oq80wfXpWL{xqdfb z?~6YDg%+JOXLYUr5{QoY7@2&i=^DJjM1;Q5bPceb{+R#te7d!O8FPII7v zJxjc|T62*x0xbr|e=uyCv%!m9BTfB9d9@3h;Tg0cA}3E^+8qY}E#BM7iLbdfX1{#ya}&>Cfl}bT+ulbG z9!;;yx)OH!kI6Cvg5B)jV?|)-!?ghr{e6>I4f4ktMtuG8fvfAEDi~@-jhdPoC}vbt zZlnZ*t{|~!w+R(JcY&%#FrX9*z~;0*lx|Tgz3r~k8%d3+ zwn3Z&nu?oH^6oU?NKFdEKu|rh3w3EtDX_QpGaIM8ICK}}9-CECQOVKC#I}It;3oa2 zh7u*e_K>O#d(2Xqlt|%VZ|~{Z0CXwB7Gnj#$23XM#mwBCN(8Fq8aA)?8$=`%kdS0M z7tb|<8050@@=$7#tnBP+lYt$z;xBY^af?%kj>mgFh{H5?p%07x?6U0Gp_g#~F^%E}dmGa;0MPtc8n z(%^`rbx}8%OrM>xji?5yKImFV66k6{r=cZTR2h8yV~O5XsOuXp2^aXKK4SiJqRT0< z7%u`z-oX_7n@1Z;o10`Y?AlqfCkIn)(!|5%(OJgVw@{4YIK-39HX?Xw;)7aQ zK0AFe-DE&6oDdf`eAtFda;G&1!fc9YaEe%5+0$=LAm_`DQKq#6o(a+_5NbMs?(Af^;mK1HP-?EYyPt0IxDL*Pq(2d$5b&(W z1iIJ?j}b7T2-{0my2vzPl7G2!xW@^eda+L&Q;utsKeuPn;{EYl;HUUKN4S#3G5TX! zOnux&12e&SG5UCTH+_-0n5xb*5k7yW;6F)##ZZP55SPo?8?(63DgmOxK_XdSZ|}h= zerhtv}ef3$+4=>+s}Yyx@r#AivtswJT1@{hl*i=QCk8n*^t8Xv_w*0Sv?!g-uXzXNg z;t@TfdfC({ihpvtk?B?MMXfsXO-Eb@I=6XzYalssvMSC@4{+nKKJloybsvPAsec>A zBi}J?+1st|xbHL~;>dG_;UDb8Ye=4+gjZbG;Wb|({xqwoumj>*vbY#dHpj!kb$>56 z*Y*~K`p>@(e8U`n+i2<7HK4%NeBvHjND`xCpmU(7(S6Z7SwWgr7?o{(HJsL4DB$Sm zIEfm-S;hD?@889@F}~c^8RJltRvQ5Aj}mnb3yA+DASah5 zt%(LX5jliJKm%fg?V`vT2j@~EA+!d2J$U$IPv3a}(X6bK8F(mOe~LQ2r8+*Eba7~- zhQD*#;4$sg?f8HxVQ^3l`kx?WLQ+Z$UIp=c}zKO z&oo%otF4R|#!fqVLf43i{Es!`-eWeJ3>L~tn#Fx#QPcdWk&(jGa+E3#eTxm=P}^xp z+W$o@MOAr0P*)#w5vru&&*M$~h(d@z4c(_`;qu(*Rx;9}n};R7laT@LprGFtr_4VY zC$v$G=C0a>`@TDvmClZBk9tUw5c_ZdR4q@-A46fFM>4|0Gp{!7NU_l^k9&Jw-c*q| zgE};MY>*~+O5VZ^x!f3+oe3&9U>#`Tu9s9xBRG#i_UfXR{aJO|XjLd)$#yZUSI?ig zRmV=@r$67Dr*#=F&x^IFE6K53m@+}w92B5R#QktM8tCY<^0LB`<5{@cm?7MDq-Iy7 z$+T__e-7Z8iD`<^{)8TDJdJpHh;zNC01q~gI0Ryv_NB2=ad9c@`ocuk*sq}B9avMl zN7pT-sFr7rcht2d*k3a=e)3t6;HEP}1Qk!2(r4I>1wA z5DP3?;UA@XcDazi>-AwJ#lMIXMyHKl6N)bbF(>5e|-Y#;9P+( zCN`?`XwHzdnwyf>nGA)+$i@a;I*7{--2tU<1>OS-+vI+U16z^9!(*L2stC|6?9L+# z!H~EVc6+iu{XxRE{@4*d0$-4nzBwwT+`k}fbZ83|U$x?n=fQP7F%;# zz|RzIPVR`z?y5?vzYwxDAoKpO%mUdD|Akq=Pr*r}tsZ8m*`ptv1=i-H(oM{e{%@af zMa4Yxco%D}J@FRY`{PCspQu!G}Fn=f` zsglH4OvJY?R*UJ^F5aifRc!JB>`-U#O*hG9uF%<{`D(&V?rtp=#Q}izYnG%-|v{?%T<)0V2uf2G|P;ae%*bE$0IUjW7xG^ud3{XtRM8!Ru zaab66=1#>4#ax-L=VQaU09x1Yp}_)nKVbvdAb&4hF>#T3^VPO}N zl)at>t?!C;qA-`?!FFkRjQqjT>B09vob3KFq~P~J=?^{K_z4 zykjYC5#F}cXY#<>%%bRdnFnaJOkb~)=?QzKH_Y&rzUP&9cUh$_3}oFC`J1qvJ$td9S-ckU6sEi2!stI_Gz>CjvPmwFprE(Bj8j;3KmMPE6ysxm8&ek+?>#FG8qGgdM4Cz{R2xl7W3!7 zWBtuT|AzISehLeNQM;bE2r|A3fK`C)*m35-A62)RVNBeJD8ZA!s9j9lq9T&WyguJu z$-Lx@E{sIjd`f>56Q!0jeA^x;V2rY^s_k8_@1pKL#s1zL-UEpS z(HN>w>KWsXm`FmA!x}mNcN(!3JKOUw=;(+^iCI1+R0;pc7WN)3YgxdPp4+hh8OqRLEN3P*(o@oi4U}85bPY zklfwHIH;LK=`JSr)i`6RRf&i~8?%zjq8xT9@H;GTilB+EiHp`K(@Ug!K2$0+2e@ZKOpq25aX^M>50dPVOWZ#^H1TK;A+^>U++HJs1q234OG?5WkZWCQ z`x(GHfrhnD`h(2oT%iT@ExKR(y7BbU*Jq*^mlsW*$4pIqKZnKkXb=uqNTGcV5D4f!C&%>jMB@J zvC^<6#m83}tU)`HXIX%0&Un=^>T-wAdQKmd*?F(g0Wa^|zj+yHCx5m`FX3Ao=}o@k zrMF_ItXM3Y)K4Vr>>l~kK)0KbHmvGPwT6IeIUr0WlTsZS9rbe_`2MP&mA8!t!i>p% z*u7+_Cz%@*!;ZC@UCpmR_z)DWDI>!|FSr#p{Sk9+RY>oZmjm5^&fg}X8V@DqSDW`C zgTO3)HIIRrnVB&&GkbdS6M%Gca+I|)-ZKIKWamv#&kE+9JHnoSn?v&d9dz&R?0ov- zg-l7Fai62;7es@Q3!1AwTwfF`k>7#y1&ilNL9TYaW5abzQd(v4Zr}|^Ao0~ylSMWz zNs$1*Q?^Qyu!mXaJh}qdD;JTHZPeF`c%AeH{&PdfuR$n4M(673u9!eM*RUF@;lmzR zCqj)wU&T&g2;54pLS|;9>c6$!?lK_YzPVIJ1DpbyEJ6E&P~DD6I@wa8#SAHtPh-%7$vcLvC<>^!C#K7 z_aiSInvxfgNP1ev4eE#7-yh+%7_Cg4G`PJ~QXKw@+kBgo)6Tt4;7g2hCy0H?!YP^8 zvo@2=y%Te-=GwciKQ$HK1Vw}STU*uvSUy|P*70_uYYT4g(b8Np za%0yyg;{+cyV@z(Nt$h(J6r|&Hwt-O9&ddNp01v~LAYFX!LZl;ehZd?+;o1({~ory zlo18%0WxLscF^KrY{A6TZDzLd2V)|xf{&))= z_0O+5-{Y(P{~VC~zaW>`pbMWT&@&s4GK1()or10i;%$F3N#4r^5hVWxa7=Xw-PH*1 zF^Uh*Iyt@#@#F-B9gRBGH85D(#C*js5KQ?pI@g9-wP1ZX8~+9pInL0>;E<3BqEb0A z&C3^V@Z8)iMe(o{YE*`v;`;RJ%$R*WK=FK zC)*n&VnP7AnT5V@hg^cL9ObP@gU@&N;zwX0)}1?Ab&isQ<(89Nn_-cW6(uF9PdAsB zKh2hvH>2Gb(!NDqf+_mkKxN8@weMjxw{;GW_W?+hmXxF&b@}r1-|s-4ee*@i%aNTB zu4nW04jC9OW}=?+V^A7VR#eW>x8qk=4;(WFvePI;ynu6t z5qbI28r!VL^6!&vM1>#ov$xEA@Nthdu=&I(YJOBPI*v~IV?Y=5gv+Mg@U7{o>yGec zeTtN{bR53%NKmtyU!N@(6{LkexVr%;!e^?i$Sd1k5&8evoolo(Fo;M>>Kjq0ww?tA zlTD|FVW#WRQt`=pSo*I8eM+RjgiARB(1Z3CTCY$TU;U#ZBL~HSNA%6=7&4G2a2&JV zY;NuFC)sb5CY4mwe~^8CH##5VQ!GA^IBwHRxY~HMHJTon^pQT{WLsL>ij@~NbxPgj zHgIdTQ6A6jcQ24t`L;e!cDqziuClP%pPea=y?7((v6^PIWCClw**>k%SLbzgb$^8E z=nAQX-T#i+_w~xm&g`6DUW&M$&Cmb#9T^B&uzj`GpOguelaurC@Yn<%(7#N^(M6Fd z%r+|kj=4P9N#gM!Ua@55V5EpfZ`ojYdFkpR?&1=c z;OaEk`m~o^o&#sEsppL&aJV7(3g@-SXdp`5vyD48Vg1qVewVyOugkoID>v}3i(og$ z%J!wrxRt;);RZ)Is@sgzELm?4Ap*Nzo>F%&xb)(06e{!b^`W{>@7nW06;Vy^P89ZR z01J`>Z?CPR1x`^+`MInw9EHg9KHQ2bw_$qDN{$jac6Zr1aoE~4EezcCAdeUMnPs}OlC4JCj$w3SrtSGe# z2po2tV70oh#SBbeAUW!*1WiH)NzjLj=SMQS+f}2m!Ol(9dzHTz=EZf7F%Xib0!3Q2 z?*{5mw;%09MlRab-YAmHcc)KN^75u~hqGyDo&z1tis8xxC%|+TDfV&K*nveL3dMI_ zJO>>5*7-rE)Ye!bkLCVvUo5~g=+orRu1X6pOHS4Sw9zgC`m%BdL&Jj zrLAq|otUU~NX!aidHxqzQsPYkbur7puk3TIglTZA)%d@r{$O8=V}CV(M}B?PmS<&w zZD)s*68X+;#m4T{B2hg9-RfYisH}BzO-+rLME%?>vh{g7K=9TJ6BB0!zjuyQ9Q|D; zbheez@_c9CjbM(hs5`#h9|7O%}5L`v#2_27{iz6_eb^t+p|B&B&^oT5U$FY10=* zH!&E|LTRtoL-3-ldKrr)I@*Uj+jIxk$Mfl1uRqa98(f^)b@zAuVjmkTn=L`JjTV-e zrP16zSjp=(fWx_tq7${+{D(ySABeawH@O`~YZT244cX1s9UlRZ4@=3VVx&8Y8Q7aR zFLx>sM7Si9r>Cd4S_78R#*uw{P~5h(l@)T6_*ZcwaF=^&0v%14kULRwO}7IWwL`re z{zbt6#B)PYNeN8;Ma9P54p&v6YMK(7Z{MQ9|1ZL#$qURWGcw-)*1W-@uYefPB`1iHVtve4>pF=zVu^OrB4Z9H!QlzFtZ?oSN^&U_E=*En20Aj+hr&GdUf zF3w)PJHZR!RdW`dva{aFmmnEPL2W!$*ZZa_j^uD!`yMT&}J@o7;~oy$&YdZuJo z1eM$Qd3p5J`XN_K+mH`tq7dx-NA~HPn7LVjNxUt@TJMTQh4E&noXnKlJVU0cfUz87 zrhWFFs%ZyP_qdXYMB860jpJrnUe$EW(`Hu`vEck}@N`IW?Hk(9I9(uBRL~A>-^XmJ zs9K~Y_UtDafP1vd41aXi$FS>W;oRo|v>G06?s&en7$t^s1&;n6k5e&60I6yDTosh5HPc_$jHhPJIW>to#z)DW9w{gZDC=KIkIBm=~a&wsF#C(c7&Xc z32r*N#mB~0bU<8fH7!d-wa_0F6jbZ5HqsDv!DYAj{>K6JpC1JD!X76fVf2({Aft?sxS{8(-aZUFR44AA1eGmF>K3zqr zL=sP?K}xz|Dfm*b{J`64x*E`HC zsM4$0_($v@#)D73ld(%3y+IPL!`@o(Q6=82JGquz<&cAsl$1@4NsuP^Jclg(w&&6u zMtAhcnb+hZ6IRJ7*5~Z<&)GeXRW($_H)6<2_pdOJT3s#(na-j{+Pgi6Sk7fH4LDaE z%(yB`OwVm*F@v-kjn)X*sRM@L09w<98FpvyrkMof9)-i%D=T?;7;l&6R>EvLtgf$` zU`w0&s7uvJ#s+LnW?XkRCbq02Kz|uID#%W!eX`e^0E_iDA3y3{l5BMN_Ay|d>%e-J zBIlvTEJq%`|JSdE#s?zr+yDL@p+k*5UTFa}IQg}gU-Gxhj)o=__KM;KL?g5|^7a*2 zela+^g0k{Vy^Ahj#>e`(>_3Mo&H#Hsfd6w2e(maJRz_JQh$^m6B@#xs=T-*T0FzHE<36&@oRr9hE4fPfJo6#zK5=1&ecRpiCp+gp4vKFWNw znOp2Q0LW>;%<8+J&|8rB8Y*552k}@IDjU^9j-oqjp}^#-xwI%o-w^pOA+8v0!=~{cJgl&ziPMNEpu5i=%Nh6XIJvb$LN+BL zKDmFSe_W}ZdaBAg$0Eg-zQ0$i!g6cQcZ89>C$vc!XSMjGL)Qb3eB5ODy#}jr&RPs? zOz;8ao=u|Nw=m8Xq%Lq;3^&~1(D z!V1qln{^r!#e>QC4LkL+(8?~1EcNt9`{SdPh{d+R=QK2N?qzzv`7Dp49(LGSk{WKMKen`TBw>$qE!|URepx|i}uztn(`1rp;wyH+~KaRIWK5s4(88oAv57JVC zWu`cS+iJw5537jbEBrwmothXKf!T&La_SgZ?Sbuhao?4vI2%+TQHgqh z=c_>TQ!JVR_KKXWcR~3bgKe_8;FH2(p7l(PHGu0^>|J)|5zX_Pl@=Apqt^x2h$d9& zQU|abF(Nx42mO5IuZ*I8PoX8P`x~_}h0cAgm`>yAY2m*@5+m=dwfcAU*gK76(*EV| zr?i-2^QU3U&XE~qQ9qBj#u&LrwnS(;mf31$eK6s8EQ@s5v~Y{Xo@eIy>$;kB9Lf?m~Z zV#*{7#ih}V`hZpKJ{go|iaXh!dQOMt@n+%#Pck1_(HwTVqyJSRmYvm9_Bf%+>jR zE2Y>bVQb03%xQ&CY>&QPCayuv5f z{UmSe*&*;z+iOjK>A5JzbDg_nmF8B4Qy1H?>4-%Gii-!%>wK?R21CsVqj{Y{UQO;+&e?%k$83YWCwe@sTc>LISu7AxdlYs?-?KrqfqBPw|x&GSg{HnrC zw}xcx{8t4{m-9n_HKtL)%gn+AjEoc`V~Tfrx%DqYlg!O5Kh(c1jYDET2#l?^yvsw3 zK5C}4P}8X3%#M_07o~Z=#)9G(q&L|OBOnleU?ga!$vkfLtD4CL$A}7T9Td;G+p=0o z7-hvWrD*)hW96bLo&J1xh{J9lG;#~7=)hqk^qaPkQ@W0Mg$ye=gD1Zb!ksU<81$af3&|3+^>VvEqg~o0B5m zYB=i~JX@ev%}b{~v0eCcevR6N?aokRzNTGVe9W{N9}}{}%F-E%gC`Xb$Xi*G2}w)} zb6z^qcb7C+eEvrxR+A$*tHAQQzt9Wo{@Ca+K8|bG2!ViKo6aKhV70DD)xy>ijq6s6 zkM9rceP2vG&}#@eAGs>pKX$@Nu`F}#`s`kUwCS;{wMi-lLARXl%C-1F%Joeb7~ZN5 zh6DsWo^0gT9r$(K1h^8P4Gi{O0HcE@?SMQJffdtVpCmk+Tb$q8^6YdVMPI}jU9Tsr zuAUogU~_rPH>h{|Yh%HHZ`&e8se?sbPuJedq$f0VtSWXxeU%?WYR|8_-`m+u_KHwr zNf;Gs8d{hsDv*pQx`d1lFC&=BQY$R6b(T~syra!jnhZd+R6}=+Oa}YeP zpJp!V_xMkD89yo!v0-ZKWIh3znHy3$ zTR~#&e4!G#e)HC&HHBG5v&z=tH1%HhoIXQy>Qj2Y7^*)Ou^c90sgzGBrZN#6XsoRR zpsR;pK0c5+cj{Ck z@st=fGZ00sPq(>$oEro6{V%QO6rWY3%zrIA+e6|5Y%`8NBos+}E4N@+{PQWb# zp$zLZSx@^*srho36>B4)_RiZAUC`xB!wtP;TMy`WT9~SRRf9K zDw(hZ9rq}Lpp4HoPf?0O#&SIweF{uqia>}Q1qSGo{S6I5dEI%rxkE0%ta*7rhkr3P?G*fQKNS9)UZ&|DsE(3BPATU;-7go4@7h*{vCodO`a z@veuD{Jq2KMFW)+x{kafoE|M@zB#7t-gIzmNcIS|EqrXte)%MKU>3Cy$*44W4atSp zgQNr(ws#VXv3_r_og^eA0Per1P)btpt#RIeT3(mh|E(yk4)p~K2uWmQJE?J=Y`T5} z{7JKPq9UUiJMAk+GsG@(Z_D8OrQ}Ji|90NY3)Eqx=~^jCip;S;46qPkDK7cy{=R<( z*v{SQDf^aC7XFxDY~^ZZ`>a#`q9Qgb`W+%*?~U%oRZiNk%#5tCxbVN+b?t(8>oECt zgx4)CggZ0&gkujvdA5(Mca>Xj*#s0k->8l@eVY<WE^lMxaMLCIOz8_6LKR@3xm-?NTTmO%%fIwUcPpC1P1eb3`fq6FUI;bCp9i$O)l_w#!TG)F7LUzCFi7qr7rziiI7Cw0q_ z&t{^u);tc z>W95u{mYWg=fkGsjn!rG;&uuO@4t%-*F0YQ92dG!+>D-U^77BjGy=B>u82sa&Mk;H zTIzL^vr%u_E|+3Bk;_MV9;m!erslXA^f_93Gj z5~yw)H_WV$TKhj)?+yS$&#&U&>@TMzzX$3JCWI?+K+juKJA41(^aTD4Y7}u%4JSzo z&jqxejrO&*oqha%kRjc)SA%E>&J5Ad*K1yDTk-cThbsp6PD%DK-*Iy@G#PQO%5oq1 z5TQ4^y}h!9(JqIm+8sQ%;Jco!@@T0sQ^qldm>>1=;U07se^XUa(Qdk0i^n2=@}wkK z1bv1Alb<7>D0?!o873?VadAbjaFOeiwm=X|p)V-bFH|sD>tF)NdT&F)3(M8o!LkH4 z3WeI&L`SP4)hex~$F%F6OZl3N6&_m;XZ2m9Pn)N!cT0?H!Hn;u5F{=r0ht1QdX^&7 z^dz7N{}>;i>*?w$C6Mq3+0xq+zeKSFJuZuQnwiT)czJoZ6)?JsM6ODLnxugtCvf}I zmy1dDB0z8EymvlYe{}I6QNU>v5Q;6ceSGwjs_s#1i<7~kUw4g{3wJRxt*kZFZl8=K zfAmnje!PCzYc}{qpyD?--q9g2bEed#rUrxn$WuijGu%sSH~vZNut&A(>U3kgmKU`A z;6yAb*;UG!r!i$E;A~9R@{cu)d!VC^+Y>?04PjnX8AGK&Zv&gXzNw-HG@DUv@{?w^ zKJ?iJC7m{LExe|pq8B=)0$zr5cz8RxHYS=l-&9%a0|QO*2P1tEm+H`PXq;TeZJE!D zi`7VxzmO3P5aKjy&u2OD0SQH2XxG};)`clo5cZO=3WajEDLX%BeuPHb;HZNqY*z)^ zOaP$Qtg-c%c5mPQ1{E8Ca_@Y8<|QdVB-T=9QLT@gyHjO@0NT`$TPr!$z4J<{auLkCORRpYPiAG&&CTg-yA4GO!BEFAX4R|k$jGC;1>f0v z7kWCnv8$ra{)uT919IhW#Ey!8g98E#P3~>YHTtKfBnbtHiFx4SqIuFPq6DlSy{@2)8#eGT_iVx+0WL_*Sy-|#5SM)26_*z3sK3^Hb% z_gpy3PbJZMw*8aBvO`YUmt_z9i23h~U5%py3*Y}|ix!%@kKSH&3Dzho-mPux?bwq9 z`nS1IfBz1^ET1^hg`u=(`*;~~%Hqlk3S?}x`IMmFtfH2{yz^^&!@!;Li;D}emn8u& zM=&eRee*F)Vt>3FMnH^X!|UUd39qe@>LV9UZrG0jTwaaX(q}DhppMe0~`EHhHWCR4q0+nQB^(U5xmHbp9(pdWNc(SH6TcS-qvoh$42KkW=y|)6m1dcU7y2QBh8yz5u~PR>ljP=_>8I5TktHCSNLeGui(g zsRq1jM6MfV0G5*ERp;fgwZ6{KcEC?GR;+uv_iMe9cKgR7a4W{ZJQ^Ri5H~W^)YQBo zn?D;!MjihW^*4vAxmqcYAZOxWCn3Ln`Pepx$hO(s7~5jMv&S=^OPddo+WS#schdQ@ ztGuIM=N+u&s!?b$?N9FTG%7i(sA=m7ddONp9H>(_(!O|RJXIN4@|TC*)69G4N_UB%D$#krW!y;Vgc&y$camf<1{GqWBNkRkB6~Gf z7FOeOiWxnQ28uSj8=eWrBkLbB3Bk*vq|`|dcNe@rc3{xfCeDh0?NQas)}>LYng(I; ze;`*mt|x{(FwA(-=684a)F-XDNz!672+v}oygknsazBOdVghwMUXD-w`Ze)>Ee;G(A1M*35W~5;?tCt1AF$0!R5MK zJYeWJ8)FXdalwZ}uB!c^8gTOMdjeosdsf+|i61pLr}%AAk`VIG&-=Ue(>4v7eu5-bxm90s7~#yu8iDHtE9W6dskE_CSdf4SDa2#$I^NM?0uYHW+JN|(9?td6Z7LsN z7)o=i_O$JxDJ{^KxdKTk*E?iSDT8v{0`Gf`hoeL2^e z9OPOVemi7vwxb4H@W!bk<36Fa@H z(U+lllW*U?1-dDnnxC-r?bj=JFc>z6HIL3+H%H7OzXHw*DALRge!#YZ`jxHT!7}4$ zqvpBgve|If&UAH3+LwR;99qw}B34ER%aSsz6atPpeyHE)1AC>W<~akgoEzJ<(gP`n zYc}OudWG5fhX|kaT`hT0?b)_AGX%PIg!iRIThu%bmL3RilclsGe-3fkfdB63z`v2< zq@HkK6MM?usT>P`Je0PT$ghh_SCegsum{G|*H?!FcX3y7={lHT zY+j9L2_6rk8j~?}20vApJ~PtGV*0{K*qO`CRO9jpIevX0P{8kb$R>2qW?0*_K4 zk}>7y51d*jb?WPvIiT$ln>;%^Bl9CABU22Ec)a9~V2K>1efKT^syCD&Uy}i9bP1t{`-{KOI^H(J->FBy=I5$yc8U9fU64~Y`jb^A_?HOib;ndYysmNO1nFT$8=1mqH5C_~ z+~hhm^EV@dpkp9}T7-#7U=^NefuW^+KN!y$IU{#>bLWBfcrhYAJfOJ~0tuG*HxXvy zZM=`SM{@X+oRz$v^o|R7G7RnC$pg5a5%l^=>?iHmj~%}3`%kg`>$C~`}Kj4 z(b#+@lk6mK)rFa$$>iWNcZ>KI*;Kj&)tD+VaFvzPO(BApecR9f`Exmg(7dCq9js5R zBJ}-k|Lo--6V7`LI1jq|yP?bIzrTOsPAh$qKiejSJwMHs6An%wSA_8La@SnXE67^! zwEBl8xjU;VDi>J8W@b}XS69x@noOssf))@)A9vAS=r7ea_56-oe?aT-Mw?q45*-oM z-`|zLqb)_(9dMBAlxVcv3eJYiojts0=Y{l%dKa6N*KEK{k>Wu|R^ogiIMZ5AR{@5Q zE3)O6!QrYW5rrb>-S0Iuu3cNw!~cV^w~niF@4CG)00qH7K#))oDM{&65s{8X*HY;& z=`;`}M7q06y1To(ySp3C#C_jSz32U$XZ^Fch-<-hUB8-hjPLjhXgTEz*PKgHDNRZ$ zJUwbN2qrhCo1pZ*vq0ZIm9eu|hbmgfS;v9P_5z=`peX5gMZ_fxrDkLH-3?lWHkgTD z*1XEwHy_BnGFV-z*&)6*v_ICM)^Ya6NkxUYB$v52wqkcz{!~_>*G2hus-p%4h{iDMIl*PMR4MYiMfQ|FB6velAmWNftjzXF1NEb0e2-T8|_x*eJZN6 zanplc`@3(p`jXu}2U-f~gyZfHSHIlo^)I>0xP?}%#DC2GDc|U1GuYT)KQ=53DXE}} zl7PDQyw!YXXGncMn~9rqv|RT>XkXPb)>diR!S2(z-SiVzGV!msBTK}KtgI^{c({~F zxy{p?1tu}g4>up%f&^*9tYa-YUbapw6Ir@hpffOkvQZwL9~fv18r8mUF6a$)O!*pKvc_pEB`(KFo<1!nqqLk-Ry<6^ z>%=b?qCMWd*k#VQ9QV{>Y(gRHPxTPfyCAq>W@=p!ZtF($6`IOAa&jY* z@mTcz81Cehw8g12Y4$T=GxE5nMOAl=pPk;q_R25F`~CY)Vw#Bm)P=Zev=^p2`o58V z_vxRK#1x;avd;8ljxuxkBz9%@9jWMP$eR4aI4mF8ne9!Pv-wDOPy0%rb2<2rw>36@ z=%F`kNeE9yzSpsEhx^*8uuPN8`rB$ex_I99`I+Wjp$btOO@%lLz6$4L)XTDj^Ffbu z;BBc=gNgp9Tom-Ik2z?#3dCsCh1Nq$+ti9=p31OlY^+kZPd!*!IYxDn&IcJ#ZHD*t3!LDe+P*JX<`9n87c)cQ2t03w1-9qoA;`R#HNwli!f~F8+NyDdsuk z+3uBlK8TEQI~4^rll_}Fq<#m+f6tC7)$eF060hqGsX5*U^yKaElJ*E)xw$9*e9UH@ zP9;iMfH(PLxLXuxfO&lrjPE!?c z>6G|Kui5QHLKRP?Na??Ryin#lFYz__erXq3Q4c5e=#_)WAGaP1wu~zvT@BF%Yr`t4 zDo_9qX#m5rI7F{kTvUk5Z2hf}ZgTmb`A%M-P?%eh@La$cIEb{iJ3*IMd&qSY&$WhN zyukHW0-<4XQsH6ekbd>&fMdZut9zw!7@NbYg8FK4$yI>8i43GyzxN!jhV%FS%qv0U z^fbQyzRF`I_pSVK=co+bL~Vuo)ZebAE0D|m`c50f^s(jhizC#HAgXW8Mbf~zROAp% z2Z%EA>Gk){9hiSXIWG;FC!cp-Wr;&3l%j-&L?{+j6n3XSYi^cOYHx3|(>~Tb3?#ts z)fz;nyOfv0E7GO@M&+KnUL6;9r20Q!LRpTvLQ(avzd!u+zsB;|JLbH+1}lZ`c=M${ z0p+mv+jUf?y(?D=KUn0hx7vRkjpP9_UWydbN%iuRcwgP9#9H^o2#b9G2>tIz>kt*9 z{Uh#03Hj!A#~F84GyW-g@b?e>)tOUr*pXLZ{1T4OnXp3w4#}CO9`w{cw3(A5ml}p<#dUOOF0awU2a9@IhZm=-5BY(u2e4!J#3@%?mU{0^_cW z%*y);?4lW7yojxR$7co|Y;MO>Ym3zE{CtpaL)s|rxksfuY#H_ z9daIRw&OslS8;wEss)(2y9IkdOf1b+6QJv2&{Or3w?q<>iTVg%$3YGlc*6 zlSD_W&%96;&lp!;M{7HW^*l4`%uW7dog^xXXNfoIyX)gPGzV_qtc+y;^X+i7i&&W% z@l&K-$!_w4rP1RNKAZP;w&Uje94BV=k|RF~cT;a8rIcTX&ZHa1-mw+NXtn^6ojG@u!A*xM@uHrRYu!dz-rc?5NWHeDd>FvEHhJHENN$d1QT z<0r>MqvX?yR-~_QO?g}fNJFw9&P6=ucF?7?R56 zgWK6^3j}6@(i+67FS?wsC<*C%Wb4c^n+#cFZ(^2e(y86F*z3+}GGQY?;( z+nstbkyw7kxEyd%reDLyQOYKbe>1wY%U z@VSp^N0^hdzb$UA4vk`r?$V_&+U${6(&F8Tf8Rlaefzd{B$bzxlngt{$nfxZp()wZ zr{9Km?Pu!S;JlN0#dF!iiLYs4vlNw(&=Tu`}fAV+leJcc5n7xO`yQW&m zl%%9id8_kN8!Rj=w;reSqU_Af-{q-a(tSbAg*ZDJ%2}XQ&VO%r|NiU?CZLA~vMX|aZ>wWIx-^ioJ6N>Wei#_zzRFLw6z}Kv zRA8};f=)|wLAu%Bdwz}A^0UucZ8RNh7`wKFV5iiTNsHdTxT3SWG87yDD1FUCS-G2p zAlVXH3am$<@Y+skNed67P}mt-^d%L(nV<0v@S&uojlEU6virg&*sZ!yRliK$n~EBv z`@Uw)$3wyE7#QxpJ?6Bcxuw@;>@0L5yw9FBBxugpJ=KaRdB{-cs%W9yL_--2V}2`4n=tj{&@cgM&krSyWUcrG!%|6782AUvUxo_0jqHc^ROeKCbpAlgWOEs?_Vd zA$XvbIP<5GhY36RDujXwO^K-#nYkG5uB|}FBIX(SED-4|`Qbj^|C*PZ`{ccoukHhRh%815Lu7JjPV$eyvL8GD_6sqT?K z!he7$D~QTWLVC5IS52{zaDN!szpLta=V=q}g{4nfXbPI2vVO@Tn(F>v z2C@^(n-p_W`3RVAWMuBgvo!xUGCDx*a!r7XkCbI8&sR#@G^z7_YBDp3g`ny!nRwucM=*Kqi=V*6O zE<5e@iQc~LH8{xT8V}r)EvRLtSYT%Orj$cgJU+de&+p#~(9!RR;GsvBxBfGVunFz( zbcn_BK9{X#6xno4(Hib;FJEqozM~*nO|$RiSuw9z(2r z?S?7yj?=3lOFE*Edpj!XdX$tVY7tTTLot8qxO^w#T1lw17qeGtYV^xIBsr?C2#z6k z;ULhTS!iUWgiu~uT0VX=C=C1B+bvJ_iTw|Fk z7bY7w@;cVi%uAkaGp4if;zM*nB2GIV8VY$q5l{ky8MQpr;9_QX9p^+@wY-Dx@n~23 z;rPy`Aw`4%_w+dvb5p&FJj3B~jr_3QHvQ{yPHnDdjK0~XAG$(iViTU8G>oe4W*Qqe z?tjYf)V5PvPGv&6`9b&+$MVvWl(L|p>s1rsW@U4Slfy&sph%PZ5_c9DBi-~wk2H%x z`*uHqD&ul51+7ZlB|lG894br&Wo0f74(VQv8S)yhye4L!GPOXtpzv@pD(~Ugx1PP7 zor9$|?ooxyGc_3p(jPUN$@IaEJ|{bTy@aoCYReiP>yH(b!5A|s_ zU<$e+_W%!Xf7Xzt)kh%j({M+7I2Yp_f(P-6otarCa}Q{Gu!oSmjRo7%m<+#g%Tx){ z1pt#}X^Vx1ga8xyA2(U#O@N4&aneR<8b%yHX! zeCvTRgtZBNs3r09wzDsLM^r)SfPQdPD5U zay4o^yPKPE@@Tq`*y=n!XeZI*z42FOt@rcIa1SZl1VZO%8X_fyc);c;Gbor0*_1zB~dEt7H}a%rD`A=!9q$vHxT&Kg#8v zGRf16;ig=h9=m#u*)h3GpXer;hZF5qL+R1o-iOV0tMShWZdm`j7LeH&9ZCA?{Jva~ zu;K~VV)t8pnBky~ve}<3db}Nf!3Cd-6E>wHav69*d62!pIv`|wjBl4?bok@H(-_x% zF)LA!9-z%?g2HC)KPBh_BW(^i9##foT`8=(JQ%|NFT~oo<3Y!$tBWPx6w*PLdJ>U^ z){IZtgLGBY8$4tY^2!B9#Fv&qi*G2SnY_uE09%dHg1dOSUa~P58i|XC2crt?7$vg5 zV4wy;K%ShOW%$+1!oouk^#VN(kf7JYd2IIwvu!Zv48g3ujCbm|)cvJ82EG?zx9!&i z{?$uYBg)2KysNW>w6q@NHwp;}i3B_calc9)@XRmHX~JYy+(Cz_F3}KLKs~Pt=L9+) ze7xRI3zlG86L6_BK(PepIgWmB$%CsX&d%9cHxU`#udfm4yg9^#qgLfWd6|Du&>-v; zfwE`6Hq1i38NqGgrkB6le|oeN$zwOavEg)4uI!3U{046oo_PpTy>|7gy}dn<9bWPn zj^yp^?TzJF(erFfR8(x|mmljr8~N?+t!rpRcPck$s9J0-B`Yf?qU_$E5EqvV-P9d? z>h)^{`U7-G(g`?=c0UjhKwSoM;@!P8ByIvl1gzH9RUme!qoRYJu!xe$4Oq!gZ@6Ssui;X3_D4km zNLMbC9M|Z$q1#OeQ!C3Vj_z=Y{uJT8CvcfAi-Y6ZUsr-t{Os zjXB&}q+kiXGz=qnYSPovh;VRr8c3apc+G-1#Y9B`s|PLIAx0=5>=NC-|5U;4YKm`c z52(4QSe;JR3i3w#L2*oZ{72HlK*XcmLZ*~^u0muyr^2roI2EO`=78nq~3!B>JzEl;VbvRlk zLH@TBICqW4OUV_4qs*&wa?<^^4LUvKdPf54N`MLP4eatj~~!j0_V`-54i3tBOu<0)1h+66HlZJEBSJ%4pgDqIX|MYoVK<~Vz-=ID#ly&0FDWQ4{AFjV zW>&L^bGiH8G||GZVN%|-yOXRS!`Z|JiXJ}ReWHmhafJMY&0t|;r}Gba+yet0^&TlT zMgM8io*&N*S7+yN4OTfLxNR9IxI&XD${igq-LMR%)BW4#KJM=B706>A2i;y>b@jEu zo-D8if*}R8d+O5CF==U!OM0Qo^ZLuzl0ZyMOoV*K+C0Gac;8o|RIS-lt#q6FkHnm- zmRMbs+8;sWt>Z#_=*c~aP}Z|kmmQ!1e{9Ct2JfH%tCW(`Gi%_le1DMP1h@$eJda)U`cMG!7S$taEnOr`4#3%8;!sX!;VJC`(=F3EA(nsO0 z%gf74ynB~qMg>!2b1)o2MIDlilmTi`?fX8t2aMA?*0SU13MyY@RBX5`>MnfL z)qkZUQ`I%Nr%oc1!0~~Z)14wFL25?&-t^aC5zE+|#-V^1<695mG~AU|>ejXei3|l5 z71o`OhAJt=6}%y(5E+%W)YxZaa*ncMAEb1pZFxtEj^1>3>EF#GVr}ZPmcE!@EzxV{ z&VM87ggzs^J@~=P-Y3v#H*Jm~!8H0RjB6Gtse!nK|A6Ef*XFO;-EM4a2OLxsN-Hy6 zN+2)Dm-U^SU-*MHw={J%gYJxJ4pkvR?I60@P*%J`^vJ&wsO{aZ0qrAGjjK*u||lM0bX!!jTCX!Jxyy$W}3A(e-vrLFxHQ_#c6p^u#{1W`ph7 zOwZUd3ioTaF+`FCSJ#TD{zhibX|wcMDv;H%!0IZAQ?#wzj#u_e?UIkDdp*Bhlp<&@cxEZi2!e&c1L2bLCjfL$!D_J> zfaF=#U4)NaYGlpb7v271P0y{pE@5-HlasYNE~P|}r1wk!bvL6GRxlb`Dxn`gmse-0 zX(=YEM_&tx)oe8JFZ1OXw+x+)3<~P%CJ)4x07;7ptEsYcFv&)QKv9vAk@50|BD$-q zrKJR1XfK3Kia<`gU}>cK!WfTdJ%S^7qS;UP-M@n1euke;yi}G`3!q^#FuRyHAY*v) zA`#-GZ<@A0a@7Kzm52M?6Lb!qR7&RJ>4aM#JcQIH&v}PuRT!SPjH06h$ubn4e&)z6 zryQOBm~zG|A@m*v<=ZH`okrvAkh(TK6#%jS#Y*dqW2>NPZWeygBfSGO@n3Ibg(WhA zUcX>GS0Cqv?NC&1Zix zpx6_f*Id)~LJEo4UyM}k^S9x*WgfA5EMpy~N#mc*G(S;uCG;1%uo*{*)AC?e`tjtt zZK9E2c>{yI9e52Eg4uVx8U*U%-5WwXh(^2nRRlB+^f=PGdXHemkgYcSjlvs)R)*!{ z9Fr|9E++>&%pL|k^M_BVNF-o_=1I@5kQkr2TwG9ClD1jjkxug)eXYH>@S}}bH+#q6 zouyITgbuc#!Eq&?_E^lc??ka!*kVFL&|aGC*}sYQJ_%npX)_+N>G$9NnevBZxwA@+Up4%4Q;PQ8-5UOz@{G17l+UWaSyn$8;!`r^ zGhRpV?#akWhcN4U#KgSTQ#y_)L(gW)Q7&M8$elz=KGN8@SayQ#A5dQ80O>ty`K)V^ zdo(Fh!aXeJ3NA-BOkcX_yh-PV6D#GkS_TP;ssl=pE5j5sA5%%gV-KzCX>U&$_&* zLqI@qBcrNjCOAL;nHPnCAx%sEZBm7%Y)#+Po>lvu4tCFl^tDR zYTRkR1HQSLInF&Fuy!-|_Ql&U(Ie6Nxz$wp#e8CnJ4nD)WjGQ9G)ol8jAeTaX4xBO zZoKV0?$M^574&B`hi#i5kIjIgK$pyzFwI?KfgHb1nw;;Mp~?E2(IzA|GI|08(#o?~8qoh2^++{B=Gm0K%K;Zof z`rHEF07JyIDV*Z8ETQpc1ej4~kITowRu(?s&DXIj_jrj9<l1f$>EQRdff5+pXVHG7*_tUd694 zO{0~K@ZfS(e45@qo`B@AmOwxR!M`RXT)%cJlE6lGuW99W%HlGn?Vzsux8$XV9fOY2 zJ`}Xw9dlcpw+Ir`Vy$$RkBEJ&-9q0;;3?Uj#PdDApi1S5o`yf4c14{opB*!dLb=Plda8!ax& z!;fl_Ug=r@KOU-t5+@nY<;aC_5ZI(ddfu%_dtqgwHBv;NYZFY6(sqmH_DX>Xs@<^p zEAjn+VuA6J?M50d2uaC$-S&=%hu}~q_CX9OGkLw{^3(+uXq7hBZHcSJzHVrvPB{m&)DC?^5UW7@N#m?d^nLsLrLZ0WKJv1A4xo+!AvsO)1`4jW;-%uBiB@ za@Se=2!-Fba&Aj&jf1{@PMV8uF@7RlL)jGRUH!S^%f0Ze3wLn!3wXaC76)uM|;HtbCrUmV&e*}7t*|w8NL7Y zwn9*j^7Qmj3Jv8ka|#RdskWCP!oEmoh|ky{Ro)RfWD->-ie8+Pr5TK zABffWhbK$PDHS_S#l5RoxP?+G;&5hh`Oq9*Hw{9|u^PY@u8=u&IBevh=R+b8>JuQB zuX#9F;ly_G2RaXUkhSHOu&|Cjwm4K2h!c<0yG6?SE#idzAYq|3?Rne;ef@9JbJn%# zM!&>~YZGF(4;=sgVsMlCC9f2!j{9Rc^KNcA)*V)^5Mol%M~ao(BO-_u9VLlxp$HeEme0rQuQ$R7LZ1T)$r9 zv057Sj)>$th`YCibUGKW`!F03IgoQ^XW8AqluqHbo^v7^E<(AZL|G%8i72cjA-%C*w{BUA9{_hkD8Y_ovfF=s`(!1x0#VC zDg+`HEwV`B~v(`s1QTt9#N0Kk8yx(hmao(GC87ga$ZoM6_xai};sPppVq#*PgF_A%Yd%QF zlkg`rn(EZ|7of>RPL9}5P?bf<`uqF0b#w%Jdn;z^e1PH|sLMk_2>k=0!owZGoqlQ< zjT$^K@GvzcsZ+SOPbRtTPh@i!K#qWc37&3l+fBX&$1{SYlJT7KJOTzEL+!+8Ru5P| zllZ%qmD9jX6od=X&bIs;GZLSb*f${k-ScV(s9l_d52aBZVc-)dt_e&-96bn?TC zL8>ANCJ$(PGBQnT_d*V~;JO!^;gIlJ;h}ZPgB<_yi?efWi0a9p2|z>;F&ZpZlTWBI za%pR5Sg)U=+KO1W`MK&o6_9i_+Lu9k{`w^(Dr{h^DX^sUN-bi0(_eo8XqjaW_R@%+ zB>S_I3&&^`LtWj+3N_~!*yrVDxClo;BC4t8Zj9$-X8xeA-!&U&bEk~qb2RaiGtyU| znOn=Tso|{3-gV)#pHX3pCb?0x87bmk)UKwr zb^k0tC?S4mVb}F1&aYh%v-ftyd-3swWr9}m)8?i(6sS#F{5paJP-UUjglgl` zr+>coUY|dCJCU?Ju>elj_2NMWdfjfs7ad3%)Ruh1o`iY-lamv~wCes?L2tRkfzi8n zlx3$MmaKM}SXqBzR16O*Jv>(>vp;48^tw(YyM>aqAu}(HyOZEhceixPM7b@l=o+A? zl)?hw?c;Q4AFQq{9JHf|lIz%(+pMq(=%=_9=nXaVJ#zl6=jR`g>FF~a1BolCb={{n z(f?ix2&qvJ1m^9lijSkC-78dW&!@@rV?@sU7y!~bh{l89<06p7s;;hC-Q@ccuvPy>UHm0J?rA)A#`1QbzMu6__f~X`p!!F3 zr}HIrXm8jq?K?XKFOpuI_)o9oEJR$S9a;6aE{(00V9={6$+_A-C!dOMalBu;YkllD z_TkvJtxa@{)J{iN*X?cO{iyIV4sy9e3*i>dC2%ZU`q{&CS)Gb@}> z>bPxl^+%pPWo{jIbE5ArEiK*Lyg`bb0GBUwPfy9GbB}<8c`kX2!%8Q=o5`DY)4jo` zr}hvU)|fdAciatr&yY3u>%9C0vx$)UcQQ z71~HYM9gW%%*pwku+7sGIG8QX5(>054XkhE@^qT4Ot-dV4&&|LtpL+=vja>vd?t;X z-@d)!;Te1U6%FP^wPJghZu&h4oc!g(y2sAJ;g&{CL&L>E?m`%$Hg0g+F5|shh$Fq4 zIq^?MJdZzvoBKP#MZuVZrfu&N zb#*c_nCF1llm(gXfA0y3q*HBg-d@o6H$U4O8#jv*wUv~LO)B6T-pgIcON%l2par*Jz4ZX(W?;s;lpZE{gXjq zgSEN21#~o2*`bbhU^?*6OZ>WA-*0JdQ(FbeN?xY8!^`=&fAY!$J@vVXi^k^0-f|Mq zgkQcaTu@Gh1`96!72St|b@S4D!g~_}o`TUP=S(9n|2d`WWraS{?J!6uK}~mwb@h!G ze09@CH)-S%{QXNTW)>E#-M!1vr}O4-gybgh8!IR)D7X>4>P{bDPnTcpZw!@%CL4c6 z$5K1rF#`>j9zHHEnAA1^{qliu@IWLG?>=6-VonIWp-%PRHpcj--PUw#GGg9P>0rI@ zq{O&_mWq1#V!}!EOn0Dt+Kca^v90ZF=3v5C+Q;d1$`x|1O6`|6W@g%$pZ?RzxoiiK zzWeV+1Ngz;N=i}{M3>O#F9sK9-Pry5P0oFt(rweeN!|;?FC^DIP0xcI= zr*vD89(j3nY|pg_^z&J*6Tx8ym>$x9%I%k65&r6i;l4;-CO}{f9hB8fuq^?`>nou| zByaq2W?~`*3w1@B5jr>xeQlV78J@Aw)V zEClUA)Z18C7Wow=*Dm5AV;4ZUPuw36E{_Z;x_<&y`#4~>1L=s1RQ^QubjPH7+`3SC z1If(T#0J;T@bC=Luop#W0)JN)-9r%*S5gWoIZ=m-D0u3|%j`NrSZJO+F_A6PP(L0i7_BlNTA5|c58Ky}P@m0+T(Ww;v=CoQJ433NhHC>M3 z2rD)37Kh_w zO(ZVP>A>moVanSLV;ej_IJ+Z*3edo!qHOdc+rG|3SN(5RkRZ#&j&vX!7Da>jh&Ec<&y6b-j^+5K{d4g%N=-;|IAk zqtGJ~Q0vdU23b!k=R4bEf?iwJ+yF!E(H38r)##y@P)Y&)*yRJ8LRk7IJ|+gFpNO$Y zWvH0JIeXUcenJ;is{q+IkbuLBIyL3J%fQ5R0}IP(s~XvfR8l$~^>vyGOY_Lh@_r>L z$uI(;qpu^mAU+FRPcgCT$*w7d%>32+qmFp zZ{U^i-Bw0M^ySMtJh{lo^&2Q+!ZbMNE^41YztYm0?=7^R`Z7sNT_ZQt#JWCOCfFgf z6mO;v9fEHI!66|jX=$y!0-{IsS7QcRJxKZs}Q}Gq3YutX&$;PnR_tRHf*98m>Z#DxG13O$W<-Y;W zU=i_3LPaGk^PNsq zqCHU%wymun7#u8sG*eJWffJwbD3Jq{ps-V!tumC;z-__^HaK!tX#kv$XrwH2CAZI zp6PK_{JRzqk94Gx@VH1+6&DZSO-qAlat9C>dvfmWh0+G`DN9THOrdXFp;xGGJr5-@tUg^C=`WG$dEADQ~<8QAY%=I^D~c_jX{nH&xkzh?&`Vy_G?4pf8u6yjh%40 zpS2?E|62@KWoxf}y~h$*G&ewTSm-m#cX9ajGE=&KW=rlOC!~A+UsyH`jg(al`D~br zr^voTW$lOK#b~jEvh~?Y|CtD*1=u%11^j7kGdW-i~2?f zLNc7tGAi4{LsV9_4}9g)&p`|l^?@=u^#y4MJ3hbdx@M~CPUfqzJxW%BU9IQQ;doNKENj|6fL z4Jtqdi=LS|3`DXk`#c!XJ^zY+fZRWeAq}7a z#t%<-btE+<<$XLnH+ORg%uWsyiF}ddyX?qORP@P2RX`w^msFA?WH{Fj3gK`IWi27t zI?8DR2;e}xn;0GZ&3hv|{J!nZ4kn#yx#QaL+UhD1XKA&c(_w7XNVW@O9@Wi`V?7LF znhy=IBJ=HATdp4J>g%^?*%lit0BijF_hWe83pPfz$(UdI&T$*qe|S}OZsDZDWz$(( zJsd@TQ9(sugL)ipW3n@`Iy0E>6kPvNS6zD~YiF}-Mssd9=ot2S#U@iRu=;4nX`db~ zL?(8GCA9ODSWOh##CnNDUPH$Y3JnI^DHR)AL9@6eIk=-QPWGG(NAm4X54Xy z1UZ0CRoH2){AfNDg24o3W!IqX8U5iFAFFZ9XvxPq49L~pb@eDOW7*Kd;;N*krN!ai z7%mHS{BRD>k+84@*OiBmZWpV6@mZu`?R>dFc6XKGux*!-X?t6wV1t0!oV90jRVlSA zCxKc*u{`1Vi_tFUDWrQdgoIseeozm`8meC$@T8_nNdiDj+_PFLeH}(pS^n^=>FKco zQ|48tio0wP)2X0FFWL#bz9D^^{I_!@TVg00TB+IU(o3g9u0ch_l+nq4*+-(RWJJBP zqT=dc(ME|ezDl9VTwRMZb%6zPQ3VuuR}$c$8;Xj|p^)DgGJnMTn30v$r~wF1e*zNT ze&9$rU4DMd4D%Hg1r4GIl*(?OJFXL}-MsDfX?1ArqfJ$XgB_+9MaNDG~u!?JX~T@&81GU5fk> zh@R!~@SQy(PP~M_$!0AiO6h-mJsvPhL%L{%%A9OCjdoN9Jq=`f&xHzsO?0@(YJ&t= zxr>WBuM$C)yqW!ko@S%6gT^rd{baofhhp*ZXhKCr&~;3dsPUhs?5e8hyoH~}*H)Lr z9aM?Yu#23|MTL(1t^W4T<_(7#v0jFeSsIC1aS%8r;HcNe#Z$L$73DWEvPD+xO;2YB zJMm)wYE~*}?C*}7X0_(j!%f6IW6xV_jiw#ipT~J6m?6+>HuzM2M(8XwFw&tViAvrt zin9PwQBsCK;`sl7gGKh%)-oY{@5Md|s)va|;jL20c{7Bc`hWbMA26S*ixbK1K!T6o zQ7$s4m{7X<>;Y1x+PDX~1;RR8o1^TWkLfT)Czn759YmRv2}*QL9Nr~EyG_#V)Docj z#j1|{={K)rM5tv#vp5>QOq3r@*DE^m3t>&`TmVc01-<|e8a}y^M zu^Cf&QTPT1n$Pr3eG7V*kkv`QoJg{+`TF89+tuT;$3$ZKi%&PgmN}keyBXu3BEBu8tfS?cIt}XX9 ziiY*NpPb2D(Q>c+&(5^3H*}`Ogd0#2!}!&bN*KnJM(XM<%64zc0KJDgpe%mp6+~*>v6(%eq?S;4&X0)rsZg$gjfFZ zl8Dl1kLaR?JPSHH64FQoO^R#CBoL={D>>VchSP6`4UF8b5YvV zNF!-FxH1)Pj&3=tp|MNMQshmK_wI+gnCK5}UPk>3RW9qzM{ouRxpz!+bU5tK=w2Rr zG}8RDCE$eH1Z=~xj%`}U-DYMoSmGW(*HzRo{#fnzWP}$g?p@LOk7zmhhX0I~vq$@X zMaxY`@&*S-99PfqvV6LwJg23Ni;pYS*&-|=JJ9cskjCELe&=Ddx=r6>a)q6mIsqW6 z2tlp{`!AYscAL8C_9HUV2^l!9G-nmq)!)B7vpTzS@@4pO^c0*w;^J-YzgcKIOHm!^ z7d^r)O-aEu*OB5;l*&q=NmS0$V>GYV7=BU{iBaevOzjk7sHsV=uFfwcWMpQBp}7IO z8Yykk1+}3ej{EJYtKc|u{=n3Im^k~cyu4mbT#Aa1B9!pTc!&7v_~bz^4K4Rhhd)gC zUzjsyp#^(7ExqlSQ!W$Wgxovg@?8?UC(Q2BsWq)DPvYz2a!R>0s@p>b$QA zS;%|_gOwm}lop#jzh;FITz!pBrSu66%?rcj>-(DTCsRcNGY~Tn_IjpO?2gwS&x)%x zwBnfjdu6f{O1N96E-iq)E4En~&(ZEv^Ie*o>&f>#ig7VtM7dU{w7=T_`*&u=g<=Ob zyXEO_k~cpzZKInnS!Y4ph$U((Farun%tdy^_Ow!-;$G;<{td$0Cb^~#rGAh5kVtyU zghzej1y-7}1cewaaYQaN)EYLMGFRsxQPrL3S26F;`LuBjA1oeiP9Nc|Jzt#b%vi{> zO4S`HqQP|yMtg7g%(j6D!C%*0GyH(YO~d5>s!X^;(BvB+Cb8S6|3O#~;TH93}t{g5d-^cMChuscq=D#|juyX(n!*kPta@3Xnep z_<uyIiXATA=C!HAc)mgQeZ44@Rh`r()=>vv z*iT5^Vd)I;51iAQE42vNo;`0Hdi(xOLd18EwA^ps*tJ2z_m>1T_yC`bl_F6aH(u-h zgOx4gHio}3cE(~-X@F&NDg-Q3?82AR(*FGLrH3&o$v6-9-Hsj*?(6VqcGcE~{4q$_ z`0`FOi2O%+b?V1v`nk5|=09ymO*V6S4X|;ZcjQ?2&376f?v+n(Wi6~x1 zYJaB{Q*GGvvh2xNe3*EfZ5MTCX$iL?24`jlYC+BtZ+~P+R3f~*cklwXwAHoLZ0t~Z zojBJ=G@G_efw3lGtVYVdM)N05L&~8;FzJ6Gr@-a>e)|6fBJuo#MG^qX$w$IsG}chphegRGthZSpHF{=jb4KxHEX4~zd5=kL+~z%!T`{+$t5@QYkT zcx(3leS|Mg@a;d%N|%wWHVp>#(%ccbxuUj8hE9<>OUpL?5*2Wym!$Xe6icxa0f&u{ zDi04;@*i#Lco)ac)lQ&|7LkcrUIK>F4@$N z!l^OX!#D0YM>~RR*Zz$sj`Kq$!>cB$|L8P;Dubz(5SK8&fGymBdNKD^HXM9Yh#K73b^a;pibuIep2KhF#UBH-!j1ex*DGLp^|l3 z@f^bCWjZ=>&@tdGWqi2Hr18!PIS~j|w98hhB+vEt@a7nxV|>ztP!!Vbj$;IQY_jf> z-9AZU^X$Y`n3H;b-2Ivy2Alur!ouqq@i-J7M*X5}^n4e!KXam^r=Fxb%&u=8ZoT;K zgsjx^efH~UZa@~mC6HJ)^kuX1iUaL%9<91CVA}U~gBMnZ5OuY+j;9~Cj4LkG^@g*( za&WvFVEG=YxcKqjyFb0{xMV+?TXcleda+Q1lmZAb!+C}d7v(3Op;nhY+N8JqW0w)| zlR0En{tvht{T&*cwvDIQ9Y-5Me)6B<5U#Y`wABo!e)6YJIXEm61KZnwL5=(3H0Sg7 zLQq$Yo&ul0-;w+esx4!&s__ly{EwP_MtdPx=-5R1eJM6DGp+NWL&b~gEL&Y?a|=fs zo0#*l!nX)lEMk+r6D86j3`OI^2Mizj7O=r) z&awZn&i10OTf+F0I|6n!^1YIv4f*%_9vNnl1An0&PAS zd2!mD-X7G&|Me@si?P=$??UB*cI^(eZR=BDl?7iKw%?F{RFcru?W1Dj78v- zr;5eH$KM#uLt1A(s)zl&A%u?c(O>*p&aOt)_*_m`w)Corm79CJbE=@-9JYiy{h}ML zn(nm^+SPBLzfm+by?Nwv#7C#Ry<(i2GAfk92bOg6=2_ETagmnIgWECR0~3ua9LthT zPx2pLR{Z-a9h@KHp|(rVqOf(IPx4lxkappllfF;5(tFNZ$r3ee3>2$2bxLlKBr|Qe z1kln^2r1{ii&#BG~tdv!S!4!DlWd%5HWZnugFPDw=U4UCww`QpN=fU zFpBaA>;Ko3KuGZ#4|Z&_OPrt%Oy>ZtX`;6KbC*R-*bRsSSAvDPmqPr3n3I=$#?U)@ z-21bM5}}PVTZ?!0Qso~D{))IyFi~P9VN5^qt@i1>!=BYzj`0QL!7E%|TX;yZ`)k_8aANX~v8^pw)~; z_YW~n;Qm7W3&o)$gNxQJao`8^pRo-FnkVkwbQdl)Ipe6Qn20^huSjS+`(SLO_Sw^A ztDEB*jt|qvX@tCSnWUt`bBdNw-u#8(HRETR(Tu)=mf9l^EsOjMYlNWS z%8_|Si@cEs5o4SHruuSpH)DE$>c!z!EYyK?Wvw=Nt!LLCE8qsUgtHpH{v@+{gc%6d zitc!Gbjaih3MvHg)7^5fX~C|toTAdO-Clu_1#wf7@rs`HngW7zS>=yooFP*DcbxlV zafvvCv#t~t@N)^+5d8VZo+s-+7isHC!fkPpdQ%+nc5g8If^(0Jt@Hl)bI>zdu7a;2j^hKlbt6DF z5RhK-N3}u>7di+-o}u~1WBDa8?2eDybSf96Y8Hc+o1m3o_UY4|(UZ^J^!|Z8Jxr8m z!tdU(e_An{oXn~?SCf~KiAznbu{U7iZh{`KjpF!x*+9FhL$jr2wh``wd!b<=L!+5b znxX$g92LlJev?wLB>wS&y?;Wd5 zjLo8`ig|6cG0x*f#35u_Fz?;LQwD{Hpl!FUy@v&Bt7%|)pyU9%Bp|M#t_6aZC-n3i z@lKO16Bk-uL=)bI9Do73*5- zT<5QT{%Eu-Tyq0~7Db2Nk7)S3!OHCf>s=NWM3%Oh58$O~uiZ9m{@ zDSfef-oR=u9-3iDB0;eETDi41HC8T$JJ(ZPTG`zGyisT&#JlEhVFbt1VdISu^eI`bp<%UMXI3+NLm+eY~p7eY@;-cYk~yyaB+aFbs^b&cr#2gD)`$M0^A z4+ZTq8s8ocUj6INUVQP(Gu>vy?C2@i7)+jRAj(jWcLdlcM%WV>>KJsJmx3cdEnVD-wPZZp=E%8PgqWJTL0cK=s%%+1*j~0^R}O;LMfQW#O9@x`kA{ri8;W z71S9F1wbr_insql}K42o?PIeY8et^IBPVfs1og&kh6Q|B-$OzU{|w36&C4Qz317ZEnza zh9An8af9**uut*~CFgw?pQof+=lu8TP4_v_S;oG%hPgM<{+redG((4CH6cquHk5{r>j--o| z)7?t^XJdZ-g^_1RPG)9qM#jyNzNc_ga&ZV0Dq?Ir6^M5W)AqP4GpR}~z!;3x%fCRfad0B?@HVinx)@CoGaRf`3phXsJNL zASUfy!XTRW69CrAD<~Aw&IADLCk}&PB|bVjEGmfybTj~iVbUEiBpxpd$@GAQy~1ds zqbjB1K(-;#*=~1O=75QTfq{m(K)_ZPz{MsnaB<6S*w_?7>C9^Bch=LAX1YC|y(7lO zWr~KvYpXf02`rgafDa7NOm4}KX+1g`8W8L}HZtNL z5|WjCa3Jjb3LpQ6udkeajU?nP2M3hL#STo$Jp%*a{vJ<2b=R$RJF6>7Qy&4Xt%tjN z;{goh%O5>CGD`@Fr=p>fSq3ijTfk?)=NRuvz!MM$Qx4SqAo|d+aJ;=e3z#IEsYys= zrB{^nf)KH{Z%OwF`FL$cbCb9n9QKA)0G!{u3YG%K>xy#nTnPx+>I+m?R%V`T@9hnM z5!LJhSfzupK|vr+17jxp>Gp7^zxlS2>Ei)edV2asw;732zoOtVG33Ymt7&DmvU?Z& zY+nHU?ZyAw7Yo1C5~%|ogoo<1D&O@*Mr`aWB3krECnf!FB_)9uu)kWhd6q+rWD=-c z6rC_!ILbciT+aO?6!Hq3*ED>rsP&{d=()0r#jd}fOwIR-GcD0irq)g`Pgb$ z2vY2<9MbFS6Bp!k6&ba2cnxLSFwHt*fw(hxHdNLPvw}?lf8|eMqc1B9;2Z}5 zv>m7?qs+PNwn2A1;|;EH0_#WwLz9=1l#=1}=wmZJpZV)+FVL^kg1G}>d}m)_we2hU znm6Agat7?TjA-cT2LRLy)R_4fZ}4#BC*xAw*}k0M zW=eDYe^Fn`r7nUEb=vLe&gQ5e=vz071lz8c1VOmI4oooTN+?9~{|v1l1#|-vs0)a9 zie91zweR6DYxTe3qvy|`=iMx%!J_nGTl81BGIPHFfcKV4{@i8@T%bSY6;}KQF;&6n zC9PkBwlxKYQ@3Xt&dLrp+EUrywj4&bhcvQfUey?ZmfvG^r>K~O-cfcnh#K|v*2Wfa zj1JeFZ?sjrm;*#L;O$L~J~K6K4aNOA30yz(Y=PBoOG^m|>5EH90M6jb3FaD5=P|JE z0YsNVGWp{0C&|W)%kdiBSy73BdsJ8)qsP1}SQmJufUQ{k6&i5-Z!cL_HaGfrRM%O6 zIWH>)WK=^+Jcw~LEFyg2#fupCh4)S>#UXVptchGETK`fuqTGAMiw#&6rpP(kVG;89 zITtJttvQq<7&a1~!tHc>l9y9ouWn!voq7z~6<%k7c=t}e9glb0zNLXfO_5yeUtGvz zF$2r(=$2WU4LhACFMfM@Epv?QbyMx!B(DBu|#69dGf z+FO3S5MZzpNJ~jUK|$UQW_^P@-J9&Ho2SII8g~4py@O!g3#oX_X7mZmLys+MCuA}) zztH6AUWLip3x|~xEqA4{aes^_+$V!QTWm521WKT7+d$DKJw+>n39z*>^N(usE&M%u z{nZ!wtifz8CDc2ke4MVliY2c$UP(y8w}Hd$uZ*<4AB!#J5vMatI40Tx!Oo>he^_ul`II4DMyg8`W@r$qlEk@>m~p382OLfSonb>yAa&3$3#7 zVJ1|S;_CQHVLk=V%}>GCUeBFNlj^q8ZCQY5&dg8+KO#X%9iijoLq6L2PVF9+ka#Jr z%d{NbPgW*zFAxvT8YU;5xt=~jfn3)!Jj%TEsL|8IwZjN{;Fc`=>;n~jhw*_Cv6Qdz zm&ev+AZrTLX3d>zs}AQr2-3x5TdtZ_gF}Y4ZDw~_LD45bPT**>8Iux&Sop0H(5Q&T z6MLo2cQfsu5T?+$iXUshzA0+=7P+ujE3oqa1k7ryp&+znaoP}Wc~p2) zD)?8@&e|<3mS)&J;dnnnPQGVwQRyA}(WQqp&z`ziKq%BT(WAdU*;?$bOx1+EH_xsM z*;`~Sn2d?Wnj3lk93Thf!y}w04mw-i|3?_f*%zai?J_^(CIkYCMT{?#vehvI`U$iKVOnL<3Q=!c%G%wZe-+w2S~iV z5{xUDx%~s#FFuX^k5G=Be(N?PIS34?c$1tQ`GrBDsxs@_Fqky?o02K0$lLw=fhzXc z))w3`^K9y2U6Wj8CuNAPKp0MV6fPOuCH5a7agn_ucPybkVI?;5iUl5DRss;cfs*>_fOS*BL{A&JySc>qnu2+`L}g^WFQLk2Ei&E9OOpO3)_LjQ z;L0Qf^OaF=Pp^%Duf!fa(fl7ly|qZKewsG}U_IZt@eQ_S{EB=HAQc}$r9L%AfTx^8 z#*OYaD+@#xi9B!LwcvBP`13ctxz!}LmRTId$05ERKDKt8NRxYcWA;^N*WuDmQ?gZZ zIx;!AgYEe;-`Xw?c&PK;Itx$p4?_?RQ^UJ18$-W;m;3lcA#t!E zkfd*dmNe7lgwS#{pIy8gGZkG5)A}#s^suqNkq{MU(jS{pYs@J$vn$1uykXl7@c&3j zCyjfe=4~x4cuoVN%UPA2fIb$j=9AaecR;sw{etNXA-nfqP$RqiSL9MR4RzK#3ik{7 z=qe~?_=`{qI=YBt#ThsSrZt2N?7MpM>oH|-@^8$4DgRIOqJPm(f@E^3P)**|rtzT5 zzqkXtKEf-b{2!j1x~)uumpn%z&Y?PUMXb=J#BE~B5YYq(m1?!@OQ^9Gcy9^*(at3a ze(Fh1Ry$m7BU@s)bnoK+iMF_Sw?;~jYpFk?8|oFCbT#W1DKvnpo|f@Nuy_wHuX}uXno!Es2Xs z-WC)LdoPjFh2xK#N+Jq$tQ=IlXUlzf5C1$}!3Ft*qa$+ReB2LOe`dsT>ULyStkd&& z45WyS6nj@C7Y}$m3}GViRpfHJYAY>$bha8r!#={y1fu&u#aDpQOvE+m_m8%l8xM1Y z;@wskg#_!a7?4L~og_rXwV=3unj|q+;kYaeVnO4*C!b(%?cj_{7#?*we%c2DOsA%m zhhP>Kp?gpsLLO&jGx1pfQP!&OIl>2!h!jj4oAL;X;H>qX!bBq2x<z;FG%^0`08s z*WvQg>+zl%)B4y%pH zdJZkrpYpTNFpn||YsMLRDw?PT(HD4lLY-~Z=BD$7aeMwahIt-+8#*AMrqTTtw6vlq zP(dEtbh*9KDyGav)_UR5j1VyU!6hW5{uaoldgc6ecWEN#iO`oXyOUK-at~*QNPk{l zTqSY1gaHVy!v{Z~*YPhozMh+0$5&x)DmRAslEgE^lXXj-_te{!c|Kk+!*dr;_q9QxpbT<1pvdwCcYeREOm zdEpFafnvdJm1=>*hpqAHw5sBK`%u;M&ob8Oe&~7(&!m4fy!ml}^ci{e<~6l6IeajJ zVsN$Ld~cr1>!<;~8vg5`u(FZ`Fcf>BUQ1uGVo2knVlTuc6vp~Se~7kOSkRkg1O`S_ zMYV@{NL{F(W$pCep;HGI()YkpN4Yampr)w^rajMcc`}d0Dfh(oHOq`ZF*=DmJk`VwTeyxj?G&FcGdvYPiFLEjS=xQW+ zQ#kSN+A#-vch}+>`dNZ}O!a774?#Q>BLG!3xFRS2{H)clhxIKWG@;b9yQ00?f`SOz zYIFGaOKpdUaw~WnZq|W-M>k=HRqn?q|e`6 zIXW}HZyF0WRZ4(DFW}JrdOXRggF45ft)Z;tx~c*?+M;nJH12Qj&$H(Z3O`R+Qc_av zuaDSa!a$06Y*V-6z)C<6-^hNQE9-oDC83LhQ;n>|XTG^l%>9kfd1n+K&}M6jJ$|=! zDr{`zRR}7Xe-6i1l#<$CQL)^z8bK1fj8z5~ z%{4SHXiXqL1xhcsb!*9HK%Kl{*!S)2?DYr8AMin3k0nts5p8kDISmX0h`paS{D9Oc zAt@>9eCrC|)4(Q~t*OHC&<||<-jZjFXSD6O$ERAWmzQ}Qz0380m?s-^m*-n-gTmkd z55g$ES~#g@clLDGYu^~8?IQN#zBii>txD+3UVdIa8&gRI>W7r>Z8K3uD&9 zk$LL_iJBKT_i^MZinwmww?#)s$HqoSjlN#>shnXFWlP1?JGUQ27pXe#&g-_!T7o&= z`~Cw%$pld%hkd@xqKxCYdMMCG#j+X}R|EzEMr3HGt&M}q!7lru)N;0X!lyaV5OdPk z8^}tPJY?m)-JG4OD6goXq%$=#l4oOkQt9Au_Ts|WdH;JW@Id5qX9waJENlX9z0nQE z(OTCrg29(`?AN#3@liB{Nr}kWD?B*|&F1#1p>YX_<8@VkYlQ&vySEVvi@}q57P5a` z@O+C#YTB(!Sfco5%)5F{`|9elEdMl8!R(wIb9E#{Vjm83nf>8Erj-yK&BkMDVtiw} z(VX@GG1-y+_LE5uI&~|MSINz1UvGNMgc3(qB2FMyM;DA+%pQA$TTfpSe8!!7Cy}79 zZy;JyJ*z$;Xd%Bq#9{Ubw~RrfegXNqbV>LF;Xpgh#DeluIpwHL=CUHmP@H@JvFGvH3E+moPFi@%`~n zMR2J1{irC4Ke8-IQKvQ-m5&{`0k5^M0Q=S5EQT`5T>B5fip;@s>f~hXJNl4tA=VLw zwA9HGCC8HLB9NORd1%woS2E?m#v&*n_~&@zSu2@o_K&`Lu6#7$1j3&%IYdW63T+v*s4LfV^;ZhF#Mu< z)ciU$0M&o|KfM5Yje2c!b7t2S%KWNgq-}*AmGbZ5p6RLfD7W0a0(t zvHFqm_^ey!UIR@GUDT}Yc9GGx{1bY|B<7UCbt=l0D7PLwUTP3Kp4Yv9%p3V+4V6Q>@Lk&y@A>T|ogbdk4m zH|_cs4Oc0)e@97f4A?U9%HnheGcqwb*x5Y6a!*usV4(5j)SmfsXFG^;(e*{>2Qw>x zd={3Y5);2*qorbvjUwsqo*&7ZS-{r*d#v358*%`C?n3`(_i_9Cp!~)}b%NGip>;J&5B^b$pPxKAGr0R*>e(Xwp9ABkPXdAW&)6s{ zCEa_JQ`9l{&0q;j%fBaW0<1Y)nJCFt^z>Ks?$&m2?B9#IBeHhm3G~ej?i%kX^NOeJ%EplH_wS(=^L4=Ut#veaAc+&?rMexqe>uxK z_dy5ET5jUdY*rQ)qj6t8wk~z6Kh2*Y$XO7Vgwp)5nf$JLWdPE`3=lvDFp}veOOJ{* ziOyh%$4XaN2vGxQ`-~{^)<@njUxiL1h9xes`r(ExvnwmaT zF2~*3JY5QKcDHhzY*^wFy?&1kQ;SpYJjq@I+sRQ74_I1y01`!|2{kGVc0qEFf`Yx|ucLu7oE>?rdxbj{vPl8V2oi|ErT-eg+UN{Bi2S>l{_|cO^$Y+Cwz7fq2$H z13InhpkW4q)zs9~XQYDCy`XdM-Lo^_kf8XP4tQ&3GO9N?N4*3qGUy$kq~8BKpvnMu ze&`s8gUINB3Ny-S;C(l~$-ork>TJ6pEv?0YnAyP0PF_AO)u?Y{2;}Sn;bHh#GN)6%2jE=*T!A=Q zM<)$10s9bVYUJel{G|M6SL=#JYPh(#AeKoc9)zFz=77A^K)j6fw{!$77t5i1x%@Ho z8nUvQX4B06K_gCzU%d%wBo&DI9L`#F6gCb-)taj6}5Qgb*M9(;yI@4nykfx1)v0w#KU< z3gLq(O;$S_GTF2Ow$NGToWVaQ`C|olDGbMJz*GAqT+Jbn)>uA-?frYb8dI~c;tW$~ zJF^6cLSXIY8ekA?C9kC5YFhI~gI3+V$~0fiR%q@X5kY-bLV13ET{PCQ)}3*ur-{tS zpA`k+uc!V^O?*7q#Mg0|AhxgjgwSfA7%|*78JlEeWC+xe;UH^~ik8+c+6IJ4)L8fp zTe^P!3>-B%2nWh^g_yy?#3YCT0sgAa?dMMfHt3UJv$fXVCQzV_E$U-^@#4ilXuRR` z^kAZ~Dan8xo}^*HgBx z_tC*>gN|1Hq$*1;4Mw?jZe?}{zSsg(s;=Y;iNxT ztDanYt)?pKA-}SE9Wz05$AWBDvm@bFm6ksltcC~o(bi$#UK@)mtLt4H&LucKVPGh? zF&ZsYNeJOk!52?5TH4D?OWWL=I)d{fj%;k>;+ge(B0)|s8<=>UY!4srSDsYLkP59f z1x$g)6u&P9*hf8m6wr8mBxW)N)fGBk>vulc8LCi{3Mky3C>iu%jtKmc6>ew@-sMab z*QOm=6Pv9zktfYS7nf}ea$YuaDNC3@Knofg1Kw1bZs$UaxA70)=_()3YrpjZ5}HTQ zH%|p#^IQHo!4Qk_G*ZOi&6Eb0m&Kg+i~=jmZHpWJy3W3m6VRhY|u{cP`yMZk76x%i;r3Nr`;8%RI%(sRn$Vvvfwvw-YB`1NG9<1H#ffqfVjGcoSa-fTo%p1#4kGfUAw{Nz0wO;ci;!XRg^F4 zp=cZl0jta?bsYSGnYO`Md%FHS!hx^WIcxBTh~!@Kwt=|LcC*IMP?PyQF>9G;Rr1vX z=eNY##4)x5XzsU$S*iSsrRzT+MNkI8~q; zfBvbAlKglTN##N8|H1A}ar|7zX&L^+M08R?No&q?MmdM-b0^h%GyM$j?Qco2D^D;m z`rE1EpES9$o>pcWI!(o~4FuaVjc^c3QvHlbN#4!+pmo1H>L*owi_I2*9p>9(}rk#L7 z1Sa4zhPecGw=?d|Dds~JKu<$=F5Nvm^dA~3Gb0V{)Xf1e9RbUGY%HuSV;mgPhYwx4 zwUc?o0{r|ymGn&G!J*?!Hn#`9#E2FdL`_-D(P(2_T*RNm>gKuJPms6w;My`~Tzw%@ zkmGE=VDLsUQGwA)mJ}#82%@6M5j(YHH{sVz;3-^B5U|2nDck=i8Wq@W-z`acQcP!y(83Ef1t_Y07&CrC2ngER+SnXycSm4|0tezMb|dYV5Qw3v;mu`k zntXtcA!}vL?o>s=ihhaa95=V7$IkrN7*rx5hGYzkJ#%~k2xg;*H7Z` zCf2+%k0woEKf_X#kug`OqFb%;nljsB6oeX6?P*DOp^P$Y#V^&kl`X7B$vZ)(T%*`; zO;1j?UgDpm*5($&ue%3R8iXakZi&L(Z`>~qg+S?)>V@}M3O6d!4g=G8dO*UJi!uW( zT7U2*_0|@sJ9}imRqa`H7l~)7=`kZhHw(Dfm@@;Q!3Tx#^R3s8=X|@cf`*1bT>T7xkGrZwF zoWBt|5f*p75%KNoD{M(QWneD_%787vfKG{~PX0!q)vEB?6REB!NWepLc)25HPq+KK zeu4y+byQMb-jh@?FYbm%gc}tdeW#(3e|oy1qdI&n!dH}7y%uvDk?r^8txnlRn>Fm# zdjq5Vd!Cc*EDjBYp(Hfk7&8vp>Ftw15@pKmu|4(ca$*uaO(jy5%hjpuq#q`msrRBf zeu3za1)%}s2^lbB+*5~25rA2G_nmV}{n^#N&L^EulMOR=+;*5+(ed)EmASOn7iXul zh2m>Xpyp3OlfzkF7hz!Fdhx_Zskr_+{TVgjY07Wuel?+W!Y3eD+?$Vlm#YoIB~nwp zx-xrNM8?cKGCm%EOP)?fh)YD%z@ch#lxYnt$ZUS8s(rJtu=t5(j*sFL9!D?fmW`>Y zd1hv079DrU`7ofjsRbL=$6o%{9G=(vD@=EEloj9^o}p+8vbU<&tzno=bFiHX`^EcL z$4qai!=EX6L*(=?DvXh~cITNf!KxGEDPjFdCp}dkRE-sO)=V-K=)Jd%s2d#FQR#)$ zZh{@?V|2~470W2J1n7ENX(z5(zgQ;s>JY z$jw9pE^JYKebFQmYJq`!jN17A*<5rCBVy=3y#Tt|Btl5zw=mg@wUm88h;lh6N*B^w zfskzQxC6+D)DXDipnbIP6BP}|Sypr0%t$ZRS)Wx_gC88usqN5KU%Q<5pk_-dt4=A; zOc&(mjSb`5fvY~()zjfPA2jz$|IIbO&WZ7gmX_ZAB}5mVNkzV_WgvdJ>LItu!T7GH z!B#2T!S3wa<;3Q0>Wj02hqMx-ETb=a?ICb5i9ZVM9iTz5l-v*HO6B)H-)1Y%VMUPG z7)V-+|L$#Sroc2)E>6fU=1qEC>R>(cXPio3RD)X;Js{vDNIVYt2<#3ClDVCxQ@=xf z>o_IA8zFi96=Q~2ZG6C;W#XgOU{}{`dU{Rg7TCRW#ObccB^znRwZcnAMk&xE2UhnA zj1csHz>fXCb0iGLTC_gPk-}C~aLSW{a_T$i?@frhms_&tu)#xll7>9KpfH08{VX0z z`wnCV;z?b7u9vK04B^Rl^)yNFN{;n2Y!cVoT}QaZ{Cuf#MTUn(>PRPD-Kn^QGyOOF z-Z4)xJk0*Syw`oBEOHNU?G@U8r-vW%UAi?MD8`h~XX(9=Wg!|ZbJa5+maeIcytMaF z2J;DbM{-7`c<_UUK6r^*ii5$4>uyV+BF=zgg0=DSkg#e`t4fVJJE#4?>S6h??C-s~ z5U1<+Z>ZJ%2Xh41_`F~rTXWt3ZrpzL9f|!3dfYu97sfrG<(3A|3zPJj(8|@lRE9?vMc5wiaT?PgVrelDK zv25eoE7+JHAKl37qf@QFACEgs^m+ek#5)hQ+t|kgxFc?Vv9oBrKyKu8JDI=Jj2(p! zAkHdmcqaBRp_i28)S9l(%2SoU7(*S^MoxB?&bO-Hd(Q*y;L!gA`804vWl|l?E-JZ>f!+%H2WJS_xvOyDJWTJ zC~3jA^^15P4z9v&AHJMY(QVXP$ScO!ar~zTp4G_-DMDk*K|zH;&IzdP(%+qj+sZ1_ z@TjPE`kPNqPdkF~FOL}@v;?uC#5`uJ`C56S-1a?qrsLPe1sTi^vybQ``cEo@cDc@0 zR@curM;g9Eq2C*C1yXt$WHsmeVQz?V2?Ch;Y^8#fQ0SH1S1GB%$+L;Q-=AH}I6&3O z{x1mbi;oudSu)4^Ty7Zi%u#2`45*nrZk@bOFwgq>`;O3`C>GuJ!;v7qYDvwx4hqf9 z&!^R>KI_2bL-7BpBdpLIR+#y>=Ms_U=D zI10)v9^*!})$FYl98j^9XuujlI-vl%byc-eXfaEm>SumZN(?zM6O(vq85wH_Yv3Z2 zE^TgUm=H(bxC>uT!FG9$i2Q6XXs}kQR|_)q~6>$I}UeC?(X z`IK7Co)rhTd6DRTfg{2J#b>uURohk$$616XEl2`g6KbQu1hUJ?xLhCrcwShLrl5GJ z2HEz@H8PnP8{>7n{i>rgB#=V$?j1wZ8}F;kEW^l1Kg-#VI^X`JHhP%DTipYG| z(9zNEd3#vB3sb8)c*SUDrTu4lnPNbgvmo~e5BlbMp4PN#MY@kTb`{+6$@u|#nF@WLQ8nrOp1@IG`&7v$WPICwEM5`~RJkYfK z(_8%GhD|uF^h^1`*F4Oq{^!n4RUCE~uOtu`7w^c)*)7Lc3Q8J3xL$k{HoEKfTmHr@ z;I;od{`{t7QvKK)KMDqh1uEhDKSzwkNy4kh?ihGQ!_KNELr!NqMVGq zmMX#49g?r_d`sKint?A-TgNHFWG-w~TTo#u%M_I&Hws*WE?ncE`hS6PIMJ!q%KcQN zeq(Q6nURly^7jb~*?Mcxk|}x&2*CjK}VpKe>*7G2f>dk*}T~9o4%l z8aPNwS}b=IpYQQtg!;vEJI#h9xsdZ%!XLllvltEK>+5&6M_xwa-WqyImWZ)Sedm8RX^VXJ;7-v&*U|OOt)e5D>}B#E>KBP0_kh zV^NwF#ns!x0}Z`~?|^8|1o}aMmlAd9ik8|4y4r5% zI2auP9wEvW+W)&54}JxX*LeTYbbO@$m#PH3f_F{xZx6lEu&XL+47Z+`o9CPOgv20me%zi}|*8(f7)3L4d%j<=3uJJ|+l zpSzZ_a_!gC>Ebz;_bKJ%=pF|~TZ#e?OC*zacOgt9m@*>%E)jw>(eygJ;`{D5AYo6Y@&BB~CThZ81E{tY+q%7_k1Ml6XBfdm>A+N50%aWJ!wdH`N}2ibXUK z-?ktA5e({$qBxbcq5G%0IfKKBM&?B`m05zSKazni8)m*vA8$0#vVC-#FuE9@g7o~9 z5~YT_J3a6H)A94Sl*W zz7#b{n;V^&*q?;bS-7|8oy$39GkXhSzMg*GEd<-p8*5n zGntwe} z`FiV5*|$e#Q#Nz)3e>=hGnDF+`Ry@qQIz0vL7=Y>YCv6$=e_o8cCTR?VuLmX_U0>s zxRR!jgu%`r2#>>TaT3=V@rS~+w8Le`<0K7rDujTLz#f1GRaD|i(tp!`E*SeWn)x`O z)A45CY`Rvbdw5kWnr?pxn$f2tT%DC&T%4UPh_gko^`fG+wbj9F<_e5gcwYivu2zb% zmSnoy6rfAvbcPylZ(LXF=!)C1j5Ql$yjUUT`Suh7AyvT*ZW$lgtFbp_t*UH_Wr_2x zTbQw=Y{9xVJLu8p8yYu0%79FR!R75Ts!j8?|KZ5%wST(0yD;LA=?EClt& zmBYZqF4woA$6ig2W?JvhA)H5LjAc!Q8WMLbhA%?|jwxd^I(+G}pb^-6_Gr zdHxEj_kTf#TSa~cRz6JpLP6qEQZu!;>?X5Kj_0+Hag4o&M^8Jse`$Gln z3EU&Y!<0coZO4X#xAQPKNSmSV9xgbAF5K+%{WSi%klGSVz@C;W=C; z4LPNe32aqgC=+>XufmpdDBp;^Bs`eXCOF1MUmLQslOJ8wr65pNt~48qZ(aQJGB6;( zDDW2hepXHU`muz##QH$8{Sbm1ccr!Ub3{bA-rfX2`zLRoE$Y1J;!&&oQ0t*36XqFk z33x9#t)>PRk`#E?mWUzm0sTLVSt!?2ztSRgr&trY-Nn}q!#2ip1}oayz#Nyld66TP z_nbbiYAL7v#2aQi6WVjTmrS=2`^Q0|zwg>&PH#m);$|N(n@|p(0XmFx?^xBdtWRn1 z(AC=i^a7+OD^+asMKtTqIESTYhet;XBQyq4bRvZkNPF&srEMNN#S>W8Jn20T^|agrK8J=Sp`s* zLVfaoXdatRx95DK&R1}#-02}B3yY|T)1l4vqRwzdu9w7M96r9CIHlR$E*<1<0D9ET zm+$#%p~+?rnC^s`mfG)2r5HA`oS@Jg$zPYMnd!DklB)(^`ZZ3K`U$Vr&8a$cgC7$GMLQ7E-{m}WvwIgjEG<4D6>6DUEN4)vK3~tI~dta)uw1oQb=t!caoEz zPd!%SxHlz~wVcnDlbvZ~YC5r6!*f?9d`!9{t*m-z4bHn993Tz)>7PaQrEsm!&%s8& z{bjJ=t-GDK2G2OE)fgjY>Z+EKN3!2hkl!>oA_1T2Mbt#0@<8z$s?AF!=3AlQ$l6?5 zmD9D!r(A#8C&A3~yflg>4R}`P=UU@3%V26sU^iNDn{os^ycd~bVgmBW6PT0k*{l<` zcPppER^R+$Ub&9^C$i@v*~U$P^fljrd_7jDRH8hdZO#>N{s7Ib+Wa`%hI}NSM@;9i*#38sF0oWg3jw;4eJtiq!Dc%Iaqmrm%s3t#9X8CD z+b1L@?$~S-@~zqGH!@{i0b_eqRJ6Uh2C=p5P(sehmV#waK15oQ!yL5Xnr?31$1$$P z&chdFoSb!r4C>R>wn|?=yXvQuL_4`EziA20k%}Y4gA`;JH)>mC!7=)7S#);u+YG$6KOOz|Ych-zDeGgMbGt$Cjpx7s}I?^I4 z9L%KNZX#tA%*?t=wT$vxkxmU3xRv&Hxr$WORC&&U>coQ|;iB{vMx483FE>q=E4ZFN)coVRJZ+T0Y7gl}omIGRjJFL?^*sIHzsE!X7k}XARa(Rvz zSIT(KM*#sx$H#Gw6AgwX{t-Fi2~7TMpD14EK7yx7h@Hv(iAqc9LYQygC{Isjz2h_F z^{g(oP~XA%Tj}Kg7)0@|2gy}XTG69k`JLvX9<~Jp8>{z@jR;BNTcqXMd&N zK^zE_{5lrsPpRKRiz5EY$GUM_}>MX{BXks7Xtgnp_S?bcW8kz524-t5ib7qPLNGs9T~AgX)iT+_;=?Kwj<4 zHVoE(dhq?D)!Jxx%F7$!x#G)9KCCBp=Lah`&0tDu(i@8wH4|SK6JY&}y ztXp;ryoaLlf02RGl0k*P$7l8DN^3#_VG~|lJU{D%o@;%6%RkM@3GYvE*Jg>^mepmF1bN|w1y+>cn__KgQ(7U@5wV(h2N>t>{ z`T@A%g2BZ6!7RP4747BZfs%w=(|KY_4uR+~v~E_&`B<4&st5*^>co4Vp^&6zla(#d zmZ3E^p0B@T*mh4lHtl<;R{zZ!^x3Er#E`yyi5w&2SnL3$M#;s!BNH>j z3i9%rWE9vtGccj`5DXO8!i}2K$+G2^mKG!-$MaVg8#{5#1Ox=5yheXgH5**w0F~rq zyhzREd{ZN-3i!p+k&$K2UIBU#r$JwA&r7hRCvw`G{5&J-sbYxb^Elh#xEn{Vuhj2j zp0@QvCQ39;iIDA?k8vnE`P{C?VsO9;p69k1pb*ZhI6fY3j5i^OyDnQuM@gBwAj$v= z#sv0TnW;7Px!H}&`397;)riSg)Ys)BQp-z|{-Bjntyph;W2xoNdQ(3b1zaI<#bTuE z3{Vy_K#s2_1x05dFCI1t=WLd3j85y%U3gQ8CEOkEfxPL7qS=gzzpAu^^U^SH_iZv; zY5-yk2VsaEkRkfRU@q?NyvHGcE+t3%6v+1PlFt55;?`*=vN3)*T}79=0k8^-5N`bP zdjGJ75Hl9~2a+N#Opd;Y7{=L>lK#GQ<-O_eIWwLv$fTB9%{La~lhwAzAl127vH0#1zBJuRB(PyV!AN9u>j2a)JUY!UB9lGC@wY^= zyl!d#xj4#(>nr|hZBfC6|~)4?NOk) zqxt5tfq8(!Hv^kh0 z_~>tq*OT4A>nE-tE#L5sD7UQNVdcYAq0nC<$T3I zV)Vn;wnrw1M@O=9av=2?r2PUevYlN!veay@&L_V=vY=s5Yh${qAU*c^OectGo*Y^p zOy)5iFPt*;erP#!rlg~zqp3L$7-dH9wU%$-aY0wpnd)-!hj1 z2;;-z!pZ;#Ry4t6YpXY!HoHS)xpQk{Be}uKcxFHYC?*kSJJFh%OS3C0nP6Dfx_r~D zbFlrh@CN3v_bobBn1=zOezG;{bbjkS94JM|rOMC098@#-Z=S2hc$WVQN8==ScFVqG zu6-RVt_>p z59qVTvL7$jjB2 z>eXhK@vNrfH}%DK=9_acN21IeN>1JSHq(ML$q;o(~L_t8hJ7?%_knZl5?jE|% zgYW+K-rqjo+1I(wxz1Vt0JGLCRy=V(_x+1ZQxmld@@IT(smZ98Av~w;lfi=zS9#V% zbrx&NW}#Onn6kE{S66N{0=;Lh;pyouSC`n4PC+3d8|&*G@#-5>$U)6>yK)pY#EJ6M&t&8A==N?YZLxhvs7X6;z#6V83!tP-}U*+<8G(i=*S)S?@TJ zNUIWjLOlS3#q+JjY*9!{l*MZQ`ty9WMv-;?ugpHg?n-(%*Y^{<{nxXDk_L?w91aaF zJ@I+T#3W?uyW3?dxn9Cb_CSgs^Z~2c+RMKBPawT@YO(vPJVOyUBd1mMk7qq*5&*ig z;@)=0h^POe|rO$(2_|V9mH0*@y1|_!r{F%63 z(Eo*zkx}q`vk1tm&Q`l{aC19N6z93SGeayVLTk7oV6wPdjDMG%p^nYW^1M2OP{8Ss zRlS-z-`5JWx{H^zr30p|{!x>P0HMc?4-p6D+33}ofu{4LgZrCm*gXG^$U=E(XlNRx zXK+vm|5v_}=WR>v>GCm}-;o&%=l=ks{GY+p;GKZ&U*~U?^uR8i0?XB(;3tN=Ve*TH zsOaDL=e+-bYlErrX79h@p?}puDGAsy2Dq^Qog)BtDf!%_hp#Y0J-X%me-ke_vT){0UyZ(gE8Y0L`Wcm%=a0W6+?JBNTKe*+=JiuJM$8VOVyT+`om| zAVE)zyKn1oh)+w;3ceBVbvwp6En|&I-rB;|?eG6{z6+81uSj!osQ&Ysg0-#gn+q1+ z5(O#xJKmpxlSeG$?=xfkx~bmY?8Lyh0l5GE<)7XO7`Q;TB^s0r@p_jx?cb@DCL{>S z^YDxvI8Xif@jlwB@28fo;&FYWaI~Y1jm3Dw!g$dNP>~!`)?y6J&M1g67sajuWzY|9 z_W|mAT!NpU#EqXMx~;9tb@y3*=B8hFS9dpY1)ua|cjAP1k+8xgkU_+y*u5OB6X=K+ytmGGkq=35S(&S5dV)(o-sRlOPMLd~J~>?oo!3%b6mT-Y8pD z-P|SwtXlv}TUdO8wg>b3Tz_lNclNR!R&neX&v zp&rQop&=?7nh5zis+VWd2g~wQeq(Pm35kgKIg2wG<<}x^+V9_ueD_OeD8SbrbIh{< zELfC|fPglDtpRB}Ow3Pl4ovT&B zJRQ=&>eFarzWDG7L3U>57%FYW#hRjhsxSZjdR|J-aEae&yUNN<;RkfK8)kzwD;t{* zt0&ist5xfX5z8u*hR&=U;b-Ltnh)vVkqqRRXB^B#px!isI&vTxN3vufGqBtX{3J>t z;Hs62DLxx@9b?;k?5dz}18K%kg8%!NCX0$R|0k3wAe*=w0xu|AyMs)VE^si0JLzvi zr3RoCHvaxwZdc&v%`g9}5$b=Nmhs;Yd9*hphjM7xY311&%FOJpd*nrRHF{_W*bGP6 zE$#Ba5yIerb&Q)5ShWPQYia=Sm>3|ZyqFYU@=!9^9M73^-!6vqE@(C1dYiU-}#l1pst8W&}rnK-oTX98{`1kS3E2Xa$SqTQ}@1k_IXhG zU}bfE4?#?d?*iZLr4ndfhQ?4Qv{v|HzFvdtEws6x(f%9^pl$xF+VwM(3KZ>p{jj{T zC`NnZG7^O`J3G6Pk@P|hY;ZOWj1TKSjeqxERR|xuL~3}J63EBw*$Pq<|QLN)HzwB zh)u`Y(^$VM&dr}$CLAGb3N`&pb6f+iyrsM z4LIUw>Ri~xpk8ZIer>i^LdcHZtLgTbEu+&zM3519v#&a}BnTNHW zW95hoxnGZ1U7n$>`WrsE5DjY`_`J8C$$q;K5%Q9q;``C@Mihq{qvn3=PF-KqcT<(w z%CB9QAOuYcdGH`8Xuy9(foybOAh_aTd-hN<8mu%qb~3~7Ny(~U5+R<7biP)x%ug{A z)t0A05!8!>3l%-WD`Zgh>8Hbclf7t?DQh+x@VM)Q-aFI`KJUK*} z$58OCJ-sib>kByCm4}a~da#h-g9|S1EAr8)q2l`1niveF>)#zwZjbtA~pQQHylL)@|tNFpf^D}i$6Ju`x zz^z#}f&plj@y);I@h7RmCuXo=ujiHIPSq}_UB zWFQ-ONN(|8&lFnntM(r4T*ZvUhJ}ybTnZ8&g@psb*HrMRF$XaK&WYOi)9Qq zm-WbZV$AJnW5J(iLRYESmdT1c@xXA)h@Ny2)G$)x$hd6L+1K(reYMjdH)*)NvkH9y zJVqK{=wR#lmIH0ii0a-RurQgley3aIVbI-M*O!#?L#{xAePgv?!S3BZf~`1*At6^rSsXpLxKOq!NF5J^)| zI>L3=$A#bt(4#aruv}Um`Pw=6&e&M@=rB#!9rv_Y@-E0ni(=i(iR0jXuAQ!@;e`qz z6&$#qebBMex@Nd6n5=>83MSM6At;Q{kx9w^ty*`5ui{i}->$=m!WBeC_6bnGFv-REEnPxnD%YGygK6{G*0ngUpSS%8;pQ&$Y zdDmU3n`#X01z<9J-;c;rK0!dbgQ&p8T_RIdN$eUa^`#|(K6I42x-Shvap3d8oA#Wv zc8PoL13 zh(P4c)NWau>VvU}fPfJA+_LB%;p5|(52mYXxSoyM&A>F%!dM*|l0`m&4mHr&pY*)O zuvOH$elwPoPh|noPa`N;4>M0;xUTM34dM>?4gl|NHuoN+wSId3<}c2ugEU=P zJVGIs57_ABTOK6L_9jUB!?<9o&{M1WSH6jsnq}ek+tXPzmsmnB15Kcn*;Y&~%g0ne zY^ObcDee0a5qz6;a9?0I4P5Rf7xMUKl6Lx*v-rmF3H)=d1-c9}& zZq{_RJQCJf3sZruT9{H!KWF2<78AShyLe51>alDhZCd(;q*#9dmEVLO9;G@IhA{5M{ZgJ}&|035qBGA1%@u?S;s74306YcesHxbgi;Ihu-jK0CPV7IXQaaunaKq2G z)Zkeo{a|@ReX~f|?a6#7ODN@=C*XQKS!C^*7e8HLO5wABWR9AU*FvG zB>jcf0AA0tKT4EjI=Z{lj204Fbm^)Ri>;(6b#u~nqp+h29|;h_%6YV+rC<$Ni$~Dx z@94X(>7sC($3C5iKv`Au-4B1t%9ezNxlTq8at3y;8P5to{GuK$6b~M>4}Htn+p|CVOs+roU|`{Ss9$q$8jG&u#t1N?E|+?y2hyeHe?Q_c z_eu79>o22;i8*t!Qbfh+&l)38L3BtY$a3DhiwjEIq2L*A@lg-Ya#?6ywSc!4#V22l_`qucDvF zRPDjey{*ZLN*<1|O=}5>^q`>UDvmqbrYd!YpE${kI}1s62lO|G`u*n7fwL@1%F3bf z&7qg>D#|L6PVi6Ii(*YG5Na$@h#;W@-G+|yzMQKSHeO1u+I%!?voNYp8T$o9uzA^z z?HkZCw|5JIk4<#3K8KTPB`o=J7|KcXY&8)iWrlVlN0!RlE4-VjDeIaDG?YH7gur)Q zU7cfPD}MX~7f{Sp)e}1+Bb4Ihb>WLZAEIe-bZZ=602bI3BdQ(%7gaE7uXmvUr~G!D zKfyzN)klHB-o`OGp}e*>z9Ne5KvxL{OSID&&71ubABTZ3tYg!_*f>k0Wu_>Mq3v?Qe1;pfgfT%EBz?A^$;sXrD9AZEMBo%PR4cVF{7&P_cK zx+eGc^*uV=t99Rd<m1@5CP6hxDdACu0`T`H=eGq~Fn%%}o|ac3 zBU31ER4F?TkP4xxUXN0 zJD9r!$)c33wsV>Y$OxC%a!b)l^ENvIihk_`5ru0;BzB_GWqrkrSmY~vesa;w^mI51 z?VI`rToc11Fl}nOvP8bd^2Z6;s3wvPGg-WJq7g&3ke>a%r?J489e;CHQ3T4iY9rMw zxQBy-7EBcEj^Q?-PnGh##_0ILIXXU0x8!~D*}JGHr6?sOI=b?csHi2AJdGr_v9WQw z1TP=oUE;9>au6-&CTrRhu<|oh83zKhBd46rZLQp%9{Zl=!1w z5%kI8e*kY>>#fJiR{^@w8WY}yGF1=P*Uc!QbTz$M8aai^(4a& z4Wp~7g$IwDXz*RK8&N3cWIKv&&=FbDEvuF;pC$RCJKH8^tE*q3vOuvZ(&a#O)T=`% zq`fD(V`iT)D>Cp?elbcel!>+naZuD@Enk{8ys83)LI!ru+q=87_%40Rbf_|ywc59k zRFXNx;Vs$%=l~SsB|G7r)7g8380*~b_rZk;UzX`Fyj-3}RQ+-TX|F_bk((IvX8X_j z37}Gg_d4lE>jE2w65eV=Ry^V-Avh#4{27L*HZ3D9V7D7$BtGtAf$NKu)HVSjNDSc~ zfVI(XYwv+7tG)ZZkLc3(w}!(m7pO}T{c&4F$12`8nivxU;_H#Kf3S}_VJG>Zc$-@& z0x1cWw@PoiR8FMo5TEWyG-i!m*#uM+_TR>UVc%vQ3IbCpR2qk!RTw{6m-ehgMp4$- z>|V2JEs7o!^7-CNvH{<%zgN|`(l~Mgly*+OxOf0ICfM^z8Z%{1HTLj9K!xw`v;9W{ zcBouiT}L6aaD06~H#buQ@u)vAI_CDA=Y=rB!VYW?R)-#{q=0P1a(H+Jue$f?>0S3H zxNhsj8aOsK;^Ir!ZzBGuOapW)Vt^$>=_oMF!v&y+W!`tSenuffX&BBGPYp=yhEuRG zoEgBgeL8&irKLX{St=}hc*JCs+G4_pE(p2 zA5G7($!6;kns z@cYRBKPU9^O7kbX$y0$%Y1XFL;kPR}_~XObz5j=a_5UVqCCnv&sFCp30);=r9w6

U3P+G}24#g$2gNS&CwxmpPh`52z?AMtrP%Yh^W3{!J6Y@3|;M)?N#{tj!Ss zAxMs9S*TS|_10QhSMzWb@)2$qb{{J%Ykrwu#S+bQW@ZC$vDTR#Sr!*F94gs({qch( zTv^3@by#F{fRc`iv*8$(D&*6-#cH{J*sUq+>o@*b1s*Z))eyRB5=9agpOu?uy!h)0 z;@~BJXMR$Re3n`o<%5#cmL{3UNn6q7m4-r!xO@)LEh*W#BbkaI-`KFZ*=pPyHVcx; z5#-Z^s<33MDQ9xh*GwZ!n(ON7GJJhH8A6B-@;|DMwuaE?`JLH7ymFeSsmLq_`Nj0~ z0X>tS!B{c($@ZIOg|?()(fX+nlPAQlYOa5^lU>`IKa8PnW9+OXl?84EO0Il<31QV!^ORK9_6hd~xPKQ1s$t7v9sl}VW?zW+-N-UP77o=rn zjj!7Xy)z<1{jWAhHS2CG`hi@uO8I;*lMmva&rDw^(;iC|jipi=7E$E#WkLrzY zp7qq5F2thlRly@tp?V&+eC{J__C8#xk&_21 z#9Q>G+63-Aj@79agHd+K%BrZroz_PV=lTuAfhRkcNL2Olym$Rd4^dM~X#!ufQ)A2G z?r!oFsYXYV-3mIxhAs%&Q0Rn%pE%k;k({gJ_TZ^>`$%8X+%y7vOhlO{(DS4Xln*L2 zM^k2dj7PImQ8FYz+r9kcfUi`%u`T~N**mBf9@0n|jZdC!Y~--hr|*bQ@O^>eRideg z_k$aFkZ=w$YrgLL_p9R^E2coPzAF|IclB4D&4OA&Z4Kadkvt*RD*qJ{9sEwe|HIbx zxG^SiMa5%69I&(ns!GSl_W`sJU;zv|*d?rV;?vT^B_x(-1kUN6LG@i4KC=NWbP!@r zmTtFobf9=JI_QD7vf46377{5gA+|N?q~yvR)_DhiJuflwFQVhnhsY{7j)}9Qx~p_` zT?FKGy@aGbP?RbTNJ+LTK1o3$qasf%T94{L_pFOPTIwLol9hdmTkMOA3#z;6ghv~r zlG4(9+tY5FIuRsX0*Wz$-i>n?oDSQ^ud3ojI0{jxx)WX-+o=%op_4cwPF7y?_xdnBXfRRDf z)r_Xi_$|ycW&I+su(+tevmZmIX;G{}VtG6&`OasuT?Tb(Di55iffac~Xs8s03ratl zn^nktRceKqEGH-DYNE8L!i|H5#;3-ui7rw5oU8H6{l|a$I&F^~UbsBm>M!3*S(AV5 zGrtp8wI-?fX>BHjAwdxb7Im+=*)IZ!i`}Lp(Q=*wbpBrazde4v)yTBeUFf5q-0Muc*zDpqER-m zuf9NkM^Io*KzMSx(x?g@IDD<}lju<^h`zz{fI<*$E%x~YrVtoEZ6d&Fb9vUy5TOef z=C?N)O*LH*;<5-X?wgc;!)Qp8ItvF}$N^15v)A~#w=I`Pq^KAx_Rqg$Zg4Z_YG)*N zahr|(nCPCK`r{O9l*=-p)@9?uHwpI{Iyj`?AqSOqRul0}z_(${KN|D$^kQi{CP>10~GkA z-G)07fG6FZd+WXA*fL+PNv|U4cL^iXiZJD4AV~}P#>XB3sc1_|99=x~YR87Q0;&Ve&Z6Dv?R~OGFp$eZRy$g}r+fx;jSx!#T=H}*u$=HP*;MMtwu?n)m_E=OcXL=xAx9=iSvG$J1otV-*Bgbd^HR zyP4YK7|~VSX%o&7xp7FLO9DVAcxdbtHKTXu%NJ>7>nDyD?d|PDLiFq%p#1dMSaN>H zGeW|7;fyKW*68B}*^#&EHkp)le9ASs^+aj`DDsEtsKQQw5muNbbl)KDPkGJFvHs49 z31v9^Ld4|!i(^m_bkogXFFCFF!HX9!n3%eI1xbW6XbRJClLt`Fy2GKwxfm*>OXj9B zI?CzYy={M$85>HK$(Ey6lZ0uKm%CMAP*XvRKUD+>$a|=OVAzJ7XP!#*+YBQQ`tmo=dImx_c#Pn9 z0i=*@J7bo;72w@TpDUl7Duy;o7W;TCF=w`%{j`T!VW54n{?Z4gX=gqq#Ye*d%)kci zZpg4!R=`s;FpviYRWKjxt2G^bxtS3_SJ`K073Fs8IE6CB=$_^Tm~aEg1(NdexGm2J zh`*s3qugks68B$-tF@P|R!l{Y_j(O5%bEoy!&{T)3y1v8V)hgt(Hi!|LTU;RWk+s? zJVIV z2eo_xB0{saK4C5ItgR)VMt%|b26d$>&e&9Xx;OsR2J1~FSEp+r0x6}ayOU+AyH2ud zWcaSOq-e2qeQizf?IQ5Flaf_5egwf+R$d4T7%Tn?Z#@dj$@e{0l}FBD#6CffjrBuQ zva1!+wCR5c-hbeE@#}O!&kR1?uis&%3eg*uDXp`N8G+5*<$1q*lso;-YPhCegDtML zttVYFXoy8l#{T>HZqlZGQIe>RSatPoN+VoFUR%2`Bn0yw`8*vhE1`!Q!$3*#DxZ^r zbipoIG8hMbQY|T_--z0!?JI#R9^o4M1dt&;7%IN-Ue$l%uR4C|{h8~0bE$%1WqUdk z7q9|twtCUQ^SR}dm*@Ux=w*6Zu@jwcdFdqGfYB=TH*X?CL<1ipivn+kCM9fg!Mmx% z=>Y-dL;dA8FHkuG%nU6Z1Q$F_Jw2tOK8`i6hnYQy52ls`V!a8+%xx^0^H-uUFAg@g zbPf9y31-EF7TJlg&`_YEQR8-WemWga_2a__H`sAXvbmmmh2m=}`ffVA(_j`OXZlsB zfs71F3O10OMsuDtesb~$E)zju9uVCA6V9eyK#QZY7a~6t$LEIQ`^ToSWDX-!R-Mz_ z+=F5ql;KRZ4bUdcnL;#27P`?578&E+mx;924j&-CjI6F=4Za5Nd;V^0vk zd*yR^!U{KO(-_*h$^=|@uRC+_~up+a(jI&jYB>^VJ)Xe zD%WyiXrqOy-=Lk#TX? zc_o}VFWY!boI=#CDv88{l)MNPge1=&jVH>Xf;6`<%_-cj9He<8XspzFY1cLg3TG+o}YL zu{_$%SW(};^=4WOqg4Givo~#t&>f2_P8pupf`~J8_WZoE1gV4XO9f)ZdO8U8;d1wA zSx%DFUnJ*?lP-3^i!;};2dpt{IvD9xBA;@5*pGsF z%SW*XIflzL0|&M+UUC^%&QuB_k21qOThtGgw1`q>L7rAcxaZEQp~zsmf8F_&W^};U zuc`VG8^7kpW7(N`2$k1`9@ITARce#Pi@1_Dh6=54yk*Hxk`HjkOE z;zxA%&Mp9a+jOwF!IlCD3Qc-md}hNVLeNx{@={S1+Zd*t;w=vZzNDq);XYonL;$Eo zz?GYOpD|{tkTWB64?$hi91zE+3)s(?HxbP;G5qyp1y@os^t<5npIb%q>)IWKAYl#fGN1()sG zPywimdD7F-b!I;toDC$nL#0a&^a;?1n^C~aFMO&hixemkym`|G3uqDD2(3*hk_(pA z%v!x3sRWD;DD#1}V1 z69R$P()ID|!hiv=P!47`I_Q8gTFIW(4c1EOW-&sW0~0qNVkk6QGXf zQnC>UW-1)rS4&A$4KqSp)*^xqMdod3v8bu*66+2b zsw674&adAoq-?2$dpxxfs6c@t+LCWsI#5+;%(UM6`-asbp^idvC?EO_jxn#YBcw(% zf{xB5V@NG*-LrGM4cZ798om~={qACCu~cX!9rnp>6cNOm=Sv}?9?X){;}`|Xb!}RK zhJF-J5b7nW|45IXWDf1h=ij_Qun8*sD~RX+RSxtT8^E=$G3A;cfb-wEiLNm*R4L#5 UjP!UEd-E@)#TCSIU+a1O4=rv4fB*mh literal 93667 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≪__ak< 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 IIVCg!053lqy#N3J diff --git a/scripts/build-linux.sh b/scripts/build-linux.sh index 4b2d397..df09ac0 100755 --- a/scripts/build-linux.sh +++ b/scripts/build-linux.sh @@ -2,6 +2,7 @@ set -euo pipefail cd "$(dirname "$0")/.." node_bin="${NODE:-node}" +"$node_bin" scripts/check-node.cjs arch="$(dpkg --print-architecture)" case "$arch" in arm64|amd64) ;; *) echo 'Build on 64-bit Debian Bookworm or later (arm64 for Raspberry Pi).' >&2; exit 1 ;; esac "$node_bin" source/ui/node_modules/typescript/bin/tsc --project source/ui/tsconfig.json --noEmit diff --git a/scripts/build-macos.sh b/scripts/build-macos.sh index 8a1e974..ea9a52d 100755 --- a/scripts/build-macos.sh +++ b/scripts/build-macos.sh @@ -9,8 +9,11 @@ case "$arch" in *) echo 'Usage: scripts/build-macos.sh [arm64|x86_64]' >&2; exit 1 ;; esac node_bin="${NODE:-node}" +"$node_bin" scripts/check-node.cjs mac_sdk="$(xcrun --sdk macosx --show-sdk-path)" -swift_cache="$repo_root/target/swift-macos-$arch-cache" +swift_toolchain=$(xcrun swiftc -version | shasum -a 256 | cut -c 1-12) +# Do not reuse Clang/Swift modules from a different SDK or compiler. +swift_cache="$repo_root/target/swift-macos-$arch-$swift_toolchain-$(basename "$mac_sdk")" if ! rustup target list --installed | grep -qx "$rust_target"; then echo "Install the Rust target first: rustup target add $rust_target" >&2; exit 1 fi @@ -22,6 +25,17 @@ stage="$repo_root/builds/macos-$arch" # Replace generated artifacts only; never touch development sources or user data. mkdir -p "$stage" app="$stage/OneLibraryCompanion.app" +# A build must not inherit removed resources or an older source manifest. +python3 - "$app" "$stage/dmg" <<'PYRESET' +from pathlib import Path +import shutil, sys +for value in sys.argv[1:]: + path = Path(value) + if path.is_symlink(): + path.unlink() + elif path.exists(): + shutil.rmtree(path) +PYRESET mkdir -p "$app/Contents/MacOS" "$app/Contents/Resources" xcrun swiftc -parse-as-library -O -sdk "$mac_sdk" -target "$arch-apple-macos13.0" -module-cache-path "$swift_cache" \ -framework Cocoa -framework WebKit -framework ServiceManagement source/desktop/macos/OLC.swift -o "$app/Contents/MacOS/OLC" diff --git a/scripts/build-pi-cross.sh b/scripts/build-pi-cross.sh index 4770292..dc5c9e0 100755 --- a/scripts/build-pi-cross.sh +++ b/scripts/build-pi-cross.sh @@ -2,6 +2,7 @@ set -euo pipefail cd "$(dirname "$0")/.." node_bin="${NODE:-node}" +"$node_bin" scripts/check-node.cjs # Install cargo-zigbuild and Zig explicitly; this script does not change toolchains. "$node_bin" source/ui/node_modules/typescript/bin/tsc --project source/ui/tsconfig.json --noEmit (cd source/ui && "$node_bin" node_modules/vite/bin/vite.js build) diff --git a/scripts/check-app.sh b/scripts/check-app.sh index f2e7226..f5a6bdf 100755 --- a/scripts/check-app.sh +++ b/scripts/check-app.sh @@ -2,7 +2,11 @@ set -euo pipefail cd "$(dirname "$0")/.." NODE="${NODE:-node}" +"$NODE" scripts/check-node.cjs python3 scripts/check-docs.py +python3 -m unittest discover -s scripts/tests -p test_publication.py +python3 -m unittest discover -s scripts/tests -p test_usb_unmount.py +python3 scripts/test_position_signals.py # Format application packages only, never local or vendored experiments. cargo fmt -p pioneer-companion-core -p pioneer-companion-host -- --check cargo test --workspace --locked diff --git a/scripts/check-distribution.py b/scripts/check-distribution.py index 92b604d..8b9cf3f 100755 --- a/scripts/check-distribution.py +++ b/scripts/check-distribution.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Check desktop build assets and a running, isolated desktop host without CDJ traffic.""" +"""Check production build assets and a running, isolated desktop host without CDJ traffic.""" import argparse import json from pathlib import Path @@ -8,10 +8,11 @@ parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--url', help='Optional isolated desktop host URL for read-only HTTP checks') +parser.add_argument('--experimental-ui', type=Path, help='Also check an optional diagnostic UI build') args = parser.parse_args() root = Path(__file__).resolve().parent.parent prod = root / 'source/ui/dist' -for folder in (prod,): +for folder in [prod, *([args.experimental_ui] if args.experimental_ui else [])]: assert (folder / 'index.html').is_file(), f'Build {folder} first' assert 'OneLibraryCompanion' in (folder / 'index.html').read_text() for source in [root / 'LICENSE', root / 'THIRD_PARTY_NOTICES.md', *sorted((root / 'third-party-licenses').iterdir())]: @@ -21,6 +22,10 @@ for marker in ['DIAGNOSTICS & EXPERIMENTS', '/api/diagnostics/cue-window', '/api/diagnostics/native-cues', '/diagnostics/local-usb', 'Choose an offline preview in TEST', 'PIONEERCOMPANION / SET HISTORY']: assert marker not in text, f'Production asset leaked: {marker}' assert not list(prod.glob('assets/Experiments-*.js')), 'Production included the experiments chunk' +if args.experimental_ui: + experimental_text = '\n'.join(p.read_text() for p in args.experimental_ui.rglob('*.js')) + assert '/api/diagnostics/cue-window' in experimental_text, 'Diagnostic UI missing' + assert 'DIAGNOSTICS & EXPERIMENTS' in experimental_text, 'Diagnostic screen missing' if args.url: def request(path): with urllib.request.urlopen(args.url.rstrip('/') + path, timeout=3) as response: @@ -39,4 +44,4 @@ def request(path): assert error.code in (404, 405), (path, error.code) assert isinstance(request('/api/library/sources'), dict) assert isinstance(request('/api/sets'), dict) -print('Distribution checks passed: production excludes TEST' + ('; desktop APIs verified' if args.url else '')) +print('Distribution checks passed: production excludes diagnostic screens' + ('; desktop APIs verified' if args.url else '')) diff --git a/scripts/check-docs.py b/scripts/check-docs.py index 4f21dd6..174288e 100644 --- a/scripts/check-docs.py +++ b/scripts/check-docs.py @@ -1,25 +1,76 @@ #!/usr/bin/env python3 -"""Check publication guides for missing local links and excluded product documentation.""" +"""Validate public guide links, scope and release-version consistency.""" +import json from pathlib import Path +import plistlib import re import runpy +import tomllib from urllib.parse import unquote, urlsplit -root = Path(__file__).resolve().parent.parent -policy = runpy.run_path(str(root / 'scripts/prepare-distribution.py')) -pages = [root / 'README.md', *(root / 'docs' / name for name in policy['DOCS'])] -errors = [] -for page in pages: - text = page.read_text() - if re.search(r'\btest screen\b|\bexperiments?\b', text, re.I): - errors.append(f'{page.relative_to(root)}: documentation outside distribution scope') - for target in re.findall(r'!?\[[^\]]*\]\(([^\s)]+)(?:\s+[^)]*)?\)', text): - link = urlsplit(target.strip('<>')) - if link.scheme or link.netloc or not link.path: - continue - resolved = (page.parent / unquote(link.path)).resolve() - if not resolved.is_relative_to(root) or not resolved.exists(): - errors.append(f'{page.relative_to(root)}: missing local link {target}') -if errors: - raise SystemExit('\n'.join(errors)) -print(f'Publication documentation checks passed ({len(pages)} pages)') +ROOT = Path(__file__).resolve().parent.parent + + +def anchors(text): + headings = re.findall(r'^#{1,6}\s+(.+?)\s*#*$', text, re.M) + used = {} + result = set() + for heading in headings: + slug = re.sub(r'[^\w\- ]', '', heading.lower()).replace(' ', '-') + count = used.get(slug, 0) + used[slug] = count + 1 + result.add(f'{slug}-{count}' if count else slug) + return result + + +def check(root=ROOT): + policy = runpy.run_path(str(root / 'scripts/prepare-distribution.py')) + pages = [root / 'README.md', *(root / 'docs' / name for name in policy['DOCS'])] + public_pages = set(p.resolve() for p in pages) + errors = [] + for page in pages: + text = page.read_text() + if page.name != 'development.md' and re.search(r'\btest screen\b|\bexperiments?\b', text, re.I): + errors.append(f'{page.relative_to(root)}: development-only content in user guide') + scoped = text + if page.name == 'distribution.md': + scoped = re.sub(r'^## Raspberry Pi headless\n.*?(?=^## |\Z)', '', text, flags=re.M | re.S) + if re.search(r'\bipad(?:os)?\b|\bios\b', scoped, re.I): + errors.append(f'{page.relative_to(root)}: tablet documentation belongs only in headless setup') + if re.search(r'/Users/|\.local/|10\.80\.1\.|\bBuild \d+\b|has been removed|was fixed', text): + # The development data directory is an intentional public setting. + sanitized = text.replace('`.local/app-data`', '').replace('~/.local/', '~/') + if re.search(r'/Users/|\.local/|10\.80\.1\.|\bBuild \d+\b|has been removed|was fixed', sanitized): + errors.append(f'{page.relative_to(root)}: private path or development history in public guide') + for target in re.findall(r'!?\[[^\]]*\]\(([^\s)]+)(?:\s+[^)]*)?\)', text): + link = urlsplit(target.strip('<>')) + if link.scheme or link.netloc: + continue + resolved = (page.parent / unquote(link.path)).resolve() if link.path else page.resolve() + if not resolved.is_relative_to(root) or not resolved.exists(): + errors.append(f'{page.relative_to(root)}: missing local link {target}') + continue + if resolved.suffix == '.md' and resolved.parent == root / 'docs' and resolved not in public_pages: + errors.append(f'{page.relative_to(root)}: link excluded from public snapshot: {target}') + if link.fragment and resolved.suffix == '.md' and unquote(link.fragment) not in anchors(resolved.read_text()): + errors.append(f'{page.relative_to(root)}: missing section {target}') + version = tomllib.loads((root / 'source/host/Cargo.toml').read_text())['package']['version'] + ui = json.loads((root / 'source/ui/package.json').read_text())['version'] + lock = json.loads((root / 'source/ui/package-lock.json').read_text()) + with (root / 'source/desktop/macos/Info.plist').open('rb') as file: + mac = plistlib.load(file)['CFBundleShortVersionString'] + for name, value in [('UI', ui), ('UI lock', lock['version']), ('UI package lock', lock['packages']['']['version']), ('Mac', mac)]: + if value != version: + errors.append(f'{name} version {value} does not match host {version}') + if not (root / 'docs/release-notes.md').read_text().startswith(f'# OneLibraryCompanion {version}\n'): + errors.append('Release notes version does not match host') + workflow = (root / '.github/workflows/release.yml').read_text() + if f'default: v{version}\n' not in workflow: + errors.append('Release workflow default does not match host') + if errors: + raise SystemExit('\n'.join(errors)) + print(f'Public documentation and version checks passed ({len(pages)} pages, {version})') + + +if __name__ == '__main__': + check() diff --git a/scripts/check-node.cjs b/scripts/check-node.cjs new file mode 100644 index 0000000..c8245d3 --- /dev/null +++ b/scripts/check-node.cjs @@ -0,0 +1,5 @@ +// Keep setup and build/check entry points on the same supported Node baseline. +const [major, minor] = process.versions.node.split('.').map(Number); +if (!((major === 20 && minor >= 19) || (major === 22 && minor >= 12) || major > 22)) { + throw new Error('Use Node 20.19+ (20.x) or 22.12+; set NODE to a compatible executable.'); +} diff --git a/scripts/prepare-distribution.py b/scripts/prepare-distribution.py index 10743b4..9288dd3 100755 --- a/scripts/prepare-distribution.py +++ b/scripts/prepare-distribution.py @@ -2,23 +2,23 @@ """Make an allowlisted source snapshot for review before a GitHub publication.""" import argparse import hashlib +import os from pathlib import Path import shutil ROOT = Path(__file__).resolve().parent.parent FILES = ['Cargo.toml', 'Cargo.lock', 'LICENSE', 'THIRD_PARTY_NOTICES.md', 'README.md', '.gitignore', 'AGENTS.md'] TREES = ['source/core', 'source/host', 'source/ui', 'source/desktop', 'vendor/prolink', 'third-party-licenses', 'packaging', '.github'] -SCRIPTS = ['bootstrap-mac.sh', 'build-linux.sh', 'build-macos.sh', 'build-pi-cross.sh', 'check-app.sh', 'check-distribution.py', 'check-docs.py', 'collect-third-party-notices.py', 'package-linux.py', 'package-mac-networking.sh', 'position_signals.py', 'prepare-distribution.py', 'setup.sh', 'smoke-host.py', 'test_position_signals.py', 'test-mac-networking.py', 'tests/test_usb_unmount.py', 'trace-bar-position.py'] -DOCS = ['distribution.md', 'release-notes.md', 'architecture.md', 'configuration.md', 'set-history.md', 'development.md', 'hardware-testing.md', 'compatibility.md', 'local-usb.md', 'screenshots.md'] -OMITTED = {'vendor/prolink/Cargo.lock'} -OVERRIDES = ROOT / '.local/distribution-overrides' +SCRIPTS = ['check-node.cjs', 'bootstrap-mac.sh', 'build-linux.sh', 'build-macos.sh', 'build-pi-cross.sh', 'check-app.sh', 'check-distribution.py', 'check-docs.py', 'collect-third-party-notices.py', 'package-linux.py', 'package-mac-networking.sh', 'position_signals.py', 'prepare-distribution.py', 'setup.sh', 'smoke-host.py', 'test_position_signals.py', 'test-mac-networking.py', 'tests/test_usb_unmount.py', 'tests/test_publication.py', 'trace-bar-position.py'] +DOCS = ['distribution.md', 'release-notes.md', 'architecture.md', 'configuration.md', 'set-history.md', 'development.md', 'hardware-testing.md', 'compatibility.md', 'local-usb.md', 'screenshots.md', 'cdj-configurations.md'] PUBLIC_AGENTS = '''# Project requirements - Keep UI and feature improvements shared across Mac and Raspberry Pi. Implement shared behavior in source/ui and source/host. - Keep the UI in English. Preserve existing workspace changes. +- Consult the user before material changes to CDJ-facing source identity, metadata selection or serving behavior. - Keep distribution documentation focused on supported Mac and Raspberry Pi functionality and current behavior. Document only implemented features and known limitations; exclude future plans, proposed features and roadmaps. ''' -EXCLUDED = {'.git', 'target', 'builds', 'dist', 'node_modules', 'DerivedData', 'xcuserdata', 'com.apple.DeveloperTools', '__pycache__', '.DS_Store'} +EXCLUDED = {'.git', 'target', 'builds', 'dist', 'node_modules', 'DerivedData', 'xcuserdata', 'com.apple.DeveloperTools', '__pycache__', '.DS_Store', '.local', '.venv', '.pytest_cache'} BANNED = {'.p12', '.mobileprovision', '.cer', '.pem', '.key', '.db', '.pdb', '.wav', '.mp3', '.aiff', '.flac', '.log', '.pyc', '.xcuserstate'} # Original synthetic regression signals, never user music. Pin their bytes so # an unrelated audio file cannot silently enter the source distribution. @@ -29,6 +29,15 @@ } +def source_files(directory): + # Prune generated/private directories before walking them, not after reading + # an entire node_modules, Cargo target or local-work tree into candidates. + for parent, directories, files in os.walk(directory): + directories[:] = [name for name in directories if name not in EXCLUDED and not name.startswith('dist-')] + for name in files: + yield Path(parent) / name + + def prepare(destination): destination = destination.resolve() if destination.exists(): @@ -36,17 +45,14 @@ def prepare(destination): candidates = [ROOT / name for name in FILES] candidates.extend(ROOT / 'scripts' / name for name in SCRIPTS) for tree in TREES: - candidates.extend(path for path in (ROOT / tree).rglob('*') if path.is_file()) + candidates.extend(source_files(ROOT / tree)) candidates.extend(ROOT / 'docs' / name for name in DOCS) candidates.extend(path for path in (ROOT / 'docs/screenshots').rglob('*') if path.is_file()) manifest = [] for source in sorted(set(candidates)): relative = source.relative_to(ROOT) - if relative.as_posix() in OMITTED or any(part in EXCLUDED or part.startswith('dist-') for part in relative.parts): + if any(part in EXCLUDED or part.startswith('dist-') for part in relative.parts): continue - override = OVERRIDES / relative - if override.is_file(): - source = override fixture = FIXTURES.get(relative.as_posix()) if fixture and hashlib.sha256(source.read_bytes()).hexdigest() != fixture: raise SystemExit(f'Synthetic fixture changed; review before publication: {relative}') diff --git a/scripts/setup.sh b/scripts/setup.sh index 7c163b2..a7e9a66 100755 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -2,6 +2,7 @@ set -euo pipefail cd "$(dirname "$0")/.." # Use an installed compatible Node on PATH. No global tools are installed. -node -e 'const [major,minor]=process.versions.node.split(".").map(Number);if(!((major===20&&minor>=19)||(major===22&&minor>=12)||major>22)){throw new Error("Use Node 20.19+ (20.x) or 22.12+")}' +node_bin="${NODE:-node}" +"$node_bin" scripts/check-node.cjs npm --prefix source/ui ci cargo fetch --locked diff --git a/scripts/smoke-host.py b/scripts/smoke-host.py index 358ca94..af02aab 100755 --- a/scripts/smoke-host.py +++ b/scripts/smoke-host.py @@ -62,6 +62,22 @@ def start(): assert error.code in (404, 405), (path, error.code) assert request('/api/app')['authentication'] == 'none' assert isinstance(request('/api/library/sources'), dict) + profile = request('/api/cdj-configurations', {'action': 'create', 'name': 'Release smoke profile'}) + profile_id = profile['id'] + assert any(p['id'] == profile_id for p in request('/api/cdj-configurations')['profiles']) + assert isinstance(request(f'/api/cdj-configurations/{profile_id}/export'), dict) + failed_load = request('/api/live/load', {'source': 'local-usb:smoke', 'generation': 1, 'trackId': 42, 'target': 1}) + assert failed_load['outcome'] == 'error' + deadline = time.monotonic() + 3 + reports = [] + while not reports and time.monotonic() < deadline: + reports = list((Path(directory) / 'load-incidents').glob('load-*.json')) + if not reports: + time.sleep(0.02) + assert reports, 'Failed load did not save an incident' + incident = json.loads(reports[0].read_text()) + assert incident['request']['trackId'] == 42 and incident['result']['outcome'] == 'error' + assert any('load_request' in event[1] for event in incident['serving']) saved = request('/api/sets', {'action': 'start'}) identifier = saved['activeId'] request('/api/sets', {'action': 'metadata', 'id': identifier, 'title': 'OLC release smoke'}) @@ -84,10 +100,11 @@ def start(): child = start() assert request('/api/sets')['sets'][0]['title'] == 'OLC release smoke' assert request('/api/app')['interface'] is None + assert any(p['id'] == profile_id for p in request('/api/cdj-configurations')['profiles']) child.terminate() assert child.wait(timeout=5) == 0 finally: if child and child.poll() is None: child.kill() child.wait() -print('Release smoke passed: production routes, shared history, persistence, duplicate rejection and graceful SSE shutdown.') +print('Release smoke passed: production routes, profiles, automatic load incidents, history persistence, duplicate rejection and graceful SSE shutdown.') diff --git a/scripts/tests/test_publication.py b/scripts/tests/test_publication.py new file mode 100644 index 0000000..c076c67 --- /dev/null +++ b/scripts/tests/test_publication.py @@ -0,0 +1,44 @@ +"""Publication must use current allowlisted source, never private substitutions.""" +from pathlib import Path +import runpy +import tempfile +import unittest + +ROOT = Path(__file__).resolve().parents[2] + + +class PublicationTests(unittest.TestCase): + def test_snapshot_ignores_private_overrides_and_nested_work_files(self): + namespace = runpy.run_path(str(ROOT / 'scripts/prepare-distribution.py')) + prepare = namespace['prepare'] + policy = prepare.__globals__ + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + for relative, contents in { + 'README.md': 'current source', + 'source/ui/src/main.tsx': 'current UI', + 'source/ui/.local/private.txt': 'private', + 'source/ui/dist-experiments/assets/test.js': 'generated', + '.local/distribution-overrides/README.md': 'obsolete override', + }.items(): + path = root / relative + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(contents) + policy.update(ROOT=root, FILES=['README.md'], TREES=['source/ui'], SCRIPTS=[], DOCS=[]) + target = root / 'snapshot' + prepare(target) + self.assertEqual((target / 'README.md').read_text(), 'current source') + self.assertEqual((target / 'source/ui/src/main.tsx').read_text(), 'current UI') + self.assertFalse((target / 'source/ui/.local').exists()) + self.assertFalse((target / 'source/ui/dist-experiments').exists()) + self.assertIn('README.md', (target / 'SOURCE-MANIFEST.sha256').read_text()) + with self.assertRaises(SystemExit): + prepare(target) + + def test_heading_anchors_match_current_public_links(self): + anchors = runpy.run_path(str(ROOT / 'scripts/check-docs.py'))['anchors'] + self.assertEqual(anchors('# Hello\n## Hello\n## Audio & files\n'), {'hello', 'hello-1', 'audio--files'}) + + +if __name__ == '__main__': + unittest.main() diff --git a/source/desktop/macos/Info.plist b/source/desktop/macos/Info.plist index d9b6de8..fafcb16 100644 --- a/source/desktop/macos/Info.plist +++ b/source/desktop/macos/Info.plist @@ -7,8 +7,8 @@ CFBundleExecutableOLC CFBundleIconFileOLC CFBundlePackageTypeAPPL -CFBundleShortVersionString0.4.0 -CFBundleVersion9 +CFBundleShortVersionString0.5.0 +CFBundleVersion10 LSMinimumSystemVersion13.0 NSHighResolutionCapable NSLocalNetworkUsageDescriptionOLC connects to your CDJs and shares its interface with devices on your local network. diff --git a/source/desktop/macos/MakeIcon.swift b/source/desktop/macos/MakeIcon.swift index a07a0c0..9843597 100644 --- a/source/desktop/macos/MakeIcon.swift +++ b/source/desktop/macos/MakeIcon.swift @@ -2,7 +2,12 @@ import Cocoa let image = NSImage(size: NSSize(width: 1024, height: 1024)) image.lockFocus() NSColor(calibratedRed: 0.06, green: 0.09, blue: 0.12, alpha: 1).setFill() -NSBezierPath(roundedRect: NSRect(x: 32, y: 32, width: 960, height: 960), xRadius: 212, yRadius: 212).fill() +// iPadOS supplies the corner mask; its source icon needs an opaque full background. +if CommandLine.arguments.contains("--ipad") { + NSBezierPath(rect: NSRect(x: 0, y: 0, width: 1024, height: 1024)).fill() +} else { + NSBezierPath(roundedRect: NSRect(x: 32, y: 32, width: 960, height: 960), xRadius: 212, yRadius: 212).fill() +} let wave = NSBezierPath() wave.move(to: NSPoint(x: 152, y: 676)) for (x, y) in [(244,676),(288,792),(352,552),(416,736),(476,676),(872,676)] { wave.line(to: NSPoint(x:x,y:y)) } @@ -17,4 +22,13 @@ let size = text.size(withAttributes:attributes) text.draw(at:NSPoint(x:(1024-size.width)/2,y:220),withAttributes:attributes) image.unlockFocus() let bitmap = NSBitmapImageRep(data:image.tiffRepresentation!)! -try bitmap.representation(using:.png,properties:[:])!.write(to:URL(fileURLWithPath:CommandLine.arguments[1])) +var output = bitmap +if CommandLine.arguments.contains("--ipad") { + let context = CGContext(data: nil, width: 1024, height: 1024, + bitsPerComponent: 8, bytesPerRow: 0, + space: CGColorSpaceCreateDeviceRGB(), + bitmapInfo: CGImageAlphaInfo.noneSkipLast.rawValue)! + context.draw(bitmap.cgImage!, in: CGRect(x: 0, y: 0, width: 1024, height: 1024)) + output = NSBitmapImageRep(cgImage: context.makeImage()!) +} +try output.representation(using:.png,properties:[:])!.write(to:URL(fileURLWithPath:CommandLine.arguments[1])) diff --git a/source/host/Cargo.toml b/source/host/Cargo.toml index 70004cc..e7de6ad 100644 --- a/source/host/Cargo.toml +++ b/source/host/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pioneer-companion-host" -version = "0.4.0" +version = "0.5.0" edition = "2024" license = "GPL-3.0-only" [lib] diff --git a/source/host/examples/cdj_settings_probe.rs b/source/host/examples/cdj_settings_probe.rs new file mode 100644 index 0000000..d5ec329 --- /dev/null +++ b/source/host/examples/cdj_settings_probe.rs @@ -0,0 +1,432 @@ +//! Isolated CDJ-2000NXS settings feasibility worker. JSON-lines on stdin/stdout. +//! Run through scripts/cdj-settings-test.py so OLC is restored and pcap is saved. +use prolink::serve::{MediaSet, Medium, ServedSlot, Vfs}; +use prolink::serve::{ + dbserver::{DbServer, DbServerConfig}, + nfs::{NfsConfig, NfsServer}, +}; +use prolink::virtual_cdj::Numbering; +use prolink::{Discovery, Interface, Slot, VirtualCdj, VirtualCdjConfig}; +use prolink_proto::{DeviceName, DeviceNumber, status}; +use prolink_rekordbox::SettingsFile; +use serde_json::{Value, json}; +use std::{ + collections::HashMap, + io::{self, BufRead}, + net::Ipv4Addr, + path::Path, + sync::{Arc, RwLock}, + time::{Duration, Instant}, +}; +use tokio::{net::UdpSocket, sync::mpsc}; + +#[path = "../src/cdj_settings_command.rs"] +mod cdj_settings_command; + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +enum PushMethod { + LoadCommand, + LegacyResponse, +} +impl PushMethod { + fn parse(value: &Value) -> Result { + match value.as_str() { + Some("load-command") => Ok(Self::LoadCommand), + Some("legacy-response") => Ok(Self::LegacyResponse), + _ => Err("Reload the test page and select a send method"), + } + } + fn id(self) -> &'static str { + match self { + Self::LoadCommand => "load-command", + Self::LegacyResponse => "legacy-response", + } + } + fn kind(self) -> u8 { + match self { + Self::LoadCommand => 0x34, + Self::LegacyResponse => 0x36, + } + } + fn encode( + self, + name: DeviceName, + sender: DeviceNumber, + target: DeviceNumber, + settings: &[u8], + ) -> Result, &'static str> { + match self { + Self::LoadCommand => { + cdj_settings_command::encode(&name.0, sender.get(), target.get(), settings) + .map(|p| p.to_vec()) + } + Self::LegacyResponse => { + Ok( + status::SettingsResponse::build(name, sender, target, Slot::USB, settings) + .as_bytes() + .to_vec(), + ) + } + } + } +} + +fn event(value: Value) { + println!("{value}"); +} +fn packet(direction: &str, peer: Ipv4Addr, data: &[u8], reason: &str) { + event( + json!({"event":"packet","direction":direction,"peer":peer,"reason":reason, + "kind":data.get(10),"hex":data.iter().map(|b|format!("{b:02x}")).collect::()}), + ); +} +fn profile(original: &[u8], brightness: u8) -> Result, String> { + if original.len() != 32 || !(0x81..=0x85).contains(&original[1]) { + return Err("Unsupported MYSETTING.DAT brightness layout".into()); + } + let mut bytes = original.to_vec(); + if brightness != 0 { + if !(1..=5).contains(&brightness) { + return Err("Brightness must be 1–5 or 0 (original)".into()); + } + // MYSETTING payload byte 9, after its 8-byte prefix. See rekordcrate setting.rs. + bytes[1] = 0x80 + brightness; + } + Ok(bytes) +} +#[derive(Clone)] +struct Peer { + number: DeviceNumber, + seen: Instant, + stopped: bool, +} +struct Arm { + method: PushMethod, + ip: Ipv4Addr, + mac: prolink_proto::MacAddress, + number: DeviceNumber, + deadline: Instant, + absent: bool, + returned: Option, +} +fn eligible(peer: &Peer) -> bool { + peer.seen.elapsed() < Duration::from_secs(2) && peer.stopped +} +fn source_status(name: DeviceName, number: DeviceNumber, counter: u32) -> status::CdjStatus { + status::CdjStatus::builder() + .name(name) + .device_number(number) + .slot_state(Slot::USB, status::MediaState::LOADED) + .slot_state(Slot::SD, status::MediaState::EMPTY) + .link_available(true) + .packet_counter(counter) + .playing(false) + .tempo_master(false) + .synced(false) + .play_state(0) + .build() +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + let result = run().await; + if let Err(error) = &result { + event(json!({"event":"fatal","message":error.to_string()})); + } + result +} +async fn run() -> Result<(), Box> { + let args: Vec<_> = std::env::args().skip(1).collect(); + if args.len() == 2 && args[0] == "--check-command" { + // Deployment verification: encode from the real export, without opening + // sockets, announcing a source, stopping OLC, or sending to a player. + let file = SettingsFile::parse(&std::fs::read( + Path::new(&args[1]).join(Medium::SETTINGS_PATH), + )?)?; + let settings = profile(file.wire_settings(), 1)?; + let raw = PushMethod::LoadCommand.encode( + DeviceName::new("OLC SETTINGS TEST"), + DeviceNumber::new(4).unwrap(), + DeviceNumber::ONE, + &settings, + )?; + event( + json!({"event":"codec-check","workerVersion":2,"commandKind":raw[10],"bytes":raw.len(),"brightness":raw[0x2d]-0x80,"hex":raw.iter().map(|b|format!("{b:02x}")).collect::(),"networkOpened":false}), + ); + return Ok(()); + } + if args.len() != 2 { + return Err( + "usage: cdj_settings_probe INTERFACE EXPORT_ROOT | --check-command EXPORT_ROOT".into(), + ); + } + let interface = Interface::named(&args[0])?; + let root = Path::new(&args[1]); + let raw = std::fs::read(root.join(Medium::SETTINGS_PATH))?; + let file = SettingsFile::parse(&raw)?; + if file.payload.len() != 40 || !file.has_magic() { + return Err("Expected first-generation MYSETTING.DAT".into()); + } + let original = profile(file.wire_settings(), 0)?; + let mut selected = original.clone(); + let source = Arc::new(Medium::from_volume(root, ServedSlot::USB)?); + if source.library().tracks.is_empty() { + return Err("Baseline needs a nonempty traditional export.pdb".into()); + } + // Exclusive port ownership; never use SO_REUSEPORT against the production host. + let socket = UdpSocket::bind((Ipv4Addr::UNSPECIFIED, 50002)).await?; + let mut tree = Vfs::new(); + tree.mount(ServedSlot::USB.vfs_prefix(), root)?; + let nfs = NfsServer::start( + Arc::new(RwLock::new(tree)), + NfsConfig { + interface: Some(interface.clone()), + ..Default::default() + }, + ) + .await?; + let discovery = Discovery::start(interface.clone()).await?; + tokio::time::sleep(Duration::from_secs(4)).await; + let name = DeviceName::new("OLC SETTINGS TEST"); + let media = Arc::new(MediaSet::new([source.clone()])); + // Claim a free 1–4 slot using the existing conflict-aware claim chain. + // Custom status receiver below records source addresses and every settings exchange. + let cdj = VirtualCdj::start( + &discovery, + VirtualCdjConfig { + name, + numbering: Numbering::Claim { preferred: None }, + emit_status: false, + ..Default::default() + }, + media, + ) + .await?; + let db = DbServer::start( + DbServerConfig { + device: cdj.browsable_number().ok_or("No free player number")?, + address: interface.ip, + ..Default::default() + }, + [source.clone()], + ) + .await?; + let (tx, mut commands) = mpsc::channel::(16); + std::thread::spawn(move || { + for line in io::stdin().lock().lines() { + let Ok(line) = line else { break }; + if tx.blocking_send(line).is_err() { + return; + } + } + }); + event( + json!({"event":"ready","workerVersion":2,"sourceNumber":cdj.number().get(),"sourceIp":interface.ip,"sourceName":"OLC SETTINGS TEST", + "originalBrightness":original[1]-0x80,"checksumMatches":file.checksum_matches(),"tracks":source.library().tracks.len(),"durationSeconds":900}), + ); + let mut peers: HashMap = HashMap::new(); + let mut replies: HashMap)> = HashMap::new(); + let mut baselines: HashMap = HashMap::new(); + let mut arm: Option = None; + let mut tick = tokio::time::interval(Duration::from_millis(200)); + let deadline = Instant::now() + Duration::from_secs(900); + let mut last_list = Instant::now() - Duration::from_secs(10); + let mut buffer = [0; 4096]; + let mut counter = 0u32; + loop { + tokio::select! { + line = commands.recv() => { + let Some(line) = line else { break }; + let result: Result<(), String> = async { + let command: Value = serde_json::from_str(&line).map_err(|e|e.to_string())?; + let action = command["action"].as_str().unwrap_or(""); + if action == "stop" { return Ok(()); } + if action == "disarm" { arm = None; event(json!({"event":"disarmed"})); return Ok(()); } + if action == "profile" { + if arm.is_some() { return Err("Disarm reconnect before changing brightness".into()); } + let b = command["brightness"].as_u64().and_then(|b|u8::try_from(b).ok()).ok_or("Invalid brightness")?; + selected = profile(&original,b)?; + event(json!({"event":"profile","brightness":selected[1]-0x80})); + return Ok(()); + } + let ip: Ipv4Addr = command["ip"].as_str().ok_or("Select a player")?.parse().map_err(|_|"Invalid IPv4")?; + let device = discovery.online().into_iter().find(|d|d.ip==ip && d.name.as_str()=="CDJ-2000nexus" && d.number.get()<=4).ok_or("No discovered CDJ-2000nexus at that address")?; + let peer = peers.get(&ip).filter(|p|eligible(p) && p.number==device.number).ok_or("Player must have fresh stopped status")?; + match action { + "baseline" => { + let (at, bytes) = replies.get(&ip).filter(|(at,_)|at.elapsed() { + let method=PushMethod::parse(&command["method"])?; + if baselines.get(&ip)!=Some(&device.mac) { return Err("Confirm a working manual baseline for this player first".into()); } + if replies.get(&ip).is_some_and(|(at,_)|at.elapsed() return Err("Unknown action".into()), + } + Ok(()) + }.await; + if let Err(message)=result { event(json!({"event":"error","message":message})); } + if serde_json::from_str::(&line).ok().is_some_and(|v|v["action"]=="stop") { break; } + } + _ = tick.tick() => { + if Instant::now()>=deadline { event(json!({"event":"timeout"})); break; } + // Fail closed if a peer takes our player number after startup. + if discovery.online().iter().any(|d|d.number==cdj.number()) { return Err("Player number conflict; stopping test".into()); } + counter=counter.wrapping_add(1); + for device in discovery.online() { + if device.ip==interface.ip { continue; } + let response=source_status(name,cdj.number(),counter); + socket.send_to(response.as_bytes(),(device.ip,50002)).await?; + } + if let Some(a)=arm.as_mut() { + if Instant::now()>=a.deadline { event(json!({"event":"arm-expired"})); arm=None; } + else { + let live=discovery.online().into_iter().find(|d|d.ip==a.ip && d.mac==a.mac && d.number==a.number); + let fresh=peers.get(&a.ip).is_some_and(|p|p.seen.elapsed()Duration::from_secs(10)) { a.absent=true; } + if a.absent && live.is_some() && fresh { + let returned=a.returned.get_or_insert(Instant::now()); + if returned.elapsed()>Duration::from_secs(2) { + if peers.get(&a.ip).is_some_and(|p|eligible(p) && p.number==a.number) { + let response=a.method.encode(name,cdj.number(),a.number,&selected)?; + socket.send_to(&response,(a.ip,50002)).await?; + packet("tx",a.ip,&response,"reconnect-push"); + event(json!({"event":"reconnect-push-sent","method":a.method.id(),"commandKind":a.method.kind(),"bytes":response.len(),"ip":a.ip,"brightness":selected[1]-0x80,"applied":null,"evidence":"send-only"})); + } else { event(json!({"event":"reconnect-skipped","message":"Player is playing or has stale status"})); } + arm=None; + } + } else { a.returned=None; } + } + } + if last_list.elapsed()>Duration::from_secs(1) { + event(json!({"event":"players","players":discovery.online().into_iter().filter(|d|d.name.as_str()=="CDJ-2000nexus").map(|d|json!({"ip":d.ip,"number":d.number.get(),"name":d.name.as_str(),"stopped":peers.get(&d.ip).is_some_and(eligible),"baseline":baselines.get(&d.ip)==Some(&d.mac)})).collect::>() })); + last_list=Instant::now(); + } + } + received = socket.recv_from(&mut buffer) => { + let (len,from)=received?; + let std::net::IpAddr::V4(ip)=from.ip() else {continue}; + let bytes=&buffer[..len]; + packet("rx",ip,bytes,""); + let device=discovery.online().into_iter().find(|d|d.ip==ip && d.name.as_str()=="CDJ-2000nexus" && d.number.get()<=4); + let Some(device)=device else {continue}; + match status::decode(bytes) { + Ok(status::Packet::CdjStatus(s)) if s.sender()==Some(device.number) => { + // Unknown flag/play states do not authorize transmission. + let stopped=s.flags().is_some_and(|f|!f.is_playing()) && matches!(s.play_state(),Some(0|4|5|6)); + peers.insert(ip,Peer {number:device.number,seen:Instant::now(),stopped}); + } + Ok(status::Packet::MediaQuery(q)) if q.target==cdj.number() && q.slot==Slot::USB && q.requester==device.number => { + let reply=status::MediaResponse::builder().name(name).device_number(cdj.number()).slot(Slot::USB) + .volume_name("OLC SETTINGS TEST").counts(source.library().tracks.len() as u32,source.library().playlists.len() as u32).has_settings(true).build(); + socket.send_to(reply.as_bytes(),(ip,50002)).await?; + packet("tx",ip,reply.as_bytes(),"media-response"); + } + Ok(status::Packet::SettingsQuery(q)) if q.requester==device.number && q.sender==device.number && q.slot==Slot::USB => { + if !peers.get(&ip).is_some_and(eligible) { event(json!({"event":"error","message":"Settings request ignored: fresh stopped status required"})); continue; } + let response=status::SettingsResponse::build(name,cdj.number(),q.requester,q.slot,&selected); + socket.send_to(response.as_bytes(),(ip,50002)).await?; + packet("tx",ip,response.as_bytes(),"requested-settings-response"); + replies.insert(ip,(Instant::now(),selected.clone())); + event(json!({"event":"manual-response-sent","ip":ip,"brightness":selected[1]-0x80,"applied":null})); + } + _ => (), + } + } + } + } + arm.take(); + drop(db); + drop(nfs); + drop(cdj); + drop(discovery); + event(json!({"event":"stopped"})); + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn explicit_method_selects_distinct_wire_formats() { + let name = DeviceName::new("OLC SETTINGS TEST"); + let sender = DeviceNumber::new(4).unwrap(); + let target = DeviceNumber::ONE; + let settings = vec![0x85; 32]; + let command = PushMethod::LoadCommand + .encode(name, sender, target, &settings) + .unwrap(); + let response = PushMethod::LegacyResponse + .encode(name, sender, target, &settings) + .unwrap(); + assert_eq!( + (command.len(), command[10], command[0x1f], command[0x2d]), + (116, 0x34, 2, 0x85) + ); + assert_eq!( + (response.len(), response[10], response[0x1f], response[0x31]), + (80, 0x36, 1, 0x85) + ); + assert!(PushMethod::parse(&Value::Null).is_err()); + assert_eq!( + PushMethod::parse(&json!("load-command")).unwrap(), + PushMethod::LoadCommand + ); + } + #[test] + fn source_advertises_media_without_playback_and_advances_counter() { + let s = source_status(DeviceName::new("OLC SETTINGS TEST"), DeviceNumber::ONE, 42); + assert_eq!(s.packet_counter(), Some(42)); + assert_eq!(s.usb_state(), status::MediaState::LOADED); + assert_eq!(s.sd_state(), status::MediaState::EMPTY); + assert!(!s.flags().unwrap().is_playing()); + assert_eq!(s.track_id(), 0); + } + #[test] + fn profile_changes_only_lcd_and_preserves_original() { + let original = vec![0x83; 32]; + for b in 1..=5 { + let p = profile(&original, b).unwrap(); + assert_eq!(p[1], 0x80 + b); + assert!( + p.iter() + .zip(&original) + .enumerate() + .all(|(i, (a, b))| i == 1 || a == b) + ); + } + assert_eq!(profile(&original, 0).unwrap(), original); + assert!(profile(&original, 6).is_err()); + assert!(profile(&[], 1).is_err()); + } + #[test] + fn push_requires_fresh_stopped_telemetry() { + let mut p = Peer { + number: DeviceNumber::ONE, + seen: Instant::now(), + stopped: true, + }; + assert!(eligible(&p)); + p.stopped = false; + assert!(!eligible(&p)); + p.stopped = true; + p.seen = Instant::now() - Duration::from_secs(3); + assert!(!eligible(&p)); + } +} diff --git a/source/host/src/bug_report.rs b/source/host/src/bug_report.rs index 52a1426..969ff04 100644 --- a/source/host/src/bug_report.rs +++ b/source/host/src/bug_report.rs @@ -3,64 +3,67 @@ use axum::{Json, http::StatusCode}; use serde_json::{Value, json}; use std::{ path::PathBuf, - sync::{LazyLock, Mutex}, + sync::{LazyLock, Mutex, Once}, time::Duration, }; type Result = std::result::Result; +static CLEANUP: Once = Once::new(); static SAVED: LazyLock> = LazyLock::new(|| Mutex::new(Value::Null)); pub fn init() { let Ok(dir) = directory() else { return; }; - std::thread::spawn(move || { - let mut restored = false; - loop { - if let Ok(entries) = std::fs::read_dir(&dir) { - let mut reports: Vec<_> = entries - .flatten() - .filter_map(|entry| { - let name = entry.file_name(); - let name = name.to_str()?; - if !name.starts_with("bug-") || !name.ends_with(".json") { - return None; - } - let metadata = entry.metadata().ok()?; - if !metadata.is_file() { - return None; - } - Some((metadata.modified().ok()?, entry.path())) - }) - .collect(); - reports.sort_by_key(|(time, _)| *time); - { - let mut saved = SAVED.lock().unwrap(); - if !restored - && saved.is_null() - && let Some((time, path)) = reports.last() - && time - .elapsed() - .is_ok_and(|age| age <= Duration::from_secs(86400)) - && let Ok(bytes) = std::fs::read(path) - && let Ok(value) = serde_json::from_slice(&bytes) + CLEANUP.call_once(|| { + std::thread::spawn(move || { + let mut restored = false; + loop { + if let Ok(entries) = std::fs::read_dir(&dir) { + let mut reports: Vec<_> = entries + .flatten() + .filter_map(|entry| { + let name = entry.file_name(); + let name = name.to_str()?; + if !name.starts_with("bug-") || !name.ends_with(".json") { + return None; + } + let metadata = entry.metadata().ok()?; + if !metadata.is_file() { + return None; + } + Some((metadata.modified().ok()?, entry.path())) + }) + .collect(); + reports.sort_by_key(|(time, _)| *time); { - *saved = value; + let mut saved = SAVED.lock().unwrap(); + if !restored + && saved.is_null() + && let Some((time, path)) = reports.last() + && time + .elapsed() + .is_ok_and(|age| age <= Duration::from_secs(86400)) + && let Ok(bytes) = std::fs::read(path) + && let Ok(value) = serde_json::from_slice(&bytes) + { + *saved = value; + } + restored = true; } - restored = true; - } - let excess = reports.len().saturating_sub(20); - for (index, (time, path)) in reports.into_iter().enumerate() { - if (index < excess - || time - .elapsed() - .is_ok_and(|age| age > Duration::from_secs(86400))) - && let Err(error) = std::fs::remove_file(path) - { - eprintln!("Bug report cleanup: {error}"); + let excess = reports.len().saturating_sub(20); + for (index, (time, path)) in reports.into_iter().enumerate() { + if (index < excess + || time + .elapsed() + .is_ok_and(|age| age > Duration::from_secs(86400))) + && let Err(error) = std::fs::remove_file(path) + { + eprintln!("Bug report cleanup: {error}"); + } } } + std::thread::sleep(Duration::from_secs(3600)); } - std::thread::sleep(Duration::from_secs(3600)); - } + }); }); } fn directory() -> Result { diff --git a/source/host/src/cdj_config.rs b/source/host/src/cdj_config.rs new file mode 100644 index 0000000..e7842a4 --- /dev/null +++ b/source/host/src/cdj_config.rs @@ -0,0 +1,1076 @@ +//! Host-owned My Settings profiles and once-per-connection automatic application. +//! Saved media is imported honestly as saved settings, never claimed as live readback. +use crate::{cdj_settings_command, live}; +use prolink::{Interface, Slot, consume::nfs::NfsClient}; +use prolink_proto::DeviceName; +use prolink_rekordbox::SettingsFile; +use serde::{Deserialize, Serialize}; +use serde_json::{Value, json}; +use std::{ + collections::BTreeMap, + io::Write, + path::{Path, PathBuf}, + sync::{Arc, Mutex}, + time::{Duration, Instant, SystemTime, UNIX_EPOCH}, +}; + +pub type Shared = Arc>; +#[derive(Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Profile { + pub id: String, + pub name: String, + pub notes: String, + pub revision: u64, + pub settings: Vec, + pub original_file: Vec, + pub origin: String, + pub created_at: u64, + pub updated_at: u64, +} +#[derive(Clone, Default, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct Automatic { + pub enabled: bool, + pub default_profile: Option, + #[serde(default)] + pub players: BTreeMap, +} +#[derive(Clone, Serialize, Deserialize)] +struct Archive { + version: u32, + revision: u64, + profiles: Vec, + automatic: Automatic, +} +impl Default for Archive { + fn default() -> Self { + Self { + version: 1, + revision: 0, + profiles: vec![], + automatic: Automatic::default(), + } + } +} +pub struct Store { + path: PathBuf, + archive: Archive, + error: Option, + events: Vec, +} +pub fn now() -> u64 { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap_or_default() + .as_millis() as u64 +} +fn uid() -> String { + static SEQ: std::sync::atomic::AtomicU64 = std::sync::atomic::AtomicU64::new(0); + format!( + "profile-{}-{}-{}", + SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap_or_default() + .as_nanos(), + std::process::id(), + SEQ.fetch_add(1, std::sync::atomic::Ordering::Relaxed) + ) +} +#[derive(Clone, Serialize)] +pub struct Choice { + value: u8, + label: String, +} +#[derive(Clone, Serialize)] +pub struct Field { + pub id: String, + label: String, + group: String, + offset: usize, + options: Vec, +} +fn field(id: &str, label: &str, group: &str, offset: usize, options: &[(u8, &str)]) -> Field { + Field { + id: id.into(), + label: label.into(), + group: group.into(), + offset, + options: options + .iter() + .map(|(value, label)| Choice { + value: *value, + label: (*label).into(), + }) + .collect(), + } +} +pub fn schema() -> Vec { + let toggle = &[(0x80, "Off"), (0x81, "On")]; + vec![ + field( + "lcdBrightness", + "LCD brightness", + "Display", + 1, + &[ + (0x81, "1 — dim"), + (0x82, "2"), + (0x83, "3"), + (0x84, "4"), + (0x85, "5 — bright"), + ], + ), + field( + "timeMode", + "Time display", + "Display", + 24, + &[(0x80, "Elapsed"), (0x81, "Remaining")], + ), + field( + "language", + "Player language", + "Display", + 4, + &[ + (0x81, "English"), + (0x82, "French"), + (0x83, "German"), + (0x84, "Italian"), + (0x85, "Dutch"), + (0x86, "Spanish"), + (0x87, "Russian"), + (0x88, "Korean"), + (0x89, "Simplified Chinese"), + (0x8a, "Traditional Chinese"), + (0x8b, "Japanese"), + (0x8c, "Portuguese"), + (0x8d, "Swedish"), + (0x8e, "Czech"), + (0x8f, "Hungarian"), + (0x90, "Danish"), + (0x91, "Greek"), + (0x92, "Turkish"), + ], + ), + field("onAirDisplay", "On-air display", "Illumination", 0, toggle), + field( + "jogBrightness", + "Jog-ring brightness", + "Illumination", + 6, + &[(0x80, "Off"), (0x81, "Dim"), (0x82, "Bright")], + ), + field( + "jogIndicator", + "Jog-ring indicator", + "Illumination", + 7, + toggle, + ), + field( + "discIllumination", + "Disc-slot illumination", + "Illumination", + 12, + &[(0x80, "Off"), (0x81, "Dim"), (0x82, "Bright")], + ), + field("slipFlashing", "Slip flashing", "Illumination", 8, toggle), + field( + "playMode", + "Play mode", + "Playback", + 15, + &[(0x80, "Continuous"), (0x81, "Single")], + ), + field( + "ejectLock", + "Eject / load lock", + "Playback", + 13, + &[(0x80, "Unlocked"), (0x81, "Locked")], + ), + field("autoCue", "Auto Cue", "Cueing", 26, toggle), + field( + "autoCueLevel", + "Auto Cue threshold", + "Cueing", + 3, + &[ + (0x80, "−36 dB"), + (0x81, "−42 dB"), + (0x82, "−48 dB"), + (0x83, "−54 dB"), + (0x84, "−60 dB"), + (0x85, "−66 dB"), + (0x86, "−72 dB"), + (0x87, "−78 dB"), + (0x88, "Memory"), + ], + ), + field( + "jogMode", + "Jog mode", + "Jog & tempo", + 25, + &[(0x80, "CDJ"), (0x81, "Vinyl")], + ), + field( + "tempoRange", + "Tempo range", + "Jog & tempo", + 28, + &[ + (0x80, "±6%"), + (0x81, "±10%"), + (0x82, "±16%"), + (0x83, "Wide"), + ], + ), + field("masterTempo", "Master Tempo", "Jog & tempo", 27, toggle), + field("quantize", "Quantize", "Timing", 2, toggle), + field("sync", "Sync", "Timing", 14, toggle), + ] +} +fn defaults() -> Vec { + vec![ + 0x81, 0x83, 0x81, 0x88, 0x81, 1, 0x82, 0x81, 0x81, 1, 1, 1, 0x82, 0x80, 0x80, 0x81, 0x80, + 0x81, 0x80, 0, 0, 0x80, 0, 0, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0, 0, + ] +} +fn name(value: &str) -> Result { + let value = value.trim(); + if value.is_empty() || value.chars().count() > 80 || value.chars().any(char::is_control) { + Err("Use a profile name between 1 and 80 characters".into()) + } else { + Ok(value.into()) + } +} +fn validate(archive: &Archive) -> Result<(), String> { + if archive.version != 1 || archive.profiles.len() > 100 { + return Err("Unsupported configuration archive".into()); + } + let mut ids = std::collections::BTreeSet::new(); + for p in &archive.profiles { + name(&p.name)?; + if p.id.len() > 128 + || p.origin.len() > 1024 + || p.id.is_empty() + || !ids.insert(&p.id) + || p.settings.len() != 32 + || !(0x81..=0x85).contains(&p.settings[1]) + || p.original_file.len() > 4096 + || p.notes.chars().count() > 2000 + { + return Err("Invalid configuration profile".into()); + } + } + for id in archive + .automatic + .default_profile + .iter() + .chain(archive.automatic.players.values()) + { + if !archive.profiles.iter().any(|p| &p.id == id) { + return Err("An automatic profile does not exist".into()); + } + } + if archive.automatic.players.len() > 64 + || archive.automatic.players.keys().any(|k| k.len() > 100) + { + return Err("Too many player assignments".into()); + } + if archive.automatic.enabled + && archive.automatic.default_profile.is_none() + && archive.automatic.players.is_empty() + { + return Err("Choose an automatic profile first".into()); + } + Ok(()) +} +impl Store { + fn open(path: PathBuf) -> Self { + let (archive, error) = match std::fs::read(&path) { + Ok(bytes) => match serde_json::from_slice::(&bytes) + .map_err(|e| e.to_string()) + .and_then(|a| { + validate(&a)?; + Ok(a) + }) { + Ok(a) => (a, None), + Err(e) => ( + Archive::default(), + Some(format!( + "Cannot read saved CDJ configurations: {e}. The original file has been preserved." + )), + ), + }, + Err(e) if e.kind() == std::io::ErrorKind::NotFound => (Archive::default(), None), + Err(e) => (Archive::default(), Some(e.to_string())), + }; + Self { + path, + archive, + error, + events: vec![], + } + } + fn commit(&mut self, mut next: Archive) -> Result<(), String> { + if let Some(error) = &self.error { + return Err(error.clone()); + } + next.revision = self.archive.revision + 1; + validate(&next)?; + std::fs::create_dir_all( + self.path + .parent() + .ok_or("Missing configuration directory")?, + ) + .map_err(|e| e.to_string())?; + let tmp = self.path.with_extension("json.tmp"); + let mut file = std::fs::File::create(&tmp).map_err(|e| e.to_string())?; + file.write_all(&serde_json::to_vec_pretty(&next).map_err(|e| e.to_string())?) + .and_then(|_| file.sync_all()) + .map_err(|e| e.to_string())?; + std::fs::rename(&tmp, &self.path).map_err(|e| e.to_string())?; + self.archive = next; + Ok(()) + } + pub fn event(&mut self, value: Value) { + let value = json!({"at":now(),"detail":value}); + self.events.push(value); + if self.events.len() > 100 { + self.events.remove(0); + } + } + pub fn snapshot(&self) -> Value { + let profiles:Vec<_>=self.archive.profiles.iter().map(|p|{ + let values:BTreeMap<_,_>=schema().into_iter().map(|f|(f.id,p.settings[f.offset])).collect(); + json!({"id":p.id,"name":p.name,"notes":p.notes,"revision":p.revision,"origin":p.origin,"createdAt":p.created_at,"updatedAt":p.updated_at,"values":values}) + }).collect(); + json!({"version":1,"revision":self.archive.revision,"profiles":profiles,"automatic":self.archive.automatic,"fields":schema(),"events":self.events,"error":self.error,"supportedModel":"CDJ-2000nexus","liveReadback":false}) + } + fn add( + &mut self, + label: &str, + notes: &str, + settings: Vec, + original_file: Vec, + origin: String, + ) -> Result { + let p = Profile { + id: uid(), + name: name(label)?, + notes: notes.into(), + revision: 1, + settings, + original_file, + origin, + created_at: now(), + updated_at: now(), + }; + let id = p.id.clone(); + let mut next = self.archive.clone(); + next.profiles.push(p); + self.commit(next)?; + Ok(id) + } + pub fn command(&mut self, body: &Value) -> Result { + let id = body["id"].as_str().unwrap_or(""); + match body["action"].as_str().unwrap_or("") { + "create" => { + let id = self.add( + body["name"].as_str().unwrap_or("New profile"), + "", + defaults(), + vec![], + "OLC defaults · CDJ-2000NXS".into(), + )?; + return Ok(json!({"id":id,"state":self.snapshot()})); + } + "automatic" => { + if body["revision"].as_u64() != Some(self.archive.revision) { + return Err("Configuration changed in another window. Reload before saving automatic application.".into()); + } + let mut next = self.archive.clone(); + next.automatic = + serde_json::from_value(body["automatic"].clone()).map_err(|e| e.to_string())?; + self.commit(next)?; + } + "update" | "duplicate" | "delete" => { + let mut next = self.archive.clone(); + let at = next + .profiles + .iter() + .position(|p| p.id == id) + .ok_or("Profile not found")?; + let revision = body["revision"] + .as_u64() + .ok_or("Missing profile revision")?; + if next.profiles[at].revision != revision { + return Err("Profile changed in another window. Reload before saving.".into()); + } + match body["action"].as_str().unwrap() { + "delete" => { + next.profiles.remove(at); + if next.automatic.default_profile.as_deref() == Some(id) { + next.automatic.default_profile = None; + } + next.automatic.players.retain(|_, v| v != id); + if next.automatic.default_profile.is_none() + && next.automatic.players.is_empty() + { + next.automatic.enabled = false; + } + } + "duplicate" => { + let mut p = next.profiles[at].clone(); + p.id = uid(); + p.name = name(body["name"].as_str().unwrap_or("Profile copy"))?; + p.revision = 1; + p.created_at = now(); + p.updated_at = p.created_at; + let id = p.id.clone(); + next.profiles.push(p); + self.commit(next)?; + return Ok(json!({"id":id,"state":self.snapshot()})); + } + _ => { + let p = &mut next.profiles[at]; + p.name = name(body["name"].as_str().ok_or("Missing profile name")?)?; + p.notes = body["notes"].as_str().unwrap_or("").into(); + let edits = body["values"] + .as_object() + .ok_or("Missing settings values")?; + for (key, value) in edits { + let f = schema() + .into_iter() + .find(|f| f.id == *key) + .ok_or("Unknown setting")?; + let value = value + .as_u64() + .and_then(|v| u8::try_from(v).ok()) + .ok_or("Invalid setting value")?; + // Unknown imported enumerations survive unchanged; new values must be named choices. + if value != p.settings[f.offset] + && !f.options.iter().any(|o| o.value == value) + { + return Err(format!("Unsupported value for {}", f.label)); + } + p.settings[f.offset] = value; + } + p.revision += 1; + p.updated_at = now(); + } + } + self.commit(next)?; + } + _ => return Err("Unknown configuration action".into()), + } + Ok(json!({"state":self.snapshot()})) + } + pub fn import_dat( + &mut self, + label: &str, + bytes: &[u8], + origin: String, + ) -> Result { + if bytes.len() > 4096 { + return Err("Settings file exceeds 4 KiB".into()); + } + let file = SettingsFile::parse(bytes).map_err(|e| e.to_string())?; + if file.payload.len() != 40 || !file.has_magic() || file.wire_settings().len() != 32 { + return Err( + "Import MYSETTING.DAT; other settings-file variants are not supported".into(), + ); + } + let check = file.checksum_matches(); + let id = self.add( + label, + "", + file.wire_settings().to_vec(), + bytes.to_vec(), + origin, + )?; + Ok(json!({"id":id,"checksumMatches":check,"state":self.snapshot()})) + } + pub fn export_json(&self, id: &str) -> Result { + let p = self + .archive + .profiles + .iter() + .find(|p| p.id == id) + .ok_or("Profile not found")?; + Ok(json!({"format":"olc-cdj-profile","version":1,"profile":p})) + } + pub fn import_json(&mut self, body: &Value) -> Result { + if body["format"] != "olc-cdj-profile" || body["version"] != 1 { + return Err("Unsupported profile format".into()); + } + let p: Profile = + serde_json::from_value(body["profile"].clone()).map_err(|e| e.to_string())?; + let id = self.add( + &p.name, + &p.notes, + p.settings, + p.original_file, + format!("Imported profile · {}", p.origin), + )?; + Ok(json!({"id":id,"state":self.snapshot()})) + } +} + +pub fn supported(model: &str) -> bool { + model == "CDJ-2000nexus" +} +pub fn target(live: &live::Shared, number: u8, identity: &str) -> Result { + crate::live::snapshot(live)["decks"] + .as_array() + .and_then(|ds| { + ds.iter() + .find(|d| d["number"] == number && d["configurationIdentity"] == identity) + }) + .cloned() + .ok_or_else(|| "Player connection changed. Select the player again.".into()) +} +fn selected(archive: &Archive, identity: &str) -> Option { + if !archive.automatic.enabled { + return None; + } + archive + .automatic + .players + .get(identity) + .cloned() + .or_else(|| archive.automatic.default_profile.clone()) +} +fn request( + store: &Shared, + number: u8, + identity: &str, + ip: &str, + id: &str, + revision: u64, + automatic: bool, +) -> Result { + let s = store.lock().unwrap(); + let p = s + .archive + .profiles + .iter() + .find(|p| p.id == id) + .ok_or("Profile not found")?; + if p.revision != revision { + return Err("Profile changed; reload before pushing".into()); + } + Ok( + json!({"cdjConfiguration":true,"target":number,"identity":identity,"ip":ip,"profile":id,"revision":revision,"automatic":automatic}), + ) +} +pub fn is_command(body: &Value) -> bool { + body["cdjConfiguration"] == true +} +/// Revalidated inside the live transport immediately before send, including auto opt-out. +pub struct PlayerEvidence<'a> { + pub identity: &'a str, + pub ip: &'a str, + pub model: &'a str, + pub number: u8, + pub age: Duration, + pub playing: bool, + pub play_state: u8, + pub track_loaded: bool, +} +pub fn encode( + store: &Shared, + body: &Value, + player: PlayerEvidence<'_>, + sender: u8, + name: DeviceName, +) -> Result, String> { + let PlayerEvidence { + identity, + ip, + model, + number, + age, + playing, + play_state, + track_loaded, + } = player; + if !supported(model) { + return Err("This player model has not been validated for remote My Settings".into()); + } + if body["identity"] != identity || body["ip"] != ip || body["target"] != number { + return Err("Player connection changed; no settings sent".into()); + } + if age >= Duration::from_secs(1) + || playing + || !(matches!(play_state, 0 | 5 | 6) || (play_state == 14 && !track_loaded)) + { + return Err("Player must be stopped with fresh status; no settings sent".into()); + } + let s = store.lock().unwrap(); + let id = body["profile"].as_str().ok_or("Missing profile")?; + let p = s + .archive + .profiles + .iter() + .find(|p| p.id == id) + .ok_or("Profile no longer exists")?; + if body["revision"].as_u64() != Some(p.revision) { + return Err("Profile changed before send; try again".into()); + } + if body["automatic"] == true && selected(&s.archive, identity).as_deref() != Some(id) { + return Err("Automatic application was changed or disabled; no settings sent".into()); + } + cdj_settings_command::encode(&name.0, sender, number, &p.settings) + .map(|p| p.to_vec()) + .map_err(str::to_owned) +} +pub fn sent(body: &Value, sender: u8) -> Value { + json!({"outcome":"sent","message":"Settings sent. Application is not acknowledged by the player; check its screen.","profile":body["profile"],"revision":body["revision"],"target":body["target"],"identity":body["identity"],"automatic":body["automatic"],"sender":sender,"commandKind":0x34,"bytes":116}) +} +pub async fn push( + store: &Shared, + live: &live::Shared, + body: &Value, + automatic: bool, +) -> Result { + let number = body["target"] + .as_u64() + .and_then(|n| u8::try_from(n).ok()) + .ok_or("Select a player")?; + let identity = body["identity"].as_str().ok_or("Missing player identity")?; + let d = target(live, number, identity)?; + let body = request( + store, + number, + identity, + d["ip"].as_str().ok_or("Player address unavailable")?, + body["profile"].as_str().ok_or("Select a profile")?, + body["revision"] + .as_u64() + .ok_or("Missing profile revision")?, + automatic, + )?; + let result = crate::live::load(live, body).await; + store.lock().unwrap().event(result.clone()); + Ok(result) +} +pub async fn import_player( + store: &Shared, + live: &live::Shared, + body: &Value, +) -> Result { + let number = body["target"] + .as_u64() + .and_then(|n| u8::try_from(n).ok()) + .ok_or("Select a player")?; + let identity = body["identity"].as_str().ok_or("Missing player identity")?; + let d = target(live, number, identity)?; + if d["connection"] != "connected" { + return Err("Player is not connected".into()); + } + let (slot, key) = match body["slot"].as_str() { + Some("usb") => (Slot::USB, "configurationUsb"), + Some("sd") => (Slot::SD, "configurationSd"), + _ => return Err("Choose USB or SD".into()), + }; + if d[key] != true { + return Err("No saved-settings media in that player slot".into()); + } + let ip = d["ip"] + .as_str() + .ok_or("Player address unavailable")? + .parse() + .map_err(|_| "Invalid player address")?; + let iface = crate::live::snapshot(live)["discovery"]["interface"] + .as_str() + .and_then(|name| Interface::named(name).ok()); + let bytes=tokio::time::timeout(Duration::from_secs(12),async { + let mut nfs=NfsClient::connect(ip,iface.as_ref()).await.map_err(|e|e.to_string())?; + let mount=nfs.mount_slot(slot).await.map_err(|e|e.to_string())?; + let file=nfs.open(&mount,"/PIONEER/MYSETTING.DAT").await.map_err(|e|format!("Saved My Settings not found. Save My Settings to this media on the CDJ first. {e}"))?; + if file.size()>4096 {return Err("Settings file exceeds 4 KiB".into())} + nfs.read_file(&file).await.map_err(|e|e.to_string()) + }).await.map_err(|_|"Reading saved player settings timed out")??; + let current = target(live, number, identity)?; + if current["ip"] != d["ip"] || current["connection"] != "connected" { + return Err("Player disconnected while reading; retry".into()); + } + store.lock().unwrap().import_dat( + body["name"].as_str().unwrap_or("Player settings"), + &bytes, + format!("Saved {} My Settings · player {number}", slot), + ) +} + +struct Presence { + absent: Option, + connected: Instant, + pending: Option<(String, u64)>, +} +#[derive(Default)] +struct AutoEngine { + players: BTreeMap, +} +impl AutoEngine { + fn tick(&mut self, archive: &Archive, decks: &[Value], at: Instant) -> Vec { + let online: std::collections::BTreeSet<_> = decks + .iter() + .filter(|d| d["connection"] == "connected") + .filter_map(|d| d["configurationIdentity"].as_str()) + .collect(); + self.players.retain(|id, p| { + if online.contains(id.as_str()) { + p.absent = None; + true + } else { + at.duration_since(*p.absent.get_or_insert(at)) < Duration::from_secs(10) + } + }); + let mut work = vec![]; + for d in decks.iter().filter(|d| d["connection"] == "connected") { + let Some(id) = d["configurationIdentity"].as_str() else { + continue; + }; + if !supported(d["name"].as_str().unwrap_or("")) { + continue; + } + let p = self.players.entry(id.into()).or_insert_with(|| Presence { + absent: None, + connected: at, + pending: selected(archive, id).and_then(|id| { + archive + .profiles + .iter() + .find(|p| p.id == id) + .map(|p| (id, p.revision)) + }), + }); + if at.duration_since(p.connected) < Duration::from_secs(2) { + continue; + } + if let Some((profile, revision)) = p.pending.take() { + let valid = selected(archive, id).as_deref() == Some(&profile) + && archive + .profiles + .iter() + .any(|p| p.id == profile && p.revision == revision); + if valid { + work.push(json!({"target":d["number"],"identity":id,"profile":profile,"revision":revision})); + } + } + } + work + } +} +pub fn start(data_dir: &Path, live: live::Shared) -> Shared { + let store = Arc::new(Mutex::new(Store::open( + data_dir.join("cdj-configurations.json"), + ))); + live.lock().unwrap().configurations = Some(store.clone()); + let weak = Arc::downgrade(&store); + let connection = Arc::downgrade(&live); + tokio::spawn(async move { + let mut engine = AutoEngine::default(); + let mut tick = tokio::time::interval(Duration::from_millis(500)); + loop { + tick.tick().await; + let (Some(store), Some(live)) = (weak.upgrade(), connection.upgrade()) else { + break; + }; + let snapshot = crate::live::snapshot(&live); + let work = engine.tick( + &store.lock().unwrap().archive, + snapshot["decks"] + .as_array() + .map(Vec::as_slice) + .unwrap_or(&[]), + Instant::now(), + ); + for body in work { + if let Err(message) = push(&store, &live, &body, true).await { + store.lock().unwrap().event(json!({"outcome":"error","automatic":true,"target":body["target"],"message":message})); + } + } + } + }); + store +} + +#[cfg(test)] +mod tests { + use super::*; + fn store() -> Store { + Store::open( + std::env::temp_dir() + .join(format!("olc-cdj-test-{}", uid())) + .join("profiles.json"), + ) + } + fn profile(s: &mut Store) -> String { + s.add("Club", "", defaults(), vec![], "test".into()) + .unwrap() + } + fn auto(s: &mut Store, id: &str) { + s.command(&json!({"action":"automatic","revision":s.archive.revision,"automatic":{"enabled":true,"defaultProfile":id,"players":{}}})).unwrap(); + } + fn deck() -> Value { + json!({"number":1,"name":"CDJ-2000nexus","connection":"connected","configurationIdentity":"mac:one"}) + } + fn evidence() -> PlayerEvidence<'static> { + PlayerEvidence { + identity: "mac:one", + ip: "192.0.2.1", + model: "CDJ-2000nexus", + number: 1, + age: Duration::from_millis(50), + playing: false, + play_state: 5, + track_loaded: false, + } + } + fn cleanup(s: &Store) { + std::fs::remove_dir_all(s.path.parent().unwrap()).unwrap(); + } + #[test] + fn saves_reopens_edits_and_preserves_unknown_bytes() { + let mut s = store(); + let mut raw = defaults(); + raw[3] = 0x89; + raw[19] = 0xde; + let id = s + .add("Imported", "", raw.clone(), vec![1, 2, 3], "USB".into()) + .unwrap(); + s.command(&json!({"action":"update","id":id,"revision":1,"name":"Edited","notes":"night","values":{"lcdBrightness":0x85,"autoCueLevel":0x89}})).unwrap(); + raw[1] = 0x85; + let reopened = Store::open(s.path.clone()); + assert!(reopened.error.is_none()); + let p = &reopened.archive.profiles[0]; + assert_eq!(p.settings, raw); + assert_eq!(p.original_file, vec![1, 2, 3]); + assert_eq!(p.revision, 2); + assert!( + s.command(&json!({"action":"delete","id":id,"revision":1})) + .is_err() + ); + assert!(s.command(&json!({"action":"update","id":id,"revision":2,"name":"Bad","values":{"autoCueLevel":0x90}})).is_err()); + assert_eq!(s.archive.profiles[0].name, "Edited"); + cleanup(&s); + } + #[test] + fn exported_profile_imports_with_new_identity_and_deletion_cleans_rules() { + let mut s = store(); + let id = profile(&mut s); + auto(&mut s, &id); + let exported = s.export_json(&id).unwrap(); + let duplicate = s.import_json(&exported).unwrap()["id"] + .as_str() + .unwrap() + .to_owned(); + assert_ne!(id, duplicate); + assert_eq!(s.archive.profiles.len(), 2); + s.command(&json!({"action":"delete","id":id,"revision":1})) + .unwrap(); + assert!(!s.archive.automatic.enabled); + assert!(s.archive.automatic.default_profile.is_none()); + cleanup(&s); + } + #[test] + fn corrupt_archive_is_preserved_and_failed_commit_keeps_memory() { + let mut s = store(); + let id = profile(&mut s); + std::fs::write(&s.path, b"broken").unwrap(); + let mut reopened = Store::open(s.path.clone()); + assert!(reopened.error.is_some()); + assert!( + reopened + .command(&json!({"action":"create","name":"New"})) + .is_err() + ); + assert_eq!(std::fs::read(&s.path).unwrap(), b"broken"); + s.path = s + .path + .parent() + .unwrap() + .join("missing-parent") + .join("nested") + .join("profiles.json"); + std::fs::write( + s.path.parent().unwrap().parent().unwrap(), + b"file blocks directory", + ) + .unwrap(); + assert!( + s.command(&json!({"action":"delete","id":id,"revision":1})) + .is_err() + ); + assert_eq!(s.archive.profiles.len(), 1); + std::fs::remove_dir_all(s.path.parent().unwrap().parent().unwrap().parent().unwrap()) + .unwrap(); + } + #[test] + fn automatic_rules_reject_stale_windows_and_missing_profiles() { + let mut s = store(); + let id = profile(&mut s); + let rev = s.archive.revision; + auto(&mut s, &id); + assert!(s.command(&json!({"action":"automatic","revision":rev,"automatic":{"enabled":false,"defaultProfile":null,"players":{}}})).is_err()); + let mut a = s.archive.clone(); + a.automatic + .players + .insert("mac:two".into(), "missing".into()); + assert!(validate(&a).is_err()); + assert_eq!(selected(&s.archive, "mac:other"), Some(id)); + cleanup(&s); + } + #[test] + fn send_rechecks_connection_profile_playback_and_automatic_opt_out() { + let mut s = store(); + let id = profile(&mut s); + auto(&mut s, &id); + let path = s.path.clone(); + let shared = Arc::new(Mutex::new(s)); + let body = request(&shared, 1, "mac:one", "192.0.2.1", &id, 1, true).unwrap(); + let encode_with = |e| encode(&shared, &body, e, 7, DeviceName::default()); + assert_eq!(encode_with(evidence()).unwrap().len(), 116); + let mut e = evidence(); + e.play_state = 14; + assert!(encode_with(e).is_ok()); + let mut e = evidence(); + e.play_state = 14; + e.track_loaded = true; + assert!(encode_with(e).is_err()); + let mut e = evidence(); + e.playing = true; + assert!(encode_with(e).is_err()); + let mut e = evidence(); + e.play_state = 3; + assert!(encode_with(e).is_err()); + let mut e = evidence(); + e.age = Duration::from_secs(1); + assert!(encode_with(e).is_err()); + let mut e = evidence(); + e.identity = "mac:replacement"; + assert!(encode_with(e).is_err()); + let mut e = evidence(); + e.ip = "192.0.2.2"; + assert!(encode_with(e).is_err()); + let mut e = evidence(); + e.model = "CDJ-3000"; + assert!(encode_with(e).is_err()); + shared.lock().unwrap().archive.automatic.enabled = false; + assert!(encode_with(evidence()).is_err()); + let manual = request(&shared, 1, "mac:one", "192.0.2.1", &id, 1, false).unwrap(); + assert!(encode(&shared, &manual, evidence(), 15, DeviceName::default()).is_ok()); + shared.lock().unwrap().archive.profiles[0].revision += 1; + assert!(encode(&shared, &manual, evidence(), 7, DeviceName::default()).is_err()); + std::fs::remove_dir_all(path.parent().unwrap()).unwrap(); + } + #[test] + fn automatic_runs_once_and_ignores_short_network_gaps_or_loop_delays() { + let mut s = store(); + let id = profile(&mut s); + auto(&mut s, &id); + let mut engine = AutoEngine::default(); + let at = Instant::now(); + let d = deck(); + assert!( + engine + .tick(&s.archive, std::slice::from_ref(&d), at) + .is_empty() + ); + assert_eq!( + engine + .tick( + &s.archive, + std::slice::from_ref(&d), + at + Duration::from_secs(2) + ) + .len(), + 1 + ); + assert!( + engine + .tick( + &s.archive, + std::slice::from_ref(&d), + at + Duration::from_secs(30) + ) + .is_empty() + ); + assert!( + engine + .tick(&s.archive, &[], at + Duration::from_secs(31)) + .is_empty() + ); + assert!( + engine + .tick( + &s.archive, + std::slice::from_ref(&d), + at + Duration::from_secs(32) + ) + .is_empty() + ); + engine.tick(&s.archive, &[], at + Duration::from_secs(33)); + engine.tick(&s.archive, &[], at + Duration::from_secs(44)); + assert!( + engine + .tick( + &s.archive, + std::slice::from_ref(&d), + at + Duration::from_secs(45) + ) + .is_empty() + ); + assert_eq!( + engine + .tick(&s.archive, &[d], at + Duration::from_secs(47)) + .len(), + 1 + ); + cleanup(&s); + } + #[test] + fn enabling_rules_does_not_push_existing_connections_and_pending_edits_cancel() { + let mut s = store(); + let id = profile(&mut s); + let mut e = AutoEngine::default(); + let at = Instant::now(); + let decks = [deck()]; + e.tick(&s.archive, &decks, at); + auto(&mut s, &id); + assert!( + e.tick(&s.archive, &decks, at + Duration::from_secs(3)) + .is_empty() + ); + let mut e = AutoEngine::default(); + e.tick(&s.archive, &decks, at); + s.archive.profiles[0].revision += 1; + assert!( + e.tick(&s.archive, &decks, at + Duration::from_secs(3)) + .is_empty() + ); + cleanup(&s); + } + #[test] + fn saved_media_parser_checks_container_and_preserves_settings() { + let mut s = store(); + let mut data = vec![0; 0x94]; + data[..4].copy_from_slice(&0x60u32.to_le_bytes()); + data[0x64..0x68].copy_from_slice(&40u32.to_le_bytes()); + data[0x68..0x6c].copy_from_slice(&0x12345678u32.to_le_bytes()); + data[0x6c..0x70].copy_from_slice(&1u32.to_le_bytes()); + data[0x70..0x90].copy_from_slice(&defaults()); + let r = s.import_dat("USB", &data, "saved".into()).unwrap(); + assert_eq!(r["checksumMatches"], false); + assert_eq!(s.archive.profiles[0].original_file, data); + assert!(s.import_dat("Bad", &[0; 4097], "bad".into()).is_err()); + assert!(s.import_dat("Bad", b"garbage", "bad".into()).is_err()); + cleanup(&s); + } +} diff --git a/source/host/src/cdj_settings_command.rs b/source/host/src/cdj_settings_command.rs new file mode 100644 index 0000000..834f125 --- /dev/null +++ b/source/host/src/cdj_settings_command.rs @@ -0,0 +1,79 @@ +//! Pure encoder for the documented Pro DJ Link Load Settings command (0x34). +//! +//! Framing and field offsets independently implemented from Deep Symmetry's +//! Loading Tracks and Settings protocol documentation, cross-checked against +//! beat-link VirtualCdj.sendLoadSettingsCommand (LOAD_SETTINGS_PAYLOAD). +//! https://djl-analysis.deepsymmetry.org/djl-analysis/loading_tracks.html#_loading_settings +//! The special header must not use the usual UDP 50002 response encoder. + +/// Build a 116-byte command from the 32-byte MYSETTING.DAT settings block. +/// The full saved profile is sent; fields belonging to MYSETTING2 are left zero. +/// This does not announce a sender, authorize a target, send, or confirm apply. +pub fn encode( + name: &[u8; 20], + sender: u8, + target: u8, + settings: &[u8], +) -> Result<[u8; 116], &'static str> { + // Use an identity already announced by OLC: serving players 1–4, desktop + // observer 7, or Direct-IP observer 15. This command does not require us + // to claim a new source slot. Target support is currently first-generation NXS. + if !matches!(sender, 1..=4 | 7 | 15) || !(1..=4).contains(&target) || sender == target { + return Err("Use an existing OLC sender identity and a distinct target player 1–4"); + } + if settings.len() != 32 || !(0x81..=0x85).contains(&settings[1]) { + return Err("Expected a 32-byte My Settings profile with valid LCD brightness"); + } + let mut raw = [0; 116]; + raw[..10].copy_from_slice(b"Qspt1WmJOL"); + raw[10] = 0x34; + raw[11..31].copy_from_slice(name); + // Unlike a normal settings response: no subtype; sender is at 0x20. + raw[0x1f] = 2; + raw[0x20] = sender; + raw[0x21] = target; + raw[0x22..0x24].copy_from_slice(&0x50u16.to_be_bytes()); + raw[0x24..0x28].copy_from_slice(&0x1234_5678u32.to_be_bytes()); + raw[0x28..0x2c].copy_from_slice(&3u32.to_be_bytes()); + raw[0x2c..0x4c].copy_from_slice(settings); + Ok(raw) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn matches_documented_command_framing_and_setting_offsets() { + let mut name = [0; 20]; + name[..3].copy_from_slice(b"OLC"); + let mut settings = [0x80; 32]; + settings[1] = 0x85; + settings[3] = 0x88; + settings[24] = 0x81; + let p = encode(&name, 4, 1, &settings).unwrap(); + // Independent reference header: name padding then command-specific bytes. + assert_eq!(&p[..11], b"Qspt1WmJOL\x34"); + assert_eq!( + &p[0x1f..0x2c], + &[2, 4, 1, 0, 0x50, 0x12, 0x34, 0x56, 0x78, 0, 0, 0, 3] + ); + assert_eq!(p.len(), 116); + assert_eq!(p[0x2d], 0x85); // LCD brightness + assert_eq!(p[0x2f], 0x88); // Auto cue threshold + assert_eq!(p[0x44], 0x81); // Time mode + assert_eq!(&p[0x2c..0x4c], &settings); + assert!(p[0x4c..].iter().all(|b| *b == 0)); + } + + #[test] + fn rejects_invalid_target_and_truncated_profiles() { + for (sender, target) in [(0, 1), (4, 0), (4, 4), (5, 1), (4, 5)] { + assert!(encode(&[0; 20], sender, target, &[0x81; 32]).is_err()); + } + assert!(encode(&[0; 20], 4, 1, &[0x81; 31]).is_err()); + let mut bad = [0x81; 32]; + bad[1] = 0x80; + assert!(encode(&[0; 20], 4, 1, &bad).is_err()); + } +} diff --git a/source/host/src/direct_live.rs b/source/host/src/direct_live.rs index e341691..8901bac 100644 --- a/source/host/src/direct_live.rs +++ b/source/host/src/direct_live.rs @@ -76,7 +76,15 @@ pub async fn configure( number: u8, ip: Option, ) -> Result<(), String> { - configure_at(shared, catalogs, number, ip, 50000).await + configure_at( + shared, + catalogs, + number, + ip, + 50000, + [50000, 50002, 50001, 50004], + ) + .await } async fn configure_at( shared: &Shared, @@ -84,6 +92,7 @@ async fn configure_at( number: u8, ip: Option, discovery_port: u16, + listen_ports: [u16; 4], ) -> Result<(), String> { if !(1..=2).contains(&number) { return Err("Choose CDJ 1 or CDJ 2; match its physical player number".into()); @@ -103,6 +112,7 @@ async fn configure_at( state.direct_task = Some(tokio::spawn(async move { let result = observe_direct( discovery_port, + listen_ports, shared.clone(), catalogs.clone(), commands, @@ -399,21 +409,22 @@ fn record_diagnostic( async fn observe_direct( discovery_port: u16, + listen_ports: [u16; 4], shared: Shared, catalogs: crate::library::Shared, mut commands: crate::loading::Receiver, mut controls: mpsc::Receiver, ) -> Result<(), String> { - let discovery = UdpSocket::bind((Ipv4Addr::UNSPECIFIED, 50000)) + let discovery = UdpSocket::bind((Ipv4Addr::UNSPECIFIED, listen_ports[0])) .await .map_err(|e| format!("Cannot open discovery port: {e}"))?; - let socket = UdpSocket::bind((Ipv4Addr::UNSPECIFIED, 50002)) + let socket = UdpSocket::bind((Ipv4Addr::UNSPECIFIED, listen_ports[1])) .await .map_err(|e| format!("Cannot open status port: {e}"))?; // Diagnostic receivers only: failure must not break the working unicast // connection. Binding does not establish iOS broadcast permission/delivery. - let (mut beat_socket, mut beat_state) = diagnostic_socket(50001).await; - let (mut extra_socket, mut extra_state) = diagnostic_socket(50004).await; + let (mut beat_socket, mut beat_state) = diagnostic_socket(listen_ports[2]).await; + let (mut extra_socket, mut extra_state) = diagnostic_socket(listen_ports[3]).await; let mut beat_buffer = [0u8; 4096]; let mut extra_buffer = [0u8; 4096]; let mut peers = BTreeMap::::new(); @@ -581,6 +592,24 @@ async fn observe_direct( } } Some(command) = commands.recv() => { + if crate::cdj_config::is_command(&command.body) { + if command.reply.is_closed(){continue;} + let result=(||->Result{ + if bridge.is_some() || crate::jog_trace::guided_active() || crate::cue_window::occupied(){return Err("Stop diagnostics before pushing settings".into());} + let number=command.body["target"].as_u64().and_then(|v|u8::try_from(v).ok()).ok_or("Select a player")?; + let peer=peers.get(&number).ok_or("Player is not connected")?; + if peer.pending.is_some() || local_busy.contains(&number){return Err("Wait for the track load to finish".into());} + let s=peer.fresh().ok_or("Waiting for fresh player status")?; + let store=shared.lock().unwrap().configurations.clone().ok_or("Configuration storage unavailable")?; + let use_source=local_server.as_ref().is_some_and(|server|server.ready(peer.ip)); + let sender=if use_source{crate::local_serving::NUMBER}else{15}; + let name=prolink_proto::DeviceName::new(if use_source{"CDJ-2000nexus"}else{"OLC"}); + let bytes=crate::cdj_config::encode(&store,&command.body,crate::cdj_config::PlayerEvidence{identity:&format!("ip:{}",peer.ip),ip:&peer.ip.to_string(),model:&s.name().as_str(),number,age:peer.observed.as_ref().unwrap().1.elapsed(),playing:s.flags().is_none_or(|f|f.is_playing()),play_state:s.play_state().unwrap_or(255),track_loaded:s.track_id()>0},sender,name)?; + socket.try_send_to(&bytes,(peer.ip,50002).into()).map_err(|e|e.to_string())?; + Ok(crate::cdj_config::sent(&command.body,sender)) + })().unwrap_or_else(|message|json!({"outcome":"error","message":message,"target":command.body["target"],"automatic":command.body["automatic"]})); + let _=command.reply.send(result);continue; + } if command.body["source"].as_str().is_some_and(|s|s.starts_with("local-usb:")) { let validation = (|| { if bridge.is_some() || crate::jog_trace::guided_active() {return Err("Stop diagnostic captures before loading a local track".to_owned());} @@ -1093,7 +1122,11 @@ fn render_peer( }); let playing = decoded.is_playing; let play_state = play_state_label(decoded); - json!({"number":number,"name":s.name().as_str(),"ip":peer.ip.to_string(),"connection":if at.elapsed() (u8, prolink_proto::DeviceName) { + if self.server.as_ref().is_some_and(|server| server.ready(ip)) && !self.conflicted { + ( + local_serving::NUMBER, + prolink_proto::DeviceName::new("CDJ-2000nexus"), + ) + } else { + (observer, prolink_proto::DeviceName::default()) + } + } pub fn announcement( &mut self, announcement: &prolink::discovery::Announcement, diff --git a/source/host/src/lib.rs b/source/host/src/lib.rs index 39eb8c3..c7aeedf 100644 --- a/source/host/src/lib.rs +++ b/source/host/src/lib.rs @@ -8,6 +8,8 @@ mod bar_position; pub mod beat_position; mod bridge_probe; mod bug_report; +mod cdj_config; +mod cdj_settings_command; mod cdj_usb_load; mod cue_diagnostics; mod cue_window; @@ -24,6 +26,7 @@ mod library_audio; mod library_mood; mod library_preview; mod live; +mod load_diagnostics; mod loading; mod local_media; mod local_serving; @@ -59,13 +62,17 @@ struct App { live: live::Shared, library: library::Shared, history: set_history::Shared, + configurations: cdj_config::Shared, + diagnostics: load_diagnostics::Recorder, } async fn load_track(State(app): State>, Json(body): Json) -> Json { let started = std::time::Instant::now(); let id = body["conversionJob"].as_str().unwrap_or("").to_owned(); - let mut result = live::load(&app.live, body).await; + let diagnostic = app.diagnostics.begin(&body); + let mut result = live::load(&app.live, body.clone()).await; result["elapsedSeconds"] = json!(started.elapsed().as_secs_f64()); result["conversion"] = transcoding::load_finished(&id, &result); + diagnostic.finish(&result); Json(result) } async fn library_artwork( @@ -419,6 +426,8 @@ fn app_router( let library = library::with_local_path(interface.clone(), library_path); local_media::start(library.clone()); let live = live::start(interface, library.clone()); + let diagnostics = load_diagnostics::Recorder::start(&data_dir, live.clone()); + let configurations = cdj_config::start(&data_dir, live.clone()); let history = set_history::start(data_dir, live.clone()); let router = Router::new() .route("/api/bug-report", get(bug_report::status).post(bug_command)) @@ -468,6 +477,12 @@ fn app_router( router }; router + .route("/api/cdj-configurations",get(configuration_list).post(configuration_command)) + .route("/api/cdj-configurations/import-file",post(configuration_import_file)) + .route("/api/cdj-configurations/import-player",post(configuration_import_player)) + .route("/api/cdj-configurations/import-profile",post(configuration_import_profile)) + .route("/api/cdj-configurations/push",post(configuration_push)) + .route("/api/cdj-configurations/{id}/export",get(configuration_export)) .route("/api/transcoding", get(||async {Json(transcoding::snapshot())}).post(transcoding_settings)) .route("/api/transcoding/benchmark", post(transcoding_benchmark)) .route("/api/transcoding/cancel", post(transcoding_cancel)) @@ -528,9 +543,78 @@ fn app_router( live, library, history, + configurations, + diagnostics, })) } +async fn configuration_list(State(app): State>) -> Json { + let mut value = app.configurations.lock().unwrap().snapshot(); + value["players"] = live::snapshot(&app.live)["decks"].clone(); + Json(value) +} +async fn configuration_command(State(app): State>, Json(body): Json) -> ApiResult { + app.configurations + .lock() + .unwrap() + .command(&body) + .map(Json) + .map_err(|e| (StatusCode::BAD_REQUEST, e)) +} +async fn configuration_import_file( + State(app): State>, + Query(query): Query>, + bytes: Bytes, +) -> ApiResult { + app.configurations + .lock() + .unwrap() + .import_dat( + query + .get("name") + .map(String::as_str) + .unwrap_or("Imported settings"), + &bytes, + "Imported MYSETTING.DAT".into(), + ) + .map(Json) + .map_err(|e| (StatusCode::BAD_REQUEST, e)) +} +async fn configuration_import_profile( + State(app): State>, + Json(body): Json, +) -> ApiResult { + app.configurations + .lock() + .unwrap() + .import_json(&body) + .map(Json) + .map_err(|e| (StatusCode::BAD_REQUEST, e)) +} +async fn configuration_import_player( + State(app): State>, + Json(body): Json, +) -> ApiResult { + cdj_config::import_player(&app.configurations, &app.live, &body) + .await + .map(Json) + .map_err(|e| (StatusCode::BAD_REQUEST, e)) +} +async fn configuration_push(State(app): State>, Json(body): Json) -> ApiResult { + cdj_config::push(&app.configurations, &app.live, &body, false) + .await + .map(Json) + .map_err(|e| (StatusCode::BAD_REQUEST, e)) +} +async fn configuration_export(State(app): State>, Path(id): Path) -> ApiResult { + app.configurations + .lock() + .unwrap() + .export_json(&id) + .map(Json) + .map_err(|e| (StatusCode::NOT_FOUND, e)) +} + pub async fn run_desktop() -> Result<(), Box> { distribution::run().await } diff --git a/source/host/src/live.rs b/source/host/src/live.rs index 9660042..dd9d234 100644 --- a/source/host/src/live.rs +++ b/source/host/src/live.rs @@ -13,6 +13,7 @@ use std::{ #[path = "direct_live.rs"] pub mod direct; pub struct LiveState { + pub(crate) configurations: Option, direct_task: Option>, direct_controls: Option>, direct_peers: Vec, @@ -29,6 +30,7 @@ pub struct LiveState { impl Default for LiveState { fn default() -> Self { Self { + configurations: None, direct_task: None, direct_controls: None, direct_peers: vec![], @@ -130,7 +132,10 @@ pub fn start(interface: Option, catalogs: crate::library::Shared) -> Sha pub async fn load(shared: &Shared, body: Value) -> Value { // A local first load includes file preparation and source discovery before // the normal 12-second CDJ confirmation window even starts. - let wait = if body["source"] + let configuration = crate::cdj_config::is_command(&body); + let wait = if configuration { + Duration::from_secs(5) + } else if body["source"] .as_str() .is_some_and(|s| s.starts_with("local-usb:")) { @@ -152,7 +157,7 @@ pub async fn load(shared: &Shared, body: Value) -> Value { match tokio::time::timeout(wait, receiver).await { Ok(Ok(result)) => result, _ => { - json!({"outcome":"unknown","message":"Load outcome unknown. Check the CDJ before trying again; no automatic retry was sent."}) + json!({"outcome":"unknown","message":if configuration {"Settings send outcome unknown. Check the CDJ before trying again; no automatic retry was sent."} else {"Load outcome unknown. Check the CDJ before trying again; no automatic retry was sent."}}) } } } @@ -310,6 +315,26 @@ async fn observe( .tick(&discovery, &monitor, &catalogs, observer.number().get()) .await?; if let Some(command) = command { + if crate::cdj_config::is_command(&command.body) { + if command.reply.is_closed() { + continue; + } + let result = configuration_command( + &shared, + &command, + &discovery, + &monitor, + observer.number().get(), + local.busy(command.body["target"].as_u64().unwrap_or(0) as u8) + || loading.busy(command.body["target"].as_u64().unwrap_or(0) as u8), + &local, + ) + .await; + if !command.reply.is_closed() { + let _ = command.reply.send(result); + } + continue; + } let target = command.body["target"] .as_u64() .and_then(|n| u8::try_from(n).ok()) @@ -516,6 +541,10 @@ async fn observe( label.map(str::to_owned).unwrap_or_else(|| format!("CDJ{} {}",t.source_player,t.slot.to_string().to_uppercase())) })})); + let deck = decks.last_mut().unwrap(); + deck["configurationIdentity"] = json!(format!("mac:{}", device.mac)); + deck["configurationUsb"] = json!(status.is_some_and(|s| s.usb_present)); + deck["configurationSd"] = json!(status.is_some_and(|s| s.sd_present)); if !ready && let (Some(key), Some(track), Some(peer)) = (key, track, peer) && requests @@ -567,6 +596,75 @@ async fn observe( } } +async fn configuration_command( + shared: &Shared, + command: &crate::loading::Command, + discovery: &Discovery, + monitor: &Monitor, + sender: u8, + busy: bool, + local: &crate::discovered_local::Session, +) -> Value { + let body = &command.body; + let result = async { + if busy || crate::cue_window::occupied() || crate::jog_trace::guided_active() { + return Err("Wait for track loads and diagnostics to finish".into()); + } + let socket = monitor + .status_sender() + .ok_or("Settings transport unavailable")?; + tokio::time::timeout(Duration::from_millis(100), socket.writable()) + .await + .map_err(|_| "Settings transport busy")? + .map_err(|_| "Settings transport unavailable")?; + if command.reply.is_closed() { + return Err("Settings request cancelled".into()); + } + let number = body["target"] + .as_u64() + .and_then(|n| u8::try_from(n).ok()) + .ok_or("Select a player")?; + let device = discovery + .online() + .into_iter() + .find(|d| d.number.get() == number) + .ok_or("Player is not connected")?; + let observed = monitor + .player(device.number) + .and_then(|p| p.status) + .ok_or("Waiting for player status")?; + let store = shared + .lock() + .unwrap() + .configurations + .clone() + .ok_or("Configuration storage unavailable")?; + let (sender, name) = local.configuration_sender(device.ip, sender); + let bytes = crate::cdj_config::encode( + &store, + body, + crate::cdj_config::PlayerEvidence { + identity: &format!("mac:{}", device.mac), + ip: &device.ip.to_string(), + model: &device.name.as_str(), + number, + age: observed.age, + playing: observed.status.is_playing, + play_state: observed.status.play_state.0, + track_loaded: observed.status.track.is_some(), + }, + sender, + name, + )?; + socket + .try_send_to(&bytes, (device.ip, 50002).into()) + .map_err(|e| e.to_string())?; + Ok::<_, String>(crate::cdj_config::sent(body, sender)) + } + .await; + result.unwrap_or_else(|message|json!({"outcome":"error","message":message,"target":body["target"],"automatic":body["automatic"]})) +} + async fn fetch_asset( peer: Ipv4Addr, track: LoadedTrack, diff --git a/source/host/src/load_diagnostics.rs b/source/host/src/load_diagnostics.rs new file mode 100644 index 0000000..84814f1 --- /dev/null +++ b/source/host/src/load_diagnostics.rs @@ -0,0 +1,256 @@ +//! Bounded load evidence; no audio payloads and no changes to player commands. +use serde_json::{Value, json}; +use std::{ + collections::VecDeque, + path::Path, + sync::{Arc, Mutex, mpsc}, + time::{SystemTime, UNIX_EPOCH}, +}; +const KEEP: usize = 20; +const MAX_BYTES: usize = 2 * 1024 * 1024; +static SERIAL: std::sync::atomic::AtomicU64 = std::sync::atomic::AtomicU64::new(0); +#[derive(Clone)] +pub struct Recorder(Arc); +struct Inner { + writer: mpsc::SyncSender, + states: Mutex>, + last_request: Mutex, +} +fn now() -> u128 { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap_or_default() + .as_millis() +} +impl Recorder { + pub fn start(root: &Path, live: crate::live::Shared) -> Self { + let directory = root.join("load-incidents"); + let (writer, rx) = mpsc::sync_channel::(4); + std::thread::spawn(move || { + for report in rx { + if let Err(error) = persist(&directory, &report) { + eprintln!("Load incident save failed: {error}"); + } + } + }); + let recorder = Self(Arc::new(Inner { + writer, + states: Mutex::new(VecDeque::new()), + last_request: Mutex::new(Value::Null), + })); + // Do not keep an abandoned app/runtime alive through diagnostic tasks. + let weak = Arc::downgrade(&recorder.0); + tokio::spawn(async move { + let mut failures = prolink::serve::diagnostics::failure_count(); + let mut last_capture = std::time::Instant::now() - std::time::Duration::from_secs(30); + loop { + let Some(inner) = weak.upgrade() else { break }; + { + let mut states = inner.states.lock().unwrap(); + states.push_back(json!({"unixMs":now(),"live":crate::live::snapshot(&live)})); + if states.len() > 120 { + states.pop_front(); + } + } + let current = prolink::serve::diagnostics::failure_count(); + if current != failures + && last_capture.elapsed() >= std::time::Duration::from_secs(30) + { + failures = current; + last_capture = std::time::Instant::now(); + let body = inner.last_request.lock().unwrap().clone(); + Self(inner.clone()).finished( + &body, + &json!({"outcome":"serving-error","failureCount":current}), + ); + } + drop(inner); + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + } + }); + recorder + } + pub fn begin(&self, body: &Value) -> Load { + let enabled = !crate::cdj_config::is_command(body); + let request = json!({"target":body["target"],"source":body["source"],"trackId":body["trackId"],"generation":body["generation"]}); + if enabled { + *self.0.last_request.lock().unwrap() = request.clone(); + prolink::serve::diagnostics::record(format!("load_request {request}")); + } + Load { + recorder: self.clone(), + request, + completed: !enabled, + } + } + fn finished(&self, body: &Value, result: &Value) { + prolink::serve::diagnostics::record(format!( + "load_result target={} track={} result={result}", + body["target"], body["trackId"] + )); + if matches!(result["outcome"].as_str(), Some("confirmed" | "reported")) { + return; + } + let states = self.0.states.lock().unwrap().clone(); + let report = report( + body, + result, + &states, + prolink::serve::diagnostics::snapshot(), + ); + if let Err(error) = self.0.writer.try_send(report) { + eprintln!("Load incident queue unavailable: {error}"); + } + } +} +// Preserve evidence if the HTTP request disappears while a load is in flight. +// This is an unknown outcome, never a reason to resend a player command. +pub struct Load { + recorder: Recorder, + request: Value, + completed: bool, +} +impl Load { + pub fn finish(mut self, result: &Value) { + if !self.completed { + self.recorder.finished(&self.request, result); + } + self.completed = true; + } +} +impl Drop for Load { + fn drop(&mut self) { + if !self.completed { + self.recorder.finished(&self.request, &json!({"outcome":"unknown","message":"HTTP load request ended before a result was returned"})); + } + } +} +fn report( + body: &Value, + result: &Value, + states: &VecDeque, + serving: Vec<(u64, String)>, +) -> Value { + json!({"version":1,"unixMs":now(),"applicationVersion":env!("CARGO_PKG_VERSION"), + "request":{"target":body["target"],"source":body["source"],"trackId":body["trackId"],"generation":body["generation"]}, + "result":result,"playerHistory":states,"serving":serving}) +} +fn persist(directory: &Path, report: &Value) -> std::io::Result<()> { + std::fs::create_dir_all(directory)?; + let name = format!( + "load-{}-{}-{:020}.json", + report["unixMs"], + report["request"]["target"], + SERIAL.fetch_add(1, std::sync::atomic::Ordering::Relaxed) + ); + let path = directory.join(name); + let temporary = path.with_extension("tmp"); + let bytes = serde_json::to_vec(report)?; + if bytes.len() > MAX_BYTES { + return Err(std::io::Error::other("Load incident exceeds 2 MiB limit")); + } + std::fs::write(&temporary, bytes)?; + std::fs::rename(temporary, path)?; + let mut files: Vec<_> = std::fs::read_dir(directory)? + .flatten() + .filter(|e| { + e.file_name() + .to_str() + .is_some_and(|n| n.starts_with("load-") && n.ends_with(".json")) + }) + .collect(); + files.sort_by_key(|e| e.file_name()); + let excess = files.len().saturating_sub(KEEP); + for file in files.into_iter().take(excess) { + std::fs::remove_file(file.path())?; + } + Ok(()) +} +#[cfg(test)] +mod tests { + use super::*; + fn test_recorder() -> (Recorder, mpsc::Receiver) { + let (writer, rx) = mpsc::sync_channel(4); + ( + Recorder(Arc::new(Inner { + writer, + states: Mutex::new(VecDeque::new()), + last_request: Mutex::new(Value::Null), + })), + rx, + ) + } + #[test] + fn canceled_requests_save_unknown_and_success_does_not_save() { + let (recorder, rx) = test_recorder(); + let body = json!({"target":1,"source":"local-usb:test","trackId":42,"generation":3}); + recorder + .begin(&body) + .finish(&json!({"outcome":"confirmed"})); + assert!(rx.try_recv().is_err()); + drop(recorder.begin(&body)); + assert_eq!(rx.try_recv().unwrap()["result"]["outcome"], "unknown"); + assert!(rx.try_recv().is_err()); + } + #[test] + fn recorders_do_not_share_history_or_keep_the_writer_alive() { + let (a, rx) = test_recorder(); + let (b, _) = test_recorder(); + a.0.states.lock().unwrap().push_back(json!({"unixMs":1})); + assert!(b.0.states.lock().unwrap().is_empty()); + let weak = Arc::downgrade(&a.0); + drop(a); + assert!(weak.upgrade().is_none()); + assert!(matches!( + rx.try_recv(), + Err(mpsc::TryRecvError::Disconnected) + )); + } + #[test] + fn failure_report_preserves_prior_player_state_and_request_identity() { + let states = VecDeque::from([ + json!({"unixMs":1,"live":{"decks":[{"number":1,"playState":"loading"}]}}), + ]); + let body = json!({"target":1,"source":"local-usb:test","trackId":42,"generation":3}); + let report = report( + &body, + &json!({"outcome":"unknown","message":"Timed out"}), + &states, + vec![(1, "load_request".into())], + ); + assert_eq!(report["request"]["trackId"], 42); + assert_eq!( + report["playerHistory"][0]["live"]["decks"][0]["playState"], + "loading" + ); + assert_eq!(report["result"]["outcome"], "unknown"); + assert_eq!(report["serving"][0][1], "load_request"); + } + #[test] + fn keeps_only_twenty_incidents_and_preserves_other_files() { + let dir = std::env::temp_dir().join(format!( + "olc-load-incidents-{}-{}", + std::process::id(), + now() + )); + std::fs::create_dir_all(&dir).unwrap(); + std::fs::write(dir.join("unrelated.json"), "keep").unwrap(); + for i in 100..125 { + persist( + &dir, + &json!({"unixMs":i,"request":{"target":1},"result":{"outcome":"unknown"}}), + ) + .unwrap(); + } + let names: Vec<_> = std::fs::read_dir(&dir) + .unwrap() + .flatten() + .map(|e| e.file_name().to_string_lossy().into_owned()) + .collect(); + assert!(!names.iter().any(|n| n.starts_with("load-100-"))); + assert!(names.iter().any(|n| n.starts_with("load-124-"))); + assert!(dir.join("unrelated.json").exists()); + assert_eq!(std::fs::read_dir(&dir).unwrap().count(), 21); + std::fs::remove_dir_all(dir).unwrap(); + } +} diff --git a/source/ui/package-lock.json b/source/ui/package-lock.json index 11ba5fc..b049423 100644 --- a/source/ui/package-lock.json +++ b/source/ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "pioneer-companion-ui", - "version": "0.1.0", + "version": "0.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pioneer-companion-ui", - "version": "0.1.0", + "version": "0.5.0", "license": "GPL-3.0-only", "dependencies": { "jspdf": "^4.2.1", diff --git a/source/ui/package.json b/source/ui/package.json index d950d80..1731443 100644 --- a/source/ui/package.json +++ b/source/ui/package.json @@ -1,6 +1,6 @@ { "name": "pioneer-companion-ui", - "version": "0.1.0", + "version": "0.5.0", "private": true, "type": "module", "scripts": { diff --git a/source/ui/src/BugReport.tsx b/source/ui/src/BugReport.tsx index 4d6bc41..98f626a 100644 --- a/source/ui/src/BugReport.tsx +++ b/source/ui/src/BugReport.tsx @@ -74,7 +74,11 @@ async function capture() { localReport = { session: state.session, browser }; } let localReport: unknown = null; -export function BugReport() { +export function BugReport({ + onAvailabilityChange, +}: { + onAvailabilityChange?: (enabled: boolean) => void; +}) { const [enabled, setEnabled] = useState(false); const [status, setStatus] = useState(message); const [busy, setBusy] = useState(!!pending); @@ -110,6 +114,9 @@ export function BugReport() { clearInterval(timer); }; }, []); + useEffect(() => { + onAvailabilityChange?.(enabled); + }, [enabled, onAvailabilityChange]); if (!enabled) return null; return (

diff --git a/source/ui/src/CdjConfigurations.tsx b/source/ui/src/CdjConfigurations.tsx new file mode 100644 index 0000000..f4c30d8 --- /dev/null +++ b/source/ui/src/CdjConfigurations.tsx @@ -0,0 +1,700 @@ +import { useEffect, useState } from "react"; +import "./cdjConfigurations.css"; + +type Profile = { + id: string; + name: string; + notes: string; + revision: number; + origin: string; + values: Record; +}; +type Player = { + number: number; + name: string; + ip: string; + connection: string; + playing: boolean; + statusAgeMs: number | null; + configurationIdentity: string; + configurationUsb: boolean; + configurationSd: boolean; +}; +type Automatic = { + enabled: boolean; + defaultProfile: string | null; + players: Record; +}; +type State = { + revision: number; + profiles: Profile[]; + fields: { + id: string; + label: string; + group: string; + options: { value: number; label: string }[]; + }[]; + players: Player[]; + automatic: Automatic; + error: string | null; + events: { + at: number; + detail: { + outcome?: string; + message?: string; + target?: number; + profile?: string; + automatic?: boolean; + }; + }[]; +}; +async function api(url: string, body?: unknown): Promise { + const r = await fetch( + url, + body === undefined + ? undefined + : { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + }, + ); + if (!r.ok) throw Error(await r.text()); + return r.json(); +} +const endpoint = "/api/cdj-configurations"; +export function CdjConfigurations() { + const [state, setState] = useState(null); + const [selected, setSelected] = useState(""); + const [draft, setDraft] = useState(null); + const [dirty, setDirty] = useState(false); + const [automatic, setAutomatic] = useState(null); + const [autoDirty, setAutoDirty] = useState(false); + const [autoRevision, setAutoRevision] = useState(0); + const [playerId, setPlayerId] = useState(""); + const [slot, setSlot] = useState("usb"); + const [busy, setBusy] = useState(false); + const [error, setError] = useState(""); + const [notice, setNotice] = useState(""); + const refresh = async () => { + const next = (await api(endpoint)) as State; + setState(next); + return next; + }; + useEffect(() => { + let stopped = false; + let timer: ReturnType; + const poll = async () => { + try { + const next = (await api(endpoint)) as State; + if (!stopped) setState(next); + } catch (e) { + if (!stopped) setError(String(e)); + } + if (!stopped) timer = setTimeout(() => void poll(), 2000); + }; + void poll(); + return () => { + stopped = true; + clearTimeout(timer); + }; + }, []); + useEffect(() => { + if (!state) return; + if (!dirty) { + const p = + state.profiles.find((p) => p.id === selected) ?? + state.profiles[0] ?? + null; + setSelected(p?.id ?? ""); + setDraft(p ? { ...p, values: { ...p.values } } : null); + } + if (!autoDirty) { + setAutomatic({ + ...state.automatic, + players: { ...state.automatic.players }, + }); + setAutoRevision(state.revision); + } + if (!state.players.some((p) => p.configurationIdentity === playerId)) + setPlayerId(state.players[0]?.configurationIdentity ?? ""); + }, [state, selected, dirty, autoDirty, playerId]); + const run = async (work: () => Promise) => { + setBusy(true); + setError(""); + setNotice(""); + try { + await work(); + } catch (e) { + setError(e instanceof Error ? e.message : String(e)); + } finally { + setBusy(false); + } + }; + const mutate = async (body: unknown) => { + const result = await api(endpoint, body); + await refresh(); + return result; + }; + const select = (id: string) => { + setDirty(false); + setSelected(id); + }; + const edit = (patch: Partial) => { + if (draft) { + setDraft({ ...draft, ...patch }); + setDirty(true); + } + }; + const setAuto = (patch: Partial) => { + if (automatic) { + setAutomatic({ ...automatic, ...patch }); + setAutoDirty(true); + } + }; + const player = state?.players.find( + (p) => p.configurationIdentity === playerId, + ); + const groups = [...new Set(state?.fields.map((f) => f.group) ?? [])]; + const selectImported = async (result: { + id: string; + checksumMatches?: boolean; + }) => { + setDirty(false); + setSelected(result.id); + await refresh(); + setNotice( + result.checksumMatches === false + ? "Imported saved settings. The file checksum does not match; its original bytes have been preserved." + : "Saved settings imported. Review the profile before pushing it.", + ); + }; + const download = async () => { + if (!draft) return; + const result = await api( + `${endpoint}/${encodeURIComponent(draft.id)}/export`, + ); + const url = URL.createObjectURL( + new Blob([JSON.stringify(result, null, 2)], { type: "application/json" }), + ); + const a = document.createElement("a"); + a.href = url; + a.download = `${draft.name.replace(/[^a-z0-9_-]+/gi, "-")}.olc-cdj.json`; + a.click(); + setTimeout(() => URL.revokeObjectURL(url), 1000); + }; + return ( +
+

CDJ configurations

+

+ Save My Settings profiles on this OLC host, edit them, and push them to + connected CDJ-2000NXS players. +

+
+ {error && ( +

+ {error} +

+ )} + {state?.error && ( +

+ {state.error} +

+ )} + {notice && ( +

+ {notice} +

+ )} + {!state ? ( +

Loading configurations…

+ ) : ( + <> +
+ + +
+
+ +
+ {draft ? ( + <> + +

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 diff --git a/docs/screenshots/set-history.png b/docs/screenshots/set-history.png index c3be942f2b2389c66bcd4f50bb49c2056152556e..f62f88f654a4ff3035289277a29eeb15e0b48a8c 100644 GIT binary patch literal 122105 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%0DR{e7~vvProw4pv6Ng`%#T@Ja%6{f^*d#-owI85 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